👩🏻‍💻 Springframwork Mig 기록 : Springframework와 SpringBoot의 주요 설정파일 기능 정리

공부하는 개발자

about 오늘도 뚝딱🔨 뚝딱 하는 주니어 개발자👩🏻‍💻

북마크

고정글

최근 글

👩🏻‍💻 Springframwork Mig 기록 : Springframework와 SpringBoot의 주요 설정파일 기능 정리

date
read
반응형

⟡ 개요

 

회사에서 담당하고 있는 서비스의 마이그레이션 작업을 높은 완성도로 마무리하기 위한 목적과,

퇴근 후 별도로 진행하는 학습 내용들을 스스로 정리하고 축적하기 위해 작성하는 기록입니다.
초보 개발자 관점에서 정리하는 흐름이지만, 기술적 오류나 더 나은 방향이 있다면

언제든지 피드백을 제안해 주시면 적극 반영하겠습니다.🫶

 

 

 

 

 

 

 

 

 

⟡ 개발환경

AS-IS TO-BE
JDK 1.7 JDK 17
Maven 2.9 Gradle 8.8
Spring Framework 4.2.5 (XML 기반) Spring Boot 3.3.2
MyBatis 3.3.0 MyBatis 3.5.13
Tomcat 7 Embedded Tomcat
MariaDB
JSP, EL, JSTL 기반 SSR(Server Side Rendering)
HTML, CSS, JavaScript, jQuery
Eclipse IntelliJ or VSCode
Linux(사내 Cloud)

 

 

 

 

 

 

 

 

 

 

 

 

 

SpringFramework 
특징 : 모든 것을 명시적으로 선언하는 XML 중심의 방식이다.
SpringBoot
관례를 따르고 필요한 것만 재정의 하는 Java와 자동구성 설정 중심이다.

 

 

 

 


web.xml

배포 서술자 / Tomcat같은 서블릿 컨테이너(WAS)가 읽는 파일
웹 어플리케이션의 가장 핵심적인 진입점 설정

 

• 애플리케이션의 진입점 :

톰캣이 .war 파일을 읽을 때 가장 먼저 참조하는 파일이다.

 

• 리스너 등록 :

스프링의 핵심 컨테이너(root-context.xml)를 로드하기 위한 ContextLoaderListener를 톰캣에 등록한다.

 

• 서블릿 등록 :

모든 웹 요청을 받아 스프링으로 전달할 DispatcherServlet을 톰캣에 등록한다.

 

• 필터 등록 :

springSecurityFilterChain(스프링 시큐리티)이나 한글 인코딩 필터 등을 톰캣에 등록한다.

 

• 프로필 설정 :

태그를 이용해 현재 활성화할 프로필(e.g, local, dev)를 지정한다.

 

• 경로 :

src/main/webapp/WEB-INF/web.xml 표준 규격이며 절대 변경하면 안됨

 


🌱 Springframework ➡ SpringBoot
- web.xml은 필요 없어지며 삭제 하는 파일이다.
- @SpringBootApplication 어노테이션이 붙은 Main클래스(*.Application.java)가 모든 역할을 대신한다.
- main(Stringp[] args) 메소드 : 톰캣 서버를 직접 실행시킨다.
- @EnableAutoConfiguration: spring-boot-starter-web의존성 감지, DispatcherServlet과 필요한 필터 등 자동으로 등록

 

✅ 체크 포인트
- DispatcherServlet, ContextLoaderListener, 필터(인코딩, 보안 필터) 등 web.xml에 정의된 항목을 Java Config으로 이동
- web.xml의 context-param로 지정한 contextConfigLocation이 있다면 ?
   해당 XML을 로드하는 코드를 작성하거나 XML을 Java Config로 변환.


AS-IS(web.xml) ➡  TO-BE(Spring Boot)

<listener>
(ContextLoaderListener)
SpringApplication.run(..)
(자동)
<servlet>
(DispatcherServlet)
spring-boot-starter-web
(자동)
<filter>
(EncodingFilter, SecurityFilter)
spring-boot-starter-web(자동)
@Configuration 클래스(커스텀 필터)
<context-param>
(프로필 지정)
application.properties의
spring.profiles.active=dev..local..

 

 

 

 

 

 












 

