[Spring] Spring Cloud Config 퀵 스타트

2025. 1. 3. 10:39·개발/Spring Boot
728x90
반응형

Spring Cloud Config

모든 코드는 깃허브에서 볼수 있습니다.

Spring Cloud Config Server는 분산 시스템에서 설정 파일을 중앙에서 관리하고 애플리케이션이 시작될 때 설정을 동적으로 로드할 수 있도록 도와주는 서버입니다. 이를 통해 애플리케이션의 설정을 일관되게 관리하고, 설정 변경 시 애플리케이션을 재배포하지 않고도 설정을 업데이트할 수 있습니다.

주요 기능

  • 중앙 집중식 설정 관리: 모든 애플리케이션의 설정 파일을 중앙에서 관리합니다.
  • 환경별 설정 지원: 개발, 테스트, 운영 등 다양한 환경에 맞는 설정을 지원합니다.
  • 버전 관리: Git과 같은 버전 관리 시스템을 통해 설정 파일의 변경 이력을 관리할 수 있습니다.
  • 동적 설정 로드: 애플리케이션이 실행 중에도 설정을 동적으로 로드할 수 있습니다.

Config Server

  1. Spring Cloud Config Server 의존성 추가 (Gradle):
plugins {
    id 'java'
    id 'org.springframework.boot' version '3.4.1'
    id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

repositories {
    mavenCentral()
}

ext {
    set('springCloudVersion', "2024.0.0")
}

dependencies {
    // web
    implementation 'org.springframework.boot:spring-boot-starter-web'

    // actuator
    implementation 'org.springframework.boot:spring-boot-starter-actuator'

    // config-server
    implementation 'org.springframework.cloud:spring-cloud-config-server'

    // test
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

tasks.named('test') {
    useJUnitPlatform()
}
  1. Config Server application.yml 설정
server:
  port: 8888

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://github.com/TeTedo/blog-code # 깃 주소가 기본이지만 로컬 file 도 사용가능
          search-paths: spring-cloud-config/config-file/** # 설정 파일 경로
          default-label: main # branch 이름
  1. Config Server 애플리케이션 설정:

@EnableConfigServer 어노테이션을 추가한다.

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}
  1. 설정 파일 경로

config 파일이 있는 경로에 {어플리케이션이름}-{profile}.yml 형식으로 작성하면
localhost:8888/{어플리케이션이름}/{profile} 로 접근해서 받을수 있다.

(1) sso-dev.yml

http://localhost:8888/sso/dev

{
  "name": "sso",
  "profiles": ["dev"],
  "label": null,
  "version": "9fbfd60974f823c23cae9fb3e9297c67a72f4af3",
  "state": "",
  "propertySources": [
    {
      "name": "https://github.com/TeTedo/blog-code/spring-cloud-config/config-file/sso/dev/sso-dev.yml",
      "source": {
        "name": "sso",
        "profile": "dev"
      }
    }
  ]
}

Client

  1. Spring Cloud Config Server 의존성 추가 (Gradle):
plugins {
    id 'java'
    id 'org.springframework.boot' version '3.4.1'
    id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

repositories {
    mavenCentral()
}

ext {
    set('springCloudVersion', "2024.0.0")
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.cloud:spring-cloud-starter-config'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

tasks.named('test') {
    useJUnitPlatform()
}
  1. Client application.yml 설정
spring:
  application:
    name: sso
  profiles:
    active: dev
  config:
    import: "optional:configserver:"

  cloud:
    config:
      uri: http://localhost:8888
      fail-fast: true # Config Server 연결 실패시 애플리케이션 시작 실패
  1. property 설정

(1) MyConfig.java

@Getter
@Setter
@RefreshScope
@ConfigurationProperties(prefix = "")
@Configuration
public class MyConfig {
    private String name;
    private String profile;
}

(2) ConfigController

@RestController
@RequiredArgsConstructor
public class ConfigController {

    private final MyConfig myConfig;

    @GetMapping("/config")
    public String getConfig() {
        return myConfig.getName() + " " + myConfig.getProfile();
    }
}

(3) localhost:8080/config

sso dev 가 잘 출력되는걸 볼수 있다.

참고 자료

  • Spring Cloud Config 공식 문서
  • Spring Cloud Config GitHub 저장소
  • [Spring] Spring Cloud Config 도입하기 및 private 레포지토리 SSL로 연결 설정 및 privateKey 암호화
728x90
반응형

'개발 > Spring Boot' 카테고리의 다른 글

[Spring] Spring Cloud Gateway로 구현하는 MSA 아키텍처  (2) 2025.01.08
[SpringBoot] Propagation.REQUIRES_NEW에서 겪은 이슈  (1) 2024.09.11
[Spring Boot] JsonDeserialize 활용해서 요청 Body 커스텀하기  (0) 2024.09.03
[Spring Boot] Spring Boot WebClient  (0) 2023.08.04
[Spring Boot] Spring Security - OAuth2 (Google login)  (0) 2023.07.20
'개발/Spring Boot' 카테고리의 다른 글
  • [Spring] Spring Cloud Gateway로 구현하는 MSA 아키텍처
  • [SpringBoot] Propagation.REQUIRES_NEW에서 겪은 이슈
  • [Spring Boot] JsonDeserialize 활용해서 요청 Body 커스텀하기
  • [Spring Boot] Spring Boot WebClient
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    go
    nodejs
    React
    node.js
    ERC721
    블록체인
    30일챌린지
    컨테이너
    js
    html
    node
    명령어
    CSS
    도커
    30일 챌린지
    하이퍼레저
    프로그래머스
    erc20
    go언어
    mysql
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[Spring] Spring Cloud Config 퀵 스타트
상단으로

티스토리툴바