스프링 bean 설정 시 XML 설정과 Java 설정 비교

jaycee·2023년 2월 5일
0

요약

제목XML을 통한 설정JAVA를 통한 설정
제공 정보-단순 텍스트 정보이고 일정한 법칙 없음
-IDE 지원이 적으며 설정을 직접 입력해야함
- 패키지, 클래스명, 접근 제한자, 상속/구현 여부 등 메타 정보 확인 가능
-빈등록 여부 쉽게 파악 가능 & 입력 시 IDE 지원 받을 수 있음
설정 변경 용이성단순 텍스트이고, IDE 지원이 적어 변경이 번거로움자바 문법을 이용하며, IDE에서 관리되기도 하여 지원을 통해 간단하게 변경 가능
에러 감지 시점런타임컴파일

JAVA, XML을 통한 스프링 bean 설정 방법

Java 설정

설정 방법

AnnotationConfigApplicationContext 객체로 컨테이너를 생성

장점

Spring 프레임워크는 3.1부터 기존의 XML 설정에 더해 Java 기반의 설정까지 지원하기 시작하였다.

초기에는 XML로 설정들을 관리할 것을 권하였지만, 이제는 다음과 같은 이유로 Java 기반의 설정을 권장하고 있다.

  • 더 많은 정보를 얻을 수 있다.
  • 설정의 변경이 용이하다.
  • 컴파일 단계에서 에러를 찾을 수 있다.

XML 설정

설정 방법

GenericXmlApplicationContext 객체로 컨테이너를 생성

장점

그렇다고, XML 설정에서 단점만 있는 것은 아니다.
XML 설정 환경에서는 컴파일 없이 파일만 바꿔치기하면 한 번에 설정들을 전환할 수 있다.

JAVA bean 설정의 장점

1. 더 많은 정보를 얻을 수 있다.

@Component 
	public class UserFactory {
}

위의 코드는 @Component이라는 간단한 어노테이션만 추가되었을 뿐이다. 하지만 우리는 이를 통해 해당 어노테이션이 클래스에 적용가능하며, 어노테이션이 붙은 클래스의 메타 정보들(패키지, 클래스 이름, 접근 제한자, 상속/구현 등) 까지 얻을 수 있다. 또한 해당 클래스는 정상적으로 빈 등록이 되어 있음을 파악할 수 있다.

반면에 XML은 모든 설정을 명시적으로 나타내야 하며, 간단한 클래스를 지정하는 것도 상당히 번거롭다. 그리고 얻을 수 있는 정보의 양도 제한적이다. 왜냐하면 XML은 단순 텍스트이기 때문에 해당 클래스가 다른 클래스와 어떤 관계를 갖는지 등을 알 수 없기 때문이다.

< bean id="userFactory" class="org.mangkyu.user.UserFactory" />

또한 우리는 해당 클래스만을 보고 빈(Bean)이 정상적으로 설정되었는지 파악하기가 어려울 것이다.

public class UserFactory {
}

빈의 등록정보를 파악하기 위해서는 또 다시 XML 파일을 찾아봐야 할 것이다.

2. 설정의 변경이 용이하다.

IDE를 통해 클래스의 위치나 이름을 바꾸는 것은 상당히 간단하다. 반면에 XML로 되어있는 설정은 단순 테스트로 되어있기 때문에 변경이 번거로우며 안전하지 못하다. 물론 최근에 IDE가 이를 많이 지원하고 있지만, 그래도 문제를 유발할 수 있는 텍스트를 다루는 것 보다는 Java 파일을 다루는 것이 좋을 것이다.

3. 컴파일 에러를 얻을 수 있다.

빈 등록과 같은 설정을 진행하다 보면 빈의 클래스 이름이나 메소드 등을 작성할 때 오타가 나거나 타입이 맞지 않는 것 등을 컴파일러가 미리 잡아줄 수 있다. 하지만 XML로 작성했을 때는 컴파일러가 이를 잡아주지 못할 뿐더러, 문제가 생겼을 경우에 원인을 찾는게 상당히 까다로워 질 수 있다.

Spring은 프레임워크는 과거에 XML을 중심으로 DI 관계 설정 메타 정보를 관리하였다. 하지만 이러한 방식은 단점이 상당히 많기 때문에 지양되기 시작하였고, 어노테이션과 자바를 이용한 설정 방식이 떠오르기 시작했다.

그리고 최근의 SpringBoot 프레임워크는 XML 설정을 배제한 채로 처리하도록 장려하고 있다.

출처: MangKyu님 블로그 게시물(https://mangkyu.tistory.com/158)에 내 생각을 더함

profile
오늘도 하나 배웠다.

0개의 댓글