하나의 Spring 애플리케이션 안에 여러 기능의 모듈들이 통합되어 있는 구조일 경우, 모든 설정을 하나의 application.properties or application.yml에 넣는다면 파일이 거대해지고 복잡해진다.
이를 개선하기 위한 ModulePropertiesUtils를 만들어보자.
먼저 스프링에서 제공하는 컴포넌트에 대해 정리해보자.
ClassPathResource
Resource resource = new ClassPathResource(path);
- classpath에서 파일을 찾는 클래스
- 빌드 후 target/classes 또는 build/classes 에서 파일 로드
PropertiesFactoryBean
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
propertiesFactoryBean.setLocation(resource);
propertiesFactoryBean.afterPropertiesSet(); // 초기화
Properties properties = propertiesFactoryBean.getObject();
- .properties 파일을 읽어 java.util.Properties 객체로 변환
- Spring이 제공하는 표준 방식
위 컴포넌트를 사용한 ModulePropertiesUtils 클래스 생성한다!
public static Properties loadProperties(String path) {
try {
Resource resource = new ClassPathResource(path); // 파일 리소스 생성
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); // PropertiesFactoryBean 생성
propertiesFactoryBean.setLocation(resource); // 파일 위치 설정
propertiesFactoryBean.afterPropertiesSet(); // 초기화(파일 읽기)
return propertiesFactoryBean.getObject(); // Properties 객체 얻기
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
동작 흐름은 다음과 같다.
1. Configuration 클래스에서 호출 : ModulePropertiesUtils.loadProperties()
@Configuration
public class 모듈AConfiguration{
@Bean("모듈A")
public Properties 모듈AProperties() {
return ModulePropertiesUtils.loadProperties("smartsuite/properties/모듈A.properties");
}
}
2. ClassPathResource로 파일 찾기
3. PropertiesFactoryBean으로 파일 읽기 → Properties 객체 반환
- client.id=abc123 → {client.id=abc123}
4. Spring Bean 컨테이너에 등록
→ ModulePropertiesUtils로 모듈별 properties 로딩이라는 명확한 책임을 가지고, 프로젝트 전반에서 반복되는 로직을 캡슐화할 수 있다.
→ 에러 처리도 통일 가능
'개발' 카테고리의 다른 글
| 반복되는 객체 생성 코드, Builder 패턴으로 개선하기 (0) | 2025.12.08 |
|---|---|
| @Transactional을 붙이면 어떤 일이 일어나는가? (0) | 2025.12.02 |
| Spring AI에 대해 (0) | 2025.10.10 |
| Kubernetes로 스프링 프로젝트 배포하기 (0) | 2025.10.03 |
| SSG를 사용한 나만의 블로그 만들기 (0) | 2025.09.08 |