맞는데 왜 틀릴까..?

Spring Boot

[Spring Boot] Spring 웹 개발 기초 (정적 컨텐츠, MVC, 템플릿 엔진, API)

안도일 2022. 9. 29. 23:29

정적 컨텐츠

 

정적 컨텐츠는 실시간으로 변경할 필요가 없는 데이터를 의미

서버에 저장해 두고 요청이 있으면 html 파일을 그대로 웹 브라우저에 반환한다. 

 

아래 예시와 같이 그냥 찍어둔 html을 저장해 두면 요청할 때마다 똑같은 결과를 보여준다.

 

 

 

실행 

 

-> http://localhost:8080/hello-static.html 

 

 

 

정적 컨텐츠 동작 로직

 

 

1. hello-static 이름을 가진 컨트롤러부터 찾음

2. 컨트롤러가 없다면  resources 안에 있는 hello-static.html을 찾은 후 반환

 

 

 


MVC와 템플릿 엔진

 

MVC : Model, View, Controller

과거 View 단에서 모든 처리를 했지만 현재는 Model, View, Controller로 기능을 쪼개 사용한다.

 

템플릿 엔진 : 특정 데이터 모델에 따른 입력 자료를 합성하여 결과를 출력하는 소프트웨어. 가져온 데이터를 미리 정의된 템플릿에 넣어 HTML 문서를 만들어 클라이언트에 전달해 주는 역할을 함. ex) Thymeleaf, Mustache

 

Controller가 GetMapping 어노테이션을 통해 get 요청을 받음 -> model을 통해  변수 등록 -> return 브라우저 전송

 

 

Controller

 

예제 1 

controller/HelloController

 

예제 2

 

 

View

 

예제 1

resources/templates/hello-template.html

 

예제 2

 

 

실행 

 

예제 1

 

localhost:8080/hello-mvc 뒤에 ?name=spring! 을 통해 parameter를 넘긴다.

 

parameter를 받은 Controller는 name을 spring!으로 받아서 Model에 담은 후 template로 넘어가서 결과를 출력함.

 

 

예제 2

 

 

MVC, 템플릿 엔진 동작 로직

 

 

1. 웹 브라우저에서 localhost:8080/hello-mvc를 내장 톰켓 서버로 넘김 

2. 내장 톰켓 서버가 spring에게 hello-mvc를 확인 후 스프링에게 넘김

3. 스프링은 helloController에 매핑된 메서드를 확인 후 return은 hello-template, model(name:spring)으로 viewResolver에게 넘김

4. viewResolver가 리턴된 hello-template와 같은 이름을 가진 templates/hello-template를 찾아서 Thymeleaf에 넘김

5. Thymeleaf는 렌더링 후 변환한 이미지를 웹 브라우저에 넘김

 

 


 

API

 

 

 

@ResponseBody 문자 반환

 

controller/HelloController

 

1. viewResolver 대신에 HttpMessageConverter가 동작

2. 리턴 값이 문자라면 StringConverter가 동작

3. HTTP body에 문자 내용을 직접 반환

 

 

실행

 

 

 

 

 

@ResponseBody 객체 반환

 

controller/HelloController

 

1. viewResolver 대신에 HttpMessageConverter가 동작

2. 리턴 값이 객체라면 JsonConverter가 객체를 Json 형태로 변환

 

 

 

실행

 

 

 

API 동작 로직

 

 

 

 

 

 

 

 

 

출처 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근기술 :김영한