
분산 시스템을 위한 중앙 집중식 설정 서버로, 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 code quality", 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 초기화.@RefreshScope - 구성 변경 시 다시 초기화하려는 Spring @Beans에 사용./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 파일에 추가할 수 있습니다.
참고: ${spring.application.name} 속성을 설정할 때 앱 이름에 예약어 application-을 접두사로 붙이지 마십시오. 올바른 속성 소스를 해결하는 데 문제가 발생할 수 있습니다.
부트스트랩 속성은 /env 엔드포인트에 높은 우선순위 속성 소스로 표시됩니다. 예제는 다음과 같습니다.
configService:<원격 저장소 URL>/<파일 이름>이라는 속성 소스에는 값이 bar인 foo 속성이 포함되어 있으며 가장 높은 우선순위입니다.
참고: 속성 소스 이름의 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을 사용하므로 관심 있는 프로젝트를 복제하고 다음을 입력하면 빠르게 시작할 수 있습니다.
참고: Maven (>=3.3.3)을 직접 설치하고 아래 예제에서 ./mvnw 대신 mvn 명령을 실행할 수도 있습니다. 그렇게 하는 경우 로컬 Maven 설정에 Spring 사전 릴리스 아티팩트에 대한 저장소 선언이 포함되어 있지 않으면 -P spring을 추가해야 할 수도 있습니다.