거인의 코딩일지
[C.S] HTTP 메서드의 멱등성?? 안전한 메서드??? 본문
728x90
멱등성(Idempotent)이란??
- 수학이나 전산학에서의 멱등성의 의미는 같은 연산을 여러번 실행해도 그 결과가 달라지지 않는 성질
// ex) 멱등성을 갖고 있는 함수
public int abs(int number) {
return Math.abs(number);
}
- 위 함수는 아무리 임의의 값에 연산을 여러번 적용하더라도 같은 결과값을 반환한다.
- 즉, 멱등성의 핵심은 어떠한 값에 대하여 여러번 동일한 연산을 수행하였을 때 호출 횟수에 구애받지 않고 동등한 결과값을 내어주는 성질
HTTP Method 의 멱등성??
- 멱등성의 개념은 HTTP 에서도 동일하게 적용될 수 있다.
- 동일한 요청을 한번 보내는 것과 여러번 보내는 것이 같은 효과를 지니고 서버의 상태도 동일하게 남을 때 해당 HTTP Method 가 멱등성을 가지고 있다고 말한다.
- 멱등성을 따질 때에는 서버의 상태만 바라보면 되며, 해당 HTTP 응답 Status 는 신경쓰지 않아도 된다.
- REST API 에서 자주 사용하는 HTTP Method 중 get, post, put, delete 중 post 를 제외하고 멱등성이 보장 되어야한다.
- GET
- 서버에서 존재하는 리소스를 단순히 읽어오기만 하는 메소드
- 여러번 수행되어도 결과값은 변하지 않음
- 마찬가지로 HEAD, OPTIONS 메소드도 조회에 대한 메소드이기에 멱등하다고 할 수 있다.
- PUT
- 서버에 존재하는 리소스를 요청에 담긴 내용대로 통채로 대체하기에 올바르게 구현하였다면 여러번 수행되어도 결과값은 변하지 않는다.
- DELETE
- 존재하는 데이터를 삭제한 결과와 이미 존재하지 않은 결과를 삭제하려는 시도에 대한 응답은 서로 다르지만, 서버의 상태 자체는 변하지 않으므로 올바르게 구현되었다면 여러번 수행하여도 멱등성이 보장된다.
- POST
- 메소드가 호출될 때 마다 데이터베이스 등에 요청된 데이터가 추가될 것이고, 이는 곧 멱등성을 위배함을 알 수 있다.
- 호출시 마다 서버의 상태가 달라지기 떄문.
- PATCH
- PATCH 메소드는 항상 멱등성을 보장한다고 이야기 할 수 없다.
- 멱등성을 보장하도록 설계할 수 있지만, 멱등성을 보장하지 않도록 설계도 가능
- PUT 은 요청에 대하여 리소스를 통채로 바꿔버리기에 멱등성이 보장되지만, PATCH 는 리소스의 일부에 대하여 변화를 명령할 수 있기 때문이다.
- GET
안전한 메소드???
- 안전한 메소드란, 서버의 상태를 변경시키지 않는 HTTP 메소드를 의미한다.
- GET , OPTION, HEAD 와 같이 조회에 사용되는 메소드를 안전하다고 이야기 할 수 있다.
- 모든 안전한 메소드는 멱등성을 가지고 있지만 그 반대는 성립되지 않는다.
- PUT 과 DELETE 메소드는 멱등성을 갖는다고 이야기 했지만 PUT은 리소스를 수정하고 DELETE 는 메소드를 제거하므로 안전한 메소드라고 할 수 없다.
- 즉, 멱등성을 갖는 메소드가 서버의 상태를 변경하지 않는다고 오해하면 안된다.
- 멱등성을 갖는 메소드도 서버의 상태를 변경시킬 수 있다.
- 멱등성의 핵심은 "요청에 대한 서버의 상태가 항상 같은가?" 이다.
참고
728x90
'코딩 > 기초지식' 카테고리의 다른 글
Tib 통신??? Tibco Rendezvous 란???? (0) | 2023.12.16 |
---|---|
[C.S] 얕은복사와 깊은복사란??? 그 둘의 차이점??? (2) | 2023.10.29 |
[C.S] SASS?? SCSS? 그 둘의 차이점?? 장단점?? (2) | 2023.10.14 |
[C.S] 캐시히트? 캐시미스?? 캐시메모리가 투명하다??? (2) | 2023.10.12 |
[C.S] 캐시(Cache) 란??? 캐시 알고리즘?? (2) | 2023.10.11 |