[Spring] Spring Legacy Project 구조와 설정 파일 - pom.xml, web.xml, servlet-context.xml, root-context.xml
by 우와한개발자
1. Spring Legacy Project 기본 구조
SpringPrj
├ src/main/java
│ └ com.example.myapp
│ ├ controller
│ ├ service
│ ├ dao
│ └ vo
│
├ src/main/resources
│
├ src/test/java
├ src/test/resources
│
└ src/main/webapp
├ resources
│ ├ css
│ ├ js
│ └ images
├ WEB-INF
│ ├ views
│ ├ spring
│ │ ├ root-context.xml
│ │ └ servlet-context.xml
│ └ web.xml
└ index.jsp
pom.xml
2. 주요 폴더 설명
| 폴더 | 설명 |
| src/main/java | 자바 소스 코드 위치 |
| controller | 요청을 받는 컨트롤러 |
| service | 비즈니스 로직 처리 |
| dao | DB 접근 처리 |
| vo, dto | 데이터 전달 객체 |
| src/main/resources | properties, 설정 파일 등 리소스 위치 |
| src/main/webapp | 웹 자원 위치 |
| resources | CSS, JS, 이미지 같은 정적 자원 |
| WEB-INF/views | JSP 화면 파일 위치 |
| WEB-INF/spring | 스프링 설정 파일 위치 |
3. Spring 컨테이너 구성
- Spring은 두 개의 컨테이너(ApplicationContext)로 나뉘어 동작
- Spring Boot는 이 두 컨텍스트 설정을 자동으로 처리하기 때문에 servlet-context.xml, root-context.xml을 직접 작성하지 않아도 됨
| 구분 | servlet-context | root-context |
| 정식 명칭 | Servlet WebApplicationContext | Root WebApplicationContext |
| 등록 Bean | Controller 등 웹 관련 Bean | Service, DAO 등 공통 Bean |
| 사용 범위 | 해당 컨텍스트에서만 사용 | 모든 컨텍스트에서 공유 가능 |
| 다른 컨텍스트 접근 | root-context Bean 사용 가능 | servlet-context Bean 사용 불가 |
root-context (공유)
└ Service, DAO, DataSource ...
↑ 참조 가능
servlet-context (웹 전용)
└ Controller, ViewResolver, 정적자원 ...
4. 기본 설정 파일
| 구분 | pom.xml | web.xml | root-context.xml | servlet-context.xml |
| 역할 | 프로젝트 빌드 / 의존성 관리 | 웹 애플리케이션 배포 설정 | 공통 빈 설정 | MVC 관련 빈 설정 |
| 주요 내용 | 라이브러리 의존성, Java 버전, 빌드 플러그인 등 | DispatcherServlet 등록, URL 매핑, 에러페이지 등 | Service, Repository, DB 연결 등 | Controller, ViewResolver, 정적리소스 등 |
| 관리 주체 | Maven | Tomcat (서블릿 컨테이너) | Spring Core | Spring Web MVC |
| 로딩 시점 | 빌드 시 | 서버 시작 시 가장 먼저 | ContextLoaderListener 초기화 시 | DispatcherServlet 초기화 시 |
| 위치 | 프로젝트 루트 | WEB-INF/web.xml | WEB-INF/spring/ | WEB-INF/spring/appServlet/ |
1) pom.xml
- Maven 프로젝트의 설정 파일
- 필요한 라이브러리 의존성 관리
- 자바 버전 설정
- 빌드 방식 및 플러그인 설정
- Spring, Servlet API, JSTL, MyBatis, Oracle/PostgreSQL 드라이버 같은 라이브러리를 pom.xml에 추가해서 사용.
<dependencies>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.20</version>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<!-- 자바 버전 설정 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
2) web.xml
- 웹 애플리케이션의 전체적인 초기 설정 파일(웹 프로젝트의 시작점이 되는 설정 파일)
- DispatcherServlet 등록 및 URL 매핑
- 필터 설정 (예: 한글 인코딩 필터)
- 시작 시 로딩 설정
<web-app>
<!-- DispatcherServlet 등록 -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- URL 매핑 : 모든 요청을 DispatcherServlet이 처리 -->
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 한글 인코딩 필터 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3) servlet-context.xml
- 웹 계층 관련 설정을 담당.
- Controller Bean 등록 (컴포넌트 스캔)
- ViewResolver 설정
- 정적 자원(css/js/image) 매핑
<!-- Controller 컴포넌트 스캔 -->
<context:component-scan base-package="com.example.myapp.controller"/>
<!-- ViewResolver : 컨트롤러가 반환한 view name으로 JSP 경로 조합 -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/"/>
<beans:property name="suffix" value=".jsp"/>
</beans:bean>
<!-- 정적 자원 매핑 -->
<mvc:resources mapping="/resources/**" location="/resources/"/>
- 컨트롤러가 "home"을 반환하면 ViewResolver가 아래처럼 경로를 조합해 JSP를 찾음.
prefix = /WEB-INF/views/
suffix = .jsp
→ 최종 경로 : /WEB-INF/views/home.jsp
4) root-context.xml
- 비즈니스 로직, DB, 공통 Bean 설정을 담당
- 웹 화면보다는 내부 로직과 DB 관련 설정 중심 파일
- Service · DAO Bean 등록
- DataSource 설정
- SqlSessionFactory / 트랜잭션 설정
- 전역 공통 Bean 등록
<!-- Service, DAO 컴포넌트 스캔 -->
<context:component-scan base-package="com.example.myapp.service, com.example.myapp.dao"/>
<!-- DataSource 설정 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</bean>
<!-- SqlSessionFactory 설정 (MyBatis) -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
4. WEB-INF 특징
- WEB-INF 아래 파일은 브라우저에서 직접 접근할 수 없음.
- 그래서 JSP를 WEB-INF/views 아래 두고 컨트롤러가 ViewResolver를 통해 접근하게 만듦.
# 직접 접근 불가
<http://localhost:8080/WEB-INF/views/home.jsp> → 404
# 컨트롤러를 통한 내부 이동만 가능
Controller → ViewResolver → /WEB-INF/views/home.jsp
전체 요청 흐름
브라우저 요청
↓
web.xml → DispatcherServlet 등록 확인
↓
DispatcherServlet
↓ (servlet-context.xml 참고)
Controller 실행
↓
Service / DAO 호출
↓ (root-context.xml 참고)
DB 처리 후 결과 반환
↓
Controller → view name 반환
↓
ViewResolver → /WEB-INF/views/*.jsp 경로 생성
↓
JSP 실행 → HTML 응답
'프레임워크 > Spring' 카테고리의 다른 글
| [Spring] Spring MVC Controller(핸들러) - 어노테이션과 파라미터 (0) | 2026.03.31 |
|---|---|
| [Spring] Spring MVC란? - DispatcherServlet과 전체 동작 흐름 (0) | 2026.03.30 |
| [Spring] Servlet 요청 처리 - 커맨드 패턴(Command Pattern)과 Handler 분기(properties 설정파일) (0) | 2026.03.30 |
| [Spring] 이클립스(Eclipse) 웹 프로젝트 환경 설정 - Dynamic Web Project 생성 및 Tomcat 설정 (0) | 2026.03.30 |
| [Spring] MVC 패턴이란? Controller / View / Model (0) | 2026.03.30 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자