인텔리제이에서 resources/static/hello-static.html 을 만들어 다음과 같이 코드를 넣어주고
스프링을 실행하고 웹 브라우저에 http://localhost:8080/hello-static.html 치면 body에 있는 글이 아래와 같이 그대로 띄워진다!
즉, 정적 컨텐츠는 말 그대로 변화가 없는, 넣는 그대로 화면에 띄워진다.
정적 컨텐츠의 원리는 다음과 같다.
웹 브라우저에서 hello-static.html을 치면 내장 톰캣 서버가 이 주소를 받아 스프링에게 넘겨준다. 스프링은 먼저 컨트롤러쪽에서 hello-static가 있는지 찾아본다. 그런데 hello-static 관련 컨트롤러는 없기 때문에 resources 안에있는 static을 찾아 화면에 띄워주게 된다.
MVC :
Model, View, Controller
의 약자이며 소프트웨어 디자인 패턴의 하나로, 애플리케이션의 기능을 구분하고 정돈된 개발이 가능하다.
HelloController에 hello-mvc라는 Model
을 하나 만들어준다.
templates에 hello-template.html라는 View
를 만들어준다.
여기서 잠깐!!💡
hello! empty 이 부분은 뭐지? 하는 사람이 있을 것입니다!
웹브라우저에서 서버 없이 저 경로를 들어가게되면 html 화면(여기서는 hello! empty 라는 화면을 볼 수 있습니다)을 볼 수 있고 마크업 하시는 분들이 적어놓고 볼 때 쓴다고 합니다. 딱히 없어도 되는 코드입니다.
http://localhost:8080/hello-mvc 스프링을 실행하게 되면 Error Page를 띄우며 에러가 발생할 것이다. 스프링 로그를 살펴보면 다음과 같이 뜬다.
이를 해결하기 위해 주소창에 http://localhost:8080/hello-mvc?name=SpringBoot 를 치게되면 다음과 같이 뜬다.
여기서 hello-mvc 뒤에 ?name=Springboot
는 name에 원하는 값을 넣어주면 된다.
즉, ?name=원하는값 을 넣어주면 된다.(ex. ?name=아무거나 ⇒ hello 아무거나 라고 띄워짐)
value = "name"
으로 해주고 String 으로 name으로 해줬기 때문에 String값을 넣어주게 되면 오른쪽 템플릿 엔진으로 name이 자신이 넣은 값으로 치환하게 된다.작동 원리를 간단하게 표현하자면, 웹브라우저에 hello-mvc를 요청을 보내면 톰캣 서버가 hello-mvc가 왔다는 것을 스프링에 알려준다. 스프링은 helloController에 hello-mvc가 mapping이 되있는 것을 알아내 hello-template을 리턴해줍니다. viewResolver가 리턴된 hello-template의 view를 찾아주고 템플릿에 연결시켜주고 렌더링하여 HTML을 변환 후 웹브라우저에 보낸다.
요즘은 JSON 방식으로 반환 하는 것이 디폴트 값이다.
JSON이란? 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 데이터 교환 방식이며,
Key-Value로 이루어져 있다.
실행 : http://localhost:8080/hello-api?name=spring
ResponseBody 어노테이션을 해줬기 때문에 View 없이 바로 name=spring으로 치면 위와 같은 Json 형식으로 결과를 나타낸다.
@ResponseBody
가 오면 hello라는 객체를 반환하여 HttpMessageconverter
가 동작을 하게 된다.
단순 문자라면 StringConverer
가 동작하고, 객체라면 JsonConverter
가 동작합니다. 여기서는 객체이기 때문에 JsonConverter
가 동작이 되어 {name:spring} Json 방식으로 바꿔 웹브라우저에 보내준다.
@ResponseBody 를 사용
HTTP의 BODY에 문자 내용을 직접 반환
viewResolver 대신에 HttpMessageConverter 가 동작 (View가 필요가 없음)
기본 문자처리: StringHttpMessageConverter
기본 객체처리: MappingJackson2HttpMessageConverter
(Gson도 있지만 스프링은 기본적으로 Jackson이 탑재가 되있음)
byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음.