Spring Cloud - 외부 Config 파일

SeungTaek·2021년 10월 2일
0
post-thumbnail

본 게시물은 스스로의 공부를 위한 글입니다.
틀린 내용이 있을 수 있습니다.


📒 Spring Cloud Config란?

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

📒 Config 설정 우선순위

  • Spring Cloud Config Server에 설정되어있는 파일
    1. application.yml
    2. application-name.yml (예를들어 application-userService.yml)
    3. application-name<profile>.yml (profile의 경우 dev, test, prod 등등 원하는 이름으로)
  1. 각 인스턴스의 application.yml

📒 Config 파일 저장 방법 3가지

  1. local 환경에 git으로 저장

  2. github에 저장

  3. 그냥 로컬 파일로 저장



📒 Spring Cloud Config Server 만들기

  • 🎈 외부 config파일인 ecomerce.yml 작성 후 git commit까지 하기
token:
  expiration_time: 8640000
  secret: user_token

gateway:
  ip: 192.168.43.84

  • 🎈 Spring boot 프로젝트 생성
    • Dependencies : Config Server

  • 🎈 메인 클래스에 @EnableConfigServer 추가
@SpringBootApplication
@EnableConfigServer
public class ConfigServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServiceApplication.class, args);
    }
}

  • 🎈 application.yml 작성
    1. ✨ local git repository 사용시
server:
  port: 8888

spring:
  application:
    name: config-service
  cloud:
    config:
      server:
        git: #local git
          uri: file:///C:/Users/J/Desktop/Spring Cloud/git-local-repo

  1. ✨ github 사용시
server:
  port: 8888

spring:
  application:
    name: config-service
  cloud:
    config:
      server:
	git: #github와 연결. private repository로 만들 시 username과 password를 입력
          uri: https://github.com/redcarrot1/spring-cloud-config.git
          username: {username}
          password: {password}

  1. ✨ 로컬 파일로 사용시
server:
  port: 8888

spring:
  application:
    name: config-service
  profiles: #그냥 로컬 파일
    active: native
  cloud:
    config:
      server:
        native: # 그냥 로컬 파일
          search-locations: file:///C:/Users/J/Desktop/Spring Cloud/git-local-repo


📒 User-service에 외부 config 적용하기

  1. 🎈 Dependencies 추가: spring-cloud-starter-config, spring-cloud-starter-bootstrap
<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>

  1. 🎈 bootstrap.yml 생성: application.yml 파일에서 설정한 내용보다 먼저 호출되어야 할 설정이 필요할 경우에 사용. 아래의 경우 config-server 위치 지정용도로 사용함
spring:
  cloud:
    config:
      uri: http://127.0.0.1:8888 # config-server
      name: ecommerce # 읽어오고자 하는 파일명

  1. 🎈 설정 확인을 위해 RestController 작성
@GetMapping("/health_check")
public String status(){
   return String.format("It's Working in User Service"
            + ", port(local.sever.port)="+env.getProperty("local.server.port")
            + ", port(sever.port)="+env.getProperty("server.port")
            + ", token secret="+env.getProperty("token.secret")
            + ", token expiration time="+env.getProperty("token.expiration.time")
    );
}

  1. 🎈 Controller에 작성한 GetMapping에 접속 후 설정된걸 확인


📒 config 파일이 변경될 경우 업데이트

방법 3가지

  1. 서버 재기동

    • 그럼 Spring Cloud Config를 사용하는 의미가 없다.
  2. Actuator refresh

    • Application 상태 모니터링
    • Metric 수집을 위한 Http End Point제공
    • 수동으로 요청을 보내 업데이트를 하기 때문에, 서비스가 많으면 불편하다.
  3. Spring Cloud Bus

    • 분산 시스템의 노드(MS)를 경량 메시지 브로커(RabbitMQ)와 연결
    • 상태 및 구성에 대한 변경 사항을 연결된 노드에게 전달(Broadcast)

📌 Actuator 사용을 해보자

  1. 🎈 user-service에 디펜던시 추가
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

  1. 🎈 application.yml에 추가
management:
  endpoints:
    web:
      exposure:
        include: refresh, health, beans
  • refresh: config 새로고침
  • health: 현재 상태
  • beans: 등록된 bean 확인 가능

  1. 🎈 설정 파일인 ecommerce.yml 변경 후 git commit (Local git Repository 사용시)

  1. 🎈 Post 방식으로 http://%{ip}:%{port}/actuator/refresh 전송
    • http://%{ip}:%{port}/actuator/health(또는 beans)로 상태 확인도 가능하다.

  1. 🎈 변경 완료!


인프런의 'Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)(Dowon Lee)'을 스스로 정리한 글입니다.
자세한 내용은 해당 강의를 참고해주세요.

profile
I Think So!

0개의 댓글