본문 바로가기
자바웹프로그래밍/HTTP

면접질문. get 과 post의 차이?

by 디찌s 2022. 3. 4.
728x90
반응형

*도움이 되셨다면 광고 한번 클릭해주세요! 제게 큰 힘이됩니다!

 

이번 면접에 볼때 get과 post의 차이에 대해 질문을 하였다.

 

질문을 듣자 마자. 아차 하였고, 한번도 생각해본적없던 문제였다.

 

결국 어버버어버버 하여 답변을 제대로 하지못하였다. 정말 가고싶은 회사였는데.. 안타깝네..

 

그래도.. 경험이라 생각하고 다음에 저 질문을 받았을때 멋지게 답변하기 위해

 

get 과 post의 차이점을 정리하고 가볼려고 한다.

 

 

GET

HTTP/1.1 스펙인 GET은 서버로부터 정보를 조회하기 위한 메소드이다.

GET은 요청할때 필요한 데이터를 Body에 담지않고, 쿼리스트링을 통해 전송한다.

 

예제) www.example.com/resources?name1=value1&name2=value2 

 

또한 GET은 불피요한 요청을 제한하기 위해 요청이 캐시될 수 있다. 가령 js,css,이미지 같은 정적 컨텐츠는 데이터 양이 크고 변경될 일이 적어서 반복해서 동일한 요청을 보낼 필요가 없다. 그래서 정적 컨텐츠를 요청하고 나면 브라우저에서는 요청을 캐시해두고, 동일한 요청이 발생할 때 서버로 요청을 보내지않고 캐시된 데이터를 사용한다. 

 

 

POST

POST는 리소스를 생성/변경하기 위해 설계되었기 때문에 GET과 달리 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송한다. HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있다. 그래서 POST요청은 GET과 달리 대용량 데이터를 전송할수있다. 또한 POST로 요청을 보낼땐 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야한다. 데이터 타입을 표시 하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추합니다. 만약, 알 수 없는 경우에는 application/octet-stream으로 처리한다.

 

GET과 POST 차이

 

GET은 Idempotent, POST는 Non-idempotent하게 설겨되어있다.

 

Idempotent(멱등)은 수학이나 전산학에서 연산의 한 설징을 나타내는 것으로, 연상을 여러 번 적용하더라도 결과가 달라지지 않는 성질이다.

 

GET은 Idempotent(멱등)하도록 설계되었다는 것은 GET으로 서버에게 동일한 요청을 여러번 전송하더라도 동일한 응답이 돌아와야 한다는것을 의미한다. 이에 따라 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 Idempotent 하기 때문에 주로 조회를 할 때에 사용해야한다. 예를들어, 브라우저에서 웹페이지를 열여보거나 게시글을 읽는 등 조회를 하는 행위는 GET으로 요청하게 된다.

 

반대로 POST는 Non-dempotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답이 항상 다를수 있다. 

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

 


참고

728x90
반응형

댓글