Get 방식, Post 방식 in Spring

김진욱·2022년 3월 2일
0

study

목록 보기
5/6

GET / POST 어떻게 다를까?

http 요청 메서드 get 방식은 클라이언트의 요청 데이터를 url에 붙혀서 보내며
post 방식은 body에 데이터를 붙혀서 보낸다.

HTTP 구조

http의 구조는 body 와 header로 구분되어있다.

  • header
    header는 크게 세가지로 나뉜다.
    general header : 요청,응답에 대한 날짜 또는 시간 등에 대한 일반적인 정보, 전송되는 데이터와는 관련이 없는 헤더.
    request header : 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더.
    entity header : 컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤더.

  • body
    해당 요청 응답의 실제 메세지,내용

Get 방식

  • url에 쿼리스트링방식으로 데이터를 붙혀서 전송
  • 데이터 길이에 제한이 있다
  • 캐싱이 가능하다
  • url에 데이터가 노출되어 상대적으로 보안에 취약하다

Post 방식

  • body에 데이터를 담아서 보낸다
  • 헤더 필드 Content-Type 에 body에 들어갈 데이터 타입을 명시해준다
  • 데이터 길이에 제한이 없다

Get, Post in spring

- Get

@RestController
public class HomeController {

    @GetMapping(value = "/test")
    public ResponseEntity<String> getTest(NameFetch fetch) {
        return ResponseEntity.ok(fetch.getName());
    }
}


@Getter
@Setter
public class NameFetch {
    private String name;
}

이 코드에서 NameFetch 는 querystring 으로 들어올까 body 로 들어올까?
정답은 querystring 으로 들어온다
앞에 @ModelAttribute 가 생략된 것이다.

@RequestParam또한 querystring 으로 파라미터를 받는 어노테이션이며 생략이 가능하다.
스프링에서 단순 타입(String , int)등은 @RequestParam를 생략할 수 있으며, 그외의 오브젝트는 모두 @ModelAttribute를 생략 할 수 있다.

단, 파라미터로 받는 데이터는 Setter가 구현되어 있어야 한다

- Post

body로 데이터를 받고 싶을 때는 @RequestBody를 사용한다
body 데이터가 json 데이터일 때 setter가 없어도 동작한다

    @PostMapping(value = "/test2")
    public ResponseEntity<String> postTest(@RequestBody NameFetch fetch) {
        return ResponseEntity.ok(fetch.getName());
    }

- get과 body

get방식은 꼭 url 로만 데이터를 보내야 하는건가 ?

    @GetMapping(value = "/test3")
   public ResponseEntity<String> getBodyTest(@RequestBody NameFetch fetch) {
       return ResponseEntity.ok(fetch.getName());
   }

get방식도 body에 데이터를 담아 보낼 수 있다

profile
2021.12~ 공부의 기록

0개의 댓글