스프링 부트 3의 등장으로 많은 개발자들이 현대적인 기술 스택을 활용하여 더 나은 애플리케이션을 개발할 수 있는 기반이 마련되었습니다. 그중 Spring Cloud Config는 마이크로서비스 환경에서 구성 관리를 단순화하고 중앙 집중화를 가능하게 하는 중요한 도구입니다. 이번 글에서는 Spring Boot 3에서 Cloud Config Server를 사용해 애플리케이션의 구성을 관리하는 방법을 단계별로 알아보겠습니다.
목차
- Cloud Config Server란?
- Cloud Config Server의 주요 기능
- Spring Boot 3와의 통합 준비
- Config Server 설정 및 구현
- Client 애플리케이션과의 연동
- 구성 갱신 및 동기화 방법
- 예제: 실제 구현 사례
1. Cloud Config Server란?
Spring Cloud Config Server는 애플리케이션 구성 데이터를 중앙에서 관리하고 배포할 수 있도록 설계된 서버입니다. 이는 특히 마이크로서비스 아키텍처에서 매우 유용합니다. 다음과 같은 문제를 해결합니다:
- 여러 서비스의 구성 설정을 통합적으로 관리
- 구성 변경 사항을 실시간으로 적용
- 환경별(개발, 테스트, 운영) 구성 분리
- 외부 Git, 파일 시스템 등을 활용한 구성 저장소 사용
2. Cloud Config Server의 주요 기능
Spring Cloud Config Server가 제공하는 주요 기능은 다음과 같습니다:
- 중앙 집중화: 모든 서비스의 설정을 한 곳에서 관리.
- 환경 별 설정: application-{profile}.properties와 같은 방식으로 환경에 따라 다른 설정 제공.
- 외부 저장소 지원: Git, SVN, 파일 시스템 등 다양한 저장소와 통합.
- 동적 갱신: 설정 변경 시 클라이언트 애플리케이션에서 실시간 반영(Actuator Refresh 기능 활용).
3. Spring Boot 3와의 통합 준비
스프링 부트 3에서 Config Server를 사용하기 위해 다음 사항들을 준비해야 합니다:
1) 의존성 추가
먼저 Spring Initializr에서 필요한 의존성을 추가합니다. spring-cloud-config-server와 spring-cloud-starter-bootstrap이 필수적입니다.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
2) Spring Cloud BOM 설정
Spring Boot 3와 호환되는 Spring Cloud 버전을 명시합니다.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2023.0.0</version> <!-- 호환되는 최신 버전 확인 -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
4. Config Server 설정 및 구현
1) 서버 애플리케이션 생성
Config Server는 별도의 독립 애플리케이션으로 구성하는 것이 일반적입니다.
- 애플리케이션 속성 파일 작성
application.properties 또는 application.yml 파일에서 저장소 경로를 지정합니다. - spring.application.name=config-server server.port=8888 spring.cloud.config.server.git.uri=https://github.com/your-repo/config-repo spring.cloud.config.server.git.clone-on-start=true
- 메인 클래스 수정 @EnableConfigServer 애너테이션을 추가해 Config Server를 활성화합니다.
- @SpringBootApplication @EnableConfigServer public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
- Git 저장소 준비
설정 파일들을 저장할 Git 저장소를 생성하고, 예를 들어 application.properties, application-dev.properties 등을 저장합니다.
5. Client 애플리케이션과의 연동
Config Server를 통해 설정을 불러오려면 클라이언트 애플리케이션에서 몇 가지 설정이 필요합니다.
- 클라이언트 의존성 추가 클라이언트 쪽에 spring-cloud-starter-config 의존성을 추가합니다.
- <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
- bootstrap.yml 설정 클라이언트 애플리케이션에서 Config Server URL과 환경을 설정합니다.
- spring: application: name: my-service cloud: config: uri: http://localhost:8888 fail-fast: true
- 환경에 따른 설정 불러오기 Config Server에 저장된 my-service-dev.properties 파일과 같이 환경에 맞는 설정을 자동으로 가져옵니다.
6. 구성 갱신 및 동기화 방법
구성을 변경했을 때 클라이언트가 이를 자동으로 반영하게 만들려면 Actuator와 Spring Cloud Bus를 활용합니다.
- Actuator 의존성 추가 클라이언트에 다음 의존성을 추가합니다:
- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
- 설정 갱신 요청 클라이언트 애플리케이션의 /actuator/refresh 엔드포인트를 호출해 변경 사항을 즉시 반영할 수 있습니다.
- curl -X POST http://localhost:8080/actuator/refresh
7. 예제: 실제 구현 사례
예제 1) 간단한 Config Server 구현
- Git 저장소: https://github.com/example/config-repo
- application.yml에 spring.cloud.config.server.git.uri를 연결.
- 서버 포트: 8888
- 클라이언트 애플리케이션이 my-service-dev.properties를 읽어오는 구조.
예제 2) 환경별 설정 관리
- application-dev.properties와 application-prod.properties로 환경별 DB 연결 정보 관리.
- prod 환경에서 고유 설정을 테스트.
예제 3) 동적 갱신
- 클라이언트에서 /actuator/refresh 호출.
- 변경된 구성 파일(application.properties) 내용이 실시간 반영됨.
결론
Spring Cloud Config Server는 마이크로서비스 환경에서 필수적인 구성 관리 도구입니다. 스프링 부트 3와 결합하여 최신 기술 스택을 활용하면 구성 변경과 환경 관리를 보다 쉽게 처리할 수 있습니다. 이 글에서 설명한 단계를 따라가며 직접 구현해 보시길 바랍니다.
'스프링 부트3' 카테고리의 다른 글
스프링 부트 3와 ELK Stack: 로그 관리와 분석의 최적 솔루션 (0) | 2024.12.11 |
---|---|
Spring Boot와 OpenAPI 통합 (0) | 2024.12.11 |
스프링 부트 3와 AWS S3 연동: 클라우드 스토리지 활용의 새로운 차원 (0) | 2024.12.11 |
스프링 부트 3와 Google OAuth2 통합 (0) | 2024.12.11 |
스프링 부트 3의 Custom Authentication Provider (0) | 2024.12.11 |