Web

Get과 Post의 차이점

superbono 2021. 7. 23. 21:30

https://indianpythonista.wordpress.com/2016/12/10/get-and-post-requests-using-python/

* Get

클라이언트에서 서버로 정보를 요청할 때 사용하는 http 메소드이다. 기존에 있는 정보를 요청할 때 사용되며 get 방식에서 값을 보내는 방식은 2가지 방식이 있다. 

1. https://google.com/blog?id=value&page=1  -> 스프링에서 @RequestParam

2. https://google.com/blog/value/1  -> 스프링에서 @PathVariable

1과 같은 방식은 쿼리스트링 방식이라고 한다. 2와 같은 방식은 rest api에서 주로 사용한다. 

 

Get의 특징으로는 

  • 브라우저 히스토리에 남는다.
  • 길이 제한이 있다.
  • url에 정보가 노출되기 때문에 중요한 정보를 다뤄선 안된다. 
  • 데이터를 요청할 때만 사용된다. 
  • 멱등성*을 가진다. 

 

* Post

클라이언트에서 서버로 정보를 생성하거나 업데이트하기 위해 데이터를 보낼 떄 사용되는 http 메소드이다. 회원가입을 할 때 post로 보내는 것이 대표적이다. 

post는 전송할 데이터를 http의 body에 담아서 보낸다. 따라서 @RequestBody 어노테이션이 사용 가능한 것이다. 

 

Post의 특징으로는 

  • 브라우저 히스토리에 남지 않는다.
  • 최소한의 보안을 지킬 수 있다.(body 열어보면 데이터 보이긴 하는데 그래도 get 방식처럼 파라미터로 대놓고 보여주는 방식은 아니니까...)
  • 데이터 길이의 제한이 없다. 
  • 멱등성*을 가지지 않는다. 

 

* 멱등성?

여러 번 연산을 적용하더라도 결과가 달라지지 않는 성질.

get은 이미 있는 리소스를 요청, 반환하는 것이기에 멱등성을 가지고 post는 리소스를 생성하는 것이므로 멱등성을 가지지 않는다. 예를 들어 db를 생각해보면 get 방식으로 db에 있는 정보를 요청해도 어차피 있는 정보 반환하는 것이므로 db에는 변화가 없다. select문 여러번 해도 db에 변화가 없는 것 처럼 말이다. 그러나  post 방식은 db에 데이터를 생성하는 것이므로 db에 변화가 있다. create 여러번 찍으면 db의 데이터가 늘어나고 상태가 변화하는 것처럼 말이다.

 

 

참고: https://noahlogs.tistory.com/35

https://indianpythonista.wordpress.com/2016/12/10/get-and-post-requests-using-python/

'Web' 카테고리의 다른 글

MyBatis 오류: Invalid bound statement (not found)  (0) 2021.07.30
HTTPS(HyperText Transfer Protocol Secure)  (0) 2021.07.25
Session vs Token(JWT)  (0) 2021.07.09
CORS(Cross-Origin Resource Sharing)  (0) 2021.05.20
SPA(Single Page Application)  (0) 2021.05.19