합동회사 코무라소프트
7장

종합 연습 — HTTP 대화를 케이스로 읽어낸다

실무의 장애 조사를 본뜬 8 가지 케이스에 「무엇을 부탁했는가·결과는 어땠는가·조건과 보충」의 3 점 세트 읽기를 적용하여, 전 6 장의 지식을 가로질러 쓴다.

마무리의 8 문제 — 케이스에 3 점 세트를 적용한다

마지막 장은 종합 연습입니다. 실무에서 만나는 장면을 본뜬 8 가지 케이스에, 전 6 장의 지식을 가로질러 답합니다. 망설여지면, 이 강좌의 구호로 돌아와 주세요 — 무엇을 부탁했는가? 결과는 어땠는가? 조건과 보충은 무엇인가?

막히면돌아갈 장
메시지의 뼈대·스테이트리스제 1 장
메서드의 구분·안전과 멱등·재시도제 2 장
상태 코드의 분류와 구분제 3 장
Host·Content-Type·Cookie 등의 헤더제 4 장
max-age·ETag·304·no-store제 5 장
curl 과 Network 탭의 관찰 절차제 6 장
증상에서 리퀘스트 행·상태 코드·헤더의 순으로 확인하여 원인으로 좁혀 가는, HTTP 장애 조사의 3 점 세트 읽기의 절차도

케이스 조사의 틀입니다. 증상에서 출발해, 리퀘스트 행(무엇을 부탁했는가) → 상태 코드(결과는 어땠는가) → 헤더(조건과 보충)의 순으로 읽으면, 원인의 쪽(클라이언트 쪽 / 이동 / 서버 쪽 / 캐시)을 좁혀 갈 수 있습니다.

케이스 7-1 — 리다이렉트와 폼의 트러블

제 2〜3 장과 제 6 장의 범위입니다. 이동의 연쇄와 POST 의 재전송을 읽어냅니다.

Q1. 케이스: https://example.com/mypage 를 열면 브라우저가 「리다이렉트가 반복되었습니다」라는 오류를 표시합니다. curl -v https://example.com/mypage 로 관찰하니, 302 로 Location: /login 으로, /login 도 302 로 Location: /mypage 로 이동시키고 있었습니다. 일어나고 있는 일의 설명으로 올바른 것은 어느 것입니까.

Q2. 케이스: 주문 완료 페이지에서 브라우저를 새로 고침한 이용자로부터 「폼 재전송 확인이 나오고, 진행하니 주문이 이중이 되었다」는 보고가 있었습니다. 서버 쪽의 정석 대책은 어느 것입니까.

Q3. 케이스: 이미지 파일의 리스폰스 헤더에 Cache-Control: max-age=604800 이 설정되어 있습니다. 이 캐시가 fresh 로 있을 수 있는 기간은 며칠입니까.

케이스 7-2 — 반영되지 않는다·깨진다·보이지 않는다

제 3〜6 장의 범위입니다. 캐시·권한·문자 인코딩을 구분합니다.

Q4. 케이스: CSS 를 수정해 서버에 반영했는데, 자신의 브라우저에서는 옛 디자인 그대로 표시됩니다. Network 탭을 보니, 그 CSS 행의 Size 열에 (disk cache) 라고 표시되어 있었습니다. 원인과 대처의 조합으로 가장 적절한 것은 어느 것입니까.

Q5. 케이스: 회원제 사이트에서, 로그인이 끝난 이용자로부터 「어제까지 볼 수 있던 자료 페이지가 오늘부터 볼 수 없다」는 보고가 있었습니다. Network 탭에서는 그 페이지로의 GET 이 403 을 돌려주고 있습니다. 이 관찰에서 말할 수 있는 것으로 가장 적절한 것은 어느 것입니까.

Q6. 케이스: 리뉴얼한 https://example.com 의 페이지에서 일본어가 「è±�å­�」 같은 기호열로 깨져 있습니다. curl -I 로 확인하니 Content-Type: text/html; charset=ISO-8859-1 이 돌아오고 있었고, HTML 파일 자체는 UTF-8 로 저장되어 있었습니다. 적절한 대처는 어느 것입니까.

케이스 7-3 — 장애의 구분과 재시도의 판단

제 2〜3 장의 총마무리입니다. 5xx 의 구분과, 멱등성에 근거한 재시도 판단으로 강좌를 마무리합니다.

Q7. 케이스: 사이트 전체가 갑자기 오류가 되어, 어느 URL 이든 502 Bad Gateway 가 돌아옵니다. 구성은 「리버스 프록시 + 뒤의 애플리케이션 서버」의 2 단입니다. 가장 먼저 조사할 곳으로 가장 적절한 것은 어느 것입니까.

Q8. 케이스: 재고 관리 시스템에서 2 개의 리퀘스트가 타임아웃되었습니다. (A) PUT /items/42(상품 42 의 정보를 이 내용으로 치환한다)와 (B) POST /orders(신규 발주를 작성한다)입니다. 기계적으로 곧바로 재전송해도 되는 것은 어느 쪽입니까.

강좌를 마치며 — 왕복 서신 읽는 법을 지니고 다니기

수고하셨습니다. 이 강좌에서 암기한 항목은 사실 극히 적습니다. 대신 가져가 주었으면 하는 것은, 어떤 출력 앞에서도 통용되는 읽는 법의 틀입니다.

  • 무엇을 부탁했는가 — 리퀘스트 행의 메서드와 경로. 그 부탁은 안전한가, 멱등한가
  • 결과는 어땠는가 — 상태 코드를 백의 자리부터. 누구의 문제인지가 먼저 보인다
  • 조건과 보충은 무엇인가 — Content-Type 은 내용물과 일치하는가. Cache-Control 은 무엇을 약속하고 있는가. Cookie 는 곁들여져 있는가

개발자 도구의 Network 탭도, curl -v 의 출력도, 내일부터 만날 어떤 HTTP 로그도, 이 3 가지로 반드시 읽기 시작할 수 있습니다. 압도되지 말고, 언제나의 3 가지부터 읽는다 — 그것이 이 강좌에서 몸에 익힌 힘입니다.