🌿 중급 백엔드
idempotent가 뭔가요?
쉽게 이해하기
전등 스위치를 생각해보세요. 이미 켜진 전등의 스위치를 다시 누르면? 여전히 켜져 있어요. 몇 번을 눌러도 '켜진 상태'는 똑같아요. API도 같은 요청을 반복해도 결과가 같으면 idempotent하다고 말해요.
핵심 정리
같은 요청을 여러 번 해도 결과가 똑같이 나오는 성질
자세히 알아보기
Idempotent(멱등성)는 같은 요청을 한 번 보내든 여러 번 보내든 결과가 동일한 성질이에요. 수학에서 온 용어인데, API 설계에서 아주 중요한 개념이에요. 특히 네트워크가 불안정해서 요청이 중복으로 전송될 수 있는 상황에서 중요해요.
HTTP 메서드 중 GET, PUT, DELETE는 기본적으로 idempotent예요. 예를 들어 사용자 정보를 조회하는 GET 요청을 10번 보내도 같은 정보가 돌아와요. PUT으로 사용자 이름을 'Alice'로 바꾸는 요청도, 한 번 보내든 세 번 보내든 결과는 '이름이 Alice'예요. DELETE도 마찬가지로, 이미 삭제된 항목을 다시 삭제하면 '없음' 상태가 유지돼요.
반대로 POST는 보통 idempotent하지 않아요. 주문 생성 API를 두 번 호출하면 주문이 두 개 생겨요. 이런 경우 실무에서는 '중복 방지 키(Idempotency Key)'를 사용해요. 클라이언트가 요청할 때 고유한 키를 함께 보내면, 서버는 같은 키로 온 요청은 한 번만 처리하고 나머지는 무시하거나 같은 결과를 돌려줘요.
예를 들어 결제 API를 생각해보세요. 네트워크 오류로 클라이언트가 '결제 완료' 응답을 못 받아서 다시 요청했을 때, 중복 결제가 되면 안 돼요. 서버가 idempotency key를 확인해서 '이미 처리된 요청이네' 하고 같은 결과를 돌려주면 중복 결제를 막을 수 있어요. Stripe 같은 결제 서비스는 이 기능을 기본 제공해요.