스프링 웹 개발 기초
정적 컨텐츠
- welcome 페이지처럼 서버에서 하는 일 없이 웹브라우저에 그대로 내려 주는 컨텐츠
- 스프링부트는 정적 컨텐츠 기능을 자동 제공
- 정적 컨텐츠 동작 이미지
- 주소창에 localhost:8080/hello-static.html 입력시 웹브라우저가 주소를 톰캣 서버로 보냄
- 톰캣 서버가 hello-static를 스프링으로 보냄
- 컨트롤러쪽에서 hello-static이 있는지를 찾아봄(컨트롤러 우선순위가 높으므로 컨트롤러가 우선 찾아봄)
- 이후 리소스에서 찾아보고 있으면 반환
MVC와 템플릿 엔진
- MVC: Model, View, Controller
view는 화면을 그리는데 역량을 집중해야 함.
Controller는 비즈니스 로직과 관련, 내부적인 것을 처리하는데 집중
Model은 view와 controller를 조정하는 역할
- 최근 가장 많이 하는 방식
- 서버에서 프로그래밍해서 동적으로 보여주는 방식
- Model, View, Controller을 모두 사용(정적컨텐츠와의 차이: 서버에서 변형해서 내려주는 방식)
동작 이미지
http://localhost:8080/hello-mvc?name=spring!
?name=spring!: get방식 파라미터 추가
파라미터가 없을 경우 에러 메세지
org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'name' for method parameter type String is not present
- MVC와 템플릿 엔진 동작 방식
정적과 거의 동일하나 파라미터를 넘기는 방식이 추가
viewResolver가 hello-template.html을 찾아서 Thymeleaf 템플릿 엔진에게 처리를 넘김
API
- 안드로이드나 아이폰의 경우 서버에서 json포맷으로 클라이언트에서 정보를 전달하는 방식
- ex) 뷰, 리액트 방식, 서버끼리 통신할 경우
json 방식(key: value 형식)
@ResponseBody 사용 원리
@ResponseBody 를 사용
- 기본정책: http응답이 오면 json 방식으로 반환
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter 가 동작
- 기본 문자일 경우 처리 방법: StringHttpMessageConverter
- 기본 객체일 경우 처리 방법: MappingJackson2HttpMessageConverter
(Jackson: 객체->json변환 라이브러리)
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
MVC vs API 차이
MVC의 경우 View로 조작해서 내려줌.
API의 경우 조작 없이 그대로 내려줌.
MVC
API