서버에서 응답 데이터를 만드는 방법은 크게 3가지이다
- 정적 리소스: 정적인 HTML, css, js를 제공해서 응답하는 것
- 뷰 템플릿: 동적인 HTML을 제공할 때는 뷰 템플릿을 사용
- HTTP 메시지 사용: HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다.
정적 리소스로 응답
스프링 부트는 클래스패스의 다음 디렉토리에 있는 정적 리소스를 제공한다.
/static, /public, /resources, /META-INF/resources
src/main/resources 는 리소스를 보관하는 곳이고, 또 클래스패스의 시작 경로이다.
따라서 다음 디렉토리에 리소스를 넣어두면 스프링 부트가 정적 리소스로 서비스를 제공한다.
정적 리소스 경로
src/main/resources/static 이 경로에 파일이 들어있으면 (hello.html이 있다고 가정) 웹 브라우저에서 http://localhost:8080/basic/hello.html 로 실행하면 리소스를 해당 파일을 띄어준다.
뷰 템플릿
뷰 템플릿을 거쳐서 html이 생성되고, 뷰가 응답을 만들어서 전달한다.
일반적으로 html을 동적으로 생성하는 용도로 사용한다.
스프링 부트는 기본 뷰 템플릿 경로를 제공한다.
src/main/resources/templates
뷰 템플릿을 호출하하는 컨트롤러
String을 return하는경우
@ResponseBody가 없으면 뷰 리졸버가 실행되서 response/hello 뷰를 찾고 렌더링
@ResponseBody가 있으면 뷰 리졸버를 실행하지 않고, HTTP 메시지 바디에 직접 response/hello라는 문자가 입력
void를 반환하는 경우
@Controller를 사용하고, HTTP 메시지 바디를 처리하는 파라미터가 없으면 요청 url을 참고해서 논리 뷰이름으로 사용한다.
요청 url: /response/hello
실행: templates/response/hello.html
명시성이 너무 떨어지고 딱 맞는 경우가 많이 없어서 권장하지 않는 방법이다. 되도록이면 사용하지 말자
HTTP 메시지
@ResponseBody, HttpEntity를 사용하면, 뷰 템플릿을 사용하는 것이 아니라, http메시지 바디에 직접 응답 데이터를 출력할 수 있다.
'Spring > Spring MVC' 카테고리의 다른 글
[Spring Boot] WAS를 사용하면 WS는 필요없다? (0) | 2024.10.06 |
---|---|
HTTP 응답 - HTTP API, 메시지 바디에 직접 입력 (1) | 2023.10.05 |
요청 매핑 (API), HTTP 헤더 조회, 요청 (0) | 2023.10.05 |
HTTP 요청 메시지 - 텍스트, JSON (1) | 2023.10.05 |
HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form (0) | 2023.10.05 |