웹을 개발하는 종류에는 크게 3가지 종류가 있다.
- 정적 컨텐츠 → 하드코딩
- MVC와 템플릿 엔진 → JSP, PHP, HTML을 동적으로
- API
정적 컨텐츠
공식 문서에 Static Content
검색
정적 컨텐츠는 모두 resources/static 에 작성된다.
작동 순서
- 웹 브라우저에서 서버에 요청을 보낸다.
- 내장 톰켓 서버에서 관련 컨트롤러를 찾는다.
- 관련 컨트롤러가 없으니 static 폴더에서 관련 정적 컨텐츠를 찾는다.
- 컨텐츠를 브라우저로 반환한다.
MVC와 템플릿 엔진
MVC
- Model → 데이터와 비즈니스 로직 관리
- View → 화면을 그리는 요소
- Controller → 사용자의 요청을 처리하고 적절한 모델과 뷰 호출
Controller
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
@RequestParam("name")
→ name이라는 이름을 가진 매개변수를 하나 받아야한다.그냥 접속하게 된다면
http://localhost:8080/hello-mvc 해당 url로 접속하니 해당 에러가 뜸
2024-08-06T00:03:32.527+09:00 WARN 65156 --- [hello-spring] [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'name' for method parameter type String is not present]
View
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
서버없이 그냥 열면 hello! empty
가 뜬다
동작 과정
- http://localhost:8080/hello-mvc?name=choiho 로 브라우저가 요청을 보낸다
- 내장 톰켓 서버에서 관련 컨트롤러를 찾는다.
- 컨트롤러에서 값을 받아 hello-template에 반환한다.
- viewResolver에서 templates/hello-template.html을 처리해 반환한다.
API
@ResponseBody 문자 반환
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
@ResponseBody
를 사용하면 뷰 리졸버를 사용하지 않는다.- HTTP의 바디에 문자 내용을 직접 반환한다.
@ResponseBody 객체 반환
@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가 붙어있다.
- 뷰 리졸버를 사용하지 않고 HttpConverter가 동작한다.
- 변환된 내용을 웹브라우저에 반환한다.
@ResponseBody
- HTTP의 Body에 내용 반환
- viewResolver 대신에 HttpMessageConverter가 동작
- 기본 문자처리 → StringHttpMessageConverter
- 기본 객체처리 → MappingJackson2HttpMessageConverter
'공부 > Spring' 카테고리의 다른 글
스프링 의존관계 (0) | 2024.08.12 |
---|---|
스프링 - 회원 관리 예제 (0) | 2024.08.12 |
View 환경설정 (0) | 2024.08.09 |
1.1 프로젝트 생성 (0) | 2024.08.09 |