inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

시스템 디자인 첫걸음: 면접에서 돋보이는 백엔드 아키텍처 설계하기

신뢰성

멱등성. '같은 요청'의 기준?

해결된 질문

257

akakakakak

작성한 질문수 83

0

같은 요청이 여러 번 들어와도 한 번만 처리하는 것.

 

여러 번의 요청이 들어왔을 때 이 요청이 '같은 요청' 이라는 것을 정확하게 판단할 수가 있을까요?

예를 들어 똑같은 점포의 똑같은 POS에서 똑같은 액수의 포인트 적립/사용이 두 번 들어왔을 때,

이 두 요청이 각자 다른 요청인지? 클라이언트 단의 문제로 인해 같은 요청을 두 번 보낸 것인지? 정확하게 판단할 수 있는 걸까요?

두 요청의 도착 시간 간격이 매우 짧을 때
-> 일반적인 상황에서 같은 동작이라고 판단할 수야 있겠지만.. 매우 빠르게 요청을 계속해서 받아야 하는 상황이라면?

도메인 특성에 따라 같은 요청임을 판단할 수 있는 기준이나 상황이 달라지기야 하겠지만 정확하게 보장 받을 수 있는 기준은 존재하기 어렵지 않나 하는 생각이 듭니다.

실제 사례를 통해 예시를 들어주실 수 있는 게 있을까요?

아키텍처 backend 소프트웨어-설계 시스템-디자인

답변 1

0

성장랜턴

안녕하세요, akakakak님.

말씀해주신 것처럼, 기존 필드의 조합만으로는 동일한 요청인지 정확히 판단하기 어려운 경우가 많습니다. 그래서 API를 설계할 때 멱등성을 보장하는 대표적인 방법은 클라이언트가 요청 시 고유한 키를 함께 보내도록 하는 것입니다.
이 외에도 시스템의 상태를 기반으로 멱등성 여부를 판단하거나, HTTP 메서드의 특성을 활용해 별도 처리가 필요 없는 방식도 있습니다.


  1. 클라이언트가 요청에 고유한 키를 함께 보냄 (멱등성 키)

예를 들어, 결제가 중복되지 않도록 하고 싶은 경우 클라이언트가 요청을 보낼 때 고유한 키(예: UUID) 를 만들어 함께 전송할 수 있습니다.
서버는 이 키를 기준으로 중복 요청 여부를 판단해, 이미 처리한 요청이라면 다시 처리하지 않습니다.

보통 서버는 이 키를 Redis 같은 캐시에 저장하고, 일정 시간 동안 유효하도록 설정해두는 경우가 많습니다.
(이 방식은 10강 '서버와 서버 간 통신' 마지막 부분에서도 언급되니 참고해주시면 좋습니다.)

 

  1. 상태 기반 처리

현재 시스템이 가진 데이터의 상태를 DB에서 확인해서 이를 기준으로 중복 요청 여부를 판단할 수도 있습니다.
예를 들어, 주문을 '배송중'으로 업데이트하는 API에서 주문 123번이 이미 '배송중' 상태라면, 같은 상태로 변경하는 요청이 들어왔을 때 중복 요청으로 간주해 처리하지 않을 수 있습니다.

 

  1. 서버의 동작이 HTTP 메서드의 멱등성 의도에 맞게 구현

HTTP 명세에서 PUT, DELETE, GET 등의 메서드는 같은 요청을 여러 번 보내도 같은 결과가 나와야 한다는 멱등성을 가진 요청입니다. 이 의도가 서버 API에 정확히 구현되어 있다면, 별도 처리 없이도 자연스럽게 멱등성이 보장될 수 있습니다.

예를 들어, S3 같은 오브젝트 스토리지에 파일을 업로드할 때 'PUT /file1'처럼 같은 경로로 파일을 여러 번 업로드하더라도 기존 파일을 덮어쓰기 때문에 결과는 항상 같습니다.


모든 API가 멱등성을 반드시 보장해야 하는 것은 아니므로,
API의 역할과 도메인 특성을 고려해 필요한 경우에는 위 방법들 중 적절한 방식을 선택해 적용해줄 수 있습니다.

깃허브 저장소를 어디에 첨부하셨나요?

1

11

1

nestjs 강의는 없나요??

1

13

2

스타터 저장소

1

13

1

upload_file_id가 1,3,4 순서인 건에 대해

0

18

1

클로드코드 명령어-대화&세션관리 수업 자료

0

27

1

대규모 프로젝트에서 스펙파일 구조 설계

0

35

1

11장 미션에 이메일 남기는걸 누락했어요.

0

27

1

PlatformTransactionManager, ResourcelessTransactionManager 질문

1

46

2

시퀀스다이어그램은 무슨툴로 그리신건가요?

0

30

2

1과업 = 1세션 에대한 질문

0

58

2

백준 서비스 종료인데 조치 없나요?

0

56

1

완강 후 느낀점

1

75

1

캬 그동안 클로드 코드 100달러 주고 1달러치 사용하고있었네요

1

68

1

상태 기반 데이터관리에서 특정 시점에 대한 정보는 어떻게 관리할 수 있나요?

0

33

1

섹션4 퀴즈 오타있어요.

0

38

1

6번 문제 질문입니다.

0

65

2

service-discovery 프로세스 가동 이유

0

37

1

SQS 노션 자료 내용

0

72

2

캐시전략 - Write-behind

0

90

2

유저 별 포인트

0

142

2

인프라 관련 질문

0

124

2

MSA 전환 시점

0

203

2

로드밸런싱 관련 질문

0

137

2

도움 되었어요!

0

124

2