root-context.xml or applicationContext.xml(루트 컨텍스트)

애플리케이션 전역(서비스/DAO 등) 빈(bean)들을 정의하는 곳. ContextLoaderListener가 로드하며, DispatcherServlet에 의해 만들어지는 WebApplicationContext와 구분되는 Root ApplicationContext를 담당한다.

 

• 선언 내용:

DataSource(DB연결), TransactionManager(트랜잭션), MyBatis(SqlSessionFactoryBean), @Service 및 @Repository 컴포넌트 스캔


• 경로:

/WEB-INF/applicationContext.xml. 또는 web.xml의 context-param contextConfigLocation에 지정한 경로

(예: /WEB-INF/spring/root-context.xml, /WEB-INF/spring/\*.xml, classpath:applicationContext.xml)

빌드 환경에서는 src/main/webapp/WEB-INF/ 또는 src/main/resources WAR로는 WEB-INF/classes 쪽으로 배치되기도 함

파일의 물리적 위치 자체는 web.xml의 contextConfigLocation으로 변경 지정 가능하므로 "절대 변경 불가"는 아님. 
다만 명시 없이 컨테이너 기본 동작에 의존하는 경우에는 /WEB-INF/applicationContext.xml을 기대하므로, 파일을 다른 곳으로 옮기면 contextConfigLocation을 같이 수정해야 함.

 


🌱 Springframework ➡ SpringBoot
- 해당 XML파일은 삭제된다.
- application.properties : Datasource, TransactionManager, MyBatis 설정은 spring-boot-starter-data-jdbc나 mybatis-spring-boot-starter가 자동으로 생성해준다.그렇기 때문에 application.properties에 연결 정보만 적으면 된다.
- @Configuration Java 클래스 : 자동 설정이 불가능한 빈은 @Configuration 어노테이션을 붙힌 Java 클래스에서 @Bean 메소드로 직접 정의한다.

 

✅ 체크 포인트
- 서비스/DAO/트랜잭션 빈을 Java Config로 옮기고, MyBatis/Mapper/TransactionManager 설정을 Spring Boot 방식(spring.datasource.\*, @MapperScan)으로 전환

 

 

 

 

 

 

 








 

servlet-context.xml(서블릿 컨텍스트)

web.xml의 DispactcherServlet이 로드하는 웹 계층(Web Layer)전용 빈을 정의한다.
주로 사용자 요청 처리와 뷰(View)렌더링에 관련된 빈을 선언한다.
root-context.xml을 부모 컨텍스트로 가진다.
 선언 내용 : 

@Controller 컴포넌트 스캔, ViewResolver(JSP경로 설정), Interceptor, 정적 리소스(JS/CSS)매핑, <mvc:annoation-driven/>(웹 MVC기능 활성화)

 

경로 : 

기본 경로는 없다. web.xml의 <servlet>태그 안에 <init-param>으로 명시하면 된다.

 


🌱 Springframework ➡ SpringBoot
- 해당 XML파일은 삭제된다.
- spring-boot-starter-web(자동) : <mvc:annotation-driven>과 같은 핵심 기능은 전부 자동으로 활성화 된다.
- application.properties : JSP ViewResolver 설정은 spring.mvc.view.prefix와 spring.mvc.view.suffix프로퍼티스로 대체 괸다.
- @Configuration Java 클래스 : Interceptor나 HandlerExceptionResolver 등 복잡한 웹 설정은 @Configuration 클래스에서 인터페이스를 구현하여 정의한다.

 

✅ 체크 포인트
- ViewResolver(예: InternalResourceViewResolver), 메시지 컨버터, static resource mapping 등을 WebMvcConfigurer 구현으로 옮겨야 함.

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

spring-security.xml 또는 security-context.xml(Spring Security설정)

