스프링 MVC 1편 -벡엔드 웹 개발 핵심 기술 (7)

bin1225·2021년 9월 27일
0

Spring

목록 보기
7/15
post-thumbnail

HTTP 응답 - 정적 리소스, 뷰 템플릿

스프링(서버)에서 응답 데이터를 만드는 방법은 크게 3가지이다.

  1. 정적 리소스
    예) 웹 브라우저에 정적인 HTML, css, js을 제공할 때는, 정적 리소스를 사용한다.
  2. 뷰 템플릿 사용
    예) 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다.
  3. HTTP 메시지 사용
    HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다.
  • 정적 리소스

    정적 리소스는 말그대로 해당 파일을 변경 없이 그대로 제공하는 것이다.
    - 정적 리소스 경로: src/main/resources/static
    다음 경로에 파일이 들어있으면
    src/main/resources/static/basic/hello-form.html
    웹 브라우저에서 다음과 같이 실행하면 된다.
    http://localhost:8080/basic/hello-form.html

  • 뷰 템플릿

    - 뷰 템플릿 경로:src/main/resources/templates
    String을 반환하는 경우 - View or HTTP 메시지
    @ResponseBody 가 없으면 response/hello 로 뷰 리졸버가 실행되어서 뷰를 찾고, 렌더링 한다.
    @ResponseBody 가 있으면 뷰 리졸버를 실행하지 않고, HTTP 메시지 바디에 직접 response/hello 라는 문자가 입력된다.

  • HTTP 응답 - HTTP API, 메시지 바디에 직접 입력

1. ResponseEntity

@GetMapping("/response-body-json-v1")
 public ResponseEntity<HelloData> responseBodyJsonV1() {
 	HelloData helloData = new HelloData();
 	helloData.setUsername("userA");
 	helloData.setAge(20);
 	return new ResponseEntity<>(helloData, HttpStatus.OK);
 }

ResponseEntity 를 사용하면 HTTP응답 코드를 설정하는데 용이하다.

2.@ResponseBody

 @ResponseStatus(HttpStatus.OK)
 @ResponseBody
 @GetMapping("/response-body-json-v2")
 public HelloData responseBodyJsonV2() {
 HelloData helloData = new HelloData();
 helloData.setUsername("userA");
 helloData.setAge(20);
 return helloData;
 }
}

@ResponseBody도 애노테이션을 이용해 응답코드를 설정할 수 있지만, 조건에 따라 응답 코드를 동적으로 변경할 수 없다.

HTTP 메시지 컨버터

HTTP API처럼 JSON 데이터를 HTTP 메시지
바디에서 직접 읽거나 쓰는 경우 HTTP 메시지 컨버터를 사용하면 편리하다.

- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있다.

0개의 댓글