-
Spring Framework 시리즈 3화 – @Configuration vs XML – 빈 설정 방식 비교기술과 산업/언어 및 프레임워크 2025. 5. 20. 12:51728x90
Spring Framework에서 빈(Bean)을 설정하는 두 가지 방법, XML 설정과 @Configuration(Java Config)의 차이와 실전 적용 사례를 비교합니다. 어떤 방식이 2025년 현재 기준으로 더 적합한지도 함께 살펴봅니다.
스프링 빈 설정 방식의 진화
Spring은 초기에는 XML 기반 설정을 중심으로 발전해 왔습니다. 그러나 이후 Java 애노테이션 기반 설정(@Configuration, @Bean 등)이 도입되면서 구조의 단순화와 유지보수성 측면에서 큰 변화가 있었습니다.
구분 XML 기반 설정 Java Config 기반 설정
선언 위치 .xml 파일 자바 클래스 설정 방법 <bean> 태그 @Configuration, @Bean 가독성 구조화됨 코드로 직관적 표현 가능 리팩토링 IDE 지원 제한 리팩토링 편리 현재 주류 오래된 프로젝트 Spring Boot 및 최신 프로젝트의 표준
XML 기반 빈 설정 예제
// Engine.java public class Engine { public void start() { System.out.println("Engine started"); } }
// Car.java public class Car { private Engine engine; public Car(Engine engine) { this.engine = engine; } public void drive() { engine.start(); System.out.println("Car is moving"); } }
컨텍스트 로딩:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Car car = context.getBean(Car.class); car.drive();
Java 기반 설정 예제 – @Configuration + @Bean
// AppConfig.java @Configuration public class AppConfig { @Bean public Engine engine() { return new Engine(); } @Bean public Car car() { return new Car(engine()); } }
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); Car car = context.getBean(Car.class); car.drive();
두 방식의 차이점 요약
항목 XML 설정 Java Config 설정
유지보수성 설정과 코드가 분리돼 IDE 도움 제한 설정이 자바 코드라서 IDE 자동 완성 가능 타입 안정성 문자열 기반 – 컴파일 타임 오류 없음 컴파일 타임에 타입 오류 검출 가능 리팩토링 어렵고 위험 리팩토링 도구로 안전하게 가능 애노테이션 호환성 제한적 @Profile, @Conditional, @Scope 등과 연계 탁월 Spring Boot 호환 별도 설정 필요 완전 호환 (기본 방식)
실무에서 어떤 방식을 써야 하나?
2025년 기준으로 실무에서는 Java Config 기반 설정이 완전히 주류입니다.
다음과 같은 상황이 아니라면 XML 설정은 지양하는 것이 일반적입니다.
- 기존 레거시 시스템 유지보수
- 비Spring-Boot 프로젝트에서의 컨테이너 구분 필요
- 도입 초기에 XML 설정으로 구성된 기업 표준 환경
그 외의 경우에는 다음과 같이 Java Config 방식이 권장됩니다:
- Spring Boot 기반의 모든 서비스
- 마이크로서비스 환경에서의 독립 설정 구성
- 테스트/Mock 구성이 필요한 DI 구조
팁 – 혼합 구성도 가능하다
Spring에서는 @ImportResource를 통해 XML 설정을 Java 설정 안으로 가져올 수 있습니다.
@Configuration @ImportResource("classpath:applicationContext.xml") public class AppConfig { }
하지만 실무에서는 이러한 방식은 되도록 피하고, 일관된 설정 방식을 유지하는 것이 유지보수 측면에서 유리합니다.
마무리 – 설정은 프로젝트의 철학이다
Spring은 설정이 곧 구조라고 말할 수 있습니다. 빈을 어떻게 정의하고, 어디에서 관리하며, 어떤 컨벤션을 따르는지는 팀 전체의 개발 효율성과 품질에 직결됩니다.
XML 설정과 Java 설정은 단순한 문법 선택이 아니라 시스템 구조 설계의 출발점이기도 합니다. 앞으로 진행할 시리즈에서는 Java 기반 설정을 기본으로 하되, 필요시 XML과의 비교를 병행해 설명하겠습니다.
다음 4화에서는 스프링 빈의 생명주기와 초기화/소멸 커스터마이징 방법을 알아보겠습니다. 이 내용은 실제 서비스 환경에서 자원 해제나 연결 종료 처리가 필요한 경우 꼭 필요한 주제입니다.
728x90'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글
Spring Framework 시리즈 4화 – Bean의 생명주기 이해와 커스터마이징 (1) 2025.05.21 Spring Boot 시리즈 34편 – Eureka와 서비스 디스커버리 구조: 마이크로서비스 환경에서의 자동 인스턴스 탐색 전략 (0) 2025.05.21 Spring Framework 시리즈 2화 – @Component와 @Autowired로 의존성 주입 구현하기 (1) 2025.05.20 Spring Boot 시리즈 33편 – Spring Cloud Gateway: API 게이트웨이 설계와 트래픽 라우팅 전략 (0) 2025.05.20 Spring Framework 시리즈 1화 – Spring Framework 시작하기 (2) 2025.05.19