오늘은 몰랐으면 내일은 알면 된다
[Spring 입문] 4. 정적 컨텐츠, MVC와 템플릿 엔진, API 본문
자세한건 추후 MVC 강의를 들을 때 정리하도록 하고, 지금은 개괄적인 것만 이해하도록 해보자.
<정적 컨텐츠>
정적 컨텐츠는 말 그대로 '정적' 인 컨텐츠를 의미하는데, 단순히 html 파일을 제공한다는 뜻이다.

1. 톰캣이 요청을 받아서 스프링에 넘겨주면, 해당 컨트롤러가 있는지 먼저 확인한다.
2. 해당되는 컨트롤러가 없는 경우, resource에서 찾아서 해당 파일을 넘긴다.
<MVC와 템플릿 엔진>
MVC: Model, View, Controller 의 줄임말이다.
화면은 화면을 표시하는 역할에 충실해야한다. 그리고 서버쪽은 비스니스 로직을 처리하고 데이터를 주고받는 역할에 충실해야한다. 즉 각각이 자신의 역할 하나에 집중되어야 한다는 뜻이다.
먼저 간단한 view 와 컨트롤러를 작성해보자.
아래는 name 이라는 매개변수를 model에 담아 view로 보내는 컨트롤러이다.
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
view는 날아온 데이터를 표시해주도록 만든다.
templates 폴더 안에 만들어야 한다.
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>


1.hello-mvc라는 주소로 요청을 보내면 톰캣서버를 거쳐 spring으로 전달된다.
2.helloController 에서 해당 요청에 매핑되는 메서드가 동작한다.
3.viewResolver 가 templates 에서 리턴된 string 과 맞는 html 을 변환한다.
4.변환된 html이 반환된다.
<API>
mvc 패턴이 템플릿, html 변환과 관련이 있다면, API는 데이터 전송과 관련이 있다고 하겠다.
먼저 간단한 컨트롤러를 만든다.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
이때, ResponseBody는 응답 http body 부분에 해당 데이터를 바로 넣어주겠다는 뜻이라고 한다.
이렇게 되면 hello-string으로 요청을 보냈을 때 return 뒤의 hello + name 문자열이 전달된다.

페이지의 소스를 보면 정말로 덜렁 문자열만 전달되었다는 것을 확인할 수 있다.

객체를 보내면 어떻게 될까? JSON이 반환된다. name 이 key 이고, 전달받은 매개변수가 value로 들어갔다.

@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;
}
}

@ResponseBody 붙어있는 상태에서 객체를 보냈기 때문에 디폴트값인 json 값으로 만들어서 http의 body에 직접 반환한다.
기본 문자처리: StringHttpMessageConverter
기본 객체처리: MappingJackson2HttpMessageConverter
byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
Http Accept 헤더에서 xml을 요청한다든지.. 특정 데이터 형식 조건이 달려있는 경우에는 해당 데이터 형식에 맞는 converter가 동작하여 처리한다.
'Java > Spring' 카테고리의 다른 글
| [Spring 입문] 6. 회원관리 예제(2) 회원 도메인과 리포지토리 만들기 (0) | 2022.09.20 |
|---|---|
| [Spring 입문] 5. 회원관리 예제(1) 비즈니스 요구사항 정리 (0) | 2022.09.19 |
| [Spring 입문] 3. View 환경설정 (0) | 2022.09.19 |
| [Spring 입문] 2. 라이브러리 살펴보기 (0) | 2022.09.19 |
| [Spring 입문] 1. 프로젝트 생성(및 IntelliJ JDK 버전 변경) (0) | 2022.09.19 |