웹 개발에는 세가지 방식이 있다.
- 정적 컨텐츠
- MVC와 템플릿 엔진
- API
정적 컨텐츠는 파일을 그대로 웹브라우저에 전달해주는 방식
MVC와 템플릿 엔진은 서버에서 변형해서 html로 바꿔서 전달해주는 방식
API는 JSON이라는 데이터 포맷으로 클라이언트한테 데이터를 전달해주는 방식
정적 컨텐츠
스프링 부트는 정적 컨텐츠를 기본으로 제공해줌.
resources 파일에
<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>
static-hello.html 파일을 생성하고 실행하면
다음과 같이 바로 웹이 실행된다.
정적 컨텐츠의 실행방식은 간단하게
처럼 표현될 수 있다.
웹 에서 hello-static.html을 내장 톰캣 서버에 넘기고 controller 쪽에서 hello-static을 찾고 없다면 내부에 있는 resources에 static-hello.html을 찾아 웹에 반환 해 준다.
MVC와 템플릿 엔진
MVC란 Model, View, Controller를 칭하는 말이다.
"Controller"
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value = "name", required = false) String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
@RequestParam은 웹에서 파라미터를 받겠다는 뜻이다.
파라미터로 넘어온 name을 model에 넘겨주고 hello-template을 반환한다.
"View"
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
타임리프의 장점으로는 html을 그대로 쓰고 파일을 서버없이 열어봐도 껍데기를 볼 수 있다.
실행하면 이렇게 뜬다.
MVC,템플릿 엔진 이미지는 다음과 같다.
API
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
- ResponseBody를 사용하면 뷰 리졸버(viewResolver)를 사용하지 않음.
- 대신 HTTP의 Body에 문자 내용을 직접 반환
API는 데이터를 가져올 때 필요한데
@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;
}
}
실행하면
객체를 반환하고 객체가 JSON으로 변환된다.
@ResponseBody 사용 원리
- @ResponseBody를 사용
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter가 동작
- 기본 문자처리 : StringHttpMessageConverter
- 기본 객체처리 : MappingJackson2HttpMessageConverter
'🍀Spring > 기본' 카테고리의 다른 글
[Spring] 예제 만들기 - 객체 지향 원리 적용 (0) | 2024.07.19 |
---|---|
[Spring] 예제 만들기 (0) | 2024.07.13 |
[Spring] 스프링이란? (0) | 2024.07.13 |
컴포넌트 스캔과 자동 의존관계 설정 (0) | 2024.07.06 |
테스트 코드 - @BeforeEach, @BeforeAll, @AfterEach, @AfterAll (0) | 2024.07.06 |