티스토리 뷰

반응형

Spring을 제대로 이용하기 위해서는 Spring이 갖는 기본 개념과 철학을 이해해야 한다. 이번에는 Spring에 입문하는 사람들을 위해 Spring에 대해 이해할 수 있는 내용을 작성해보고자 한다.

 

1.  XML 설정보다 Java 설정을 사용해야 하는 이유


[ Java 설정의 장점 ]

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

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

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

 

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 설정을 배제한 채로 처리하도록 장려하고 있다.

반응형
댓글
댓글쓰기 폼
  • now.iz 안녕하세요!
    좋은 글 잘 봤습니다 :)
    혹시 1번에서 "더 많은 정보를 얻을 수 있다." 의 의미가 무엇인가요?
    @Component 으로 등록하면, 빈에 대한 정보를 가져올 때 더 많은 정보를 가져올 수 있다는 의미일까요?
    2021.07.05 16:09 신고
  • 망나니개발자 먼저 XML로 작성된 빈 등록부터 보도록 하겠습니다.
    < bean id="userFactory" class="org.mangkyu.user.UserFactory" />

    XML은 텍스트로 작성되어 있어서 우리는 UserFactory라는 클래스가 userFactory라는 이름의 빈으로 등록된다는 것만 알 수 있습니다.
    반면에 Java로 빈을 등록한다면 UserFactory라는 클래스를 봐야 하므로 해당 클래스가 어떤 접근 제어자(public, private, protected)나 클래스 변수들을 갖는지 또는 어떤 클래스를 상속 또는 구현하고 있는지 등을 자연스럽게 파악할 수 있습니다!
    혹시 이해가 안가시면 또 댓글 남겨주세요:)
    2021.07.05 19:02 신고
반응형
공지사항
Total
1,299,829
Today
231
Yesterday
3,635
TAG
more
«   2021/07   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함