idea·blog

소켓 응용 1/5 · DELIVERY

답이 없을 때,
다시 보내도 될까요?

연결이 끊기면 보낸 메시지가 도착했는지 알 수 없습니다. ACK, 메시지 ID, 재전송과 중복 제거를 한 화면에서 비교합니다.

이 편의 핵심 질문재전송과 중복 실행을 동시에 막으려면?ID로 기억하고
ACK까지 재시도

나쁜 결과와 안전한 결과를 비교하세요

ACK가 사라진 결제 요청을 재생합니다

보는 순서보호 없음 선택단계 실행실행 횟수 비교

  1. 1요청
  2. 2실행
  3. 3재전송
  4. 4중복
실험 시작을 누르면 첫 장면부터 움직입니다첫 전송
클라이언트결제 버튼
연결됨PAY 요청
주문 서버작업 실행
전송 시도1
실제 결제0
ID 기록없음
확인 응답기다리는 중

그냥 다시 보내기 시나리오입니다. 실험 시작을 눌러 네 장면을 따라가세요.

시작 전

화면에서 코드로 옮길 때

이 편의 원리 세 가지

01전송과 처리는 다릅니다.

send가 성공해도 상대 프로그램의 처리가 끝났다는 뜻은 아닙니다.

02재시도에는 같은 ID를 씁니다.

새 ID로 다시 보내면 서버는 새로운 작업으로 이해합니다.

03서버가 결과를 기억합니다.

처리한 ID와 결과를 저장해야 같은 요청에 같은 답을 돌려줄 수 있습니다.

구현 체크리스트

최소 네 조각으로 시작하세요.

데모의 시각 요소를 실제 프로토콜 필드와 런타임 동작으로 옮기면 됩니다.

  1. 1메시지 ID비즈니스 작업마다 고유하고 재시도 중에는 변하지 않는 ID
  2. 2ACK 제한 시간무한 대기하지 않고 재시도를 시작할 기준 시간
  3. 3중복 제거 저장소ID, 처리 상태와 이전 결과를 함께 보관
  4. 4재시도 정책최대 횟수, 지수 백오프와 실패 큐
이 데모는 네트워크 동작을 단계별로 보여주는 개념 시뮬레이션입니다.

정확히 한 번 전송된다는 표현보다, 여러 번 도착해도 결과가 한 번만 생기도록 설계하는 편이 정확합니다.

실험을 마쳤다면