본문 바로가기
IT 개인 공부/Web

HTTP 메서드

by Libi 2021. 7. 24.
반응형

대부분의 인터넷은 HTTP 프로토콜을 통해 데이터를 주고받는다.

비개발자라면 "아 그렇구나" 하고 이 정도만 알고 넘어가도 되겠지만 웹 공부를 하고 있기 때문에 클라이언트와 서버가 HTTP 프로토콜 위에서 어떠한 방식(HTTP 메서드)으로 데이터를 요청 및 응답하는지에 대해 한번 알아보려고 한다.

 

HTTP 메서드는 총 9가지가 존재한다. 다만, 보안상의 이유로 대부분의 서버는 GET, POST, OPTIONS 메서드들만 허용하도록 한다. 그럼 하나씩 간단하게 살펴보자.

 

다음으로 비슷한 HTTP 메서드들의 차이점을 간단하게 알아보도록 하자.

먼저 GETPOST이다. 두 메서드 모두 서버에게 무언가를 요청할 때 사용하는 메서드이지만 둘 사이에는 차이점이 존재한다.

GET 방식은 "URL?리소스" 형태의 쿼리 파라미터 방식으로 서버에게 요청한다. GET 방식은 간단한 데이터를 빠르게 처리할 수 있는 장점이 있지만 전송할 수 있는 리소스의 크기가 제한된다.

그 이유는 항상 URL를 포함시켜야 하기 때문에 URL 크기만큼의 공간이 사라지기 때문이다. 또한 리소스가 URL에 그대로 노출되기 때문에 보안상으로도 문제가 있다.

반면 POST 방식은 HTTP 헤더 뒤에 입력 스트림 형태로 리소스를 전송하는 방식으로 URL과 리소스를 별도로 전송하기 때문에 GET 방식보다 많은 데이터를 전송할 수 있으며, 최소한의 보안 유지에 효과가 있다.

최소한인 이유는 암호화를 하지 않는다면 보안이 거기서 거기이기 때문이다.

단점으로는 같은 리소스 양일 경우 get 방식보다 처리 속도가 느리다.

다음으로 POSTPUT이다. POST와 PUT 모두 클라이언트 측에서 서버 측에게 리소스를 전송하는 방식이지만 둘 사이에는 차이점이 존재한다.

POST는 보통 INSERT 개념으로 사용되고, PUT은 UPDATE 개념으로 사용된다. 또한 POST는 멱동하지 않고 PUT은 멱동하다. 둘의 차이를 이해하기 위해선 먼저 멱동(Idempotent)이라는 개념을 이해해야 한다.

멱동(Idempotent)이란 같은 작업을 계속 반복해도 같은 결과가 나오는 경우를 의미한다. 또한, 멱동이란 개념은 동일한 데이터에 대해 적용한다는 것을 가정한다.

클라이언트가 서버에게 GET 메서드를 통해 리소스를 요청한다고 생각해 보자. 만약 서버에서 리소스가 전송되는 과정에서 연결이 끊겨 클라이언트가 원하는 응답을 받지 못 받았다고 하자. 클라이언트는 다시 서버에게 GET 메서드를 통해 똑같은 리소스를 요청하면 된다. 왜냐하면 GET은 멱동하기 때문에 항상 같은 결과가 나오기 때문이다.

POST는 클라이언트가 리소스의 위치를 지정하지 않은 경우 사용하기 때문에 동일한 리소스를 여러 번 POST 하면 서버에는 매번 새로운 리소스가 생성되기 때문에 멱동을 보장해주지 않는다.

반면, PUT은 클라이언트가 명확하게 리소스의 위치를 지정해 주기 때문에 동일한 리소스를 여러 번 PUT 하는 경우 서버에는 기존의 리소스가 수정될 뿐 새로운 리소스가 생성되지 않기 때문에 멱동을 보장해준다.

 

마지막으로 PUTPATCH이다.

둘 다 클라이언트 측에서 요청한 리소스를 갱신할 때 사용하지만 PUT은 해당 리소스의 전체를 교체하는 방식이고, PATCH는 해당 리소스의 일부를 변경하는 방식이다.

또한, PUT은 멱동하지만 PATCH는 멱동하지 않다. PUT은 전체 리소스를 업데이트하기 때문에 동일한 리소스에 대해 동일하게 PUT을 처리하는 경우 멱동하게 처리된다.

반면 PATCH는 리소스의 일부가 변경되기 때문에 멱동성을 보장할 수 없다.

 

 

[ Reference ]

· https://javaplant.tistory.com/18

반응형

'IT 개인 공부 > Web' 카테고리의 다른 글

REST, REST API, RESTful  (0) 2021.07.25
웹 서버(Web Server) vs WAS(Web Application Server)  (0) 2021.07.24
쿠키(Cookie) vs 세션(Session)  (0) 2021.07.24
MVC 패턴  (0) 2021.07.23
HTTP 상태 코드  (0) 2021.07.23

댓글