Replies: 2 comments
1. 멱등성이란 무엇이며, 같은 API를 두 번 호출했을 때 어떤 조건을 만족해야 멱등하다고 할 수 있나요?멱등성(Idempotency)은 같은 요청을 여러 번 실행해도 서버에 남는 결과가 한 번 실행했을 때와 같은 성질이다. 같은 API를 두 번 호출했을 때 두 번째 호출이 상태를 더 바꾸지 않아야 멱등하다고 할 수 있다. 예를 들어 즉, 멱등성은 응답이 아니라 서버 상태를 기준으로 판단한다. 또한 같은 클라리언트가 같은 요청을 반복한 경우만 따진다. 두 호출 사이에 다른 사용자가 데이터를 바꿔 결과가 달라졌다면, 그건 멱등성 위반이 아니다. 멱등성이 중요한 이유는 네트워크 타임아웃 때문이다. 타임아웃이 나면 클라이언트는 요청이 서버에서 처리됐는지 알 수 없다. 이때 멱등한 API는 안심하고 재시도할 수 있다. 반면 멱등하지 않은 API를 재시도하면 중복 결제 같은 문제가 생길 수 있다. 그래서 결제나 주문 API는 보통 클라이언트가 만든 고유 요청 ID인 2. HTTP 메서드인 GET, POST, PUT, DELETE, PATCH 중 어떤 것이 멱등하고 어떤 것이 그렇지 않은가요? 그 이유도 설명해주세요.HTTP에서 멱등성은 같은 요청을 여러 번 보냈을 때 서버에 남는 의도된 결과가 한 번 보냈을 때와 같은 지를 뜻한다.
이는 메서드의 기본 의미에 따른 분류이다. API 설계에 따라 3. 결제 API에서 클라이언트가 요청을 보냈는데, 네트워크 타임아웃으로 응답을 받지 못했습니다. 이때 클라이언트가 재시도하면 어떤 문제가 생길 수 있고, 멱등성을 통해 이 문제를 어떻게 해결하나요?타임아웃이 나도 결제가 실패했다고 단정할 수 는 없다. 서버가 결제를 완료했지만 응답만 클라이언트에 도착하지 않았을 수 있다. 이때 클라이언트가 새 결제 요청으로 재시도하면 이중 결제가 발생할 수 있다. 이를 막으려면 클라이언트가 하나의 결제 시도에 멱등성 키를 부여하고, 재시도할 때도 이와 같은 키를 보내야 한다. 서버는 그 키로 이미 처리한 요청인지 확인해 결제를 다시 실행하지 않고 기존 결과를 반환한다. 같은 키에 다른 결제 내용을 보냈다면 오류로 처리해야 한다. 핵심은 재시도가 새 결제가 아니라, 결과를 확인하려는 같은 요청임을 서버가 알아볼 수 있게 하는 것이다. |
1. 멱등성이란 무엇이며, 같은 API를 두 번 호출했을 때 어떤 조건을 만족해야 멱등하다고 할 수 있나요?멱등성(Idempotency)이란 같은 요청을 한 번 보내든 여러 번 보내든 서버의 최종 상태가 동일한 성질을 의미합니다. 예를 들어 사용자의 이름을 특정 값으로 변경하는 요청은 여러 번 실행해도 결과가 같으므로 멱등합니다. 반면 잔액에 일정 금액을 추가하는 요청은 호출할 때마다 결과가 달라지므로 멱등하지 않습니다. 멱등성을 만족하려면 같은 요청을 여러 번 실행했을 때 다음 조건을 만족해야 합니다.
이때 응답 코드까지 항상 같을 필요는 없고, 서버의 최종 상태가 같아야 한다는 점이 중요합니다. 2. HTTP 메서드인 GET, POST, PUT, DELETE, PATCH 중 어떤 것이 멱등하고 어떤 것이 그렇지 않은가요? 그 이유도 설명해주세요.
3. 결제 API에서 클라이언트가 요청을 보냈는데, 네트워크 타임아웃으로 응답을 받지 못했습니다. 이때 클라이언트가 재시도하면 어떤 문제가 생길 수 있고, 멱등성을 통해 이 문제를 어떻게 해결하나요?결제 요청이 서버에서 정상 처리됐지만 네트워크 문제로 응답만 유실될 수 있습니다. 이때 클라이언트가 실패했다고 판단해 다시 요청하면 같은 주문이 두 번 결제되는 문제가 발생할 수 있습니다. |
Uh oh!
There was an error while loading. Please reload this page.
📆 일자: 26년 9월 27일(일)
발제 의도
🤔 오늘의 질문
멱등성이란 무엇이며, 같은 API를 두 번 호출했을 때 어떤 조건을 만족해야 멱등하다고 할 수 있나요?
HTTP 메서드인 GET, POST, PUT, DELETE, PATCH 중 어떤 것이 멱등하고 어떤 것이 그렇지 않은가요? 그 이유도 설명해주세요.
결제 API에서 클라이언트가 요청을 보냈는데, 네트워크 타임아웃으로 응답을 받지 못했습니다. 이때 클라이언트가 재시도하면 어떤 문제가 생길 수 있고, 멱등성을 통해 이 문제를 어떻게 해결하나요?
All reactions