klaus

GET vs POST 개념 및 차이점 본문

IT지식한입!

GET vs POST 개념 및 차이점

klus! 2022. 11. 19. 22:58

PHP 게시판 개발 공부를 하면서 많이 본 것 중 하나가 GET와 POST입니다.

공통적으로 웹브라우저에서 서버에 요청하는 메서드라는 것과 GET은 URL에 노출되고, POST는 URL에 포함되지 않기 때문에 보안상 도움이 된다. 는 정도였습니다.

이번에 정확하게 찾아보고 정리해보도록 하겠습니다.

 

0. 들어가기 전에

GET와 POST는  HTTP Method입니다.

HTTP 메서드는 프로토콜을 사용하여 DB에 어떤 행동을 할 것인지 나타내는 방법이라고 생각하면 됩니다.

그럼 종류를 간단하게 알아보고 GET와 POST차이점을 확인해보겠습니다.

메소드 설명
GET 서버의 리소스 취득 (url/uri 방식으로 웹서버 측 리소스(데이터)를 요청)
POST 서버에게 내용 전달(파일 전송 가능하며 요청시 HTTP 바디에 데이터를 담아 웹서버로 전송) 
PUT 서버의 내용 갱신(파일 전송 가능하고 POST와 비슷하지만, 갱신이 주목적)
DELETE 서버가 가지고 있는 리소스를 삭제
HEAD 메세지헤더(문서 정보) 취득 (GET과 비슷하지만 문서의 헤더 정보만 요청)
OPTIONS 웹서버측 제공 메소드에 대한 질의

 

전달 방식 차이

1. GET 방식

GET은 리소스(데이터)를 요청할 때 필요한 데이터를 쿼리 스트링(URL)을 통해 전송합니다.

쿼리 스트링은 URL 주소 부분에? 와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 뜻합니다.(&를 사용하여 연결)

쿼리 스트링을 사용하게 되면 URL에 조회 조건을 표기하기 때문에 특정 페이지를 링크하거나 북마크 할 수 있습니다.

 

GET 특징

- 캐시 정보가 가능

- 브라우저의 히스토리에 정보가 남는다.

 - 길이의 제한이 있다.

- URL에 정보가 남기 때문에 중요한 정보를 취급할 때에는 사용하지 않는 것을 권고(ID/PW와 같은 민감 데이터)

 

2. POST 방식

POST는 리소스(데이터)를 생성하거나, 변경하는 방식으로 GET방식과 달리 전송해야 될 데이터를 HTTP 메시지의 Body 부분에 전송하는 방식입니다. 

Body 같은 경우 길이의 제한이 없이 웹서버 측에 요청할 수 있기 때문에 대용량의 데이터를 전송 가능합니다.

Body부분에 전송되기 때문에  내용이 눈에 보이지 않아 GET보다는 안전하다는 생각이 있지만, 크롬 개발자 도구와 같은 툴로 요청 내용이

확인 가능하기 때문에 해시/암호화를 하여 전송을 해야 합니다.

그리고 POST로 요청할 때에는 헤더 부분의 Content-type에 요청하려는 데이터의 타입을 표시하여 전달합니다.

HTML 태그의 경우 application/x-www-form-urlencoded, text/plain, multipart/form-data 등을 사용하며, 스프링의 경우 application/json와 같은 방식으로 차이가 있습니다.

만약, 데이터 타입을 표시하지 않으면 웹 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추합니다.

서버 측에서 확인할 수 없는 경우 application/octet-stream로 요청을 처리합니다.

 

POST 특징

캐시 되지 않는다.

웹 브라우저에 히스토리가 남지 않는다.

요청 데이터의 길이 제한이 없다.

Post 요청 중 자원 생성은 201(Created) HTTP 응답 코드를 반환합니다.

 

3. GET과 POST의 차이점 

특징 GET POST
사용목적 서버의 리소스를 요청
(읽기, 검색)
서버의 리소스를 생성하거나 업데이트
(생성, 수정, 삭제)
요청시 BODY 유뮤 BODY 없음 BODY 있음
idempotent idempotent Non-idempotent

idempotent??

멱등이란? idempotent(멱등)의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질

다시 말하면 동일한 연산을 여러 번 사용하여도 동일한 결과가 나온다는 뜻

GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같게 나오겠지만,

POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 Non-idempotent입니다.

다만, 생성 POST, 수정 PUT 또는 PATCH, 삭제 DELETE를 사용하는 게 맞는 표현입니다.!!

 

Reference

https://velog.io/@songyouhyun/Get%EA%B3%BC-Post%EC%9D%98-%EC%B0%A8%EC%9D%B4%EB%A5%BC-%EC%95%84%EC%8B%9C%EB%82%98%EC%9A%94

https://girawhale.tistory.com/66

https://brilliantdevelop.tistory.com/33

 

Comments