LabHub
배우기 러닝패스 코스

통합과 배포 · 200 이라고 다 들어간 것은 아니다 · 실습

우리 로그는 전부 성공인데 상대에겐 열두 건이 없다

LabHub 에서 이어서 보기

목표

묶어 보낸 요청에서 몇 건만 실패하는 상황을 다룬다. 건별 결과를 우리 쪽에 기록하고, 다시 보낼 실패와 고쳐야 할 실패를 가르고, 실패분만 재전송하고, 마지막에 보낸 쪽과 받은 쪽의 건수와 합계를 맞춰 보는 대사표를 만든다.

왜 중요한가

묶음 전송 API 는 요청 하나에 200 을 주면서 본문 안에 건별 결과를 담는다. HTTP 의 관점에서 200 은 옳다 — 2xx 는 요청을 받아 수락했다는 뜻이지 요청 안의 모든 항목이 성공했다는 뜻이 아니다.
그래서 호출한 쪽이 상태 코드만 보면 실패한 몇 건은 아무 데도 남지 않는다. 오류도 경보도 없이 며칠이 쌓이고, 상대 쪽 숫자와 맞춰 보다가 발견된다.
고치는 순서는 넷이다. 건별로 기록하고, 실패를 두 갈래로 가르고, 실패분만 다시 보내고, 양쪽 수를 맞춰 본다. 특히 세 번째가 중요하다 — 묶음 전체를 다시 보내면 이미 들어간 건이 두 번 들어간다. 재시도의 단위는 묶음이 아니라 건이다.
채점기는 여러분의 문장을 믿지 않는다. 파트너 서버를 채점기가 고른 포트에 새로 띄우고, 여러분의 발신함과 전송기를 채점기의 데이터베이스에 대고 실제로 돌려 상대 원장과 대조한다.

단계

1. /root/recon/receiver.py 를 만들어 포트 8010 에 띄우고, /root/recon/gen_outbox.py 로 보낼 것 120건을 /root/recon/outbox.db 에 만드세요.
2. /root/recon/send.py--naive 로 상태 코드만 보고 보낸 뒤, 우리 기록과 상대 원장의 차이를 /root/recon/naive.json 에 적으세요.
3. send.py 가 건별 결과를 읽어 sent 표에 status·reason·attempts 로 기록하게 하세요.
4. /root/recon/classify.py 를 만들어 실패 이유를 다시 보낼 것과 고칠 것으로 가르게 하세요.
5. send.py 의 --retry 가 다시 보내도 되는 건만 골라 재전송하게 하세요.
6. /root/recon/recon.py 로 보낸 쪽과 받은 쪽을 대조해 /root/recon/recon_result.json 을 만드세요.
7. 남은 건의 처리 계획을 /root/recon/unresolved.json 에 적으세요.
8. /root/recon/recon_report.md 에 네 절로 보고하세요.

참고

단계 8개

  1. 묶음 수신 파트너와 보낼 것 120건
  2. 상태 코드만 보면 무엇을 놓치나
  3. 건별 결과를 우리 쪽에 남기기
  4. 다시 보낼 것과 고칠 것
  5. 묶음이 아니라 건 단위로 다시
  6. 보낸 쪽과 받은 쪽을 맞춰 본다
  7. 남은 건에는 주인이 있어야 한다
  8. 대사 보고서