동일한 작업 또는 함수를 여러 번 호출하더라도 결과가 변경되지 않는 것
HTTP 메서드: POST, DELETE, GET - 동작과 멱등성
HTTP 프로토콜은 웹에서 데이터를 주고받을 때 사용되며, 다양한 메서드를 제공하여 서버와 클라이언트 간의 통신을 가능하게 합니다. 이 중에서도 POST, DELETE, GET 메서드에 대해 MDN에서 예시로 제시하고 있는데, 이들 메서드는 각기 다른 동작과 멱등성 특성을 가지고 있습니다.
POST 메서드
POST 메서드는 서버에 새로운 데이터를 생성하거나 기존 데이터를 수정하는 데 사용됩니다. 예를 들어, 새로운 게시물을 생성하거나 사용자가 입력한 정보를 서버에 전송할 때 주로 사용됩니다. 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
예시처럼 한 행을 추가하는 POST 요청은 계속 2번째, 3번째 행을 추가합니다. 이렇기 때문에 데이터가 변경되었다 = 즉 멱등성을 가지지 않는다고 합니다.
DELETE 메서드
DELETE 메서드는 서버에서 특정 리소스를 삭제할 때 사용됩니다. 예를 들어, 특정 게시물을 삭제하거나 파일을 서버에서 제거할 때 DELETE 메서드를 사용합니다. DELETE 메서드는 리소스를 삭제하면 다음에 같은 요청을 보내도 해당 리소스는 더 이상 존재하지 않으므로 멱등성을 가집니다. 즉, 동일한 요청을 여러 번 보내더라도 결과는 항상 같습니다.
DELETE /idX/delete HTTP/1.1 -> Returns 200 if idX exists
DELETE /idX/delete HTTP/1.1 -> Returns 404 as it just got deleted
DELETE /idX/delete HTTP/1.1 -> Returns 404
이처럼 상태 코드는 응답마다 달라질 수 있긴 하지만 멱등성을 가집니다.
GET 메서드
GET 메서드는 서버로부터 데이터를 조회하는 데 사용됩니다. 예를 들어, 웹 페이지를 불러오거나 특정 리소스의 정보를 요청할 때 GET 메서드를 사용합니다. 이처럼 GET 메서드는 데이터를 조회하기만 하며, 서버의 상태를 변경시키지 않는다. 따라서 GET 메서드는 멱등성을 가진다고 할 수 있습니다. 동일한 GET 요청을 여러 번 보내더라도 결과는 항상 같습니다.
이렇게 POST, DELETE, GET 메서드는 각각 다른 동작과 멱등성 특성을 가지고 있으며, 이를 이해하면 웹 애플리케이션을 개발하거나 API를 사용할 때 더 효과적으로 요청을 처리할 수 있습니다.
이 개념이 왜 중요한가?
- 네트워크 통신: 네트워크에서 데이터를 전송할 때, 동일한 데이터 패킷이 여러 번 전송될 수 있습니다. 이때 멱등성을 갖는 프로토콜 및 서비스를 사용하면 중복된 패킷이 발생하더라도 안전하게 처리할 수 있습니다.
- 데이터베이스 조작: 데이터베이스 조작 작업 중에도 멱등성을 유지하는 것이 중요합니다. 예를 들어, 동일한 SQL 쿼리를 여러 번 실행해도 데이터베이스 상태는 변하지 않아야 합니다.
- 웹 서비스 및 API: RESTful API 등의 웹 서비스에서도 멱등성은 중요한 역할을 합니다. 클라이언트가 동일한 요청을 여러 번 보내더라도 서버 상태가 변하지 않아야 합니다.