본 포스팅은 김영한 님의 스프링 입문강의 섹션 2를 듣고 요약한 내용입니다.
정적 컨텐츠
resources/static 안에 html을 생성한 뒤 서버에서 접속하면 html 내용이 그대로 뜹니다.
웹 브라우저에서 localhost:8080/hello-static.html로 http 요청을 보내면, 내장 톰켓 서버에서 요청을 받은 후 스프링 컨테이너로 가서 hello-static 관련 컨트롤러가 존재하는지 검색합니다. 찾지 못했다면, resources 아래에 hello-static.html이 있는지 찾고 찾았다면 hello-static.html을 보내줍니다. (스프링 컨테이너의 컨트롤러가 우선순위를 가집니다. )
MVC와 템플릿 엔진
MVC : Model, View, Controller의 약자입니다.
Controller : 비즈니스 로직, 서버 관련 된 모든것들을 처리
Model : Controller에서 처리한 것들을 담아서 화면으로 넘겨줌
view : 화면을 그리는 것과 관련된 것만 처리
템플릿 엔진이란? 강의에서는 html을 변경해주는 것이라고 합니다. 추후 이것에 대해 포스팅을 작성하겠습니다.
controller에 위와 같은 코드를 추가한 뒤, http://localhost:8080/hello-mvc?name=spring! 을 실행해 보면,
잘 뜨는 것을 확인할 수 있습니다. hello-mvc뒤에 name=spring! 을 입력해 주는 이유는 get방식으로 받고있기 때문입니다.
코드를 살펴보면, 파라미터로 spring!을 받은 후 모델에 spring!을 넣고 hello-template를 반환하는 구조입니다.
hello-template를 보면, name이 spring!으로 치환돼서 화면에 출력됩니다.
API
ResponseBody : http의 응답 body부분에 이 데이터를 직접 넣겠다는 의미
view 같은 것이 없고 데이터만 내려간다는 특징이 있습니다.
controller에 위와 같은 코드를 추가해 주고 실행해 보면,
mvc로 실행시킬 때와 같은 결과가 나옵니다. 과연 같을까요? 소스를 봐봅시다.
html 코드가 하나도 없이 데이터만 있는 것을 알 수 있습니다. 이제 다른 방식으로 json을 return 해보겠습니다.
결과가 잘 나오는 것을 확인할 수 있습니다. 그림을 보면서 ResponseBody의 원리를 알아보겠습니다.
@ResponseBody를 사용할 경우, spring은 return이 객체일 경우 HttpMessageConverter를 작동시켜서 객체를 json스타일로 변경한 후 웹 브라우저에 넘겨줍니다.
기존의 viewResolver 대신에, 객체일 경우 HttpMessageConverter 가 동작한다는 점이 다르고, 문자StringHttpMessageConverter로, 객체는 MappingJackson2HttpMessageConverter로 처리합니다.
tip) intellij -> cmd + shift + enter 누르면 자동완성