2025. 3. 9. 11:02ㆍSpring Microservice
📚 Spring Cloud Configuration 활용 가이드
🛠️ @ConfigurationProperties를 이용한 프로퍼티 직접 읽기
🎯 핵심 개념
@ConfigurationProperties
는 Spring에서 프로퍼티 값을 쉽게 클래스 단위로 묶어서 사용할 수 있게 해주는 기능입니다.
🔧 코드 예시:
@ConfigurationProperties(prefix = "example")
@Component
public class ServiceConfig {
private String property;
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
}
prefix="example"
는 프로퍼티 파일에 정의된 프로퍼티 중 접두사가example
인 것들을 가져옵니다.- Spring이 자동으로 프로퍼티와 클래스 내 필드를 매핑해줘서 직접
config.getProperty()
등을 호출하지 않아도 됩니다.
✅ TIP: 개별 클래스마다 프로퍼티를 직접 주입(@Value 사용)하기보다는, 하나의 설정 클래스에 모아서 관리하는 것이 관리하기 편리합니다!
🌟 Spring Cloud Config를 활용한 프로퍼티 새로고침(Refresh)
Spring Boot 앱은 기본적으로 시작 시 프로퍼티를 읽고, 이후 변경된 프로퍼티는 자동으로 감지하지 않아요. 그래서 Spring Cloud Config Server를 사용해도 애플리케이션이 변경사항을 인지하도록 별도의 작업이 필요합니다.
✨ 해결책: @RefreshScope
- Spring Boot Actuator의
/refresh
엔드포인트를 통해 변경된 프로퍼티를 다시 불러올 수 있습니다.
🔖 코드 예시:
@SpringBootApplication
@RefreshScope
public class LicenseServiceApplication {
public static void main(String[] args) {
SpringApplication.run(LicenseServiceApplication.class, args);
}
}
🔖 주의사항:
/refresh
엔드포인트는 Actuator가 활성화되어 있어야 사용할 수 있습니다.- @RefreshScope로 지정한 빈만 재로드되며, 전체 컨텍스트가 재시작되는 건 아닙니다.
🌐 다중 인스턴스 프로퍼티 갱신 전략
Spring Cloud Config로 관리하는 프로퍼티가 변경되었을 때, 여러 서버 인스턴스의 프로퍼티를 모두 업데이트하려면 어떻게 해야 할까요?
📡 방법 1: Spring Cloud Bus 활용
- Spring Cloud Bus를 사용하면 Config Server가 메시지를 모든 클라이언트에 전파합니다.
- Kafka나 RabbitMQ 같은 미들웨어가 필요합니다.
🛠️ 방법 2: 직접 엔드포인트 호출
- 간단한 스크립트로 서비스 디스커버리(Eureka 등)에 등록된 인스턴스를 모두 조회한 후
/refresh
엔드포인트를 호출합니다.
📦 방법 2: Rolling Restart 방식
- 새로운 프로퍼티로 설정된 인스턴스를 먼저 띄운 후 트래픽을 전환하고 이전 인스턴스를 종료합니다.
- 클라우드 환경에서 자주 사용되는 방법입니다.
🌿 Git 기반 Spring Cloud Config Server 구성하기
클라우드 환경에서는 프로퍼티 파일을 로컬 파일 시스템 대신 Git 저장소에 두는 것이 훨씬 효율적입니다.
🗃️ 설정 예시(bootstrap.yml):
spring:
application:
name: config-server
profiles:
active: native, git # 활성화할 프로파일을 나열 (쉼표로 구분)
cloud:
config:
server:
native:
search-locations: classpath:/config # Native 프로파일 사용 시 프로퍼티 파일 위치
git:
uri: https://github.com/ihuaylupo/config.git # Git 백엔드의 저장소 URL
searchPaths: licensingservice # Git 저장소에서 구성 파일을 찾을 디렉토리 경로
default-label: main # 디폴트 브랜치 지정 (생략 시 디폴트 값은 master 또는 main?)
clone-on-start: true # 애플리케이션 시작 시 Git 저장소를 클론할지 여부 (기본값 true)
timeout: 5 # Git 서버 연결 시간 초과 (초 단위, 기본값은 5초)
username: YOUR_GIT_USERNAME # Git 접근 사용자 이름 (private 저장소일 경우 필수)
password: YOUR_GIT_TOKEN_OR_PASSWORD # Git 접근 토큰 또는 암호 (private 저장소일 경우 필수)
skip-ssl-validation: false # SSL 검증 여부 설정 (자체 서명 인증서 사용 시 true로 설정)
server:
port: 8071 # Config Server가 실행될 포트 설정 (기본 포트: 8888)
🔍 각 설정 상세 설명
- spring.application.name
- 애플리케이션의 이름 지정 (여기서는 config-server로 명시).
- spring.profiles.active
- 활성화할 프로파일 목록을 지정합니다.
- 여러 프로파일을 쉼표로 구분하여 명시 가능 (native, git, 등).
- 프로파일 순서는 중요하며, 뒤쪽 프로파일이 우선순위를 가집니니다.
- 예: native, git로 설정하면 git 프로파일 설정이 우선 적용됩니다.
- Native 프로파일 (native)
- Config Server가 Git 저장소 대신 로컬의 파일 시스템에서 프로퍼티를 읽어오는 방식입니다.
- search-locations는 프로퍼티 파일이 위치한 로컬 경로를 지정하며, classpath 또는 절대 경로로 설정 가능합니다.
- 주로 로컬 개발 환경에서 빠르게 설정을 확인할 때 사용됩니다.
- Git 프로파일 (git)
- Config Server가 Git 저장소를 백엔드로 사용하는 방식입니다.
- uri: 사용할 Git 저장소의 URL을 지정합니다.
- searchPaths: Git 저장소 내에서 프로퍼티 파일이 위치한 상대 경로를 설정합니다.
- 여러 디렉토리를 지정할 경우 쉼표로 구분할 수 있습니다.
- default-label: Git의 기본 브랜치를 설정합니다.
- 명시하지 않으면 기본 브랜치는 master를 사용합니다.
- clone-on-start: Config Server 시작 시 Git 저장소를 즉시 클론할지 여부를 설정합니다.
- 기본적으로 true이며, 애플리케이션 구동과 동시에 최신 설정을 받아옵니다.
- timeout: Git 저장소에 연결하는데 걸리는 최대 시간(초 단위)을 지정합니다. 기본값은 5초입니다.
- username 및 password: Git 저장소가 비공개(private)일 경우 인증 정보가 필수입니다.
- GitHub 등에서 개인 접근 토큰(Personal Access Token)을 발급받아 설정합니다.
- GitHub의 경우 개인 토큰을 password 항목에 입력합니다.
- skip-ssl-validation: 자체 서명 인증서를 사용하는 Git 서버의 SSL 검증을 무시할지 여부입니다.
- 일반적인 공개 저장소는 false로 두고 사용하며, 특정 사내 서버 등에서는 true로 설정하기도 합니다.
- server.port
- Config Server가 실행될 포트를 명시합니다.
- 기본 포트는 8888이지만, 본 예시에서는 8071로 변경하여 사용 중입니다.
💡 장점:
- 설정 파일 변경 이력을 Git으로 관리 가능
- 빌드 및 배포 파이프라인과 쉽게 통합
- 개발 및 운영환경 간의 설정 공유가 간편함
🎯 Summary:
- @ConfigurationProperties로 설정 값을 쉽고 깔끔하게 관리하세요.
- @RefreshScope와 Spring Cloud Config를 통해 동적으로 설정을 변경하고 적용 가능!
- Git을 백엔드 저장소로 사용하면 설정 관리가 더 간편하고 효율적입니다.
이렇게 하면 Spring 환경에서 프로퍼티를 효과적으로 관리할 수 있습니다. ✨😊
'Spring Microservice' 카테고리의 다른 글
Spring Microservices in Action Chapter05 프로젝트 (0) | 2025.03.13 |
---|---|
Spring Cloud Config 서비스와 Vault 연동을 통한 보안 설정 관리 및 UI 활용 (0) | 2025.03.09 |
Spring Cloud Config 서버를 이용한 Data Source 설정 (1) | 2025.03.07 |
Spring Cloud Config 서비스와 라이선싱 서비스 연동 설정 (0) | 2025.03.07 |
Setting up the configuration files for a service (0) | 2025.03.04 |