정적 컨텐츠는 정적인 상태의 파일 그대로 웹 서버가 웹브라우저로 응답을 주는 것으로, 어떠한 프로그래밍없이 파일 그대로 반환한다는 점이다.
웹 브라우저에서 내장 톰켓 서버에 hello-static.html
요청 시, 스프링 컨테이너에서 맵핑된 컨트롤러를 우선적으로 탐색한다.
탐색된 결과가 없으면 내부에 있는 resources/static
에서 탐색 후, 해당 결과값을 반환하는 환경이다.
여기서 말하는 MVC는 Model, View, Controller의 약자로, 요즘 많이 사용되고 있는 개발 방식이다.
웹 브라우저에서 내장되어있는 톰켓 서버를 거쳐, 맵핑되어 있는 메소드를 호출한다. 호출된 메서드의 반환되는 값을 따라 viewResolver
동작한다.
이 때, viewResolver
는 템플릿 엔진이 렌더링을 해서 변환을 한 HTML을 웹브라우저에 반환하도록 요청하게 된다
<html xmlns:th="http://www.thymeleaf.org"> <body> <p th:text="'hello ' + ${name}">hello! empty</p> </body></html>
템플릿 엔진을 사용할 경우,
hello! empty
의 부분이'hello ' + ${name}
으로 치환
보통 API 방식을 사용하게 되면 @ResponseBody
어노테이션을 사용하며, 크게 문자 반환하는 경우와 객체를 반환하는 경우가 있다.
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
HTTP의 Body에 문자 내용을 직접 반환한다.
@ResponseBody
를 사용하면ViewResolver
를 사용하지 않는다.
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
public class Hello {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
API 방식에서 객체는 JSON
형식으로 반환하게 된다.
전에는 XML 방식으로 사용되었지만, 현재는 키/값의 쌍으로 구성되어 있는 JSON
형식으로 쓰인다.
또한, Getter/Setter
의 메소드를 생성된 것을 'JavaBean 규약'이라 한다.
Java Bean 규약에 성립요건
- 1) 패키지화
- 2) 기본생성자 존재
- 3) 멤버변수의 접근자 Private
- 4) getter/setter 메소드
또한, 프로퍼티 접근 방식이라 부르기도 한다.
API 방식의 동작 환경을 살펴보면 ViewResolver
를 사용하지 않는다는 점이다.
ViewResolver
대신 HttpMessageConverter
가 동작한다.
StringConverter
JsonConverter
📌 본 포스트는 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 통해 학습한 내용을 요약 및 정리한 것입니다.