패스잇
시스템 설계 · 심화

분산 시스템에서 네트워크 지연, 타임아웃, 서비스 재시작 등으로 인해 요청이 중복 전송될 수 있습니다. 이러한 상황에서 시스템의 상태가 여러 번 변경되지 않고 항상 동일한 결과를 보장하는 멱등성(Idempotency)을 어떻게 설계하고 구현할 수 있는지 설명해주세요. 특히, 메시지 큐(Message Queue)를 사용하는 환경에서 Producer와 Consumer 양측에서 멱등성을 보장하기 위한 구체적인 기법(예: 멱등키(Idempotency Key), 중복 메시지 필터링)들을 제시하고 그 작동 방식을 설명해주세요.

힌트 · 멱등성은 중복 요청에도 불구하고 시스템 상태가 한 번만 변경되도록 보장합니다. 멱등키를 사용한 중복 요청 필터링, 데이터베이스의 UNIQUE 제약 조건 활용, 상태 기반 트랜잭션 설계 등이 주요 기법입니다.

멱등키(Idempotency Key)중복 메시지 필터링메시지 큐(Message Queue)ProducerConsumer

모범답안

분산 시스템에서 멱등성은 중복 요청에도 불구하고 시스템 상태가 한 번만 변경되도록 보장하는 핵심 원칙입니다. 이를 위해 여러 기법을 활용할 수 있습니다.

메시지 큐 환경에서는 Producer와 Consumer 양측에서 멱등성을 보장하는 것이 중요합니다.

Producer 측에서는 각 요청에 고유한 멱등키(Idempotency Key)를 생성하여 함께 전송합니다. 이 키는 클라이언트가 생성하거나 서버 측에서 생성 후 응답으로 반환받아 재시도 시 활용할 수 있습니다.

Consumer 측에서는 메시지를 처리하기 전에 해당 멱등키를 사용하여 이미 처리된 요청인지 확인합니다. 이를 위해 멱등키와 처리 상태를 저장하는 저장소(예: Redis, 데이터베이스)를 사용합니다. 만약 멱등키가 저장소에 존재하고 이미 처리 완료 상태라면, 해당 메시지는 중복으로 간주하여 무시합니다. 처리되지 않은 멱등키라면, 메시지를 처리하고 멱등키와 처리 완료 상태를 저장소에 기록합니다.

데이터베이스의 UNIQUE 제약 조건을 활용하는 것도 좋은 방법입니다. 예를 들어, 주문 생성 시 멱등키를 주문 테이블의 UNIQUE 컬럼으로 설정하면, 동일한 멱등키로 두 번 이상 삽입 시도 시 데이터베이스 레벨에서 중복을 막을 수 있습니다.

이러한 기법들을 통해 네트워크 지연, 타임아웃, 서비스 재시작 등의 상황에서도 시스템의 상태 변경을 한 번으로 제한하고 항상 동일한 결과를 보장할 수 있습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 분산 시스템 면접 질문

← 분산 시스템 면접 질문 전체 보기