🌱
웹 브라우저에서 localhost:8080/hello-static.html을 입력하면 가장 먼저 내장 톰켓 서버가 요청을 받는다. 그 다음에 스프링 컨테이너에서 /hello-static에 해당하는 컨트롤러를 찾는다. 이유는 controller가 우선순위를 가지기 때문이다. 컨트롤러에 해당 매핑이 존재하지 않는다면 그다음에 resources 안에서 찾는다. resources:static/hello-static.html이 존재하므로 반환된다.
MVC : Model, View, Controller 관심사, 역할과 책임을 분리해 코드를 작성해야 한다. Model과 Controller는 비즈니스 로직과 관련있거나 내부적 처리에 포커스를 해야하고, view는 화면을 그리는데에 포커스를 주어야한다.
🌱
@RequestParam은 외부에서 파라미터를 받을 때 사용한다. url를 작성할 때는 'localhost:8080/hello-mvc?name=spring!' 처럼 파라미터까지 함께 작성해야 한다. 그러면 name 변수에 spring!이 대입되고, 모델로 감싸져서 return 된다.
🌱
여기서의 ${name}에 spring! 값이 대입되는 것이다.
🌱
웹 브라우저에서 localhost:8080/hello-mvc를 입력하면 가장 먼저 내장 톰켓 서버가 이를 받는다. 그리고 스프링 컨테이너에서 hello-mvc를 찾는다. helloController에 hello-mvc가 mapping되어 있으므로 해당 메서드를 호출하고, 파라미터를 model에 담는다. hello-template를 return 하면 viewResolver가 뷰를 찾아주고 템플릿 엔진에 연결해준다. 템플릿 엔진이 렌더링을 해서 변환이 된 HTML을 웹 브라우저에 반환해 준다.
🌱
@ResponseBody : http 바디부에 이 데이터를 직접 넣어주겠다는 의미이다.
url에 작성한 파라미터가 name 변수에 들어가고 "hello " 문자열과 합쳐져서 요청한 client에 그대로 반환된다.
🌱
@ResponseBody를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됨
🌱
웹 브라우저에서 localhost:8080/hello-api를 입력하면 먼저 내장 톰켓 서버가 받게되고, 스프링 컨테이너에서 /hello-api를 찾는다. 그런데 @ResponseBody가 있기 때문에 만약 반환할 값이 '문자'라면 HTTP 응답에 데이터를 그대로 넘기고 '객체'라면 JSON 방식으로 데이터를 만들어서 HTTP 응답에 반환한다.
HttpMessageConverter가 동작하는데, 문자인 경우에는 StringConverter가 동작하고, 객체인 경우에는 JsonConverter가 동작한다. 객체인 경에는 JSON으로 변환하고 요청한 웹 브라우저나 서버에게 보낸다.
@ResponseBody를 사용