본문 바로가기
JAVA Spring

스프링 MVC - HTTP 응답 3가지 방법

by ppirae 2022. 4. 13.

HTTP 응답

 

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

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

1. 정적 리소스

스프링 부트는 클래스패스의 다음 디렉토리에 있는 정적 리소스를 제공한다.

/static , /public , /resources , /META-INF/resources

 

2. 뷰 템플릿

뷰 템플릿을 거쳐서 HTML이 생성되고, 뷰가 응답을 만들어서 전달한다.

일반적으로 HTML을 동적으로 생성하는 용도로 사용하지만, 다른 것들도 가능하다. 뷰 템플릿이 만들 수 있는 것이라면 뭐든지 가능하다. 스프링 부트는 기본 뷰 템플릿 경로를 제공한다.

 

뷰 템플릿 경로

src/main/resources/templates

 

ResponseViewController - 뷰 템플릿을 호출하는 컨트롤러

  • String을 반환하는 경우 - View or HTTP 메시지
  • Void를 반환하는 경우 (이 방식은 명시성이 너무 떨어지고 이렇게 딱 맞는 경우도 많이 없어서, 권장하지 않는다.)
  • HTTP 메시지 @ResponseBody , HttpEntity 를 사용하면, 뷰 템플릿을 사용하는 것이 아니라, HTTP 메시지 바디에 직접 응답 데이터를 출력할 수 있다.

3. HTTP API, 메시지 바디에 직접 입력

ResponseBodyController 의 안에

  • responseBodyV1
    • response.getWriter().write("ok")
  • responseBodyV2
    • ResponseEntity 는 여기에 더해서 HTTP 응답 코드를 설정할 수 있다.
  • responseBodyV3
    • @ResponseBody 를 사용하면 view를 사용하지 않고, HTTP 메시지 컨버터를 통해서 HTTP 메시지를 직접 입력할 수 있다.
  • responseBodyJsonV1
    • ResponseEntity 를 반환한다.
  • responseBodyJsonV2
    • @ResponseStatus(HttpStatus.OK) 애노테이션을 사용하면 응답 코드도 설정할 수 있다.
  • @RestController
    • @Controller 대신에 @RestController 애노테이션을 사용하면, 해당 컨트롤러에 모두 @ResponseBody 가 적용되는 효과가 있다. 따라서 뷰 템플릿을 사용하는 것이 아니라, HTTP 메시지 바디에 직접 데이터를 입력한다.
    • 이름 그대로 Rest API(HTTP API)를 만들 때 사용하는 컨트롤러이다. (@Controller + @ResponseBody)

인프런 김영한님의 스프링 MVC 1편을 듣고 작성한 글입니다.

https://inf.run/obkz

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -

www.inflearn.com

 

댓글