목차
1. 정적 컨텐츠
2. MVC와 템플릿 엔진
3. API
1. 정적 컨텐츠
정적 컨텐츠는 웹 페이지에서 동적으로 생성되지 않고,
미리 만들어진 HTML, CSS, JavaScript 파일 등으로 이루어진 정적인 파일들을 말합니다.
이러한 파일들은 서버에서 클라이언트에 직접 전송되며,
클라이언트 측에서는 웹 페이지를 불러올 때 이 파일들을 받아와 렌더링하게 됩니다.
(서버에서 뭐하는것이 없이 웹브라우저로 바로 내려주는거 라고 이해하면 편할듯하다.)
스프링 부트에서 정적컨텐츠 요약
정적.html -> 내장 톰켓 서버 요청받음 -> 스프링에게 넘김 -> 컨테이너에서 관련 컨트롤러가 없네..?
-> 그럼 resources : static/정적.html을 찾음 -> 출력
2. MVC와 템플릿 엔진
MVC : Model, View, Controller 각자의 역할에 집중할 수 있도록 하기위함.
Controller를 조작하면 Controller는 Model을 통해 가져온 데이터 바탕으로 View를 통해 시각적으로 사용자에게 전달
@Controller
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name); //키값 name을 넣으면 name을 변수로 보내는 식
return "hello-template";
}
}
@Controller
뷰에 표시될 데이터가 있는 Model 객체를 만들고 올바른 뷰를 선택하는 일을 담당합니다.
@ResponseBody를 사용하여 HTTP Response Body에 데이터를 담아 요청을 완료할 수 있습니다.
@RequestParam
컨트롤러의 메소드 매개변수에 지정하면,
Spring은 해당 매개변수의 이름과 일치하는 요청 매개변수를 찾아서 값을 할당합니다.
@GetMapping
Spring Framework에서 제공하는 애노테이션 중 하나로, HTTP GET 요청을 처리하는 메소드
view : 화면을 그리는데 역량을 집중하는 것
resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
변수 : ${키값} 를 받는다!
실행
http://localhost:8080/hello-mvc?name=spring
간단정리
hello-mvc.html -> 내장 톰켓 서버 -> 스프링에서 Controller에 매핑(Mapping)이 있어! 확인후 호출
->return: hello-template model(name:spring)줌
->viewResolver이 templates/hello-template에 있는 return의 string 되어있는 값과 똑같은 걸 찾아서 Thymeleaf 처리요구
->Thymeleaf 엔진 처리를 하고 변환후 html를 출력
3. API
서버에서 뷰 리볼버(viewResolver)를 사용하지않고 그냥 그대로 입력
@ResponseBody를 사용
요즘엔 객체반환인경우 JSON을 내려주는 방식
문자반환인경우는 문자그대로 출력
과거에는 xml을 많이 사용했지만 무거워서 사용하지않고
최근에는 JSON 방식을 기본값으로 통일되었다.
@ResponseBody 예시
@Controller
public class HelloController {
//문자반환
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
//객체반환
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
+) 자바 GETTER SETTER (윈도우 Alt + Inser t)
(프로 퍼티 접근방식)
@ResponseBody 사용
- 문자 반환을 할경우 HTTP의 BODY에 문자 내용을 직접 반환
- 객체를 반환하면 객체가 JSON으로 변환됨
- viewResolver 대신에 HttpMessageConverter 가 동작
- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
@ResponseBody 실행 및 사용원리
http://localhost:8080/hello-string?name=spring
http://localhost:8080/hello-api?name=spring
내장 톰켓 서버에서 API를 확인 컨테이너에서 @ResponseBody 가 붙어있으면
그대로 데이터를 넘겨야 겠구나라고 인식
문자/객체를 넘기면서 httpMessageConverter 동작
단순 문자면 stringConverter가 작동
객체면 jsonConverter가 작동하여
값 그대로 웹 브라우저로 보내게 된다.
참고 :클라이언트의 HTTP Accept해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합하여
선택된다.
'3.1 Java_Backend > SpringBoot 강의정리' 카테고리의 다른 글
1-4 스프링 빈과 의존관계 (0) | 2023.05.14 |
---|---|
1-3. 회원 관리 예제 (0) | 2023.05.14 |
1-1. 프로젝트 환경설정 (Spring 프로젝트 생성 , 라이브러리, View) (0) | 2023.05.07 |
0. Spring start (JDK설치 ,IDE(Intellij) 설치 ,spring.io ) (0) | 2023.05.07 |
Inflearn-Spring 목차 (0) | 2023.05.07 |
댓글