IT/Spring Cloud

Configuration Service

김 정 환 2021. 12. 30. 22:39
반응형

 

앞으로 구현할  Configuration 서비스의 개요입니다.

 

  • 분산 시스템에서 서버 클라이언트 구성에 필요한 설정 정보(application.yaml)를 외부 시스템에서 관리
  • 하나의 중앙화 된 저장소에서 구성요소 관리 가능
  • 각 서비스를 다시 빌드하지 않고, 바로 적용 가능
  • 애플리케이션 배포 파이프라인을 통해 Dev - Stg - Prd 환경에 맞는 구성 정보 사용

 

Spring Cloud Config Server는 설정 정보를 가지고 와서 마이크로서비스에 적용합니다.

 

Config Server가 읽어들이는 구성 파일의 우선 순위가 있습니다.

1. application.yml

2. application-name.yml : 예시) ecommerce.yml

3. application-name-.yml : 예시) ecommerce-prd.yml

 

 

요약

설정 정보 저장할 레포지토리 만들기
레포지토리를 Git에 놓기
Config Server에 Git 설정하기
각 마이크로서비스들은 bootstrap.yml을 만들고, config server를 설정과 profiles 설정
각 마이크로서비들의 applicaiton.yml에 actuator 설정 추가
설정 정보를 바꾸면 push하고 actuactor로 각 서비스 refresh

 

소스코드

 

설정 정보를 놓을 레포지토리를 생성하겠습니다.

 

git local repository를 만들어 놓을 위치로 이동합니다. 설정 파일들을 만들고 git에 저장하겠습니다.

아래 명령어들을 차례대로 입력합니다. 

Windows
원격 저장소 설정 git remote add origin "repo url"
레포지토리 생성 mkdir git-local-repo
레포지토리 이동 cd git-local-repo
yml 파일 생성 visual studio code 프로그램을 이용해서 생성 및 수정합니다.

아래 3개 파일을 생성합니다.
ecommerce.yml
ecommerce-prd.yml
ecommerce-dev.yml
git 초기화 git init
준비상태로 변경 git add .
커밋 git commit -m "upload a default application yaml file"
푸시 git push

 

ecommerce.yml

token:
  expiration_time: 8600000 # 1분 유효
  secret: user_token_default # 토큰화할 때 사용할 키

gateway:
  ip: 192.168.0.8

 

ecommerce-prd.yml

token:
  expiration_time: 8600000 # 1분 유효
  secret: user_token_prd # 토큰화할 때 사용할 키

gateway:
  ip: 192.168.0.8

 

ecommerce-dev.yml

token:
  expiration_time: 8600000 # 1분 유효
  secret: user_token_dev_1 # 토큰화할 때 사용할 키

gateway:
  ip: 192.168.0.8

 

 


Config Service 프로젝트를 생성하겠습니다.

 

Dependency로 아래 것을 추가합니다.

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

 

application.yml을 작성합니다.

native에는 로컬에서 설정 정보를 가져오는 경로를 설정합니다.

git에서는 git에서 설정 정보를 가져오는 경로를 설정합니다.

server:
  port: 8888

spring:
  appliation:
    name: config-service
  profiles:
    active: native
  cloud:
    config:
      server:
        native: # local에서 불러옴
          search-locations: file:///C:/Users/ASUS/IdeaProjects/native-file-repo
        git: # git 에서 불러옴
          uri: https://github.com/conkjh032/spring-cloud-config
#          username:
#          password:

 

Postman으로 확인합니다.

127.0.0.1:8888/{파일이름}/{profile}

 

 

 

User Service 프로젝트에 Config Service를 이용하기 위해서 아래와 같이 추가하겠습니다.

 

Dependency를 추가합니다.

        <!-- Config Service -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

        <!-- Actuator 설정 관련 dependency-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

 

application.yml 파일에 actuator 내용을 추가합니다.

# Actuator 설정
management:
  endpoints:
    web:
      exposure:
        include: refresh, health, beans

 

