안녕하십니까?
비굴이입니다!!
면접을 준비하는 과정에서 공부하게 된 부분들을 이제부터 기록하고자 합니다.
그 중에 오늘 공부하게 된 부분은 바로 멱등성에 대한 부분입니다.
연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질, 연산을 여러 번 반복하여도 한 번만 수행된 것과 같은 성질
이 말을 프로그래밍에서 적용하게 되면
메서드가 여러 번 실행 되어도 결과가 같기 때문에 안전하게 사용할 수 있다는 뜻이 됩니다.
간단하게 표시를 하게 되면 아래와 같습니다.
f(f(x)) ≡ f(x)
위와 같이 두 번 실행한 값과 한 번 실행할 값이 동일한 것이 멱등성입니다.
이는 HTTP 메서드에서도 적용되는데
REST api에서 POST를 제외한 GET, PUT, DELETE 할 때에는
여러번 진행을 하더라도 같은 값이 나오는데 이를 멱등성을 가지고 있다고 할 수 있습니다.
POST의 경우에는 메서드가 호출될 때 마 DB에 요청된 데이터가 추가될 것이기 때문에
멱등성을 위배한다고 볼 수 있습니다.
GET의 경우에는 DB의 리소스를 단순히 읽기만 하는 메서드이기 때문 여러번 수행되어도
그 결과값은 변하지 않습니다. 때문에 멱등성을 가지고 있다고 할 수 있습니다.
PUT의 경우에 해당 요청을 진행하게 되면 통째로 변경을 진행하기 때문에 부분 수정으로 작성하지 않은 이상 매번 결과값이 동일하기 때문에 멱등성을 가지고 있습니다.
DELETE는 물론 해당 데이터가 존재하는 경우와 존재하지 않는 경우에는 응답코드는 다르게 나오지만 서버의 상태 자체는 변경되지 않기 때문에 멱등성을 가지고 있다고 할 수 있습니다.
독특한 부분은 PATCH인데 부분 변경을 하는 PATCH의 경우에는 설계 방식에 따라 멱등성를 보장하기도 합니다. 조회수와 같이 계속해서 변경하도록 설계하는 경우에는 멱등성을 보장하지 못하지만
지속적인 변화를 하지 않게 설계할 수도 있기 때문에 상황에 따라 멱등성이 보장된다고 할 수 있습니다.
안전한 메서드
안전한 메서드는 서버의 상태를 변경시키지 않는 메서드를 뜻합니다.
GET과 같이 리소를 읽기만 하는 경우에는 서버의 상태를 변경시키지 않기 때문에
안전한 메서드라고 할 수 있습니다. 또한 이는 멱등성을 가지게 되죠.
하지만 멱등성을 가지고 있다고 해서 안전한 메서드라고 할 수는 없습니다.
PUT이나 DELETE, PATCH의 경우에는 멱등성을 가지거나 가질 수 있지만,
리소스를 수정하거나 삭제하기 때문에 안전한 메서드라고 할 수 없습니다.
때문에 안전한 메서드는 멱등성을 가지지만,
멱등성을 가지고 있다고 해서 안전한 메서드는 아니게 됩니다.
결과적으로 멱등성을 가지고 있다는 것은
'요청 전후로 서버의 상태가 같은 경우' 를 뜻한다고 할 수 있습니다.
[CS공부] 제네릭 (Generic) : 타입스크립트(Typescript) (0) | 2023.03.31 |
---|---|
[CS공부] MSA (Micro-Service Architecture) 란? (0) | 2023.03.31 |
[CS공부] DB에서 인덱스(INDEX)의 필요성과 단점 (0) | 2023.03.28 |
[CS공부]REST API란? (0) | 2023.03.28 |
[cs공부]객체 지향 프로그래밍 (OOP) (0) | 2023.03.27 |