스프링 MVC 기본 구조
스프링 프레임워크는 하나의 기능을 위해서만 만들어진 프레임워크가 아닌 '코어'라고 할 수 있는 어려 서브 프로젝트를 결합해서 다양한 상황에 대처할 수 있도록 개발되었다.
그 중 하나가 스프링 MVC이다.
스프링 MVC
Spring MVC - WEB 관령 영역
Spring Core - 일반 Java 영역(POJO)
Spring MyBatis
Mybatis
DB
프로젝트의 구동은 web.xml에서 시작한다. web.xml의 상단에는 가장먼저 구동되는 context Listener가 등록되어 있다.
1. ContextLoaderListener는 해당 웹 어플리케이션을 구동하게 되면 같이 작동이 시작되므로 해당 프로젝트를 실행하면 가장 먼저 로그를 출력하면서 실행된다.
2. root-context.xml이 처리되면 파일에 있는 빈(Bean)들이 작동한다.
3. root-context.xml이 처리된 후에는 DispatcherServlet이라는 서블릿과 관련된 설정이 작동한다.
MVC구조에서 가장 핵심적인 역할을 하는 클래스이며 내부적으로 앱 관련 처리의 준비 작업을 진행한다.
내부적으로 웹 관련 처리의 준비작업을 진행하기 위해서 사용하는 파일이 있고 servlet-context.xml 이다.
4. DispatcherServlet에서 XmlWebApplicationContext를 이용해서 servlet-context.xml을 로딩하고 해석한다.
이 과정에서 등록된 객체(Bean)들은 기존에 만들어진 객체(Bean)들과 같이 연동하게 된다.
Front-Controller 패턴
HandlerMapping
| |
Client <-> DispatcherServlet <- HandlerAdapter <-> Controller
| |
View <- ViewResolver
1. 사용자의 Request는 Front-Controller인 DispatcherServlet을 통해 처리한다
2. HandlerMapping은 Request의 처리를 담당할 컨트롤러를 찾기 위해 존재한다
3. HandlerMapping 인터페이스를 구현한 여러 객체중 @RequestMapping이라는 어노테이션을 적용된 것을 기준으로 판단하며, 적절한 컨트롤러를 찾았다면 HandlerAdapter를 이용해서 해당 컨트롤러를 작동 시킨다.
4. Controller의 처리가 완료되었다면 어디로 어떻게 갈것인지 라는 결과가 나오고 그 결과를 ViewResolver가 리턴을 통해 받아서 어떤 View에서 처리하는 것이 좋을지 해석을 한다.
5. 해석된 결과를 가지고 실제 응답을 보내야 하는 테이터를 JSP등을 이용해서 생성한다
6. 만들어진 응답(파일, 페이지, 데이터,...) 을 DispatcherServlet을 통해서 전송한다.
스프링 MVC Controller의 특징
HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 기능 구현
다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능
Get방식, Post방식 등 전속 방식에 대한 처리를 어노테이션으로 처리 가능
상속 / 인터페이스 방식 대신 어노테이션으로도 설정 가능
Naming Convention(명명 규칙)
패키지명 : com.myapp
요소별 명명
- config : 프로젝트와 관련된 설정 클래스들의 보관 패키지
- controller : 스프링 MVC의 Controller들의 보관 패키지
- service : 스프링의 service 인터페이스와 구현 클래스 패키지
- domain : DTO, VO 클래스들의 패키지
- persistence : MyBatis Mapper 인터페이스 패키지
- exception : 웹 관련 예외 처리 패키지
- aop : 스프링의 aop 관련 패키지
- security : 스프링 Security(하위 프레임워크) 관련 패키지
- util : 각종 유틸리티 클래스 관련 패키지
'BACK-END' 카테고리의 다른 글
[Spring] Spring MVC 구조(2) (0) | 2022.03.30 |
---|---|
[Spirng] Spring-MyBatis (0) | 2022.03.22 |
[Spring] 의존성 주입(Dependency Injection) (0) | 2022.03.21 |
[Spring]스프링 프레임워크란 ? (0) | 2022.03.18 |
[Oracle] 오라클 데이터베이스 (0) | 2022.03.11 |