2023.10.30
Day51 세 줄 요약
MVC : Model / View / Controller를 분리한 디자인 패턴 (M = Object(data), V = 웹 페이지, C = M과 V 사이의 인터페이스)
DispatcherServlet은 프론트 컨트롤러와 같은 역할 수행
@Controller, @Service와 같은 @Component 기반의 어노테이션을 통해 Bean 등록
Spring MVC 아키텍처
Spring MVC Architecture
M : Model
V : View
C : Controller

요청과 응답 사이클
1) 클라이언트(프론트 서버)의 요청을 DispatcherServlet이 받는다.
2) HandlerMapping을 통해 요청을 위임할 컨트롤러를 검색한다.
3) 찾은 컨트롤러로 요청을 위임할 HandlerAdapter를 찾는다.
4) HandlerAdapter가 Controller로 요청(Request)를 위임한다.
5) Service, DAO(Repository) 등을 거쳐 비즈니스 로직을 수행한다.
6) Controller는 최종적으로 mav를 리턴한다.
7) 요청에 대한 응답 View를 ViewResolver가 검색 후 전달한다.
8) 마지막으로 DispatcherServlet은 View로부터 받은 응답을 클라이언트에게 반환한다.
구성요소
Servlet
Servlet = Java Servlet
Java를 사용하여 웹 페이지를 동적으로 생성하는 서버측 프로그램
클라이언트 요청을 처리하고 그 결과를 반환하는 웹 프로그래밍 기술
Front Controller
서블릿 컨테이너의 맨 앞에서 모든 요청을 받아 처리해주는 컨트롤러
디스패치 서블릿을 프론트 컨트롤러(Fornt Controller)라고도 하며, 이러한 패턴을 프론트 컨트롤러 패턴이라 부름
DispatcherServlet
Servlet의 일종으로 프론트 컨트롤러 역할을 수행
과거엔 모든 서블릿을 URL 매핑을 위해 web.xml에 등록했지만, 디스패치서블릿이 MVC의 중앙 서블릿 역할을 하며 어플리케이션으로 오는 모든 요청을 핸들링하고 공통 작업을 처리함
web.xml 파일에 관련 정보를 명시한 후 스프링이 구동될 때 구현화 됨
실제 작업은 위임(delegate) 컴포넌트를 통해 수행
위임 컴포넌트(or Special Bean)
1) HandlerMapping : 요청을 처리할 컨트롤러(=핸들러)를 찾는다.
2) HandlerAdapter : 요청을 컨트롤러로 전달한다.
3) HandlerExceptionResolver : 요청의 처리 과정(핸들러 매핑, 컨트롤러 실행 등)에 대한 예외 처리
4) ViewResolver : 리턴값에 대한 뷰 컴포넌트를 반환. String으로 ViewName을 전달 받으면 이를 mav 등의 객체로 반환
5) LocaleResolver : Locale(유저의 언어, 지역 출력 형식 등을 정의하는 문자열) 결정
6) MultipartResolver : 멀티파트 파일 업로드 처리
Bean
Spring IoC 컨테이너가 관리(생성, 소멸)하는 객체를 뜻함
Bean 설정은 .xml파일을 통해 사용자가 직접 작성하거나,
@Component(@Controller, @Service 등)와 같은 어노테이션을 이용
- Component Scan에 의해 해당 어노테이션이 붙은 클래스는 자동으로 Bean에 등록됨
Bean으로 등록된 객체는 자동으로 스코프가 '싱글톤'으로 지정
- 싱글톤 : 하나의 객체만 만들고 이를 재사용하여 메모리 절약 및 성능 최적화에 유리한 스코프 방식
- 프로토타입 : 매번 다른 객체가 만들어짐
Controller
매핑된 URL에 의해 각종 메소드가 호출되며, 서비스(비즈니스 로직)를 거쳐 반환된 mav 객체를 리턴함
- mav : ModelAndView 클래스 객체로, 이동할 view 이름과 data(DTO 객체)를 담을 수 있는 객체
@Controller 어노테이션으로 해당 클래스가 Controller임을 명시
- 해당 어노테이션 안에 @Component가 포함되어 있기 때문에 자동으로 Bean으로 등록
- 스프링 IoC 컨테이너가 해당 Bean을 관리
Service
DAO로 부터 넘어온 DB 데이터(Model)를 목적에 맞게 가공하고, 비즈니스 로직(회원가입, 로그인, 조회 등)의 결과를 리턴
- mav.setViewName("view") : 이동할 jsp 파일 이름
- mav.addObject("obj1", obj2)
- obj1 : view에서 사용할 객체의 이름
- obj2 : 정보가 담긴 DTO 객체
@Service 어노테이션을 통해 해당 클래스가 Service임을 명시
- @Component가 포함되어 있기 때문에 자동으로 Bean으로 등록
DAO(Data Access Object)
DB 접근을 위한 클래스로 @Repository 어노테이션을 통해 DAO임을 명시함
- 마찬가지로 @Component가 포함되어 있어 자동으로 Baen으로 등록
- mapper.xml 파일에 정의된 namespace와 id를 통해 접근해 메소드 호출 형식으로 CRUD 수행
* refs
https://velog.io/@betterfuture4/Spring-Dispatcher-Servlet-%EC%A0%95%EB%A6%AC
https://engkimbs.tistory.com/688
https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-servlet/special-bean-types.html

'Spring-Java > Spring' 카테고리의 다른 글
Day55_HTTP 요청/응답 사이클 (1) | 2023.12.14 |
---|---|
Day53_Spring Legacy Project 설정 (0) | 2023.12.14 |
Day48_STS, Tomcat Server 설치 및 환경 설정 (0) | 2023.10.27 |
Day47_Apache Tomcat (0) | 2023.10.26 |
Day46_Spring Framework (1) | 2023.10.25 |