Spring(스프링)
java 개발환경 구축 (※Java Configuration)
임혁진
2024. 10. 21. 09:32
Java Configuration을 사용하는 이유!
Java Configuration을 사용하는 것은 스프링 설정을 XML 파일 대신 Java 클래스를 통해 관리하는 방식으로, 여러 가지 이점을 제공합니다.
1. 환경 독립성
- 개발, 테스트, 운영 환경마다 설정 값(예: 데이터베이스 URL, API 키, 포트 번호 등)이 달라질 수 있습니다.
- 이러한 설정 값을 코드에 하드코딩하지 않고, 설정 파일로 관리하면 각 환경에 맞게 쉽게 변경이 가능합니다.
2. 유지보수성 향상
- 설정 값이 코드와 분리되어 있으면 유지보수가 쉬워집니다.
- 특정 값이 여러 곳에서 사용되더라도 설정 파일에서만 변경하면 되기 때문에 유지보수 작업이 간소화됩니다.
3. 보안
- 중요한 정보(예: 비밀번호, API 키, 인증 토큰 등)를 코드에 하드코딩하지 않고 설정 파일이나 환경 변수로 관리하여 보안을 강화할 수 있습니다.
4. 유연성
- 설정을 외부화하여 애플리케이션을 재컴파일하거나 코드를 수정하지 않고도 동작 방식을 쉽게 변경할 수 있습니다.
- 이는 배포 자동화와 같은 DevOps 작업에서도 매우 유용합니다.
5. 재사용성
- 설정 파일을 활용하면 동일한 애플리케이션을 다양한 환경에 맞춰 재사용할 수 있습니다.
- 애플리케이션의 핵심 로직은 동일하더라도, 설정에 따라 다른 동작을 하도록 만들 수 있습니다.
프로젝트 생성 후 설정 작업
Java Configuration을 적용하는 단계는 다음과 같습니다.
1. XML 파일 삭제
기존의 XML 기반 설정 파일을 삭제하고, Java Configuration을 사용할 준비를 합니다.
- web.xml, servlet-context.xml, root-context.xml 파일을 삭제합니다.
- web.xml을 제외한 파일들은 스프링 관련 폴더에 있으므로, spring 폴더 자체를 삭제해도 무방합니다.
프로젝트 구조는 아래와 같이 간결하게 됩니다.
이런 형태가 되면 됩니다.
2. pom.xml 수정 및 스프링 버전 변경
- pom.xml에서 발생하는 오류를 해결하기 위해, pom.xml의 하단부에 있는 <plugins> 섹션에 아래 설정을 추가합니다.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.0</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin>
- 또한 스프링 버전도 필요에 맞게 변경합니다.
- Maven > Update Project를 실행하여 변경 사항을 반영합니다.
3. Java Configuration 작성
기존의 XML 파일 대신 Java 설정 파일을 직접 작성해야 합니다.
- 스프링은 @Configuration 어노테이션을 이용하여, 클래스 인스턴스를 통해 설정 파일을 대신합니다.
1-1. RootConfig 클래스 작성
- 프로젝트 내에 org.zerock.config 패키지를 생성하고, RootConfig 클래스를 작성합니다.
.
package org.zerock.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = {"org.zerock.sample"})
public class RootConfig {
// 추가적인 설정이 있을 경우 여기에 작성
}
- @Configuration: 해당 클래스가 스프링 설정 파일임을 나타냅니다.
- @ComponentScan: 지정한 패키지 내에 있는 스프링 빈을 자동으로 스캔하고 등록합니다.
1-2. WebConfig 클래스 작성
- org.zerock.config 패키지에 WebConfig 클래스를 생성하여 web.xml을 대신하는 클래스를 작성합니다.
package org.zerock.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { RootConfig.class }; // root-context.xml을 대체하는 설정 클래스
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { ServletConfig.class }; // servlet-context.xml을 대체하는 설정 클래스
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" }; // 서블릿 매핑
}
}
- **AbstractAnnotationConfigDispatcherServletInitializer**를 상속받아, web.xml에서 하던 작업을 Java 설정으로 처리합니다.
- **getRootConfigClasses()**는 root-context.xml을 대체하며, RootConfig 클래스를 지정합니다.
- **getServletConfigClasses()**는 servlet-context.xml을 대체하는 클래스를 지정합니다.
※ java configuration 구축하는 법 2탄 의존성 주입 https://ohj9575.tistory.com/171