
분산 시스템을 위한 중앙화된 구성 서버로, HTTP API, Git 기반 스토리지, 속성 암호화/복호화, Vault, JDBC, 로컬 파일시스템과의 통합을 제공합니다.
//// 이 파일을 편집하지 마십시오. 자동 생성되었습니다. 이 파일에 대한 수동 변경은 다시 생성될 때 손실됩니다. 대신 src/main/asciidoc/ 디렉토리의 파일을 편집하십시오. ////
image::https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master.svg?style=svg["CircleCI", link="https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master"] image::https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master/graph/badge.svg["Codecov", link="https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master"] image::https://api.codacy.com/project/badge/Grade/f064024a072c477e97dca6ed5a70fccd?branch=master["Codacy 코드 품질", link="https://www.codacy.com/app/Spring-Cloud/spring-cloud-config?branch=master&utm_source=github.com&utm_medium=referral&utm_content=spring-cloud/spring-cloud-config&utm_campaign=Badge_Grade"]
Spring Cloud Config는 분산 시스템에서 외부화된 구성을 위한 서버 측 및 클라이언트 측 지원을 제공합니다. Config Server를 사용하면 모든 환경에 걸쳐 애플리케이션의 외부 속성을 중앙에서 관리할 수 있습니다.
클라이언트와 서버의 개념은 Spring Environment 및 PropertySource 추상화와 동일하게 매핑되므로 Spring 애플리케이션에 매우 잘 맞지만 모든 언어로 실행되는 모든 애플리케이션에서 사용할 수 있습니다.
애플리케이션이 개발에서 테스트, 프로덕션으로의 배포 파이프라인을 거치면서 해당 환경 간의 구성을 관리할 수 있으며 마이그레이션 시 애플리케이션이 실행에 필요한 모든 것을 가지고 있음을 확신할 수 있습니다.
서버 스토리지 백엔드의 기본 구현은 git을 사용하므로 구성 환경의 레이블 버전을 쉽게 지원할 수 있을 뿐만 아니라 콘텐츠 관리에 다양한 도구를 사용할 수 있습니다.
대체 구현을 쉽게 추가하고 Spring 구성을 통해 연결할 수 있습니다.
== 기능
=== Spring Cloud Config Server
Spring Cloud Config Server는 다음과 같은 이점을 제공합니다:
@EnableConfigServer를 사용하여 Spring Boot 애플리케이션에 쉽게 내장 가능=== Spring Cloud Config Client
특히 Spring 애플리케이션의 경우 Spring Cloud Config Client를 사용하면 다음을 수행할 수 있습니다:
Environment를 초기화합니다.@Beans를 위한 @RefreshScope./env - Environment 업데이트 및 @ConfigurationProperties 및 로그 레벨 재바인딩.
** /refresh - @RefreshScope 빈 새로 고침.
** /restart - Spring 컨텍스트 재시작 (기본적으로 비활성화).
** /pause 및 /resume - Lifecycle 메서드 호출 (ApplicationContext의 stop() 및 start()).== 빠른 시작
이 빠른 시작에서는 Spring Cloud Config Server의 서버와 클라이언트를 모두 사용하는 과정을 안내합니다.
먼저, 다음과 같이 서버를 시작합니다:
서버는 Spring Boot 애플리케이션이므로 선호하는 경우 IDE에서 실행할 수도 있습니다 (메인 클래스는 ConfigServerApplication입니다).
다음으로 다음과 같이 클라이언트를 시도합니다:
속성 소스를 찾기 위한 기본 전략은 git 저장소 (spring.cloud.config.server.git.uri에 위치)를 복제하고 이를 사용하여 미니 SpringApplication을 초기화하는 것입니다.
미니 애플리케이션의 Environment는 속성 소스를 열거하고 JSON 엔드포인트에 게시하는 데 사용됩니다.
HTTP 서비스는 다음 형식의 리소스를 제공합니다:
여기서 application은 SpringApplication의 spring.config.name으로 주입되며 (일반 Spring Boot 앱에서 일반적으로 application), profile은 활성 프로파일 (또는 쉼표로 구분된 속성 목록), label은 선택적 git 레이블입니다 (기본값은 master).
Spring Cloud Config Server는 원격 클라이언트를 위해 다양한 소스에서 구성을 가져옵니다. 다음 예제는 git 저장소 (제공되어야 함)에서 구성을 가져옵니다:
다른 소스로는 JDBC 호환 데이터베이스, Subversion, Hashicorp Vault, Credhub 및 로컬 파일 시스템이 있습니다.
=== 클라이언트 측 사용법
애플리케이션에서 이러한 기능을 사용하려면 spring-cloud-config-client에 의존하는 Spring Boot 애플리케이션으로 빌드할 수 있습니다 (예시는 config-client의 테스트 케이스 또는 샘플 애플리케이션 참조).
의존성을 추가하는 가장 편리한 방법은 Spring Boot 스타터 org.springframework.cloud:spring-cloud-starter-config를 사용하는 것입니다.
Maven 사용자를 위한 부모 pom 및 BOM (spring-cloud-starter-parent)과 Gradle 및 Spring CLI 사용자를 위한 Spring IO 버전 관리 속성 파일도 있습니다. 다음 예제는 일반적인 Maven 구성을 보여줍니다:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>{spring-boot-docs-version}</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<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>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- repositories also needed for snapshots and milestones -->
이제 다음과 같은 HTTP 서버와 같은 표준 Spring Boot 애플리케이션을 생성할 수 있습니다:
@SpringBootApplication @RestController public class Application {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
이 HTTP 서버가 실행되면 기본 로컬 구성 서버 (실행 중인 경우)에서 포트 8888의 외부 구성을 가져옵니다.
시작 동작을 수정하려면 bootstrap.properties를 사용하여 구성 서버의 위치를 변경할 수 있습니다 (애플리케이션 컨텍스트의 부트스트랩 단계를 위한 application.properties와 유사). 다음 예제와 같습니다:
기본적으로 애플리케이션 이름이 설정되지 않은 경우 application이 사용됩니다. 이름을 수정하려면 다음 속성을 bootstrap.properties 파일에 추가할 수 있습니다:
NOTE: ${spring.application.name} 속성을 설정할 때 앱 이름 앞에 예약어 application-을 접두사로 사용하지 마십시오. 올바른 속성 소스를 확인하는 데 문제가 발생할 수 있습니다.
부트스트랩 속성은 /env 엔드포인트에 높은 우선순위 속성 소스로 표시됩니다. 다음 예제와 같습니다:
```configService:<원격 저장소 URL>/<파일 이름>이라는 속성 소스는 값이 bar인 foo` 속성을 포함하며 가장 높은 우선순위입니다.
NOTE: 속성 소스 이름의 URL은 git 저장소이지 구성 서버 URL이 아닙니다.
=== 샘플 애플리케이션
https://github.com/spring-cloud/spring-cloud-config/tree/master/spring-cloud-config-sample[여기]에서 샘플 애플리케이션을 찾을 수 있습니다.
Spring Boot 애플리케이션이므로 일반적인 메커니즘 (예: mvn spring-boot:run)을 사용하여 실행할 수 있습니다.
실행되면 http://localhost:8888 (구성 가능한 기본값)에서 구성 서버를 찾으므로 서버도 실행하여 함께 작동하는 것을 볼 수 있습니다.
샘플에는 구성 서버도 동일한 JVM (다른 포트 사용)에서 시작되고 테스트는 git 구성 저장소의 환경 속성이 있는지 확인하는 테스트 케이스가 있습니다.
구성 서버의 위치를 변경하려면 bootstrap.yml (또는 시스템 속성 및 기타 위치)에서 spring.cloud.config.uri를 설정할 수 있습니다.
테스트 케이스에는 동일한 방식으로 서버를 실행하는 main() 메서드가 있습니다 (로그에서 포트 확인). 따라서 단일 프로세스에서 전체 시스템을 실행하고 조작할 수 있습니다 (예: IDE에서 main() 메서드 실행).
main() 메서드는 git 저장소의 작업 디렉토리로 target/config를 사용하므로 로컬에서 변경하고 실행 중인 앱에 반영되는 것을 확인할 수 있습니다. 다음 예제는 테스트 케이스를 조작하는 세션을 보여줍니다:
Refresh 엔드포인트는 "sample" 속성이 변경되었음을 보고합니다.
== 빌드
:jdkversion: 1.7
=== 기본 컴파일 및 테스트
소스를 빌드하려면 JDK {jdkversion}을 설치해야 합니다.
Spring Cloud는 대부분의 빌드 관련 활동에 Maven을 사용하며, 관심 있는 프로젝트를 복제하고 다음을 입력하면 빠르게 시작할 수 있습니다.
NOTE: Maven (>=3.3.3)을 직접 설치하고 아래 예제에서 ./mvnw 대신 mvn 명령을 실행할 수도 있습니다. 이렇게 하는 경우 로컬 Maven 설정에 Spring 사전 릴리스 아티팩트에 대한 저장소 선언이 없으면 -P spring을 추가해야 할 수도 있습니다.