✔️ Spring XML 방식
Spring 프레임워크에서 XML 방식은 과거에 주로 사용되던 설정 방식으로,
Spring 컨테이너와 애플리케이션의 다양한 구성 요소를 XML 파일을 통해 정의하는 방식을 의미한다.
이 방식을 최근에는 JavaConfig나 애노테이션 기반의 설정 방식으로 대체되고 있지만,
여전히 많은 레거시 프로젝트에서 사용되고 있다.
Spring XML 방식의 주요 특징과 구성 요소는 다음과 같다.
1. Bean 정의
Spring 컨테이너에 의해 빈(Bean) 객체들을 XML 파일에서 정의한다.
각 빈은 이름, 클래스, 의존성 등의 정보를 가지며, 컨테이너는 이 정보를 바탕으로 빈 객체를 생성하고 관리한다.
2. 의존성 주입(Dependency Injection)
XML 파일을 사용하여 빈들 사이의 의존성을 설정할 수 있다.
프로퍼티나 생성자를 통해 의존하는 빈 객체를 주입할 수 있다.
3. AOP 설정
XML을 사용하여 관점 지향 프로그래밍(Aspect-Oriented Programming, AOP) 관련 설정을 할 수 있다.
어드바이스, 포인트컷 등의 정보를 정의하여 애플리케이션에 적용할 수 있다.
4. 데이터소스 설정
데이터베이스 연결 정보나 JNDI 설정 등을 XML 파일에서 정의하여 소스를 관리할 수 있다.
5. 뷰 리졸버 설정
웹 애플리케이션에서 뷰 리졸버(View Resolver)를 설정하고, 뷰의 위치 및 타입을 지정할 수 있다.
6. 인터셉터 설정
웹 애플리케이션의 인터셉터를 설정하여 요청과 응답 처리 전후에 실행되는 작업을 정의할 수 있다.
7. 스케줄링 설정
태스크 스케줄링과 관련된 설정을 XML 파일에서 할 수 이싸.
8. 메시지 리소르 설정
국제화와 다국어 지원을 위한 메시지 리소스를 정의할 수 있다.
9. 라이프사이클 설정
빈의 라이프사이클(생성, 초기화, 소멸 등)에 관련된 설정을 할 수 있다.
XML 방식의 설정은 강력하고 유연하지만, XML 파일을 작성하고 유지보수하는 과정에서 오타나
오류가 발생할 수 있다.
최근에는 JavaConfig나 애노테이션 기반의 설정 방식이 더 간결하고 타입 안전성이 높아진 점을
고려하여 많은 프로젝트에서 선호되고 있다.
✔️ XML 태그들
이러한 태그들은 Spring 컨테이너 빈(Bean)정의, 의존성 주입, AOP 설정, 데이터소스 설정,
뷰 리졸버 설정 등 다양한 측면에서 사용된다.
● <beans>Spring XML 설정 파일의 루트 요소로서 모든 설정 내용을 감싸는 역할을 한다.
● <bean>
Spring 컨테이너에서 관리된 빈 객체를 정의한다.
클래스, 생성자, 프로퍼티 등의 정보를 포함할 수 있다.
● <property>
빈 객체의 프로퍼티를 설정할 때 사용한다.
주로 의존성 주입을 위해 사용되며, name 속성으로 프로퍼티 이름을, value 속성으로 값을 지정한다.
● <constructor-arg>
빈 객체의 생성자 인자를 설정할 때 사용된다.
생성자에 저날되는 값 또는 다른 빈 객체를 지정할 수 있다.
● <import>
다른 XML 설정 파일을 현재 파일에 포함시킬 때 사용한다.
설정 파일을 모듈화하여 재사용성을 높일 수 있다.
● <alias>
다른 빈에 대한 별칭을 정의할 때 사용한다.
하나의 빈에 여러 개의 이름을 부여할 수 있다.
● ● ●
✔️ <bean> 태그
Spring 프레임워크에서 <bean> 태그는 빈(Bean) 객체의 정의와 설정을 담당하는 중요한 XML 요소이다.
빈은 Spring 컨테이너에 의해 생성되고 관리되는 객체로서,
<bean> 태그를 사용하여 빈의 클래스, 속성, 의존성 등을 설정한.
다음은 <bean> 태그의 주요 속성과 사용법에 대한 설명이다.
● id 속성
빈을 고유하게 식별하기 위한 식별자이다.
다른 설정에서 빈을 참조할 때 사용된다.
<bean> 태그의 id 속성을 설정해야 하며, 식별자는 문자열 형태로 지정한다.
● class 속성
빈으로 생성될 클래스의 패키지 경로를 포함한 전체 클래스 이름을 지정한다.
Spring 컨테이너의 해당 클래스를 인스턴스화하여 빈으로 등록한다.
● scope 속성
빈의 범위(scope)를 지정한다.
주로 singleton, prototype, request, session, globalSession 등이 상ㅇ된다.
singleton (기본값)은 컨테이너 내에서 단일 인스턴스를 공유하는 범위를 나타낸다.
prototype은 요청마다 새로운 인스턴스를 생성하는 범위를 나타낸다.
● 생성자 인자 설정 (<constructor-arg>)
생성자를 통해 빈 객체를 초기화할 때 사용한다.
<constructor-arg> 태그 내에서 value 속성으로 값을 직접 지정하거나,
reg 속성으로 다른 빈을 참조하여 주입할 수 있다.
● 프로퍼티 (<property>)
빈의 프로퍼티를 설정할 때 사용한다.
<property> 태그 내에서 name 속성으로 프로퍼티 이름을 지정하고,
value 속성으로 값을 직접 지정하거나, ref 속성으로 다른 빈을 참조하여 주입할 수 있다.
● 생명주기 콜백 설정 (init-method, destory-method)
빈의 초기화 메서드와 소멸 메서드를 지정할 때 사용한다.
init-method 속성으로 초기화 메서드의 이름을, destory-method 속성으로 소멸 메서드의 이름을 지정한다.
● 팩토리 메서드 설정 (factory-method, factory-bean)
빈을 생성하는 팩토리 메서드를 지정할 때 사용한다.
factory-method 속성으로 팩토리 메서드의 이름을, factory-bean 속성으로 팩토리 빈을 지정한다.
● 빈의 추상화와 상속
부모 빈을 정의하고, 하위 빈에서 상속하며 필요한 속성을 오버라이드할 수 있다.
<bean> 태그 내에서 parent 속성으로 부모 빈의 이름을 지정한다.
<bean> 태그를 사용하여 빈을 정의하면 Spring 컨테이너가 해당 빈을 생성하고 관리하나.
빈의 클래스, 속성, 의존성 주입 등을 설정하여 애플리케이션에서 필요한 객체를 쉽게 관리할 수 있다.
다음은 Spring XML 방식의 장단점을 설명한 것이다.
🔶 장점
● 구성 분리
XML 설정 파일을 사용하여 빈 정의, 의존성 주입, 설정 정보 등을 분리하여 관리할 수 있다.
이를 통해 코드와 설정을 분리하여 애플리케이션을 더 쉽게 관리할 수 있다.
● 설정 변경의 용이성
XML 설정 파일을 수정함으로써 빠르게 설정을 변경할 수 있다.
애플리케이션의 동작을 변경하지 않고도 설정을 조정할 수 있다.
● 레거시 지원
많은 레거시 프로젝트가 XML 방식을 사용하고 있으며, 이러한 프로젝트에서 계속에서 유지보수 및 개선을 할 수 있다.
● 초기 학습 곡선
XML은 비교적 간단한 문법을 가지며, 초보자들도 비교적 쉽게 이해하고 작성할 수 있다.
🔶 단점
● 번거로움
XML 설정은 태그 기반으로 작서외어 복잡한 설정을 작성할 때 가독성이 떨어질 수 있다.
또한 타이핑 오류나 오타가 발생할 가능성이 있다.
● 타입 안전성 부족
XML 설정은 문자열 기반이기 때문에 컴파일 시점에서 타입 체크가 이루어지지 않는다.
따라서 런타임에 타입 관련 오류가 발생할 가능성이 있다.
● 리팩토링 어려움
클래스나 패키지 이름을 변경하거나 빈의 이름을 수정할 때 XML 설정에서도 일일이 변경해야 한다.
● 설정 오류 발생 가능성
XML 파일 내에 올바르지 않은 설정이 들어가거나 누락되면 런타임 에러가 발생할 수 있다.
● 코드 중복
XML 설정에서 반복되는 설정이 많을 경우 코드 중복이 발생할 수 있다.
● 어노테이션 기반 설정 대안
최근에는 어노테이션 기반의 설정이 더 간결하고 타입 안정성이 높은 장점을 가지고 있어,
많은 프로젝트에서 XML 대신 어노테이션을 선호한다.
'Spring' 카테고리의 다른 글
프로젝트 기초 세팅 가이드 (0) | 2023.08.18 |
---|---|
Apache Maven 란? (POM) (0) | 2023.08.18 |
Spring MVC 란? (주요 컴포넌트, 요청 처리 과정, 프로젝트 폴더 구조) (0) | 2023.08.17 |
Spring Framework 란? (구성 요소, 모듈과 동작 구조) (0) | 2023.08.17 |
프레임워크(Framework)란? (라이브러리(Library)와 차이점) (0) | 2023.08.17 |