Get과 Post는 http method 중 가장 많이 쓰이는 것들이다. 그러면 이 두 개의 차이점은 무엇일까?.?
[Http Method]
Http Method 는 클라이언트가 서버에 요청의 목적 및 종류를 알리는 수단이다. Http Method의 종류에는 GET, POST, PUT, DELETE 등이 있다. 보통 Get 은 주로 서버에서 데이터를 조회 (CRUD 중 Read) 하는 데 사용되고 Post는 서버에 데이터를 생성(CRUD 중 C) 할 때 주로 사용된다.
[GET]
GET method는 클라이언트 쪽에서 서버로 리소스 정보를 요청하기 위해 사용되는 메서드이다. 즉, 데이터를 읽거나 검색할 때에 사용되고 수정할 때는 사용하지 않는다. GET은 요청을 전송할 때 필요한 데이터를 Body에 담지 않고, 쿼리스트링을 통해 전송한다.
https://henniee.tistory.com/276
[Get Method 특징]
- GET은 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있다.
더보기이 말은 웹 브라우저나 웹 서버가 이전에 수행된 GET 요청의 응답을 저장하고, 나중에 동일한 요청이 다시 발생할 때 이 캐시를 사용하여 서버에 새로운 요청을 보내지 않는다는 것을 의미한다. 이것으로 웹 성능을 향상하고 네트워크 트래픽을 줄이는 데 도움이 되며 불필요한 요청과 데이터 전송을 줄여 웹 페이지 로딩 시간을 단축하고 사용자 경험을 향상할 수 있다.
- GET 요청 파라미너에 내용이 노출됨으로 민감한 데이터를 다룰 때는 사용하면 안 된다.
- Get 요청은 성공시, 200(Ok) HTTP 응답 코드를 XML, JSON뿐만 아니라 여러 형식의 데이터(html, txt)와 함께 반환한다.
- GET 요청은 idempotent 하다.
더보기같은 요청을 여러 번 보내더라도 그 결과가 항상 동일하게 유지된다는 의미이다. 즉, GET 요청은 서버의 상태나 데이터에 영향을 미치지 않으며, 여러 번 반복되어도 항상 같은 응답을 반환한다. 이는 POST 방식과 확연히 반대되는 개념이라고 할 수 있다.
[POST]
POST는 리소스를 생성/변경하기 위해 설계되었다. 따라서 전송해야될 데이터를 HTTP 메시지의 Body에 담아서 전송한다. POST로 요청을 보낼 때는 요청 헤더의 Content-Type에 요청 데이터의 타입을 표시해야 한다. Content-Type의 종류로는 application/x-www-form-urlencoded, text/plain, multipart/form-data 등이 있다. 데이터 타입을 표시하지 않으면 서버는 내용이나 URL에 포함된 리소스의 확장자명 등으로 데이터 타입을 유추한다. 만약, 알 수 없는 경우엔 application/octet-stream로 요청을 처리하면 된다.
[Post Method 특징]
- POST 요청은 캐시되지 않는다.
더보기POST 요청이 서버의 상태를 변경하거나 데이터를 업로드하는 용도로 사용되기 때문에, 이전의 POST 요청과 동일한 요청을 반복하여 보낼 경우 불필요한 부작용을 초래할 수 있기 때문이다.
- Post 요청 중 자원 생성은 201(Created) HTTP 응답 코드를 반환한다.
더보기HTTP 응답 코드 201 Created는 POST 요청을 통해 새로운 리소스가 성공적으로 생성되었음을 나타내는 상태 코드로 주로 RESTful 웹 서비스에서 자원을 생성하는 데 사용된다.
[GET vs POST]
- 사용목적 : GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다. CRUD에 적용하면 GET은 Read에 가깝고, POST는 Create에 가깝다.
- 요청에 body 유무 : GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다. POST 는 body에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
- 멱등성 (idempotent) : GET 요청은 멱등이며, POST는 멱등이 아니다. 멱등의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
'spring 스프링' 카테고리의 다른 글
SpringAI 로 OpenAI 의 ChatGPT 만들기 _ 01 (기초세팅) (0) | 2024.07.25 |
---|---|
이클립스에 스프링 설치하고 스프링부트 프로젝트 생성 (0) | 2024.07.19 |
@Annotation 스프링 자주 사용하는 어노테이션 정리 (0) | 2023.08.23 |
스프링 빈(Spring Bean)이란? (0) | 2023.08.21 |
제어의 역전 (IOC, Inversion Of Control) (0) | 2023.08.20 |