보안 필터체인, 인증과 인가 설정, URL보호와 UserDetailsService, password encoder 등 보안 관련 빈 정의하고 보통 web.xml에서 DelegatingFilterProxy로 springSecurityFilterChain을 연결한다.

 

  경로 : 

관례적으로 WEB-INF/spring/security-context.xml 또는 WEB-INF/spring/security.xml
DelegatingFilterProxy가 web.xml에 선언되어 있으면 bean 이름과 매칭된다.
DelegatingFilterProxy를 web.xml에서 사용 중이라면 필터 이름과 빈 이름 매칭 규칙을 지켜야 한다. 
필터 정의를 삭제하면 보안이 동작하지 않으므로 주의. 
(즉, 위치 자체는 바꿀 수 있지만 web.xml과의 연동을 변경하면 동작 불가)

 


🌱 Springframework ➡ SpringBoot
- Boot + Spring Security는 SecurityFilterChain 빈(@Bean)으로 Java Config 방식으로 구성하거나 WebSecurityConfigurerAdapter(이전 버전) 방식으로 대체 , application.properties로 일부 설정 가능하다. 
Boot는 필터 등록을 자동화한다.

 

✅ 체크 포인트
- 기존 필터 매핑과 URL 패턴, 세션 정책, 인증 매커니즘을 Java Config로 옮기고 테스트(로그인/권한) 케이스를 마련.

 

 

 

 

 

 


 

 

 

 

 

 

 

*.properties(환경 설정 파일)

DB 접속 정보나, API 키, 서버 IP등 환경별로 달라지는 설정값을 XML에서 분리하는 파일들
root-context.xml에서 <context:property-placeholder location="..." /> 태그를 통해 로드된다.
Maven 프로필을 사용해 src/main/resources-local, src/main/resources-dev 등으로 분리하여 관리한다.

 

  경로 : 

보통 src/main/resources(빌드시 WEB-INF/classes)에 두며, WAR의 경우 WEB-INF/classes에 복사된다.

또는 WEB-INF/config/ 같은 프로젝트별 관습 경로도 흔한 편

파일 위치는 애플리케이션이 classpath:로 찾는지, ServletContext를 통해 찾는지에 따라 다.르다.
명시 없이 classpath 기본 검색을 이용한다.면 src/main/resources(즉 WAR의 WEB-INF/classes)에 있어야 한다.

 


🌱 Springframework ➡ SpringBoot
- application.properties 또는 .yml 
- 스프링 부트의 표준 설정 파일이다. 스프링 부트가 시작될 때 자동으로 로드되며 별도의 태그는 필요 없다.
- 레거시의 프로필 기능은 application-{profile}.properties 파일로 대체된다.
- --spring.profiles.active=local 옵션을 주면 application.properties를 먼저 읽고, application-{profile}.properties의 내용으로 덮어쓴다.

 

✅ 체크 포인트
- 기존 properties에 있는 키들을 application.properties로 통합하고, 민감 정보는 Vault/환경변수로 대체 고려 해야 함.

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

log4j.xml , logback.xml(로깅 설정)

로그 레벨(DEBUG, INFO, ERROR), 로그 파일 위치, 로그 패턴 등을 정의한다.

 

•  경로 : src/main/resources/log4j.xml 혹은 logback.xml
위치는 classpath에 존재해야 자동 로드되므로 classpath 루트에 두는 관습을 지키는 것이 안전하다. 

컨테이너나 시스템 프로퍼티로 경로를 지정하면 다른 위치도 가능.

 


🌱 Springframework ➡ SpringBoot
- 거의 동일하지만 스프링 부트 표준 이름 사용을 권장한다.
- 스프링 부트 기본으로 Logback을 사용 하기 때문에 src/main/resources/ 경로에 logback-spring.xml 이름의 파일을 생성하면 자동으로 인식한다.
- 간단 로그 레벨 설정은 application.properties 에서도 가능하다.

 

✅ 체크 포인트
- 로그 포맷, 파일 경로, 롤링 정책을 Boot 방식으로 재설정하고, 환경별로 로그 레벨을 제어할 수 있게 구성한다.

 

 

 

 

 

 

 

 

 

반응형