4월 17, 2024

GET과 POST의 차이

GET과 POST의 차이

HTTP 메서드 중 유사한 기능을 담당하는 것 중 GET과 POST가 있다. 

비슷한 기능을 담당하고 있지만 보안이 더 요구될때는 post를 쓰는 것이 더 좋은 선택이다.

 

하나씩 개념을 알아보도록 하자.

 

1. GET

클라이언트에서 서버로 정보를 요청하기 위해 사용되는 메서드이다. 위에서 보안이 더 요구될 때 post를 써야 한다고 했는데 그 이유는 GET을 통해 요청을 보내면 URL 주소 끝에 매개변수로 포함되어 전송되기 때문이다. 이러한 것을 query string이라고 부르고 대략적인 형태는 url 뒤에 ? 를 붙이고 변수명=값&변수명=값 ... 이런식으로 이어붙여지게 된다. 

 

게시판 글의 경우 GET을 쓰는 것이 가능하다. 예를 들어 아래의 URL를 살펴보자.

https://programmingstory.com/bbs/board.php?bo_table=posting&wr_id=6&page=4 


/bbs/board.php 뒤 url에 

? 가 붙고 그 다음에 bo_table (변수에 해당) = posting (값에 해당) & wr_id(변수에 해당)=6(값에 해당) &page(변수에 해당)=4(값에 해당) 

이런 형식을 보인다는 것을 알 수 있다. 

 

따라서 GET은 이렇게 URL에 다 정보가 노출되기 때문에, 중요한 정보를 다룰때 사용하면 안된다는 것을 꼭 기억해야 한다. 또한 GET 요청은 북마크될 수 있으며 브라우저 히스토리에 남는다. 또한 뒤의 POST에서 설명이 나오겠지만 업데이트도 할 수 있는 POST와는 달리 GET은 말 그대로 데이터를 요청할 때만 사용이 된다. 

GET은 URL의 매개변수에 요청하는 데이터를 담아서 보내기 때문에 HTTP 메세지에 body가 존재하지 않는다. 이 부분도 뒤에 나오게 되는 POST와의 차이점이 될 수 있다. (POST는 body에 데이터를 담아 보낸다)


2. POST

POST는 GET과 달리, 클라이언트에서 서버로 리소스를 생성하거나 업데이트를 위한 데이터를 보낼 때 사용되는 HTTP 메서드이다.

게시판의 글을 단순히 볼 때 GET이 사용되었다면, 게시물을 올라거나, 업데이트 할 때 POST가 사용된다. 웹개발을 해본 사람들은 모두 익숙하겠지만 html form을 사용하여 POST 요청을 하는 것이 일반적이다. 

 

POST는 GET과 달리 브라우저 히스토리가 남지 않으며, 북마크되지도 않는다. 또한 GET에서는 HTTP 메세지에 body가 존재하지 않았다면 POST에서는 body에 데이터를 담아서 전송한다. POST 요청을 할 때는 데이터 길이에 제한이 없어서 큰 용량의 데이터를 다룰때 주로 사용한다. 

 

보안 부분도 추가적인 작업이 필요하지만, 우선 URL에 노출되는 GET보다 안전한 방식이기 때문에 보안이 중요한 데이터의 경우 POST를 사용해야 한다.