Spring Core
IT IT 인터넷 Spring Core DIDependency injectionSpring Core
http://java21.net/blog/marco?post_id=2388
Spring Core
Spring Core는 Spring Framework의 핵심적인 부분으로, 애플리케이션 개발에 필요한 기본적인 기능과 서비스들을 제공합니다. Spring Core는 IoC(Inversion of Control)와 DI(Dependency Injection) 중심의 아키텍처를 기반으로 하며, 다양한 모듈들이 이 위에서 동작합니다. Spring Core는 애플리케이션의 구동을 위해 중요한 역할을 하며, 이를 통해 객체의 관리와 의존성 주입 등을 효율적으로 처리할 수 있습니다.
Spring Core에 대해 좀 더 구체적으로 설명하겠습니다.
1. Spring Core의 주요 개념
1.1 IoC (Inversion of Control)
IoC는 제어의 역전이라고도 하며, 애플리케이션의 객체 생성을 Spring 컨테이너가 관리하게 되는 디자인 패턴입니다.
개발자가 객체를 생성하고 관리하는 대신, Spring이 객체의 생명주기와 의존성을 관리합니다.
이를 통해 코드의 결합도를 낮추고, 유연하고 확장 가능한 애플리케이션을 만들 수 있습니다.
1.2 DI (Dependency Injection)
**Dependency Injection (DI)**는 객체의 의존성을 외부에서 주입하는 방법입니다.
Spring에서는 DI를 통해 객체 간의 의존 관계를 외부에서 설정하고 관리합니다.
DI는 객체 간 결합도를 낮추고, 테스트 가능하고 유지보수하기 쉬운 코드를 만드는 데 도움을 줍니다.
주로 생성자, setter, 필드 방식으로 의존성 주입을 할 수 있습니다.
1.3 Bean Factory
Spring Core의 가장 중요한 컴포넌트는 Bean Factory입니다.
Bean은 Spring IoC 컨테이너에 의해 관리되는 객체로, Bean Factory는 이 객체들을 관리합니다.
Bean Factory는 객체의 생성, 초기화, 소멸 등을 관리하고, 의존성 주입을 통해 필요한 객체들을 주입합니다.
1.4 ApplicationContext
ApplicationContext는 Bean Factory의 확장된 형태로, Bean Factory에 다양한 기능을 추가한 인터페이스입니다.
ApplicationContext는 국제화 지원, 이벤트 발행, 애플리케이션 컨텍스트 계층 지원 등을 제공하며, 개발자가 더 강력하고 유연한 기능을 사용할 수 있도록 해줍니다.
ClassPathXmlApplicationContext,AnnotationConfigApplicationContext등이 ApplicationContext의 구현체입니다.
2. Spring Core의 주요 구성 요소
2.1 Bean 정의 및 설정
Spring Core에서 Bean은 객체의 정의와 설정을 포함하는 핵심 단위입니다.
XML 설정:
applicationContext.xml파일에서 Bean을 정의하고 의존성을 설정할 수 있습니다.Java Config: 자바 클래스를 사용하여
@Configuration어노테이션과@Bean어노테이션으로 Bean을 정의합니다.Annotation:
@Component,@Service,@Repository,@Controller와 같은 어노테이션을 사용하여 Bean을 자동으로 등록할 수 있습니다.
2.2 Bean Lifecycle (Bean 생명주기)
Spring에서 관리하는 Bean은 생성, 초기화, 소멸 단계를 거칩니다.
생성: 컨테이너가 Bean을 생성합니다.
초기화: Bean의 초기화 작업이 필요할 경우
@PostConstruct나init-method등을 통해 초기화 작업을 수행합니다.소멸: Bean이 소멸되기 전에
@PreDestroy나destroy-method등을 통해 정리 작업을 수행합니다.
2.3 Scope (스코프)
Spring에서는 Bean의 생명주기를 정의하는 Scope를 설정할 수 있습니다.
singleton: 기본 스코프로, Spring IoC 컨테이너는 하나의 Bean을 생성하여 모든 요청에 대해 동일한 인스턴스를 제공합니다.
prototype: 요청 시마다 새로운 인스턴스를 생성하여 제공합니다.
request: HTTP 요청마다 하나의 Bean을 생성합니다.
session: HTTP 세션마다 하나의 Bean을 생성합니다.
globalSession: 글로벌 HTTP 세션에 대해 하나의 Bean을 생성합니다.
2.4 AOP (Aspect-Oriented Programming) 지원
AOP는 특정 관심사(공통 기능)를 분리하여 코드 중복을 줄이고 모듈화를 높이는 프로그래밍 기법입니다.
Spring Core는 AOP 기능을 지원하여 트랜잭션 관리, 로깅, 보안 등의 공통적인 작업을 중앙 집중식으로 처리할 수 있게 합니다.
Spring AOP는
@Aspect,@Before,@After등의 어노테이션을 사용하여 설정할 수 있습니다.
3. Spring Core에서 DI와 IoC의 역할
Spring Core는 IoC를 통해 객체의 생성과 생명주기를 관리하며, DI를 통해 객체 간의 의존성을 외부에서 주입합니다.
개발자는 의존 관계를 명시적으로 설정하는 대신, Spring에 의존 관계를 위임하여 객체를 보다 쉽게 관리할 수 있습니다.
4. Spring Core를 사용하는 이유
유연성: Spring은 다양한 구성 방법(XML, Java Config, Annotation)을 지원하여 개발자가 선택할 수 있습니다.
결합도 감소: 객체 간의 결합도를 낮추어 테스트가 용이하고 유지보수가 쉬운 코드를 만들 수 있습니다.
확장성: Spring Core는 다양한 모듈들과 쉽게 결합할 수 있어, 애플리케이션의 확장성이 뛰어납니다.
다양한 기능: Spring Core는 단순한 DI와 IoC 외에도 트랜잭션 관리, AOP 지원, 이벤트 처리 등 다양한 기능을 제공합니다.