[Spring & Springboot 공통] HTTP Method - POST

[Spring & Springboot 공통] HTTP Method - POST

바로 전 포스트에서 우리는 HTTP Method-GET 에 대해서 알아보았는데, Get 메서드에 대해서 모르는 독자라면 한 번 가볍게 읽고 오는 것을 추천한다.

HTTP - POST

Post 메서드는 Form을 이용하여 정보를 받을 때나 혹은 ajax의 비동기화를 할 때, 서버의 데이터를 조작하거나 검색에 사용된다. 사실 Post로 받던 Get으로 받던 동일한 역할을 수행할 수 있지만 Get만 수행할 수 있는 부분이 존재하고 또 Post만 수행할 수 있는 부분이 존재하는데, 큰 특징이라고 함은 Post방식은 URL에 파라미터가 노출되지 않고 RequestBody에 감싸져서 데이터가 전송된다.

Post Method가 주로 하는 일은?

Post나 Get이나 파라미터를 넘기는 것은 똑같은데 어떻게 다를까

이 것을 알기 위해서 Get의 특징중 URL에 파라미터를 포함시키는 특성을 알고 있어야 한다.

Post는 RequestBody에 내용물을 실어서 보낸다고 했는데, 이는 Get과 전혀 다른 방식이다. URL에 데이터가 표시되지 않아서 다른 사람에게 똑같은 URL을 주더라도 다른 정보를 표시해 줄 수 있게 되는 것이다.

URL의 길이는 고정적이어서, 데이터를 보낼 수 있는 길이가 제한적인 반면 Post의 RequestBody의 길이는 길던 짧던 제약이 존재하지 않는다.

그래서 큰 데이터를 보낼 수 있게되며, 이러한 특성 때문에 서버의 상태나 데이터를 저장하는데 주로 사용된다.

Post Method를 직접 사용해보자.

지난 Get과 마찬가지로 controller 클래스를 만들어 주자.

@RestController @RequestMapping("/api") public class TestPostController { @PostMapping("/intro") public String postMethod(@RequestBody String id){ return id + "님 환영합니다!"; } }

여기서 중요한 점이 하나 있다.

Get 에서 생각을 해보자. 우리가 파라미터를 넘겨줄 때 어떻게 했는가?

그렇다 URL에 포함시켜서 넣었지만 Post는 URL에 정보를 표현하지 못한다. 그럼 어떻게 해야할까? RequestBody를 만들어서 RequestBody에 포함시켜야하는데 그 과정이 바로 5번째 줄에 @RequestBody String id 이다.

그럼 테스트는 어떻게?

우리가 테스트를 할 때 URL에 정보를 넘겨줄 수 없으므로 개발자 도구인 API Tester를 사용한다

.

API-Tester에서 홈페이지에 들어가서 사용하면 된다.

여기서

의 경로로 리퀘스트를 날려보자.

리퀘스트를 보낼 때는 기본 형태인 JSON 타입으로 보내야 하는데, 키-값 쌍으로 연결을 시켜서

위와 같이 보내면

과 같이 200 OK가 나올 것이다.

객채 타입으로 보내보자!

아까 Get에서도 우리는 객체형식으로 보냈는데 그 소스코드를 잠시 참고하자면

@GetMapping("/getMethod") public TestUser getRequest(TestUser testUser){ return testUser; }

으로 @RequestParam 을 생략하고도 객체를 보냈는데, Post는 조금 다르다. 객체를 사용하더라도 RequestBody에 감싸서 보내야 하기 때문에 @RequestBody 어노테이션을 붙혀준다.

@PostMapping("/info") public UserInfo findInfo(@RequestBody UserInfo userInfo){ return userInfo; }

그리고 API-Tester을 사용해서 데이터를 보내보면

Request

Response

과 같이 200 OK가 나타날 것이다.

from http://wonit.tistory.com/124 by ccl(S) rewrite - 2020-03-06 03:20:47

댓글

이 블로그의 인기 게시물

2020 LCK 롤챔스 Spring 경기 재개 및 일정

데이터 바인딩 추상화 - propertyEditor

Spring Web Form