Controller의 장점
1. HTTP request, response 처리를 위해 매번 작성해 줘야하는 중복코드들 생략 가능
2. API 이름마다 파일을 만들 필요 없음
스프링 MVC ?
MVC (Moder - View - Controller) 디자인 패턴
Sever 에서 HTML을 내려주는 경우
1). 정적(static) 웹 페이지

Controller
1. Client의 요청을 Model 로 받아 처리
예) 회원가입을 위한 개인 정보들 (id, password, name)
2. Client 에게 View (정적 웹 페이지, HTML)을 내려줌
2) 동적 (dynamic) 웹 페이지

Controller
1. Client 의 요청을 Model 로 받아 처리
2. Template engine 에게 View, Model 전달
a. View : 동적 HTML 파일
b. Model : View 에 적용할 정보들
3. Template engine
a. View 에 Model을 적용 -> 동적 웹페이지 생성
i. 예) 로그인 성공시, "로그인 된 사용자의 id" 를 페이지에 추가
ii. Template engine 종류 : Thymeleaf, Groovy, FreeMarker 등
4. Client 에게 View (동적 웹 페이지, HTML) 을 내려줌
HTTP 메시지 이해

- Client 와 Server 간 Request, Response 는 HTTP 메시지 규약을 따름
- HTTP 메시지는 웹 서비스 개발자(백엔드, 프론트 개발자)에게 매우 중요한 내용!!
Controller와 HTTP Response 메시지

Response 트렌드의 변화
1. 정적 웹페이지

2. 동적 웹페이지

3. JSON 데이터

스프링 MVC 동작 원리
@Controller 는 스프링 서버 개발자 입장에서는 시작점과 끝점으로 보이지만,
사실 스프링이 뒤에서 많은 부분을 보이지 않게 처리해 주고 있다.

- Client → DispatcherServlet
- 가장 앞 단에서 요청을 받아 FrontController 라고도 불림
- DispatchServlet → Controller
- API 를 처리해 줄 Controller 를 찾아 요청을 전달
- Handler mapping 에는 API path 와 Controller 함수가 매칭되어 있음
[Sample] GET /hello/html/dynamic → HomeController 의 helloHtmlFile() 함수 GET /user/login → UserController 의 login() 함수 GET /user/signup → UserController 의 signup() 함수 POST /user/signup → UserController 의 registerUser() 함수
- 함수 이름을 내 마음대로 설정 가능했던 이유!!
- Controller 에서 요청하는 Request의 정보 (Model) 전달
@Controller public class ItemSearchController { @GetMapping("/api/search") @ResponseBody public List<ItemDto> getItems(@RequestParam String query) { // ... } }
- Controller → DispatcherServlet
a. Controller 가 Client 으로 받은 API 요청을 처리
b. 'Model' 정보와 'View' 정보를 DispatcherServlet 으로 전달
4. DispatcherServlet → Client
a. ViewResolver 통해 View 에 Model 을 적용
b. View 를 Client 에게 응답으로 전달
Request

'공부기록 > 자바 스프링' 카테고리의 다른 글
| 스프링 DI(의존성주입), IOC컨테이너 (0) | 2022.01.29 |
|---|---|
| 스프링 Controller, Service, Repository (0) | 2022.01.29 |
| 3-1. 간단한 미니프로젝트 완성 (0) | 2022.01.25 |
| 3-0. 키워드 (0) | 2022.01.24 |
| 2-2. 클라이언트 설계 (0) | 2022.01.24 |