GET과 POST의 차이 (+ HTTP)
안녕하세요 코북입니다. Get과 Post에 대해 알기 전에 HTTP에 대해 간단하게 정리하겠습니다.
HTTP
HyperText Transfer Protocol의 줄임말로 www상에서 사용하는 프로토콜이다. 서버와 클라이언트 사이에 응답을 주고받는 프로토콜로 우리가 흔히 웹브라우저 주소창에 입력하는 웹 주소인 URL을 통해 요청과 응답이 이루어진다. 실제 전송은 TCP를 통해 이루어지며 포트는 80번을 사용한다.
HyperText
참조(하이퍼링크)를 통해 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트를 의미한다.
www (World Wide Web)
인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 가상의 공간이다.
HTTP 메소드
HTTP 메소드는 클라이언트가 서버에 요청의 목적 및 종류를 알리는 수단이다.
메소드 | 설명 |
GET | 리소스 요청 |
POST | 서버에 내용(파일 포함) 전송 |
PUT | 리소스 전체 수정 요청 |
DELETE | 리소스 제거 요청 |
GET과 POST의 차이
GET
GET은 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메소드이다.
예를 들면 게시판의 게시물을 조회할 때 쓸 수 있다. GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(query string)이라고 부른다. 방식은 끝에 "?"를 붙이고 그다음 변수명1=값1&변수명2=값2... 형식으로 이어 붙이면 된다.
예를 들어 다음과 같은 방식이다.
www.example.com/show?name1=value1&name2=value2
서버에서는 name1과 name2라는 파라미터 명으로 각각 value1과 value2의 파라미터 값을 전달받을 수 있다.
POST
POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메소드다.
예를 들어 게시판에 게시글을 작성하는 작업 등을 할 때 사용된다. POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보낸다. body의 타입은 Content-Type헤더에 따라 결정된다. GET에서 URL의 파라미터로 보냈던 name1=value1&name2=value2 가 body에 담겨 보내진다 생각하면 된다. POST를 통한 데이터 전송은 보통 HTML form을 통해 서버로 전송된다.
차이점
보안
- GET 요청은 파라미터에 다 노출되어 버리기 때문에 중요한 정보를 다루면 안 된다.
- POST 요청은 GET처럼 데이터가 외부적으로 드러나지 않아 보안이 필요한 부분에 많이 사용된다. 하지만 데이터를 암호화하지 않으면 body의 데이터도 결국 볼 수 있는 건 똑같다.
용량
- GET 요청은 길이 제한이 있다.
- POST 요청은 데이터 길이에 제한이 없어 용량이 큰 데이터를 보낼 때 사용한다.
리소스 전달 방식
- GET 요청은 쿼리 스트링
- POST 요청은 HTTP body
브라우저 기록, 북마크
- GET 요청은 브라우저 히스토리에 남고, 북마크 될 수 있다.
- POST 요청은 브라우저 히스토리에 남지 않고, 북마크 되지 않는다.
사용목적
- GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다. DB로 따지면 GET은 SELECT에 가깝고, POST는 CREATE에 가깝다고 보면 된다.
요청에 body 유무
- GET은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없고, POST는 body에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
멱등성 (idemptent)
- GET 요청은 멱등이며, POST는 멱등이 아니다.
- 멱등의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다. GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같을 것이다. 반대로 POST는 리소스를 새로 생성하거나 업데이트할 때 사용하기 때문에 멱등이 아니라고 볼 수 있다.
GET과 POST는 이런 차이들이 있기 때문에 사용하려는 목적을 확인한 후에 사용해야 한다. 항상 기술을 사용할 때 왜? 를 잊지 말자.
본 글은 아래 링크의 내용을 참고하여 학습한 내용을 나름대로 정리한 글임을 밝힙니다.
GET & POST