업무 데이터 변경은 성공했지만 메시지 발행은 실패하는 불일치를 줄이기 위해 다음과 같이 OUTBOX 행을 함께 기록한다. 분산 트랜잭션 코디네이터 없이 사용하는 트랜잭셔널 아웃박스 패턴의 나머지 핵심 동작을 서술하시오.
BEGIN;
UPDATE DOCUMENT SET status = 'APPROVED' WHERE id = 17;
INSERT INTO OUTBOX(event_id, event_type, payload)
VALUES ('e-17', 'DOCUMENT_APPROVED', '{...}');
COMMIT;모범답안
업무 데이터와 아웃박스 행을 같은 로컬 DB 트랜잭션에서 커밋한다. 별도 릴레이가 커밋된 아웃박스를 메시지 브로커로 발행하고, 소비자는 event_id를 이용해 중복 발행을 멱등 처리한다.
풀이와 판단 근거
업무 데이터와 발행 예정 이벤트를 같은 데이터베이스 트랜잭션에 저장하면 둘 중 하나만 커밋되는 상태를 피할 수 있다. 커밋 뒤 릴레이 프로세스가 아웃박스 행을 읽어 브로커에 전달하므로 브로커 장애가 나도 다시 시도할 근거가 남는다.
재시도 과정에서 같은 이벤트가 여러 번 전달될 수 있으므로 소비자는 event_id로 중복을 제거하거나 멱등하게 처리해야 한다.
자주 틀리는 지점
- 커밋 뒤 이벤트를 애플리케이션 메모리에만 보관
- 업무 데이터와 아웃박스를 서로 다른 트랜잭션에 저장
- 릴레이가 반드시 한 번만 발행한다고 가정해 소비자 중복 처리를 생략
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.