PSD( Private-Self-Development )

Spring Cloud Config 본문

Backend/MSA

Spring Cloud Config

chjysm 2024. 4. 16. 16:03

Configuration Service

각각의 Micro Service 가 가지고 있어야 할 

구성 정보 파일(yml)의 정보를 대신해서 가지고 관리하는 서비스 

 

기존 방식과의 차이점

  • 기존 방법
    • 구성 정보 파일(yml) 수정 시, 재기동 및 재빌드 필요
    • 각각의 msa 가 yml 파일을 가지고 있어, 내용 중복 및 분산되어 있음
  • 신규 방법 
    • 하나의 서버에서 모든 msa 의 yml 파일을 관리 
    • yml 수정 시 재기동 및 재빌드 불필요

 

구현

1. 디펜던시 추가 

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

 

2. 어노테이션 추가

@SpringBootApplication
@EnableConfigServer
public class ConfigServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServiceApplication.class, args);
    }
}

 

3.  프로퍼티 설정 

server:
  port: 8888

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        # 로컬 파일
        native:
          search-locations: file://${user.home}/Desktop/MSA/git-local-repo
#        git:
#          default-label: master # 브런치 이름
#          uri: file:///Users/choejeong-u/Desktop/MSA/git-local-repo  # 로컬 저장소

          # git
#          uri: https://github.com/chjysm/msa-cloud-config.git
#          username:
#          password:

 

 

Config 사용부

1. 디펜던시 추가 

<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>

 

2. bootstrap.yml 

# bootstrap 으로 설정하면 우선순위가 application.yml 보다 높다
spring:
  cloud:
    config:
      uri: http://127.0.0.1:8888 # config 서버 주소
      name: ecommerce # yml 파일 이름
  • bootstrap 으로 이름을 설정하면 우선순위가 application.yml 보다 높다(우선 적용 필요)

 

yml 파일 변경 시 재기동 하지 않기 위한 방법 

Spring Boot Actuator

  • Application 상태, 모니터링
  • Metric  수집을 위한 Http End point 제공
  • 데이터  msa 서비스 마다 리프레시를 요청해야 하는 번거러움이 있음 

1. 디펜던시 추가 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. application.yml 

management:
  endpoints:
    web:
      exposure:
        include: refresh, health, beans

3.  refresh

  • (post)http://localhost/actuator/refresh 요청 하면 변경사항 반영 

 

Spring Cloud Bus

  • Actuator의 한계점(msa 서비스 마다 리프레시 필요) 을 극복하기 위한 디펜던시 
  • 분산시스템의 노드를 경량 메시지 브로커(ex. rabbit mq)와 연결
  • 상태 및 구성에 대한 변경 사항을 연결된 노드에 전달 
AMQP( Advanced Message Queuing Protocol )

메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜
메시지 지향, 규잉, 라우팅(P2P, Publisher-Subcriber), 신뢰성, 보안
RabbitMQ 에서 사용하는 프로토콜

메시지 브로커

RabbitMQ

  • 적은 데이터를 안전하게 전달
  • 초당 20+ 메시지를 소비자에게 전달
  • 메시지 전달 보장, 시스템간 메시지 전달
  • 브로커, 소비자 중심 

 

Kafka

  • 분산형 스트리밍 플랫폼
  • 대용량의 데이터를 빠르게 처리 가능한 메시징 시스템 
  • 초당 100k+ 이상의 이벤트 처리
  • Pub/Sub,  Topic에 메시지 전달
  • Ack를 기다리지 않고 전달 가능 
  • 생산자 중심 

 

1. 디펜던시 추가 

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

2. application.yml 

  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    
management:
  endpoints:
    web:
      exposure:
        include: refresh, health, beans, httptrace, busrefresh

3.  refresh

  • (post)http://localhost/actuator/busrefresh 요청 하면 변경사항 전체 반영 

 

정보 암호화

디펜던시 추가 

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

1. 대칭키 암호화

encrypt:
  key: abcde123j21j2j1kkdb # 대칭키

2. 비대칭키 암호화

키생성

keytool -genkeypair -alias apiEncryptionKey -keyalg RSA -dname "CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR" -keypass "1q2w3e4r" -keystore apiEncryptionKey.jks -storetype JKS -storepass "1q2w3e4r"

 

yml 수정

encrypt:
 key-store:
  location: file:///#{user.home}/Desktop/MSA/keystore/apiEncryptionKey.jks
  password: 1q2w3e4r
  alias: apiEncryptionKey

 

사용 

'{cipher}a1a78e3e9e9a161c4a02d6ccf8db5313a50d9503efad655cc1e281a7b0421999'

 

'Backend > MSA' 카테고리의 다른 글

Kafka( 카프카 )  (0) 2024.04.22
Feign Client  (1) 2024.04.19
API Gateway  (0) 2024.03.26
Service Discovery  (1) 2024.01.09
MSA  (0) 2024.01.09