웹 개발에는 크게 세 가지 방법이 있다.
- 정적 컨텐츠
- MVC와 템플릿 엔진
- API
정적 컨텐츠
관련 컨트롤러가 존재하지 않고 단순히 해당 html 파일로 치환되어 전달된다.
static 폴더 내에 html 파일이 존재하여야 한다. resources/static/hello-static.html
MVC와 템플릿 엔진
MVC란? Model, View, Controller를 의미한다.
- View는 화면을 그리는 데에 모든 역량을 집중하여야 한다.
- Controller는 비즈니스 로직 등 내부 처리에 집중하여야 한다.
톰켓 서버로 들어오면 스프링 컨테이너는 해당 controller를 확인하고 데이터를 처리한 후 viewResolver
에게 전달하면 thymeleaf
템플릿 엔진이 처리한다.
thymeleaf
view를 구성할 때 html 파일을 thymeleaf 템플릿을 이용하여 작성한다. 이것의 장점은 파일 자체를 WAS와 같은 서버 없이 열어봐도 html 파일을 참조할 수 있다는 것이다. 이것을 natural template이라고 한다. 즉, 전체적인 마크업 구조를 흐트러 트리지 않는다.
한편, 서버를 통해 참조할 경우 controller을 통해 들어오는 데이터를 이용하여 html 파일을 수정할 수 있다.
API
@ResponseBody 문자 반환
@ResponseBody
를 사용하면 viewResolver를 사용하지 않는다.- HTTP의 BODY에 문자 내용 자체를 직접 반환한다.
- 사실 이렇게 문자 자체를 전달하는 방식은 잘 사용되지 않는다.
@ResponseBody 객체 반환
- 객체를 반환할 때는
JSON
이라는 방식을 기본 방식으로 사용한다. (key, value로 구성) - <html> </html> 이런 것을 xml 방식이라고 하는데 열고 닫고 2번 해야 하니 번거롭다. 따라서 JSON을 쓴다.
사용 원리
@ResponseBody를 사용하면 viewResolver 대신에 HttpMessageConverter가 동작한다.
- 기본 문자가 반환된다면 StringHttpMessageConverter로 처리한다.
- 기본 객체가 반환된다면 MappingJackson2HttpMessageConverter로 처리한다. (Jackson은 Json을 사용하는 라이브러리 이름이다.)
참조
인프런 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)'
타임리프 관련: https://pugyu.tistory.com/75
'Back > spring' 카테고리의 다른 글
스프링부트 프로퍼티 암호화 (with. Jasypt) (0) | 2022.03.01 |
---|---|
스프링부트 서비스 구조 (0) | 2022.02.28 |
Swagger 라이브러리 (0) | 2022.02.26 |
POST, GET, PUT, DELETE API (0) | 2022.02.21 |