Spring

Spring 설정 및 구성

Spring Framework는 다양한 설정 방법을 제공합니다. XML 기반 설정, 자바 기반 설정, 애너테이션 기반 설정 세 가지 방법이 있습니다. 각 방법은 특정 상황에 맞게 유연하게 사용될 수 있습니다.

4.1 XML 기반 설정

개념 설명

XML 기반 설정은 Spring의 전통적인 설정 방법으로, Spring의 초기 버전부터 사용되었습니다. 설정 파일에서 빈을 정의하고 의존성을 주입할 수 있습니다.

예제 코드

<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
 
    <!-- MyRepository 빈 정의 -->
    <bean id="myRepository" class="com.example.MyRepositoryImpl"/>
 
    <!-- MyService 빈 정의 -->
    <bean id="myService" class="com.example.MyServiceImpl">
        <!-- 의존성 주입 -->
        <constructor-arg ref="myRepository"/>
    </bean>
</beans>

실행 코드

public class MainApp {
    public static void main(String[] args) {
        // ClassPathXmlApplicationContext를 사용하여 Spring 컨텍스트를 초기화합니다.
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
 
        // 컨텍스트에서 MyService 타입의 빈을 가져옵니다.
        MyService myService = context.getBean(MyService.class);
 
        // myService 객체의 메서드를 호출하여 작업을 수행합니다.
        myService.performTask();
    }
}

설명:

  • ClassPathXmlApplicationContext: XML 설정 파일을 읽어들이기 위해 사용되는 Spring 컨텍스트입니다.
  • XML 파일에서 <bean> 태그를 사용하여 빈을 정의하고, ref 속성을 통해 의존성을 주입합니다.

4.2 자바 기반 설정

개념 설명

자바 기반 설정은 Spring 3.0 이후 도입된 방법으로, 자바 클래스를 사용하여 Spring 빈을 정의하고 설정할 수 있습니다. 이는 타입 안전성과 IDE 지원을 향상시키는 장점이 있습니다.

예제 코드

@Configuration
public class AppConfig {
 
    @Bean
    public MyRepository myRepository() {
        return new MyRepositoryImpl();
    }
 
    @Bean
    public MyService myService() {
        return new MyServiceImpl(myRepository());
    }
}

실행 코드

public class MainApp {
    public static void main(String[] args) {
        // AnnotationConfigApplicationContext를 사용하여 Spring 컨텍스트를 초기화합니다.
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
 
        // 컨텍스트에서 MyService 타입의 빈을 가져옵니다.
        MyService myService = context.getBean(MyService.class);
 
        // myService 객체의 메서드를 호출하여 작업을 수행합니다.
        myService.performTask();
    }
}

설명:

  • @Configuration: 이 클래스가 Spring 설정 클래스임을 나타냅니다.
  • @Bean: 이 메서드가 반환하는 객체를 Spring IoC 컨테이너에서 관리하는 빈으로 등록합니다.
  • AnnotationConfigApplicationContext: 자바 기반 설정 파일을 읽어들이기 위해 사용되는 Spring 컨텍스트입니다.

4.3 애너테이션 기반 설정

개념 설명

애너테이션 기반 설정은 Spring 2.5 이후 도입된 방법으로, 클래스와 메서드에 애너테이션을 사용하여 빈을 정의하고 설정할 수 있습니다. 이는 간결하고 직관적인 설정 방법을 제공합니다.

예제 코드

@Service
public class MyServiceImpl implements MyService {
 
    private final MyRepository myRepository;
 
    @Autowired
    public MyServiceImpl(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
 
    @Override
    public void performTask() {
        System.out.println("Task performed by MyServiceImpl.");
        myRepository.save();
    }
}
 
@Repository
public class MyRepositoryImpl implements MyRepository {
    @Override
    public void save() {
        System.out.println("Data saved by MyRepositoryImpl.");
    }
}
 
@SpringBootApplication
public class Application {
 
    public static void main(String[] args) {
        // SpringApplication.run을 사용하여 애플리케이션을 실행하고 IoC 컨테이너를 초기화합니다.
        ApplicationContext context = SpringApplication.run(Application.class, args);
 
        // 컨텍스트에서 MyService 타입의 빈을 가져옵니다.
        MyService myService = context.getBean(MyService.class);
 
        // myService 객체의 메서드를 호출하여 작업을 수행합니다.
        myService.performTask();
    }
}

설명:

  • @Service: 이 클래스가 서비스 레이어의 빈임을 나타냅니다.
  • @Autowired: 이 애너테이션은 생성자, 필드 또는 메서드에 의존성을 주입합니다.
  • @Repository: 이 클래스가 데이터 액세스 계층의 빈임을 나타냅니다.
  • @SpringBootApplication: 이 애너테이션은 Spring Boot 애플리케이션의 진입점임을 나타냅니다.
  • SpringApplication.run(Application.class, args): 애플리케이션을 실행하고 IoC 컨테이너를 초기화합니다.

Spring의 설정 및 구성 방법에 대해 알아보았습니다. 각 방법은 특정 상황에 따라 유연하게 사용할 수 있으며, 이를 통해 Spring 애플리케이션의 설정을 간편하고 효율적으로 관리할 수 있습니다.

다음 글에서는 웹 애플리케이션 개발에 대해 자세히 알아보겠습니다.

On this page