Spring Boot에서 Config 클래스를 처리하는 방법
Spring Boot에서 Config 클래스를 처리하는 방법
Spring Boot에서는 설정 정보를 관리하고 응용 프로그램 전반에서 사용할 수 있도록 Config 클래스를 작성하는 방식이 널리 사용됩니다. Config 클래스는 주로 @Configuration
어노테이션과 함께 사용되며, 빈(Bean)을 정의하거나 애플리케이션의 다양한 설정을 처리하는 데 활용됩니다. 이 글에서는 Spring Boot에서 Config 클래스를 작성하고 사용하는 방법을 단계별로 설명합니다.
1. Config 클래스란?
Config 클래스는 Spring Framework의 구성 요소로, 주로 @Configuration
어노테이션이 붙은 클래스를 의미합니다. 이 클래스는 애플리케이션 컨텍스트에서 사용할 빈을 정의하거나, 설정 값을 관리하는 데 사용됩니다.
빈(Bean)이란 Spring IoC 컨테이너에서 관리되는 객체로, 주로 애플리케이션의 주요 컴포넌트나 서비스 클래스의 인스턴스를 지칭합니다. 이는 프레임워크가 객체의 생명주기와 의존성을 관리하여 개발자가 수동으로 객체를 생성하거나 관리하지 않도록 돕는 인스턴스를 의미합니다. 이러한 빈은 재사용 가능하며, 의존성 주입(Dependency Injection)을 통해 다른 클래스와의 관계를 효율적으로 관리할 수 있습니다.
장점:
- XML 기반 설정 대신 자바 코드를 사용하여 설정 관리
- 가독성과 유지보수성 향상
- 타입 안전성을 제공
2. Config 클래스 생성
- @Configuration 어노테이션 사용
@Configuration
어노테이션을 사용하여 Spring Boot에서 Config 클래스를 정의합니다. 이 어노테이션은 해당 클래스가 하나 이상의 빈을 정의하며 Spring 컨테이너에서 관리된다는 것을 의미합니다.
예제:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
설명:
@Bean
어노테이션: Spring 컨테이너에 등록될 빈을 정의합니다.MyService
객체는 애플리케이션 컨텍스트에서 관리됩니다.
3. 외부 설정 값 사용
Spring Boot는 application.properties
또는 application.yml
파일에서 설정 값을 읽어와 Config 클래스에서 사용할 수 있도록 지원합니다.
- application.yml 파일 작성:
app:
name: MySpringBootApp
version: 1.0.0
- @ConfigurationProperties 사용:
@ConfigurationProperties
어노테이션을 사용하여 외부 설정 값을 Config 클래스에 매핑합니다.
예제:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String name;
private String version;
// Getter와 Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
- 사용:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;
@RestController
public class AppController {
private final AppConfig appConfig;
@Autowired
public AppController(AppConfig appConfig) {
this.appConfig = appConfig;
}
@GetMapping("/app-info")
public String getAppInfo() {
return "App Name: " + appConfig.getName() + ", Version: " + appConfig.getVersion();
}
}
---
#### 4. 환경별 설정 관리
Spring Boot의 프로파일(Profile) 기능을 사용하여 환경별 설정을 관리할 수 있습니다.
1. **application.yml 파일 작성:**
```yaml
spring:
profiles:
active: dev
---
spring:
profiles: dev
app:
name: MySpringBootApp-Dev
version: 1.0.0-dev
---
spring:
profiles: prod
app:
name: MySpringBootApp-Prod
version: 1.0.0-prod
- 활성화된 프로파일에 따른 설정 적용:
- 개발 환경에서는
application-dev.yml
설정 사용 - 운영 환경에서는
application-prod.yml
설정 사용
5. @Bean 어노테이션으로 빈 관리
@Bean
어노테이션을 사용하여 Config 클래스에서 애플리케이션 컨텍스트에 빈을 등록할 수 있습니다.
예제:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ServiceConfig {
@Bean
public MyService myService() {
return new MyService();
}
@Bean
public MyRepository myRepository() {
return new MyRepository();
}
}
사용:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MyService {
private final MyRepository myRepository;
@Autowired
public MyService(MyRepository myRepository) {
this.myRepository = myRepository;
}
public String performService() {
return "Service performed using repository!";
}
}
6. Config 클래스 테스트
테스트 코드 작성:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@SpringBootTest
public class AppConfigTest {
@Autowired
private MyService myService;
@Test
public void testMyServiceBean() {
assertNotNull(myService);
}
}
7. 마무리
Spring Boot에서 Config 클래스를 활용하면 설정 값 관리, 빈 정의, 환경별 설정 등을 효율적으로 처리할 수 있습니다. 위의 내용을 바탕으로 자신의 애플리케이션에 적합한 Config 클래스를 작성해 보세요!