본문 바로가기
Spring Study

스프링 프레임워크에서의 메타데이터

by xogns93 2024. 8. 11.

스프링 프레임워크에서 메타데이터는 애플리케이션의 설정과 관련된 정보를 말하며, 이를 통해 스프링 컨테이너는 애플리케이션에서 어떤 빈(Bean)을 생성하고 관리할지 결정합니다. 스프링에서는 메타데이터를 여러 방식으로 정의할 수 있습니다. 그 중 자바 기반의 설정과 어노테이션 기반의 설정은 주요한 두 가지 방식입니다.

1. 자바 기반의 Configuration 메타데이터

자바 기반의 설정은 XML 기반의 설정을 대체하거나 보완하는 방법으로, 스프링 3.0부터 지원되었습니다. 이 방식에서는 자바 클래스를 사용하여 스프링 빈을 정의하고, 애플리케이션 컨텍스트를 설정할 수 있습니다.

자바 기반의 설정에서 메타데이터는 주로 @Configuration과 @Bean 애노테이션을 사용하여 정의됩니다.

주요 어노테이션

  • @Configuration: 이 애노테이션을 사용하여 자바 클래스를 스프링 설정 클래스(Configuration Class)로 표시합니다. 이 클래스는 스프링 컨테이너에 의해 관리되며, 내부에 정의된 빈들을 스프링 컨텍스트에 등록합니다.
  • @Bean: 이 애노테이션은 메서드에 적용되어, 해당 메서드가 반환하는 객체를 스프링 컨테이너에 빈으로 등록합니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyService(myRepository()); // MyService를 빈으로 등록
    }

    @Bean
    public MyRepository myRepository() {
        return new MyRepository(); // MyRepository를 빈으로 등록
    }
}
  • AppConfig 클래스는 @Configuration 애노테이션으로 스프링 설정 클래스임을 나타냅니다.
  • myService()와 myRepository() 메서드는 각각 @Bean 애노테이션을 가지고 있으며, 이 메서드들이 반환하는 객체들은 스프링 컨테이너에 의해 빈으로 관리됩니다.

 

2. 어노테이션 기반의 메타데이터

스프링은 다양한 어노테이션을 통해 빈의 스캔 및 관리를 자동화할 수 있습니다. 컴포넌트 스캔(Component Scan) 기능을 활용하여 특정 패키지를 스캔하고, @Component, @Service, @Repository, @Controller 등의 애노테이션이 붙은 클래스를 자동으로 빈으로 등록할 수 있습니다.

주요 어노테이션

  • @Component: 일반적인 스프링 빈으로 등록될 클래스를 표시합니다.
  • @Service: 비즈니스 로직을 처리하는 서비스 레이어의 빈으로 등록될 클래스를 표시합니다. @Component와 기능적으로 동일하지만, 의미적으로 구분하기 위해 사용됩니다.
  • @Repository: 데이터 접근 계층(DAO)의 빈으로 등록될 클래스를 표시합니다. 데이터베이스와의 상호작용을 처리하는 클래스에 주로 사용됩니다.
  • @Controller: 웹 애플리케이션의 컨트롤러 레이어에서 사용됩니다. 웹 요청을 처리하고, 뷰를 반환하는 역할을 합니다.
  • @RestController: RESTful 웹 서비스를 위한 컨트롤러 클래스를 나타냅니다. 주로 JSON 또는 XML 데이터를 반환합니다.
import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    public void doSomething() {
        System.out.println("Component is doing something.");
    }
}
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // 컴포넌트 스캔을 통해 com.example 패키지의 모든 @Component 등을 자동으로 스캔하고 빈으로 등록
}

 

  • @Component 애노테이션이 붙은 MyComponent 클래스는 스프링 컨테이너에 의해 자동으로 빈으로 등록됩니다.
  • AppConfig 클래스는 @ComponentScan을 사용하여 특정 패키지에서 @Component 애노테이션이 붙은 클래스를 자동으로 스캔하고 빈으로 등록합니다.

 

 

요약

  • 자바 기반의 Configuration 메타데이터: @Configuration과 @Bean 애노테이션을 사용하여 자바 클래스를 스프링 설정 클래스로 만들고, 메서드를 통해 빈을 등록합니다. 이는 XML 기반 설정을 대체하는 현대적인 설정 방법입니다.
  • 어노테이션 기반의 메타데이터: @Component, @Service, @Repository, @Controller와 같은 어노테이션을 사용하여 빈을 정의하고, 스프링 컨테이너에 의해 자동으로 스캔되고 관리되도록 합니다. @ComponentScan을 사용하면 특정 패키지에서 이러한 어노테이션을 스캔하여 빈으로 등록할 수 있습니다.