Just Do IT!
Http method 중 GET과 POST의 차이 본문
지난 면접을 복기하다가, GET과 POST의 차이점이 무엇인지 물어보는 질문을 받았던 게 생각나서 블로그에도 올려본다.
백엔드와 협업을 하면서 http method에 대해 더 공부를 해야 했는데, 정리하는 계기가 될 것 같다.
HTTP란?
웹상에서 클라이언트와 서버 간에 요청/응답으로 데이터를 주고 받을 수 있는 프로토콜이다.
클라이언트가 HTTP 프로토콜을 통해 서버에게 요청을 보내면 서버는 요청에 맞는 응답을 클라이언트에게 전송한다.
이 때, HTTP 요청에 포함되는 HTTP 메소드는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 사용한다.
(더 알아보기: https://www.w3schools.com/tags/ref_httpmethods.asp)
여러 method가 있지만 그 중 GET과 POST의 차이점에 대해서 알아보자.
GET
- 서버로부터 정보를 조회하기 위해 설계된 메소드
- 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송
- URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 쿼리스트링이라고 부른다
- 만약, 요청 파라미터가 여러 개이면 &로 연결할 수 있다.
- 쿼리스트링을 사용하게 되면 URL에 조회 조건을 표시하기 때문에 특정 페이지를 링크하거나 북마크할 수 있다
www.example-url.com/resources?name1=value1&name2=value2
여기서 요청 파라미터는 name1, name2이고 각각의 파라미터는 value1, value2라는 값으로 서버에 요청 된다.
- 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다
- js, css, 이미지 같은 정적 컨텐츠는 데이터양이 크고, 변경될 일이 적어서 반복해서 동일한 요청을 보낼 필요가 없다
- 정적 컨텐츠를 요청하고 나면 브라우저에서는 요청을 캐시해두고, 동일한 요청이 발생할 때 서버로 요청을 보내지 않고 캐시된 데이터를 사용한다.
POST
- 리소스를 생성/변경하기 위해 설계된 메소드
- 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송
- HTTP 메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있다 (대용량 데이터 전송 가능)
- POST 요청도 크롬 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 한다
- 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 한다
- 데이터 타입을 표시하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추한다.
GET과 POST의 차이점
둘의 차이점을 간단하게 표로 나타내면 아래와 같다.
GET | POST | |
캐시 | O | X |
브라우저 기록 | O | X |
북마크 추가 | O | X |
데이터 길이 제한 | O | X |
HTTP 응답 코드 | 200 (Ok) | 201 (Created) |
사용하는 경우? | 리소스 요청 | 리소스 생성 |
리소스 전달 방식 | 쿼리스트링 | Http Body |
idempotent | O | X |
idempotent란?
수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
(출처: https://ko.wikipedia.org/wiki/%EB%A9%B1%EB%93%B1%EB%B2%95%EC%B9%99)
즉, 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야 한다는 의미이다.
GET은 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 하므로 주로 조회에 사용된다.
예를 들어, 게시판에서 전체 리스트를 조회하거나 게시글을 읽을 때 사용한다.
반면에 POST는 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.
그래서 서버의 상태나 데이터를 변경시킬 때 사용한다. 주로 글 작성을 할 때 사용한다.
생성, 수정, 삭제에도 사용할 수 있지만 PUT 또는 PATCH, DELETE 메소드를 사용하는 게 더 적합하다
이렇게 한 번 정리하니까 나름대로 머리에 잘 들어오는 기분이다.
요즘 프로젝트랑 이것저것 때문에 정신 없었는데 밀린 걸 느리더라도 꼭 정리해봐야겠다는 생각을 한다.
'CS 정리' 카테고리의 다른 글
Redis란 무엇인가? (4) | 2024.11.07 |
---|---|
브라우저 저장소의 차이점 (local storage, session storage, cookie) (0) | 2023.03.31 |
캐시(Cache)의 장단점 (0) | 2023.03.29 |
프레임워크(Framework)와 라이브러리(Library)의 차이 (0) | 2023.03.29 |
[네트워크] REST / REST API / RESTful 이란? (0) | 2023.03.27 |