1.3.2 Spring의 핵심 개념

Spring Framework는 자바 엔터프라이즈 개발을 위한 포괄적인 솔루션을 제공하는 경량화된 프레임워크입니다. Spring의 핵심 개념은 애플리케이션 개발의 복잡성을 줄이고, 개발자가 비즈니스 로직에 더 집중할 수 있게 도와줍니다.

IoC(Inversion of Control)와 DI(Dependency Injection)

IoC(Inversion of Control)는 객체의 생성과 생명 주기 관리를 개발자가 아닌 프레임워크가 담당하는 원칙입니다. 이를 통해 코드의 결합도를 낮추고, 유연성 및 확장성을 향상시킬 수 있습니다.

DI(Dependency Injection)는 IoC의 한 형태로, 객체 간의 의존성을 외부에서 주입하는 방식입니다. 이는 각 클래스가 자신의 의존성을 직접 생성하지 않고, 외부에서 주입받음으로써 결합도를 낮추고, 유닛 테스트의 용이성을 높입니다.

public class MyService {
    private MyRepository repository;

    @Autowired
    public MyService(MyRepository repository) {
        this.repository = repository;
    }
}

Bean 생명주기 및 스코프

Spring에서 객체는 Bean으로 관리되며, Bean은 ApplicationContext에 의해 생성, 관리됩니다. Bean의 생명주기는 생성, 사용 및 소멸 단계를 포함하며, Spring은 Bean의 전체 생명주기에 걸쳐 다양한 콜백을 제공합니다.

Bean 스코프는 Bean이 존재할 수 있는 컨텍스트를 정의합니다. 예를 들어, singleton 스코프는 애플리케이션 내에서 단 하나의 Bean 인스턴스만 존재하도록 하며, prototype 스코프는 Bean이 필요할 때마다 새 인스턴스를 생성합니다.

@Component
@Scope("prototype")
public class MyPrototypeBean {
}

Spring 애노테이션 기반 설정

Spring은 애노테이션을 통한 설정을 지원하여, XML 기반의 복잡한 설정 없이도 의존성 주입, 컴포넌트 스캔, 트랜잭션 관리 등을 손쉽게 구성할 수 있게 해줍니다.

  • @Component, @Service, @Repository, @Controller: 클래스를 Spring Bean으로 등록합니다.
  • @Autowired: 필드, 생성자, 메서드에 의존성 주입을 위해 사용됩니다.
  • @Configuration, @Bean: 자바 기반의 설정을 정의할 때 사용됩니다.
@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

Spring의 이러한 핵심 개념들은 강력하면서도 유연한 애플리케이션 개발을 가능하게 해줍니다. IoC와 DI를 통해 코드의 결합도를 낮추고, Bean 생명주기와 스코프를 관리함으로써 애플리케이션의 확장성과 유지 보수성을 크게 향상시킬 수 있습니다. 애노테이션 기반 설정은 개발자가 보다 직관적이고 간결하게 애플리케이션을 구성할 수 있게 도와줍니다.

source: DevOps/1.Programming_Languages_&_Frameworks/1.3.Spring/1.3.2.md