bootstrap.yml 파일을 생성합니다. 이름이 틀리면 안됩니다. application.yml을 오른쪽 클릭하여 파일 생성합니다.

profiles.active에서 어떤 설정 정보를 가져올지 선택할 수 있습니다. ( dev, stg, prd )

#  Config Service

spring:
  cloud:
    config:
      uri: http://127.0.0.1:8888
      name: ecommerce # config repository에 저장된 ecommerce.yml

  profiles:
    active: prd

생성한 뒤에 terminal에서 git local repository 경로로 이동하여 아래 명령어로 commit 합니다.

git add ecommerce.yml
git commit -m "value changed"

 

UserController.java에 있는 /heath_check를 아래와 같이 수정합니다. config service 적용 결과를 보기 위해서 입니다.

    @GetMapping("/health_check")
    public String status() {
        return String.format("It's Working in User Service"
                + ", port(local.server.port)=" + env.getProperty("local.server.port")
                + ", port(server.server.port)=" + env.getProperty("server.port")
                + ", token secret=" + env.getProperty("token.secret")
                + ", token expiration time=" + env.getProperty("token.expiration_time"));

    }

 

Postman으로 확인합니다.

 

 

User Service 재기동 없이 바뀐 Config 정보를 적용해보겠습니다.

ecommerce.yml를 수정합니다.

terminal에서 commit합니다.

Postman으로 POST 방식으로 refresh합니다.

 

User Service 재기동 없이 expiration_time이 84000에서 8400000으로 바뀌었습니다.

 

 

 

Api GW Service 프로젝트에 Config Service를 이용하기 위해서 아래와 같이 추가하겠습니다. User Service와 동일합니다.

 

Dependency를 추가합니다.

        <!-- Config Service -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

        <!-- Actuator 설정 관련 dependency-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

 

application.yml에 아래 내용을 추가합니다.

# config service 이용
management:
  endpoints:
    web:
      exposure:
        include: health, refresh, beans, httptrace # httptrace 이용을 위해서 ApigatewayServiceApplication.java에 빈 등록

 

bootstrap.yml 파일을 생성합니다. application.yml을 오른쪽 클릭하여 파일 생성합니다.

profiles.active에서 어떤 설정 정보를 가져올지 선택할 수 있습니다. ( dev, stg, prd )

여기서 user service와 다른 토큰 정보를 가지는 설정 정보를 사용한다면, 인증 오류로 접속 불가능합니다. 예 : 토큰 정보가 다른 prd와 dev를 각각 사용

#  Config Service
spring:
  cloud:
    config:
      uri: http://127.0.0.1:8888
      name: ecommerce # config repository에 저장된 ecommerce.yml

  profiles:
    active: prd

생성한 뒤에 terminal에서 git local repository 경로로 이동하여 아래 명령어로 commit 합니다.

git add ecommerce.yml
git commit -m "value changed"

 

ApigatewayServiceApplication.java에 httptrace을 위한 빈을 추가합니다.

    @Bean
    public HttpTraceRepository httpTraceRepository() {
        return new InMemoryHttpTraceRepository();
    }

 

Postman으로 확인합니다.

 

POST, localhost:8000/actuator/refresh로 config 정보를 적용합니다.

POST, localhost:8000/user-service/usrs로 가입합니다.

POST, localhost:8000/user-service/login으로 로그인합니다.

GET, localhost:8000/user-service/health_check에 token을 넣고 확인합니다.

 

 

Spring Cloud Config 에서 bootstrap.yml을 더 이상 지원하지 않기로 했습니다. 제시된 방법은 application.yml에 설정하는 것입니다. 참고 사이트
반응형

'IT > Spring Cloud' 카테고리의 다른 글

대칭키 암호화  (0) 2022.01.05
Spring Cloud Bus  (0) 2022.01.05
User Microservice - 회원 로그인  (0) 2021.12.17
Order Service  (0) 2021.12.15
Catalogs Microservice  (0) 2021.12.15