티스토리 뷰
스프링 MVC를 학습하는데 가장 먼저 기억해야 하는 점은 스프링 MVC가 스프링의 서브(sub) 프로젝트라는 것이다. Spring Framework 라는 메인 프로젝트 외에도 여러 종류의 서브 프로젝트가 존재하는데, 스프링 MVC 역시 이러한 프로젝트 중 일부이다.
스프링은 하난의 기능을 위해 만들어진 프레임워크가 아니라 '코어'라고 할 수 있는 프레임워크에 여러 서브 프로젝트를 결합해서 다양한 상황에 대처할 수 있도록 개발되었다. 서브 프로젝트라는 의미를 개발자의 입장에서 가장 쉽게 이해할 수 있는 방법은 '별도의 설정이 존재할 수 있다' 라는 개념이다.
Spring Legacy Project로 생성한 예제의 경우에도 servlet-context.xml과 root-context.xml로 설정파일이 분리된 것을 볼 수 있다. 스프링 MVC가 서브 프로젝트이므로 구성 방식이나 설정 역시 조금 다르다고 볼 수 있다.
스프링 MVC 프로젝트의 내부 구조
스프링 MVC 프로젝트를 구성해서 사용한다는 의미는 내부적으로는 root-context.xml로 사용하는 일반 Java영역(흔히 POJO)과 servlet-context.xml로 설정하는 Web 관련 영역을 같이 연동해서 구동하게 된다.
바깥쪽에 있는 WebApplicationContext라는 존재는 기존의 구조에 MVC 설정을 포함하는 구조로 만들어진다. 스프링은 원래 목적 자체가 웹 애플리케이션을 목적으로 나온 프레임워크가 아니기 때문에 달라지는 영역에 대해서는 완전히 분리하고 연동하는 방식으로 구현되어 있다.
스프링 MVC 프로젝트의 로딩 구조
프로젝트 구동 시 관여하는 XML은 web.xml, root-context.xml, servlet-context.xml 파일이다. 이 파일들 중 web.xml은 Tomcat 구동과 관련된 설정이고, 나머지 두 파일은 스프링과 관련된 설정이다.
프로젝트의 구동은 web.xml에서 시작한다. web.xml의 상단에는 가장 먼저 구동되는 Context Listener가 등록되어있다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>에는 root-context.xml의 경로가 설정되어 있고, <listener>에는 스프링 MVC의 ContextLoaderListener가 등록되어 있는 것을 볼 수 있다. ContextLoaderListener는 해당 웹 애플리케이션 구동 시 같이 동작하므로 해당 프로젝트를 실행하면 다음과 같이 가장 먼저 로그를 출력하면서 기록하는 것을 볼 수 있다.
root-context.xml이 처리되면 파일에 있는 빈(Bean) 설정들이 동작하게 된다.
root-context.xml에 정의된 객체(Bean)들은 스프링의 영역(context) 안에 생성되고, 객체들 간의 의존성이 처리된다. root-context.xml이 처리된 후에는 스프링 MVC에서 사용하는 DispatcherServlet이라는 서블릿과 관련된 설정이 동작한다.
'ALL > Spring' 카테고리의 다른 글
[Spring] Bean Scope 빈 스코프란? (0) | 2023.02.28 |
---|---|
[Spring] 빈 라이프사이클 Bean LifeCycle (0) | 2023.02.28 |
[Book] 코드로 배우는 스프링 웹 프로젝트 (1) (0) | 2023.02.06 |
[Spring] 스프링 시큐리티 Spring security (2) (0) | 2023.01.01 |
[Spring] 스프링 시큐리티 Spring security (1) (0) | 2023.01.01 |
- Total
- Today
- Yesterday
- EC2
- AWS
- di
- 컨테이너
- 스프링
- 데브캠프
- 객체지향
- 시큐리티
- 친절한SQL튜닝
- Spark
- 스프링 빈
- 리액트
- 이정환
- 남궁성
- 인덱스
- MySQL
- spring
- @Configuration
- node
- 한입크기로 잘라먹는 리액트
- 코드로 배우는 스프링 웹 프로젝트
- JavaScript
- 스프링의정석
- Node.js
- 스프링 프로젝트
- security
- 데이터베이스
- 자바의정석
- React
- 자바스크립트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |