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의 초기화 작업이 필요할 경우 @PostConstructinit-method 등을 통해 초기화 작업을 수행합니다.

    • 소멸: Bean이 소멸되기 전에 @PreDestroydestroy-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 지원, 이벤트 처리 등 다양한 기능을 제공합니다.