Building our Spring Cloud Configuration Server

2025. 3. 4. 12:13Spring Microservice

 

🚀 Spring Cloud Configuration Server 구축 및 설정

🎯 Spring Cloud Config Server란?

Spring Cloud Config Server는 중앙 집중식 설정 관리 서버로, 여러 마이크로서비스가 Git, SVN, HashiCorp Vault 등의 설정 저장소에서 설정을 가져올 수 있도록 합니다.

왜 설정 서버가 필요한가?

  • 설정을 코드에서 분리하여, 애플리케이션을 재배포하지 않고 설정 변경 가능
  • 중앙 집중식 관리로 설정 일관성 유지
  • 환경별 설정(개발, 테스트, 운영) 을 효율적으로 관리
  • 보안 강화를 위해 민감한 정보(Vault 등 활용) 별도 저장 가능

📌 Spring Cloud Config Server는 단독 실행이 아닌 Spring Boot 애플리케이션 내에 임베드하여 운영하는 방식이 일반적입니다.

 

🛠 Spring Cloud Configuration Server 구축 방법

📌 1️⃣ Spring Initializr를 활용한 프로젝트 생성

  1. Spring Initializr(https://start.spring.io)에서 프로젝트 생성
  2. 프로젝트 설정:
    • Project: Maven
    • Language: Java
    • Spring Boot Version: 최신 안정 버전 선택
    • Group: com.optimagrowth
    • Artifact: configserver
    • Name: Configuration Server
    • Description: Configuration Server
    • Package Name: com.optimagrowth.configserver
    • Packaging: JAR
    • Java Version: 17
    • Dependencies:
      • Spring Boot Actuator (서비스 모니터링)
      • Spring Cloud Config Server (설정 서버)

📌 2️⃣ pom.xml 설정 (Maven 프로젝트)

Spring Boot 및 Spring Cloud 의존성을 포함한 pom.xml 파일 예제

📌 pom.xml 주요 항목

1️⃣ Spring Boot 및 Spring Cloud 버전 관리
2️⃣ Config Server 및 Actuator 의존성 추가
3️⃣ Spring Cloud BOM (Bill of Materials) 사용 → 하위 의존성 자동 관리

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.4.3</version> <!-- Spring Boot version -->
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.optimagrowth</groupId>
	<artifactId>configserver</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Configuration Server</name>
	<description>Configuration Server</description>
	<url/>
	<licenses>
		<license/>
	</licenses>
	<developers>
		<developer/>
	</developers>
	<scm>
		<connection/>
		<developerConnection/>
		<tag/>
		<url/>
	</scm>
	<properties>
		<java.version>17</java.version>
		<!-- Spring Cloud version to use -->
		<spring-cloud.version>2024.0.0</spring-cloud.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- Spring Cloud projects and other dependencies needed to run the ConfigServer -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<dependencyManagement> <!-- Spring Cloud BOM (Bill of Materials) definition -->
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

📌 Spring Cloud BOM(Bill of Materials) 사용으로 하위 의존성을 자동 관리하여 호환성을 유지

📌 3️⃣ Config Server 애플리케이션 코드 작성

Spring Boot 애플리케이션에 Config Server 활성화

package com.optimagrowth.configserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

✅ @EnableConfigServer 어노테이션 추가 → Spring Cloud Config Server 활성화

📌 4️⃣ bootstrap.yml 파일 생성

📌 bootstrap.yml 파일은 Spring Cloud에서 일반적인 application.yml보다 먼저 로드
📌 Config Server의 애플리케이션명, 포트, Git 저장소 경로 등 설정

spring:
  application:
    name: config-server  # Config Server 애플리케이션 이름
server:
  port: 8071  # 설정 서버 포트

📌 설정 서버의 포트를 8071로 설정 (기본값은 8888)

📌 5️⃣ 설정 저장소 연결 (Git 활용)

📌 Config Server는 Git을 활용하여 설정을 중앙에서 관리 가능
📌 Git 저장소를 Config Server의 설정 원본으로 사용하려면 application.yml에 Git 저장소 경로 추가

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/my-config-repo  # 설정이 저장된 Git 저장소
          default-label: main  # 기본 브랜치 지정
          clone-on-start: true  # 서버 시작 시 Git 저장소 클론

Git 저장소에서 설정을 가져와 애플리케이션에 제공

🏆 Spring Cloud Configuration Server 도입 효과

문제  Config Server 사용 시 해결
설정 변경 시 코드 배포 필요 설정 변경 후 애플리케이션 재배포 없이 즉시 반영
설정 관리가 복잡함 중앙 집중식 관리로 설정 일관성 유지
보안 문제 발생 가능 민감한 데이터 암호화 및 보안 저장소 활용 가능
설정 변경 후 서비스 재시작 필요 클라이언트가 자동으로 변경 사항 감지하여 반영

 

🎯 Summary

Spring Cloud Config Server는 마이크로서비스의 설정을 중앙 집중식으로 관리
Git, HashiCorp Vault 등 다양한 저장소와 연동 가능
✅ 설정 변경 시 애플리케이션을 재배포하지 않고도 즉시 반영 가능
보안이 중요한 설정 정보는 Vault 등 보안 저장소 활용 필수

 

💡 이제 Spring Cloud Config Server를 활용하여 효과적인 마이크로서비스 설정 관리 시스템을 구축해보세요! 🚀