웹 개발에는 크게 세 가지 방법이 있다.

  • 정적 컨텐츠
  • 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
squareyun