▷ web.xml / servlet-context.xml / root-context.xml의 역할과 차이
1) web.xml
- Java 애플리케이션에서 서블릿 컨테이너에 대한 설정 정보를 포함하는 배치 서술자(Deployment descriptor) 파일.
- 웹 애플리케이션의 배치, 구성, 초기화, 보안 설정 등을 정의하는 XML 파일
- 웹 애플리케이션 아카이브(war 파일)의 'WEB-INF' 디렉토리에 위치하며, 서블릿 컨테이너의 의해 읽혀지고 해석됨.
- XML 구문을 따름
- 최신 버전의 Java EE에서는 'web.xml' 대신에 자바 기반의 어노테이션 설정과 'web-fragment.xml'등의 설정 방식 사용
- 웹 애플리케이션 서버(WAS)가 최초로 구동될 때(톰캣 최초 구동시) 각종 설정을 정의함.
ex)
- 서블릿 매핑 (Servlet Mapping) : 서블릿 클래스와 URL 패턴간의 매핑을 설정함. 서블릿 클래스의 인스턴스가 특정 URL 패턴으로 요청을 처리하도록 지정함
↳ 위의 예시는 appServlet이라는 서블릿 클래스를 "/" 라는 URL 패턴에 매핑함.
- 리스너 설정 (Listener Configuration) : 웹 애플리케이션의 이벤트 리스너를 설정함. 웹 애플리케이션의 생명주기 이벤트에 대한 이벤트 핸들러를 등록할 수 있음.
↳ 스프링에서 제공하는 ContextLoaderListener
- 오류 페이지 설정 (Error Page Configuration) : 특정 HTTP 오류 코드에 대한 오류 페이지를 설정함. 오류가 발생했을때 사용자에게 보여질 오류 페이지를 지정할 수 있음.
- 필터 설정 (Filter Configuration) : 요청을 가로채고, 수정하거나 처리하는 필터를 설정함. 필터는 요청 전후에 특정 작업을 수행하거나 요청을 변경할 수 있음.
↳ 인코딩 관련 필터
context-param 태그 내에 root-context로 모든 서블릿과 필터들이 공유함으로 root-context.xml을 정의함.
2) servlet-context.xml
- Spring MVC 프로젝트에서 사용되는 Spring Web MVC 설정 파일.
- 서블릿 컨텍스트에 대한 구성을 정의하고, Spring MVC 프레임워크가 동작하는데 필요한 빈(Bean) 및 설정을 포함
- 웹 애플리케이션에서 클라이언트 요청을 받기 위한 컨텍스트 설정이며, 요청과 관련된 객체를 정의함. url과 관련된 Controller나 Annotation, ViewResolver(= Controller에서 view 정보에 대해 설정), Interceptor, MultipartResolver 등의 설정을 해줌
- servlet-context.xml 파일은 주로 "WEB-INF" 디렉토리에 위치하며, Spring MVC 프레임워크에 의해 읽혀지고 해석됨.
- XML 구문을 따르고, Spring MVC 동작을 제어하고 설정하는데 사용됨
- web.xml 파일과 마찬가지로 최신 버전의 Spring에서는 "servlet-context.xml" 대신 Java 기반의 설정 방식과 함께 "@Configuration" 어노테이션 및 "WebMvcConfigurer" 인터페이스 등이 사용되기도 함.
ex)
- 컴포넌트 스캔 (Component Scan) : "context:component-scan" 요소를 사용하여 컴포넌트 스캔을 설정함. 이를 통해 자동으로 컨트롤러, 서비스, 레포지토리 등의 빈을 검색하고 등록할 수 있음
↳ "bitedu.bipa.book" 패키지에 있는 클래스들을 컴포넌트 스캔하여 해당 패키지 내의 빈을 자동으로 등록함
- 뷰 리졸버 (View Resolver) : "bean" 요소를 사용하여 뷰 리졸버를 설정함. View resolver는 논리적인 뷰 이름을 실제 뷰로 변환하는 역할을 함.
↳ "InternalResourceViewResolver"를 사용하여 JSP 뷰 리소스를 설정. JSP 뷰의 접두사를 "/WEB-INF/views/"로, 접미사를 ".jsp"로 설정함.
- 핸들러 매핑 (Handler Mapping) : "bean" 요소를 사용하여 핸들러 매핑을 설정. Handler Mapping은 요청을 처리할 컨트롤러를 매핑하는 역할을 함.
↳ "BeanNameUrlHandlerMapping"을 사용하여 빈의 이름과 URL 패턴을 매핑
- 인터셉터 (Interceptor) : "mvc:interceptors" 요소를 사용하여 인터셉터를 설정. Interceptor는 요청 전후에 특정 작업을 수행하거나 요청을 가로챌 수 있음.
↳ "LoggingInterceptor"를 사용하여 로깅 작업을 수행하는 인터셉터를 설정.
3) root-context.xml
- Spring 웹 애플리케이션에서 사용되는 Spring 프레임워크의 루트 컨텍스트 설정 파일.
- servlet-context.xml 과는 반대로 view와 관련되지 않은 객체를 정의함. Service, Repository(DAO), DB 등의 비즈니스 로직과 관련된 설정을 해줌.
- 애플리케이션의 전반적인 구성을 정의하고, 공통적으로 사용되는 빈(Bean) 및 설정을 포함함
- 주로 "WEB-INF" 디렉토리에 위치하며, Spring 컨테이너에 의해 읽혀지고 해석됨.
- XML 구문을 따르고, 애플리케이션 전반적인 설정과 공통적으로 사용되는 빈을 정의하는데 사용됨.
ex)
- 데이터베이스 연결 설정 (Database Connection Configuration) : "DataSource", "JdbcTemplate", "TransactionManager" 등과 같은 DB관련 Bean을 설정하여 데이터베이스 연결과 트랜잭션 관리를 수행할 수 있음.
↳ MySQL DB 연결을 위한 "DataSource"를 설정함.
↳ JdbcTemplate을 사용하여 DB에 대한 쿼리 수행을 간편하게 처리하고, DataSourceTransactionManager를 사용하여 DB 트랜잭션을 관리함.
- Service와 DAO 설정 : 서비스 계층과 데이터 액세스 계층을 위한 Bean을 설정함. 서비스 인터페이스와 그 구현체, 그리고 DAO 클래스와 그 구현체를 등록할 수 있음.
↳ userService와 userDao라는 빈을 설정하고, 서비스 구현체에서 DAO 인스턴스를 주입받도록 설정함.
- 캐시 설정 (Caching Configuration) : Spring의 캐시 추상화를 사용하여 메서드 결과를 캐시에 저장하고 성능을 향상시킬 수 있음.
↳ "cache:annotation-driven" 요소를 사용하여 캐싱을 활성화하고, Encache를 사용하는 "cacheManager"와 "encache" 빈을 설정하고 있음
'Spring' 카테고리의 다른 글
스프링 CRUD Library 프로그램 버전별 정리 後 (0) | 2023.07.17 |
---|---|
MyBatis 정리 (0) | 2023.07.16 |
페이지네이션 (Pagination) - Servlet 프로그래밍 (0) | 2023.07.08 |
Servlet 프로그래밍 (동적 Library CRUD 프로그램) (1) | 2023.07.02 |
Servlet 프로그래밍 (동적 웹 회원가입 폼 만들기) (0) | 2023.07.01 |
댓글