LabHub

nginx 장애 대응 · 앱 잘못이 아닌 실패 · 퀴즈

퀴즈: 버퍼 · 본문 크기 · 커넥션 재사용

LabHub 에서 이어서 보기

문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.

  1. 액세스 로그에 `200 ut=0.049 rt=4.173` 이 남았다. 첫 조사 방향으로 옳은 것은?

    1. 업스트림 애플리케이션과 DB 의 느린 쿼리를 먼저 본다
    2. 업스트림은 이미 끝냈으므로 응답 전송 구간과 버퍼 설정을 본다
    3. 두 값이 다르므로 로그 포맷이 잘못 정의된 것이다
    4. 업스트림 헬스체크가 실패해 재시도가 일어난 것이다
  2. `an upstream response is buffered to a temporary file` 이 운영에서 거의 발견되지 않는 가장 큰 이유는?

    1. 이 메시지는 debug 수준이라 기본 설정에서는 아예 기록되지 않는다
    2. 임시 파일이 즉시 지워져 로그에도 남지 않기 때문이다
    3. `[warn]` 수준이라 error 수준 로그나 error 문자열 알림에 걸리지 않는다
    4. 같은 요청이 502 로 끝나 5xx 알림에 묻히기 때문이다
  3. 같은 8MB 응답을 버퍼링을 켠 경로와 끈 경로로 받아 재 보니 켠 쪽은 `ut=0.049 rt=4.173`, 끈 쪽은 `ut=3.188 rt=3.189` 였다. 이 숫자가 뜻하는 것은?

    1. 버퍼링을 끄면 응답이 더 빨리 도착한다
    2. 버퍼링을 끄면 업스트림이 클라이언트가 다 받을 때까지 붙들린다
    3. 버퍼링을 켜면 업스트림 처리 자체가 느려진다
    4. 두 경로의 업스트림이 서로 달라 비교할 수 없는 값이다
  4. `client_max_body_size` 와 `client_body_buffer_size` 의 차이는?

    1. 앞은 요청 본문, 뒤는 응답 본문의 크기를 정한다
    2. 앞은 거절 문턱을 정하고 뒤는 본문을 메모리에 담아 둘 크기를 정한다
    3. 앞은 http 블록에서만, 뒤는 location 블록에서만 쓸 수 있다
    4. 앞은 하드 리밋이고 뒤는 같은 값의 소프트 리밋이다
  5. 업스트림 Keep-Alive 를 켜려고 `upstream` 블록에 `keepalive 16;` 을 넣고 location 에 `proxy_http_version 1.1;` 도 넣었는데, 10 회 요청에 업스트림이 본 커넥션이 여전히 10 개다. 빠진 것은?

    1. `proxy_set_header Connection "";`
    2. `keepalive_timeout` 을 upstream 블록에 함께 지정하는 것
    3. `proxy_socket_keepalive on;`
    4. `upstream` 블록의 `server` 줄에 `max_conns` 를 지정하는 것
  6. 커넥션 재사용이 안 되는 시스템이 평소에는 멀쩡하다가 트래픽이 늘자 502 가 쏟아졌다. 이 흐름의 설명으로 가장 알맞은 것은?

    1. 요청마다 새 소켓이 열려 TIME_WAIT 이 쌓이고 포트가 고갈되면서 연결이 거부됐다
    2. 커넥션이 많아져 업스트림의 응답 헤더가 커졌고 프록시 버퍼를 넘겼다
    3. 재사용이 없으면 nginx 가 요청을 큐에 쌓다가 읽기 타임아웃을 낸다
    4. 업스트림이 keepalive 커넥션을 먼저 끊어 nginx 가 재시도를 포기했다