본문 바로가기

공부기록용

Http Method에서 GET, POST에 대한 고찰(생각 정리하기)

1. GET Method

클라이언트가 서버에 특정 자원의 상태에 대한 조회 또는 검색을 요청을 할 때,

어떤 자원을 대상으로할지(uri) 해당 자원을 어떻게 처리할지(http method)

그리고 처리한 자원을 어떤 형식으로(representational)

클라이언트에 응답할지에 대한 정보를 서버에 전달한다. 

 

http method에서 GET은 서버의 상태를 조회할 때 또는 검색할 때 사용한다.

클라이언트의 GET 요청에 대해 서버는

클라이언트가 여러 번 요청하여도 서버의 상태가 변하지 않으면서(멱등성을 보장,

같은 요청을 여러 번 보내도 서버 상태가 같게 유지되어야 하며, 한 번은 변해도 되나,

이후는 동일해야 함을 의미) 안전성을(요청이 서버의 상태를 절대 바꾸어선 안된다) 갖추도록

설계해야 RESTful한 api의 일부조건을 충족시켰다고 할 수 있다.

 

멱등성을 보장한다는 것은 클라이언트가 같은 요청을

여러 번 보내도 서버의 상태가 같아야 함을 의미하는데,

최초 요청을 통해 한 번은 변해도 되나 그 이후는 동일해야함을 의미한다.

안정성을 보장한다는 것은 최초의 요청을 포함한 클라이언트의 요청이

서버의 상태를 절대 바꾸지 않아야 한다는 것을 의미한다.

그리고 안정성과 더불어 멱등성을 보장해야하는 GET이 할 수 있는 행위는

서버의 상태를 조회하거나 검색하는 일인 것이다. 그래서 GET 메서드는

특정 자원이 서버에 어떤 상태로 있는지 현재 자원의 상태를 조회하거나

검색하는 일에 사용된다.

 

2. POST method

post method는 대표적인 비멱등성(멱등하지 않음)을 지닌 Http Method다.post는 클라이언트가 전송한 데이터를 기반으로 서버가 새로운 리소스(자원)를 생성하거나특정 처리를 수행하도록 요청하는 http 메서드이며 같은 post요청을 여러 번 반복하면서버의 상태가 달라질 수 있는, 대표적인 비멱등성 http 메서드다. 여기서 특정 처리란,db 상태는 안 바뀌지만, 즉 서버의 상태는 변경되지 않지만, 이메일 발송, 외부 api 호출 등서버가 동작을 수행하는 요청을 위한 메서드이기도 하다. 즉, 서버가 db 상태를 바꾸지 않더라도외부 api 호출, 이메일 전송, 알림 발송처럼 서버에서 어떤 "행위"가 일어나는 경우에는 반드시post 메서드를 사용해야하며 이를 지켰을 때 restful한 api를 설계하는 조건중 하나를 지켰다고 볼 수 있다.

 

클라이언트가 특정 자원(ex. uri)을 생성해야하는 요청(post)을 서버에게 보냈을 때,서버는 클라이언트가 보낸 데이터를 기반으로 특정 자원을 생성하여 서버의 상태에 변화가 생기고,리소스 생성이 성공됐음을 의미하는 201 Created(http status code)를 클라이언트에 반환한다.또는 생성된 리소스는 없지만 작업(처리)은 성공한 경우 200 OK 또는 204 No Content를 반환할 수 있으며응답 본문이 있는 경우 200 OK를 응답 본문이 없는 경우 204 No Content를 사용하면 된다.

반응형