본문 바로가기
  • 장원익 기술블로그
더 좋은 개발자 되기/기술 아티클 리뷰

[아티클 리뷰] 토스 페이먼츠-멱등성이 뭔가요?

by Wonit 2023. 1. 15.

해당 글은 개발, 기술관련 아티클이나 블로그 글 혹은 유튜브 영상의 내용을 정리하거나 후기를 적는 글입니다.

 

리뷰할 글: tosspayments velog 의 '멱등성이 뭔가요?'

 

멱등성이 뭔가요?

생소한 표현이지만 알고 보면 쉬워요. 멱등성에 대해 이해하고 API를 멱등하게 제공하기 위한 방법도 함께 알아봐요.

velog.io

 

글의 요약

 

  • 멱등하다는 것은 무엇인가?
    • 첫 번째 수행을 한 뒤, 여러 차례 수행해도 결과를 변경시키지 않는 것
  • 멱등성의 장점
    • 동일한 요청을 두 번 하더라도 서버의 데이터 상태를 한 번만 변경하기에 의도하지 않은 문제를 일으키지 않는다
    • 안전한 API 를 만드는 길
  • 멱등키를 이용해서 API 에서 멱등성을 보장한다
    • 멱등키에 대한 기록을 통해서 멱등성을 보장
      • 클라이언트 단에서 멱등키를 생성해서 헤더에 붙임
    • 멱등키에 저장된 응답을 반환함

 

리뷰와 나의 해석

 

  • 알게된 것
    • get 과 put 은 멱등하지만 post 나 patch 는 멱등하지 않다
      • 그러므로 멱등을 제공하고싶다면 서버에서 멱등함을 구현해야 한다
    • HTTP 메서드의 안전성과 멱등성은 서로 다르다
      • 이것이 바로 참조 투명성
  • 알게된 키워드
    • 멱등키
    • 422 Unprocessable Entity : 재시도된 요청이 처음 요청과 다른데 같은 멱등키를 사용했을 때
    • 409 Conflict : 이전 요청 처리가 아직 진행중인데 같은 멱등키로 새로운 요청이 들어올 때

 

후기

 

우선 이 글을 읽고 가장 먼저 생각났던 것은 '토스뱅크 면접' 이었다

 

과거 토스뱅크 면접때 나는 이런 질문을 받았던 적이 있다

 

환불 모듈을 만드셨다고 하셨는데, 동일한 요청이 연속해서 들어오면 어떻게 하지요?

 

이 질문을 듣고 나는 바로 멱등성에 대해서 주저없이 이야기했고 강조했지만 실제로 어떻게 구현할 것인가? 에 대한 답은 하지 못하였다.

 

그냥 멱등한 api 가 중요합니다! 이유는 멱등한 api 가 중요하기 때문입니다! 라는 식으로 대답했던것 같다

 

이 글에서는 실제로 멱등한 API 를 만들기 위해서 how to 를 알려주는 글이었던것 같다.

 

멱등성과 참조 투명성

 

또한 나는 멱등성과 참조 투명성 사이의 관계에 대해서 모호한 부분이 있었다.

 

참조 투명성에 대해서는 해당 블로그 글인 Spring Data 모듈의 save() 는 CQS 를 지키지 않는 것일까? with 참조투명성 에서 확인할 수 있다.

 

이 글을 읽고 참조투명성과 멱등성에 대한 차이를 확실히 이해했다.

 

참조투명성은 오히려 안정성과 관련이 깊구나..

 

댓글