도입
서버의 개발자가 사용자에게 페이지를 구상하여 보여주는 것을 SSR(Server Side Rendering)이라고 한다. 여러가지 종류가 있지만 나는 주로 Thymeleaf를 사용하여 처리한다. 이번에 공부한 내용은 동적인 웹페이지를 위해 SpringMVC에서 데이터를 넘겨주는 방법과 Response Body를 알아보겠다.
View로 데이터 넘겨주는 방법
Thymeleaf로 데이터를 넘겨주는 다양한 방법을 알아보고자 한다.
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1(){
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data","hello!");
return mav;
}
첫번째 방법으로 ModelAndView를 생성해 반환하는 방법이다.
ModelAndView는 말 그대로 모델과 View를 가지고 있는 것이다. 생성자를 활용해 객체를 만들 때 해당 View의 위치를 넣어준다.
그리고 addObject() 메소드를 활용해 model에 데이터를 넣어준다. 그러면 View에서 thymeleaf는 Model에서 데이터를 꺼내 동적인 웹페이지를 생성하게 된다.
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model){
model.addAttribute("data","hello!");
return "response/hello";
}
두번째 방법으로 String으로 해당 View의 위치를 return해주는 것이다. 위 방법이 현재 가장 이상적이고 자주 사용하는 방법이라고 한다.
Model을 파라미터로 받아 addAttribute() 메소드를 사용해 데이터를 넘겨줄 수 있다.
@RequestMapping("/response/hello")
public void responseViewV3(Model model){
model.addAttribute("data","hello!");
}
세번째 방법은 @RequestMapping에 해당 view를 넣어주는 방법이다.
Response Body (String)
다음으로 응답으로 String으로 보내는 방법을 알아보자.
@GetMapping("/response-body-string-v1")
public void responseBodyV1(HttpServletResponse response) throws IOException {
response.getWriter().write("ok");
}
첫번째 방법으로 HttpServletResponse의 getWriter()를 활용해 보내는 방식이다.
@GetMapping("/response-body-string-v2")
public ResponseEntity<String> responseBodyV2() {
return new ResponseEntity<>("ok", HttpStatus.OK);
}
두번째 방법은 ResponseEntity<>를 반환하는 방법이다. 이 때, HTTP 상태코드를 함께 넣어서 보내줄 수 있다.
그리고 반환하는 제너릭 타입에 따라 String을 보낼지 Json으로 보낼지 결정된다.
상태코드를 Condition하게 구현해야할 경우 사용하기에 좋다.
@ResponseBody
@GetMapping("/response-body-string-v3")
public String responseBodyV3(){
return "ok";
}
세번째 방법은 @ResponseBody annotation을 사용하여 반환하는 방법이다. 이 경우 반환되는 값을 그대로 body로 넘겨준다.
이때, @ResponseStatus를 사용해주면 상태코드까지 보낼 수 있다.
Response Body(Json)
마지막으로 응답을 Json으로 보내는 방법을 알아보자.
@GetMapping("/response-body-json-v1")
public ResponseEntity<HelloData> responseBodyJsonV1(){
HelloData helloData = new HelloData();
helloData.setUsername("userA");
helloData.setAge(10);
return new ResponseEntity<>(helloData, HttpStatus.OK);
}
첫번째 방법으로 ResponseEntity<>를 생성하여 해당 Json관련 객체를 생성하고 보내는 경우이다.
이 때 Return Type의 제너릭 타입이 해당되는 객체임을 알 수 있다.
@ResponseBody
@GetMapping("/response-body-json-v2")
public HelloData responseBodyJsonV2(){
HelloData helloData = new HelloData();
helloData.setUsername("userA");
helloData.setAge(10);
return helloData;
}
두번째로는 @ResponseBody를 활용하는 것이다.
그리고 해당 Json의 객체를 return하여주면 자연스럽게 Json으로 데이터를 보낼 수 있다.
배운내용
1. SSR을 위해 View로 데이터를 넘겨주는 방법
2. Response Body를 보내주는 방법
이 글은 김영한님의 'Spring MVC 1편' 강의를 공부한 후 작성한 글입니다.
'Back-end > Spring' 카테고리의 다른 글
Server Side Rendering (Thymeleaf) (0) | 2021.11.16 |
---|---|
HTTP Message Converter (2) | 2021.11.09 |
Request Body 받아오기 (0) | 2021.11.04 |
Request Parameter 가져오기 (0) | 2021.11.04 |
스프링 빈 등록방법과 사용예시 (0) | 2021.07.30 |