곰돌이 놀이터

[기본] GET 방식과 POST 방식의 차이 본문

기본 개발 지식

[기본] GET 방식과 POST 방식의 차이

달나라 곰돌이 2018. 7. 19. 15:19

GETPOSTHTTP 메소드중 하나로 웹서비스 개발에 주로 사용되는 메소드이다.

두가지 모두 HTTP프로토콜을 이용해서 서버에 무언가를 전달(요청)할 때 사용하는 방식이다 라는 공통점을 가지고 있지만 GET과 POST는 전달(요청)하는 데이터의 종류와 목적에 따라 명확한 차이가 있다.


GET 


GET 방식은 URL의 끝에 ?가 붙으며 서버로 요청하고자 하는 파라미터의 이름과 값을 쌍을 이루어 붙게 된다. 

또 파라미터가 여러 개일 경우에는 &로 구분하는데 다음과 같은 URL을 통해 확인 할 수 있다. 


 https://search.naver.com/search.naver?

 sm=tab_hty.top&where=nexearch&query=html+a+태그+새창


GET 방식의 특징 


■ 클라이언트가 입력한 query의 이름과 값이 결합되어 스트링 형태로 서버에 전달된다.

■ <FORM> TAG 의 METHOD 속성의 값으로 GET이 필요하다.

ex > <FORM NAME="form1" ACTION="index.jsp" METHOD="GET">

■ 한번 요청시 전송 데이터 양은 주소값+파라미터로 255자( HTTP/1.1인 경우 2048자 )로 제한된다.

■ DB에 추가로 정보를 처리하지 않고, 저장된 Data를 단순 요청(SELECT)하는 목적으로 사용된다.

■ URL에 그대로 query의 이름과 값이 같이 연결되어 표현된다.


POST 


POST 방식서버로 데이터를 전송하기 위해 설계되었기 때문에 GET과 달리 파라미터가 URL로 넘어가지 않고 HTTP 패킷의 Body에 담아서 파라미터를 전송한다. 

Body에 담아서 서버에게 요청하므로 전송하는 길이에 제한 없이 대용량 데이터를 전송하는데 적합하다. 

POST로 요청할 때, Request header의 Content-Type에 해당 데이터 타입이 표현되며, 전송하고자 하는 데이터 타입을 적어주어야 합니다. 

타입을 적어주지 않는다면 서버에서 내용이나 URI의 이름의 확장명등으로 타입을 유추하고 알 수 없는 경우에는 application/octet-stream로 처리한다. 

데이터가 Body로 전송되기 때문에 GET보다 보안적인 면에서 안전하다고 할 수 있으나, POST도 Fiddler와 같은 툴로 확인이 가능하기 때문에 반드시 암호화하여 전송하여야 한다. 


POST 방식의 특징 


 클라이언트와 서버간에 인코딩하여 서버로 전송한다.

 <FORM> TAG 의 METHOD 속성의 값으로 POST이 필요하다.

ex > <FORM NAME="form1" ACTION="index.jsp" METHOD="POST">

 한번 요청시 데이터 양은 제한이 없다.

 서버에서 DB에 추가로 정보를 가공하거나 삭제와 같은 작업을 하는 목적으로 사용된다.

 query가 body 안에 들어가 있기때문에 보안에 조금 유리함이 있다.


GET 방식과 POST 방식의 차이 


GETIdempotent, POSTNon-idempotent하게 설계되어있다. 

Idempotent(멱등)은 수학적 개념으로 다음과 같이 나타낼 수 있다.



 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번

 적용하더라도 결과가 달라지지 않는 성질

 


즉, 멱등이라는 것은 여러 번 연산을 수행하더라도 동일한 결과가 나타나야 한다.


GET이 Idempotent하도록 설계되었다는 것은 GET으로 서버에게 여러 번 요청을 하더라도 동일한 응답이 돌아와야 한다는 것을 의미하고 

반대로 POST는 Non-idempotent하기 때문에 서버에게 여러 번 요청을 한다면 응답이 항상 동일하다고 볼 수 없다.


이에 따라 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 Idempotent하기 때문에 주로 조회를 할 때에 사용된다. 

웹페이지를 열어보거나 게시글을 읽을 때 등 조회를 하는 행위는 GET으로 요청하게 된다. 

조회로 사용되어야 하는 또 다른 이유는 웹페이지를 조회할 때, 원하는 페이지로 바로 이동하거나 이동시키기 위해서는 해당 링크 정보가 필요한데 POST의 경우에는 파라미터가 HTTP패킷의 Body에 있기 때문에 링크 정보를 가져올 수 없습니다. ( 즐겨찾기하여도 해당 페이지로 이동 불가 )

GET은 URL에 파라미터를 가지고 있기 때문에 링크를 걸 때, URL에 해당 파라미터를 붙여준다면 추가적인 정보를 붙여 더 상세한 링크를 걸 수가 있다. 

POST는 서버의 상태나 데이터를 변경시킬 때 사용된다. 

게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가는 변경되도록 하기위해 사용된다.


GET과 POST는 이처럼 큰 차이가 있기 때문에 설계원칙에 따라 적절한 위치에서 사용되어야 문제가 발생하지 않을 것이다.


 참고 


https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/

http://interconnection.tistory.com/72?category=616434

Comments