마이크로서비스 환경에서는 여러 서비스가 동시에 동작하기 때문에, 각 서비스의 설정 파일(application.yml 등)을 개별적으로 관리하면 유지보수가 매우 어렵습니다. 이 문제를 해결하기 위해 Spring Cloud는 Config Server를 제공합니다.
Spring Cloud Config란?
Spring Cloud Config는 분산 환경에서 각 서비스의 환경 설정을 중앙에서 관리할 수 있도록 해주는 구성 관리 서버입니다. 하나의 Config 서버가 여러 서비스의 설정 파일을 관리하며, 각 서비스는 실행 시 Config 서버를 통해 설정 정보를 가져옵니다.
이 방식은 다음과 같은 장점이 있습니다:
- 환경별 설정 관리 용이: 개발(dev), 스테이징(staging), 운영(prod) 설정을 중앙에서 통합 관리
- 무중단 설정 변경: 서비스 재배포 없이 설정 변경 반영 가능 (Spring Cloud Bus와 연계)
- 버전 관리 가능: Git 연동을 통한 설정 이력 추적 및 롤백 가능
Config 서버 구조 이해
Spring Cloud Config 서버는 크게 두 부분으로 구성됩니다:
- Config Server: 설정 정보를 관리하고 외부로 제공하는 중앙 서버
- Config Client: Config Server에서 설정을 가져와 사용하는 각 마이크로서비스
+-------------------+ +-------------------------+
| Config Server | ---> | Client Application A |
| (Git Repository) | | Client Application B |
+-------------------+ +-------------------------+
각 클라이언트 서비스는 자신에게 필요한 설정을 Config Server에서 가져옵니다. 이때 Config Server는 Git, SVN, 또는 로컬 디렉토리 등 다양한 저장소를 설정 소스로 사용할 수 있습니다.
Config Server 구축 단계
1. 의존성 추가 (Gradle)
Spring Boot 프로젝트를 생성한 후, build.gradle에 아래 의존성을 추가합니다.
implementation 'org.springframework.cloud:spring-cloud-config-server'
implementation 'org.springframework.boot:spring-boot-starter-web'
2. 메인 클래스 설정
Config Server를 활성화하려면 @EnableConfigServer 애노테이션을 추가합니다.
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
3. application.yml 설정
Config Server는 Git 저장소 또는 로컬 경로에서 설정 파일을 읽어옵니다. 아래는 Git 연동 예시입니다.
server:
port: 8888
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://github.com/example/config-repo
default-label: main
search-paths:
- config
위 설정은 GitHub의 example/config-repo 저장소에서 설정 파일을 읽어오도록 구성한 예시입니다.
4. Git 저장소 구성
Git 저장소에는 각 서비스별 설정 파일을 환경별로 구분하여 저장합니다.
config-repo/
├── user-service-dev.yml
├── user-service-prod.yml
├── order-service-dev.yml
└── order-service-prod.yml
이때 Config Client는 자신의 서비스명과 프로필(dev, prod 등)에 따라 적절한 설정 파일을 자동으로 가져옵니다.
Config Client 설정 예시
각 마이크로서비스에서는 bootstrap.yml 파일에 Config Server 주소를 명시해야 합니다.
spring:
application:
name: user-service
profiles:
active: dev
cloud:
config:
uri: http://localhost:8888
이렇게 설정하면 user-service-dev.yml 파일이 자동으로 로드됩니다.
Config Server 응답 확인
Config Server를 실행한 후 아래 주소로 접근하면 설정이 올바르게 제공되는지 확인할 수 있습니다.
http://localhost:8888/user-service/dev
정상적으로 설정 파일이 로드되면 JSON 형식으로 설정 내용이 반환됩니다.
실무에서의 베스트 프랙티스
- 환경 분리: dev/staging/prod 환경별로 별도 설정 파일 구성
- 보안 설정: DB 비밀번호, API 키 등은 암호화 후 Config Server에 저장 (Spring Cloud Config Encrypt)
- 무중단 반영: Spring Cloud Bus + RabbitMQ를 통해 설정 변경 자동 반영
- Git 브랜치 전략: main(운영), develop(테스트) 등으로 분리하여 설정 안정성 확보
Config Server 보안 강화
운영 환경에서는 Config Server에 Spring Security를 적용하여 인증을 거쳐야만 접근할 수 있도록 해야 합니다.
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
이렇게 하면 Git 설정을 외부에서 임의로 접근할 수 없게 보호할 수 있습니다.
Config Server와 Spring Cloud Bus 연동
Config Server와 Bus를 연동하면, 설정 변경 시 모든 마이크로서비스에 즉시 변경 내용을 반영할 수 있습니다.
implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
Git에 설정을 수정한 후 아래 엔드포인트를 호출하면 모든 서비스가 자동으로 새 설정을 반영합니다.
POST http://config-server:8888/actuator/busrefresh
이 기능은 운영 환경에서 무중단 설정 배포를 구현할 때 필수적입니다.
주의할 점
- Config Server 장애 시 전체 서비스 구동 실패 가능 → 이중화 구성 필요
- Git 저장소 접근 속도에 따라 초기 구동 시간 증가 가능
- 민감정보 암호화 필수 (
encrypt.key설정 활용) - Config Client는
bootstrap.yml에 설정을 반드시 위치시켜야 함
Spring Cloud Config 서버는 마이크로서비스 환경의 핵심 인프라 중 하나로, 중앙화된 설정 관리와 서비스 간 일관성을 제공합니다. 올바르게 구성하면 서비스 배포 주기를 단축하고, 운영 효율성을 극대화할 수 있습니다.
'개발 > JAVA' 카테고리의 다른 글
| Eureka로 서비스 디스커버리 구현하기 - 마이크로서비스의 핵심 인프라 구성 (0) | 2025.11.06 |
|---|---|
| Spring Cloud Gateway로 API 게이트웨이 만들기 - 마이크로서비스 통합의 핵심 구성 (0) | 2025.11.05 |
| [JAVA] Spring Cloud 소개 — 마이크로서비스 아키텍처의 핵심 구성 이해 (0) | 2025.11.03 |
| [JAVA] Spring Batch와 JPA 연동하기 — 대량 데이터 처리에서의 효율적인 영속성 관리 (0) | 2025.11.02 |
| [JAVA] Spring Batch 기초 — 대량 데이터 처리를 위한 실무 중심 가이드 (0) | 2025.11.01 |
