정적 컨텐츠

client가 요청을 하면 내장 서버인 tomcat이 ~~이런 요청이 들어왔어!라고 하면서 스프링부트 쪽으로 넘겨준다.

그럼 제일 먼저 호출되는 것은 Controller이다. 따라서 url에 get 방식으로 요청이 들어왔을 때, 그와 mapping(@GetMapping)된 함수가 없다면 /static 폴더에서 그에 맞는 파일을 찾아서 넘겨준다.

 

MVC 템플릿 엔진

MVC: Model, View, Controller 

이전 강의에서 배웠듯이, Controller는 Model에 데이터를 담아 View(/templates)에게 쏴준다.

정적 컨텐츠를 쏴줄 때와 다른 점은 Controller가 mapping된 함수를 찾아서 model에 데이터를 넣고 viewResolver에게 이에 맞는 view를 찾아서 변환해줘라~ 라고 한다. 그럼 viewResolver는 템플릿엔진으로 처리하여 변환된 html파일을 client에 반환하여 주는 방식이다.

hello-template.html
view를 통해 반환된 화면의 소스코드

 

API

스프링에서 API 방식은 데이터를 넘겨줄 때 사용한다.

여기서 데이터란 간단한 문자열이 될 수도 있고, 객체가 될 수도 있다. 객체를 넘겨줄 때 기본 형식은 json형식이라고 한다.

이때 annotation은 @ResponseBody이다.

위 코드에서 보면 mapping이 "hello_api"로 되어있으므로 localhost:8080/hello_api(get 방식 요청) 라고 요청했을 때, Controller는 이 함수를 찾을 것이다.

이 때, @RequestParam("name") String name 이라고 해서 파라미터로 name의 값을 받아 name에 넣겠다는 뜻이다.

그럼 요청을 할 때, localhost:8080/hello_api?name=h32j00 라고 하면 name에는 h32j00가 저장된다.

그리고 코드를 보면 return 하는 값이 단순 문자열이 아닌 hello라는 객체임을 확인할 수 있다. 

이 때, Controller가 hello 객체를 보내면 viewResolver가 아닌 HttpMessageConverter(MappingJackson2HttpMessageConverter)가 동작한다. 이 converter가 객체를 json 형식으로 바꿔서 http의 body부분에 넣고 client로 보낸다.

 

@ResponseBody를 사용하여 단순 문자열을 반환했을 때의 소스코드보기 화면
json 형식으로 객체를 넘길 때