개발 무지렁이

[Spring Boot] 컨트롤러에서 정적/동적 콘텐츠를 클라이언트에 넘겨주는 방식 본문

Backend/스프링부트

[Spring Boot] 컨트롤러에서 정적/동적 콘텐츠를 클라이언트에 넘겨주는 방식

Gaejirang-e 2023. 9. 8. 20:36

𐂂 (1) 스프링부트 정적 콘텐츠 기능

정적 콘텐츠 파일을 그대로 클라이언트로 내려준다.
localhost:8080/hello-static.html과 같은 url로 접근했을 때,

hello-static와 매핑되는 컨트롤러를 찾아서 없으면,
🗂️resources/static에서 hello-static.html을 찾아서 있으면 반환한다.

매핑되는 컨트롤러가 있고, 리턴값으로 문자를 반환하면, 뷰 리졸버가 화면을 찾아서 처리한다.
(스프링부트 템플릿엔진 기본 viewName 매핑, 🗂️resources:templates/ + {viewName} + .html)

𐁍 MVC와 템플릿 엔진
Model View Controller 방식으로 쪼개고,
view를 찾아 템플릿엔진에 연결해주는 구조
(<- 뷰리졸버 역할) 템플릿엔진렌더링된 html클라이언트(웹브라우저)에 넘겨준다.

템플릿 엔진: 서버에서 렌더링한 html동적으로 바꿔서 내리는 역할 수행

𖠃 API방식 (객체 반환)
JSON이라는 데이터포맷으로 클라이언트한테 데이터를 전달하는 방식
(🧾 서버끼리 통신할 때, html을 내릴 필요가 없다.)
(🧾 리액트 or 에 데이터만 전달 할 때)

🦉 @ResponseBody
: HTTP 응답메시지의 본문(BODY)에 직접 데이터를 넣어주겠다.
(없이 문자 그대로 내려간다.)

🦔 JSON 방식
객체반환하고 @ResponseBody를 붙이면
json으로 반환하는 것이 기본이다.

📜 Controller.java

  @GetMapping("hello-api")
  @ResponseBody
  public Hello helloApi(@RequestParam("name") String name) {
      Hello hello = new Hello();
      hello.setName(name);
      return hello; //객체를 반환
  }
🕹️ 동작원리
컨트롤러에서 매핑된 메서드에 @ResponseBody 어노테이션이 붙어있으면,
viewResolver로 가는게 아닌 HttpMessageConverter로 간다.
리턴된 값단순 문자StringHttpMessageConverter가 동작하고,
문자 그 자체가 HTTP 본문에 실려 클라이언트에 내려지고,
리턴된 값객체MappingJackson2HttpMessageConverter가 동작하여
객체가 JSON으로 변환되어 HTTP 본문에 실려 클라이언트에 내려진다.

⚠️ 객체를 JSON으로 바꿔주는 라이브러리를 Jackson이라 한다.
⚠️ HTTP Accept 헤더와 컨트롤러 메서드 반환타입 정보를 조합하여, HttpMessageConverter가 선택된다.
Comments