해당 글은 개발, 기술관련 아티클이나 블로그 글 혹은 유튜브 영상의 내용을 정리하거나 후기를 적는 글입니다.
리뷰할 글: tosspayments velog 의 '멱등성이 뭔가요?'
멱등성이 뭔가요?
생소한 표현이지만 알고 보면 쉬워요. 멱등성에 대해 이해하고 API를 멱등하게 제공하기 위한 방법도 함께 알아봐요.
velog.io
글의 요약
- 멱등하다는 것은 무엇인가?
- 첫 번째 수행을 한 뒤, 여러 차례 수행해도 결과를 변경시키지 않는 것
- 멱등성의 장점
- 동일한 요청을 두 번 하더라도 서버의 데이터 상태를 한 번만 변경하기에 의도하지 않은 문제를 일으키지 않는다
- 안전한 API 를 만드는 길
- 멱등키를 이용해서 API 에서 멱등성을 보장한다
- 멱등키에 대한 기록을 통해서 멱등성을 보장
- 클라이언트 단에서 멱등키를 생성해서 헤더에 붙임
- 멱등키에 저장된 응답을 반환함
- 멱등키에 대한 기록을 통해서 멱등성을 보장
리뷰와 나의 해석
- 알게된 것
- get 과 put 은 멱등하지만 post 나 patch 는 멱등하지 않다
- 그러므로 멱등을 제공하고싶다면 서버에서 멱등함을 구현해야 한다
- HTTP 메서드의 안전성과 멱등성은 서로 다르다
- 이것이 바로 참조 투명성
- get 과 put 은 멱등하지만 post 나 patch 는 멱등하지 않다
- 알게된 키워드
- 멱등키
- 422 Unprocessable Entity : 재시도된 요청이 처음 요청과 다른데 같은 멱등키를 사용했을 때
- 409 Conflict : 이전 요청 처리가 아직 진행중인데 같은 멱등키로 새로운 요청이 들어올 때
후기
우선 이 글을 읽고 가장 먼저 생각났던 것은 '토스뱅크 면접' 이었다
과거 토스뱅크 면접때 나는 이런 질문을 받았던 적이 있다
환불 모듈을 만드셨다고 하셨는데, 동일한 요청이 연속해서 들어오면 어떻게 하지요?
이 질문을 듣고 나는 바로 멱등성에 대해서 주저없이 이야기했고 강조했지만 실제로 어떻게 구현할 것인가? 에 대한 답은 하지 못하였다.
그냥 멱등한 api 가 중요합니다! 이유는 멱등한 api 가 중요하기 때문입니다! 라는 식으로 대답했던것 같다
이 글에서는 실제로 멱등한 API 를 만들기 위해서 how to 를 알려주는 글이었던것 같다.
멱등성과 참조 투명성
또한 나는 멱등성과 참조 투명성 사이의 관계에 대해서 모호한 부분이 있었다.
참조 투명성에 대해서는 해당 블로그 글인 Spring Data 모듈의 save() 는 CQS 를 지키지 않는 것일까? with 참조투명성 에서 확인할 수 있다.
이 글을 읽고 참조투명성과 멱등성에 대한 차이를 확실히 이해했다.
참조투명성은 오히려 안정성과 관련이 깊구나..
댓글0