상세 컨텐츠

본문 제목

Spring Cloud config - 구성 및 적용

Developer/Java

by 웰크 2019. 11. 22. 16:30

본문

1. 외부 설정파일 구성

Spring Cloud Config에 사용할 설정파일은 로컬서버의 특정폴더, Git, SVN을 사용하여 보관을 할 수 있지만

프로젝트에서 설정파일은 중요한 위치를 차하고 있어 Git을 사용해 구성을 한다

 

우선 GitHub Repository에다 아래와 같이 동일한 내용의 테스트용 설정파일을 만들어 배포 하자

파일 생성시 Cloud Config Service와 설정파일을 각각 Repository를 생성하는것을 권장하지만 같이 사용해도 무방하다

(설정파일에 대한 설명은 작성하지 않았습니다.)

 

item-local.yml

application: 
	message: "Message From {ENV} Local Git Repository"

 

# 로컬로 사용하는 예제

https://lng1982.tistory.com/292

 

 

2. Spring Cloud Config Server

1. Dependencies를 추가한 프로젝트 다운

Spring Cloud Config Server를 생성하기 위해 우선 Spring Initializr 사이트에서 프로젝트를 생성하자

아래 그림과 같이 사이트 접속 후 기본 정보를 입력하고

Dependencies에 Config Server를 선택한 후 생성을 한다

 

 

이미 서버용으로 프로젝트를 만들어 놓은게 있다면 Dependencies만 추가해 준다

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-config-server</artifactId>
</dependency>



2. Config Server설정

프로젝트를 열고 properties파일 보다는 yml파일이 작성하기 편하니 아래 와 같이파일을 생성한다

만약 파일이 있다면 생성할 필요는 없다

src/main/resources/appliction.yml

 

아래와 같이 설정을 세팅하면되는데

Config Server는 8888포트를 사용하는 관례가 있어 port를 8888로 지정하고

Public Repository의 경우는 인증이 따로 필요 없지만 Private Repository는 인증을 해야 접속 할 수가 있다.

증은 ID / PW 를 이용한 https도 가능하고, 공개키를 이용한 ssh도 가능하다

 

참고로 직접 해보지는 못했지만 공식 문서에 보면

Pattern Matching, Multiple Repositories, Setting HTTP Connection Timeout

등과 같이 다양한 설정값들이 존재한다.

server:
	port: 8888

spring:
	cloud:
    	config:
        	server:
            	git:# ID / PW 로그인
                    # uri: https://github.com/yourname/spring-cloud-config-repository
                    # username: yourID
                    # password: yourPW
                    ######################################################################
                    # SSH 로그인
                    uri: git@github.com:yourname/spring-cloud-config-repository.git
                    ignoreLocalSshSettings: true
                    privateKey: |
                    	-----BEGIN OPENSSH PRIVATE KEY-----
                        b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAA
                        dzc2gtcnNhAAAAAwEAAQAAAQEA4NlkpT3n2/2s+u+j9UwS5TNAEMj4tHn5t31J
                        6QYs3oXfraLlS/LVviFbdtNZpp2JpH8l6kxE/JqFBbCUMj2nJAIvX3ii8Db2o1
                        WB3B9E2xEW0tbEUada5z43u0FVL3dKzZYUsOZLpXXYml17JotziEEOquLjMgwe
                        2kn7HyNxPEW+J01yZdgYkRnmYhewFCrlR37Kr/AbI9DNq+bitoRw5y1KZR8wQS
                        yQao+BViS/N2fodt9suy/YBEjAyq9e96goUSwL3D4vSzmBXrR8pHZ1ICFQRCj/
                        UKDXtUv/TpDAkc1H1vvvpaq4idk9kZ+zMZgO0QnPxBmShUIZPxAgCr5huwAAA9
                        i+JX0jviV9IwAAAAdzc2gtcnNhAAABAQDg2WSlPefb/az676P1TBLlM0AQyPi0
                        efm3fUnpBizehd+touVL8tW+IVt201mmnYmkfyXqTET8moUFsJQyPackAi9feK
                        LwNvajVYHcH0TbERbS1sRRp1rnPje7QVUvd0rNlhSw5kulddiaXXsmi3OIQQ6
                        -----END OPENSSH PRIVATE KEY-----

 

 

main클레스에 EnableConfigServer 어너테이션을 추가해준 다

 

 

서버구동에 에러가 없다면 잘 가지고 오는지 테스트를 해본다

URL 형식은 /{appliation-name}/{profile}/{label}로 한다

http://localhost:8888/item/local

{
  name: "item",
  profiles: [
  	"local"
  ],
  label: null,
  version: "01a9689682c48d59d0a064336dde67d8f4b3780d",
  state: null,
  propertySources: [
    {
      name: "https://github.com/yourname/spring-cloud-config-repository/item-dev.yml",
      source: {
	      application.message: "Message From {ENV} Item-local Git Repository"
      }
    }
  ]
}

 

화면이 위와 같이 데이터가 나온다면 Spring Cloud Config Server가 정상적으로 구성이 끝났다

 

 

3. Spring Cloud Config Client

 

Spring Cloud Config를 적용할 Client프로젝트에 우선 의존성을 추가해준다

프로젝트가 없다면 Config Server를 만든 Spring Initializr 사이트에서

Cloud Config Client, Spring web이 포함된 프로젝트를 생성해준다

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-config-client</artifactId>
</dependency>

 

Cloud Config서버와 연결을 위해 bootstrap.yml 파일을 생성 한 뒤 config 서버 설정을 해준다

bootstrap.yml파일은 Spring Cloud Application에서 application.yml 파일보다 먼저 실행이 되기 때문에

Config 서버의 설정을 써주면 Bootrun 되기 전 Config Server에서 환경에 맞는 설정 파일을 불러와 실행이 되게 된다.

Build시에 application.yml보다 먼저 설정이 필요할 경우 bootstrap.yml에 설정을 해주면 된다

server:
  port: 7777

# Cloud Config
spring:
  cloud:
    config:
      uri: http://localhost:8888
      name: item
      profile: ${spring.profiles.active}

boot Application을 실행시킬 때 -Dspring.profiles.active={환경} 옵션을 local로 정하고 실행을 시켜주면

아래와같이 item-local.yml 파일을 가지고 오는걸 확인 할 수 있다

 

테스트를 위해 설정정보를 확인할 수 있는 페이지를 만들어 화면에 찍어보자

@RestController
public class WelcomeController {

    @Value("${application.message}")
    private String message;

 @GetMapping("/message")
    public String welcome() {
        return message;
 }
}

 

localhost:7777/message로 접속시 설정파일에 적혀있던 message의 내용을 확인할 수 있다

"Message From {ENV} Item-Local Git Repository"

 

 

관련글 더보기