///////
Search
🚁

HTTP 멱등성에 대해 설명해주세요.

멱등성이란?

같은 연산을 여러번 실행해도, 그 결과가 달라지지 않는 성질
→ 호출 횟수에 상관 없이 동일한 결과값을 내어주는 성질
public int abs(int number) { return Math.abs(number); }
Java
복사
위 함수는 결과값이 동일하므로 멱등성을 갖는다.

HTTP 메서드의 멱등성

아래 세 요소가 충족되면 HTTP 메서드가 멱등성을 가진다고 한다
1.
한 번 요청을 보내는 것과 연속으로 보내는 것이 같은 효과를 지닌다
2.
서버의 상태도 동일하게 남는다
3.
어떠한 부수 효과(side effect)도 존재하면 안된다.
REST API에서 GET, HEAD, PUT, DELETE 메서드는 멱등성을 가져야 한다
POST 메서드는 멱등성을 갖지 않는다.
안전한 메서드의 경우 멱등성을 갖는다
안전한 메서드 : HTTP 메서드가 서버의 상태를 바꾸지 않는 메서드. (읽기 작업만 수행)
멱등성을 갖는 모든 HTTP 메서드가 안전한 메서드는 아니다

GET 메서드

GET /data GET /data GET /data
Java
복사
여러 번 연속해서 호출해도 클라이언트가 받는 응답은 동일
서버의 상태가 변하지 않음 (단순 조회)

PUT 메서드

PUT /data/3 PUT /data/3 PUT /data/3
Java
복사
3번 데이터를 여러 번 수정해도, 3번 데이터는 우리가 요청한 값으로 항상 같은상태

DELETE 메서드

DELETE /data/3 -> Returns 200 if idX exists DELETE /data/3 -> Returns 404 as it just got deleted DELETE /data/3 -> Returns 404
Java
복사
DELETE 요청을 보낸 시점에 3번 데이터는 삭제된 상태
→ 여러번 수행되어도 동일한 결과
상태 코드는 응답마다 다를 수 있지만 서버의 상태는 변하지 않음

POST 메서드

POST /add_row HTTP/1.1 POST /add_row HTTP/1.1 -> Adds a 2nd row POST /add_row HTTP/1.1 -> Adds a 3rd row
Java
복사
여러 번 호출할 경우, 여러 열을 추가
→ 결과가 달라짐
→ 서버의 상태가 달라지므로 멱등성을 위배

한 줄 정리

HTTP 에서의 멱등성이란, 메서드 호출 시 여러 번 호출해도 서버의 상태가 변하지 않고 항상 같은 효과를 가진다. REST API에서 GET, PUT, DELETE 는 멱등성을 보장해야 한다.

참고