Spring Core

Kkd·2024년 12월 15일
0

매일메일 개념정리

목록 보기
29/93
post-thumbnail

Spring Core는 Spring Framework의 핵심 모듈로, 애플리케이션의 기반이 되는 기능들을 제공합니다. Spring Core는 의존성 주입(DI)제어의 역전(IoC)를 중심으로 애플리케이션 컴포넌트를 관리합니다. 이를 통해 객체 간의 결합도를 줄이고, 코드의 재사용성과 테스트 용이성을 높입니다.


1. Spring Core의 주요 개념

1.1 IoC (Inversion of Control, 제어의 역전)

  • 객체의 생성과 의존성 관리를 개발자가 아닌 Spring IoC 컨테이너가 담당하는 방식입니다.
  • 객체가 직접 의존성을 생성하거나 관리하지 않고, 외부에서 주입받습니다.
  • 장점: 객체 간의 결합도를 낮추고, 코드 변경 없이 다른 구현체로 쉽게 교체 가능합니다.

1.2 DI (Dependency Injection, 의존성 주입)

  • IoC의 한 가지 구현 방법으로, 필요한 객체를 외부에서 주입하는 방식입니다.
  • 의존성 주입 방식:
    1. 생성자 주입(Constructor Injection):
      • 객체 생성 시 필요한 의존성을 주입합니다.
    2. Setter 주입(Setter Injection):
      • 객체 생성 후 setter 메서드를 통해 의존성을 주입합니다.
    3. 필드 주입(Field Injection):
      • @Autowired를 사용하여 직접 필드에 주입합니다. (권장하지 않음)

2. Spring Core의 주요 구성 요소

2.1 Bean

  • Bean은 스프링 IoC 컨테이너가 관리하는 객체를 의미합니다.
  • Spring에서는 객체를 Bean으로 등록하여 의존성을 관리합니다.
  • Bean 등록 방법:
    1. 어노테이션 기반 등록:
      @Component
      public class MyService { }
      • @Component, @Service, @Repository, @Controller와 같은 어노테이션으로 Bean을 등록합니다.
    2. Java Config 기반 등록:
      @Configuration
      public class AppConfig {
          @Bean
          public MyService myService() {
              return new MyService();
          }
      }
    3. XML 기반 등록:
      <bean id="myService" class="com.example.MyService"/>

2.2 ApplicationContext

  • ApplicationContext는 Spring IoC 컨테이너의 구현체로, Bean의 생성, 의존성 주입, 생명주기 관리 등을 담당합니다.
  • 주요 구현체:
    1. AnnotationConfigApplicationContext: Java Config 기반 설정.
    2. ClassPathXmlApplicationContext: XML 기반 설정.
    3. GenericApplicationContext: 유연한 설정 지원.

2.3 Spring에서 제공하는 주요 어노테이션

  1. @Component:
    • 일반적인 Bean을 정의할 때 사용합니다.
    • @Service, @Repository, @Controller는 이를 확장한 특수 어노테이션입니다.
  2. @Autowired:
    • Bean 간의 의존성을 자동으로 주입합니다.
    • 주로 생성자, Setter, 필드에 사용됩니다.
  3. @Qualifier:
    • 동일한 타입의 Bean이 여러 개 있을 때 특정 Bean을 선택합니다.
  4. @Configuration:
    • Java 기반 설정 클래스를 정의합니다.
  5. @Bean:
    • 메서드를 통해 Bean을 등록합니다.

3. Bean의 생명주기

  1. 객체 생성:
    IoC 컨테이너가 Bean을 생성합니다.
  2. 의존성 주입:
    컨테이너가 Bean의 의존성을 주입합니다.
  3. 초기화(Initialization):
    초기화 메서드(@PostConstruct 또는 InitializingBean)가 호출됩니다.
  4. 사용:
    애플리케이션에서 Bean이 사용됩니다.
  5. 소멸(Destruction):
    컨테이너가 종료되면서 Bean의 소멸 메서드(@PreDestroy 또는 DisposableBean)가 호출됩니다.

4. Spring Core의 주요 기능

4.1 의존성 주입 (DI)

@Component
public class Car {
    private final Engine engine;

    @Autowired
    public Car(Engine engine) {
        this.engine = engine;  // 생성자 주입
    }
}

4.2 스코프 관리 (Bean Scope)

  • Spring은 Bean의 스코프를 통해 객체의 생명주기를 관리합니다.
  • 주요 스코프:
    1. Singleton (기본값):
      애플리케이션 내에서 하나의 인스턴스만 생성됩니다.
    2. Prototype:
      요청마다 새로운 인스턴스를 생성합니다.
    3. Request, Session, Application:
      웹 애플리케이션 환경에서 요청, 세션, 애플리케이션 범위로 생명주기를 설정합니다.

4.3 AOP (Aspect-Oriented Programming)

  • 횡단 관심사(로깅, 트랜잭션 관리 등)를 비즈니스 로직과 분리합니다.
  • 핵심 어노테이션:
    • @Aspect: 클래스 정의.
    • @Before, @After, @Around: 메서드 실행 시점 정의.

4.4 이벤트 기반 프로그래밍

  • ApplicationEvent를 사용하여 비동기 이벤트를 처리합니다.
@Component
public class MyEventListener implements ApplicationListener<MyEvent> {
    @Override
    public void onApplicationEvent(MyEvent event) {
        System.out.println("Event Received: " + event.getMessage());
    }
}

5. Spring Core 학습 포인트

  1. DI와 IoC 개념을 깊게 이해하기.
  2. Bean 등록 방법 (어노테이션, Java Config, XML) 연습하기.
  3. ApplicationContext 활용법 익히기.
  4. AOP를 통해 공통 로직 분리해보기.
  5. Bean의 생명주기를 활용한 초기화 및 종료 작업 구현.

Spring Core는 스프링의 기반으로, 이 부분을 이해하면 Spring MVC, Spring Data JPA, Spring Security 등의 고급 기능도 더 쉽게 이해할 수 있습니다.

profile
🌱

0개의 댓글