Javadocs

GET vs POST 본문

SelfStudy/CS 기술 정리

GET vs POST

Javatist 2023. 4. 14. 17:40

### 알고 있던 개념과 정확하게 알지 못한 부분에 대해서 정리하고, 

좋은 기회로 많은 피드백과 조언을 얻고 다시 한번 정리하게 되었습니다!! ###

 

0. HTTP Method

클라이언트는 인터넷 브라우저 주소창에 URL을 입력하고 서버는 클라이언트의 요청에 응답하여 웹페이지를 보여주게 됩니다. 즉, HTTP Method클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식을 말합니다.
이 때 클라이언트가 서버로 보내는 데이터를 HTTP 패킷이라 하며, HTTP 패킷은 크게 Header(헤더)와 Body(바디)로 나눠진다.
Header(헤더)에는 HTTP Method방식, 클라이언트와 브라우저, 접속하고자 하는 URL정보 등이 담겨있고,
Body(바디)는 보통 비어있으며 정보를 담아서 서버에 요청할 수 있다. 

# 주요 메소드

  • GET : 리소스 조회 - CRUD 기능에서 : R-Read(조회)
  • POST : 요청 데이터를 처리, 주로 등록에 사용 - CRUD 기능에서 : C-Create(생성)
  • PUT : 리소스를 대체(덮어쓰기)하고, 해당 리소스가 없으면 생성 - CRUD 기능에서 : U-Update(갱신)
  • PATCH : 리소스 부분 변경 - CRUD 기능에서 : U-Update(갱신)
  • DELETE : 리소스 삭제  - CRUD 기능에서 : D-Delete(삭제)

1. HTTP 메서드 - GET

GET 방식주로 서버에 데이터를 조회할 때(리소스를 조회) 사용합니다.

URL을 통해 모든 파라미터를 전달하기 때문에 주소창에 전달 값이 노출되고, *URL의 길이가 제한이 있기 때문에 전송 데이터의 양이 한정되어 있습니다. 그렇기 때문에 게시판의 게시물, 목록 조회와 같은 간단한 데이터 요청할 때 적합하다. 그리고 URL에 파라미터가 노출되기 때문에 GET방식은 중요한 정보를 다루면 안됩니다.(보안상의 문제)

* GET 요청의 길이 제한은 표준이 따로 있는 것은 아니고 브라우저마다 제한이 다르다.

GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 "쿼리스트링" 이라고 부른다.
방식은 URL 끝에 "?"를 붙이고 변수명1=값1&변수명2=값2... 형식으로 이어 붙이면 된다.

www.example.com/show?key1=value1&key2=value2


2. HTTP 메서드 - POST

 

POST 방식은 주로 서버에 데이터(리소스)를 추가, 생성할 때 사용합니다.

GET과 다르게 POST 방식의 요청은 HTTP Body에 데이터(리소스)를 포함해서 전달하고, URL에 직접적으로 파라미터가 노출되지 않고 길이 제한도 없습니다. GET에서 URL의 파라미터로 보냈던 key1=value1&key2=value2 가 Body에 담겨 보내진다고 생각하면 된다. 게시판에 게시글을 작성하는 작업 등을 할 때 사용할 수 있다.

* GET보다는 보안성이 좋지만, 데이터를 암호화하지 않으면 Body의 데이터도 결국 볼 수 있는건 똑같다.


3. 차이점

가장 중요한 멱등성(idempotent)의 차이!!

  • GET 방식의 요청은 멱등성이 보장된다. 
  • POST 방식의 요청은 멱등성이 보장되지 않는다.

# 멱등성이란??

[ 사전적 의미 ]
수학이나 전산학에서 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미합니다.

동일한 요청을 1번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 가지고, 서버의 상태도 동일하게 남을 때 해당 HTTP Method가 멱등성을 가진다고 합니다.

정리하면 서버의 상태가 멱등성이 보장되는 경우 같은 행위를 여러 번 반복하더라도 같은 효과를 가져야 한다는 것. 
멱등성이 보장되지 않으면, 같은 행위를 여러 번 반복하는 경우 요청마다 다른 효과가 발생된다고 생각하면 된다.

'SelfStudy > CS 기술 정리' 카테고리의 다른 글

#8. Rest API란?  (0) 2023.03.26
#7. @Controller 와 @RestController 차이  (0) 2023.03.25
#5. WEB과 WAS의 차이  (0) 2023.03.19
#3. MVC 패턴이란? (Model-View-Controller)  (0) 2023.03.18
Comments