GET과 POST의 차이점
by coco3o사용자가 어떤 홈페이지로 이동하기 위해 URL을 브라우저 주소창에 작성하고 엔터를 누르면 페이지로 이동합니다.
사용자는 단순히 URL(Uniform Resource Locator)를 입력하였을 뿐이지만 서버 내부에서는 클라이언트의 요청에 응답하기 위해서 처리를 해주어야 합니다.
여기서 클라이언트가 서버로 요청을 보내는 방법인 HTTP Method에는 크게 2가지 방식이 있는데, 그것이 GET방식과 POST방식입니다.
1. GET 방식
먼저 GET방식에 대해 알아보도록 하겠습니다.
네이버에 get이라는 단어를 검색해보면 위와 같이 받다, 얻다, 구하다라는 뜻을 가진 단어인데,
말 그대로 Get은 우리가 필요한 정보를 얻기 위해 도서관에서 책을 빌려 가져오는(GET)상황과 유사하게 GET은 어떠한 정보를 가져와서 조회하기 위해 사용되는 방식입니다.
[ GET 방식의 특징 ]
- URL에 변수(데이터)를 포함시켜 요청한다.
- 데이터를 Header(헤더)에 포함하여 전송한다.
- URL에 데이터가 노출되어 보안에 취약하다.
- 길이 제한이 있다. (브라우저마다 제한이 다름)
- 캐싱할 수 있다.
GET 방식은 간단한 데이터를 URL에 넣도록 설계된 방식으로 데이터를 보내는 양에 한계가 있습니다.
HTTP 자체는 GET 방식의 URL 길이에 제약을 두고 있지 않지만, 브라우저에서 최대 길이를 제한하고 있으며 URL형식에 맞지 않는 파라미터 이름이나 값은 인코딩되어 전달해야 합니다.(만약 보내는 길이가 너무 긴 경우 초과 데이터는 절단됩니다.) 특별히 전송하는 데이터가 없으므로 GET 방식에서 바디는 보통 빈 상태로 전송됩니다.
실제로 GET 방식은 예를 들어 우리가 어떤 페이지에서 로그인하는 상황이라 하고, ID와 PW를 입력한 후 엔터를 눌렀을 때, 이럴때 요청을 GET방식으로 전송하는 경우에는
www.dev-coco.tistory.com/login?id=coco&pw=tistory 와 같은 페이지가 있다고 가정을 합시다.
여기서 GET방식은 ?마크를 통해 URL의 끝을 알리고, id라는 키(key)에 대해선 coco라는 값(value)를, pw라는 키(key)에 tistory라는 값(value)를 전송하는 것을 볼 수 있습니다. 이 부분을 쿼리 스트링(query string)이라고 부릅니다.
여러개의 Key와 Value를 보내는 경우에 &를 사용하여 이어주는 GET방식은 최소한의 보안유지도 하지 않기 때문에
실제 웹사이트에서 ID와 PW같은 중요한 정보를 GET방식으로 사용하면 개인정보가 노출되는 문제가 발생합니다.
GET방식을 사용해서 데이터를 노출시키는 경우는 개인정보가 포함되지 않는 상황에서 캐싱을 하여 속도를 높이거나
즐겨찾기를 편리하기 위해 사용되는 경우가 많습니다.
2. POST 방식
GET방식에 이어서 POST방식에 대해서 알아보도록 하겠습니다.
POST라는 단어는 부치다, 제출하다 라는 뜻을 가지고 있습니다.
예를 들어 우리가 어디에 서류를 제출하는 것은 우리에 대한 정보를 제출하여(POST) 추가하기 위함입니다.
이러한 상황과 유사하게 POST 방식은 데이터를 서버로 제출하여 추가 또는 수정하기 위해서 사용하는 방식입니다.
[ POST방식의 특징 ]
- URL에 변수(데이터)를 노출하지 않고 요청한다.
- 데이터를 Body(바디)에 포함시킨다.
- URL에 데이터가 노출되지 않아 기본 보안이 되어있다.
- 데이터 길이에 제한이 없다.
- 캐싱할 수 없다.
GET방식은 URL에 데이터를 붙여서 전송하는 반면에 POST방식은 BODY에 데이터를 넣어서 전송합니다.
따라서 헤더필드 중 Body에 포함시키는 이점 때문에 메시지 길이의 제한은 없지만 최대 요청을 받는 시간인 Time Out이 존재하므로 클라이언트에서 페이지를 요청하고 기다리는 시간이 존재합니다.
실제로 상황에서 POST 방식은 URL에 데이터가 노출되지 않으므로 즐겨찾기나 캐싱이 불가능하지만 쿼리스트링(문자열)데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스와 같은 객체들의 값도 전송이 가능합니다.
GET 과 POST의 차이점
아래 그림은 GET 방식과 POST 방식의 차이를 표로 정리하고 있습니다.
추가적으로 차이점을 정리해보면 아래와 같습니다.
GET 방식
- 중요 개념 : GET은 '가져오는 것'
- DB로 따지면 GET은 SELECT에 가깝다.
- ex) 데이터를 가져와서 봄. (게시판의 리스트, 글보기 등)
- GET 요청은 멱등이다.
POST 방식
- 중요 개념 : POST는 '수행하는 것'
- DB로 따지면 POST는 CREATE에 가깝다.
- ex) 서버의 값이나 상태를 바꿈. (게시판의 글쓰기, 수정)
- POST는 멱등이 아니다.
멱등이란?
멱등의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미합니다.
GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같을 것이고, 반대로
POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니라고 볼 수 있습니다.
GET과 POST는 이런 차이들이 있기 때문에 사용하려는 목적에 맞게 사용해야 합니다.
참고
'📚Computer Science > Network' 카테고리의 다른 글
프록시(Proxy)란? (0) | 2021.07.08 |
---|---|
쿠키(Cookie)와 세션(Session)의 차이 (+캐시(Cache)) (16) | 2021.06.25 |
[Java] NIO 기반 입출력 및 네트워킹 - UDP 채널 : 발신자 / 수신자 / 통신 (0) | 2021.05.21 |
[Java] NIO 기반 입출력 및 네트워킹 - TCP 넌블로킹 채널 (0) | 2021.05.21 |
[Java] NIO 기반 입출력 및 네트워킹 - TCP 블로킹 채널 (0) | 2021.05.21 |
블로그의 정보
슬기로운 개발생활
coco3o