Computer Science/인터넷

GET과 POST의 차이 (+ HTTP)

코북 2022. 1. 19. 18:25

안녕하세요 코북입니다. 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

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