스프링 프레임워크에서 메타데이터는 애플리케이션의 설정과 관련된 정보를 말하며, 이를 통해 스프링 컨테이너는 애플리케이션에서 어떤 빈(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을 사용하면 특정 패키지에서 이러한 어노테이션을 스캔하여 빈으로 등록할 수 있습니다.

 

+ Recent posts