티스토리 뷰
Contorller, Service, Repository
Contorller, Service, Repository는 단순하게 얘기하면 각각 http request/response를 처리, 비즈니스 로직을 구현, DB 작업 처리를 한다고 얘기할 수 있다.
Controller가 클라이언트의 요청을 받아, 전달 받은 데이터를 가공하고 요청에 맞는 메서드를 호출하여 Service가 처리한 로직을 최종적으로 Model 에 저장을 하고 View에 던져준다.
Service는 비즈니스 로직을 실항하며, 도메인 모델의 적합성을 검증하고, 트랜잭션을 처리한다.
이때, Repository를 통해 DB 연결을 하고, 필요한 데이터를 처리한다.
이 구조는 패턴이기도 하고 Spring의 어노테이션을 통해 지원되는 설정이기도 하다.
MVC 패턴
이 패턴 자체는 MVC 패턴에서 나왔는데, Model-View-Controller의 약자로 Model은 데이터 디자인을, View는 실제로 랜더링되어 보이는 페이지를, Controller는 사용자의 요청을 받고 응답을 주는 로직을 담당한다. 기존의 Model1 방식은 JSP가 모든 요청을 다 처리하는 방식이었으나, 프로젝트 규모가 커질 수록 코드가 복잡해지는 단점이 있어, 현재는 별다른 언급이 없으면 역할이 모두 나뉜 Model2 방식을 가리킨다고 한다.
Spring MVC Framework
Spring에서는 MVC 패턴을 따르는데, 이를 이해하려면 내부 구조를 살펴볼 필요가 있다.

- 클라이언트가 요청을 하면, Dispatcher Servlet 을 먼저 만나는데, 맨 앞단에서 Controller를 찾고, 반환할 View를 찾아주는 역할을 한다(1)
- Dispatcher Servlet은 Handler Mapping 을 호출하여 해당하는 Controller를 반환받는다(2). Controller가 있다면 @RequestMapping 으로 등록한 메서드들을 매핑해준다.
- https://tecoble.techcourse.co.kr/post/2021-06-18-spring-request-mapping/
- Controller가 없다면(정적인 페이지라면), View Resolver를 거치지 않고 Static 폴더 내 해당하는 페이지를 클라이언트에게 반환하게 된다.
- Dispatcher Servlet은 Handelr Adapter 를 호출하여 반환받은 Controller 를 실행한다(3, 4)
- Controller로 매핑된 메서드를 실행하여, Service를 통해 비즈니스 로직을 처리하고, 이때 Repository를 통해 DB에 액세스한다.
- Controller는 해당하는 결과를 View에 전달할 수 있도록 Model 객체에 저장하고, View name을 리턴한다.(5)
- Dispatcher Servlet은 View Resolver를 호출하여 View name으로 해당하는 View를 찾아 View에 전달한다.(6, 7)
- @ResonseBody가 있으면 HttpMessageConverter를 호출한다.
- 객체가 반환되면 JSONConverter를, 문자가 반환되면 StringConverter를 호출한다.
- View 객체는 해당하는 View를 호출하며, View는 Model 객체에서 화면 표시에 필요한 객체를 가져와 표현하고 Client에게 넘겨준다.(8)
[추가 공부 필요] https://aridom.tistory.com/61, https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc
Web.xml에서는 모든 Servlet 및 Filter가 공유하는 Root Spring Container가 정의되고, 이는 root-context.xml 에 정의되어 있는데, 주로 Service, Repository(DAO) 와 같은 객체들을 정의해준다.(3)
모든 Servlet 및 Filter가 공유하는 Spring Container를 생성한다.(4)
Dispatcher Servlet이 정의되어 있으며, 서블릿의 요청에 관한 내용은 servlet-context.xml 에 정의하고, Controller, Annotation, ViewResolver 설정이 그 내용이다.(1)
* Servlet은 웹 프로그래밍에서 Client의 요청을 처리하고 그 결과를 Client에 전달하는 자바 프로그램인데, WAS 내 서블릿 컨테이너 안에서 연산을 담당하고 있다.

Dispatcher Servlet은 일반적으로 계층 구조를 갖는데, WebApplicationContext 를 루트 컨텐스트로, Dispatcher Servlet은 자식 컨텍스트 구조를 갖는다.

'TIL' 카테고리의 다른 글
| [Spring Boot] Controller: Response (0) | 2022.05.28 |
|---|---|
| [Spring Boot] @Autowired: DI의 세 가지 방법 (0) | 2022.05.28 |
| [Spring Boot] IoC, DI, 컨테이너 (0) | 2022.05.23 |
| [Spring Boot] Bean & Component (0) | 2022.05.23 |
| [WIL] 둘째주 회고 - 자바 & 스프링 공부 (0) | 2022.05.22 |
- Total
- Today
- Yesterday
- MVC
- ManyToMany
- ResetController
- bean
- DI
- 상속
- overfatching
- 자바의정석
- OneToMany
- 항해99
- controller
- 고민
- clean-up policy
- AssertJ
- ORM
- GIT
- 스프링부트
- 임포트
- IOC
- ManyToOne
- 제어자
- 패키지
- 몽고db
- AfterEach
- jinja2
- toCharArray
- Java
- 배열
- 단항연산자
- 서버환경
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
