고딩왕 코범석

[MSA] Spring Cloud Bus및 설정 정보 암호화 본문

Language & Framework/Spring

[MSA] Spring Cloud Bus및 설정 정보 암호화

고딩왕 코범석 2021. 5. 21. 20:34
반응형

기존의 Spring Cloud Config가 변경되었을 경우 해당 마이크로 서비스에 적용하는 방법

각 마이크로서비스 서버와 Config 서버를 재기동하는 방법

서버를 재기동 하는 것 자체가 굉장히 불편하다.

Actuator를 활용하여 POST refresh를 요청해 애플리케이션을 재기동 하지 않고 적용하는 방법

http로 call하여 변경을 감지해 적용하는 것은 좋으나, 마이크로서비스가 많을 경우 이것도 불편하다. 각각의 마이크로서비스 마다 refresh를 호출해야 하기 때문이다.


Spring Cloud Bus

분산 시스템의 노드(마이크로서비스)를 경량 메세지 브로커와 연결


각각의 시스템 상태 및 구성에 대한 변경사항을 연결된 노드(마이크로서비스)에게 전달


순수 Actuator만 적용하면 각 마이크로서비스 마다 refresh를 호출해야 했지만, Spring Cloud Bus를 사용할 경우, Spring Cloud Bus와 연결된 마이크로서비스 아무 장소에서나 busrefresh 요청을 할 경우, 다른 서비스들에게 전파된다.


Message queue

image

Producer(생산자)가 구독자들에게 전달할 Message를 Queue에 넣어두면, Consumer가 Message를 처리하는 방식. 이 과정들은 비동기 방식이다!


이 때 메세지의 형태는 단순 String 뿐만 아니라, 객체, 리소스등 다양한 형태일 수 있다.


중간에 Queue라는 미들웨어를 둠으로써 연결된 상대를 개의치 않고 효율적으로 메세지를 보낼 수 있다.


Spring Cloud Bus의 기능

Cloud Config Server는 각 마이크로서비스에 연결되어 있을 것이다.


설정이 변경되었을 경우 연결된 마이크로서비스 마다 Spring Cloud Bus가 직접 변경사항의 Message를 Push하는 기능을 담당한다.


AMQP (Advanced Message Queuing Protocol)

메세지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜


ex) Erlang, RabbitMQ


메세지 지향, 큐잉, 라우팅(P2P, Pub / Sub 구조), 신뢰성, 보안


Kafka

Scalar 언어로 개발한 오픈 소스 메세지 브로커 프로젝트


분산형 스트리밍 플랫폼


대용량의 데이터를 처리 가능한 메세징 시스템


RabbitMQ를 통한 설정정보 갱신하기 (With Java Keytool)

먼저, 지금까지 강의를 들으면서 Message Queue까지 적용된 프로젝트 구조는 다음과 같다.

image


RabbitMQ 설치 및 Config Server 설정

# Config Server
server:
  port: {Config Server 포트 별도 지정}

spring:
  rabbitmq:
    host: {RabbitMQ의 호스트}
    port: {RabbitMQ의 포트 default 5672}
    username: guest # default
    password: guest # default
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: {설정들을 저장할 git 주소}
          username: {private 저장소의 경우 git username}
          password: {private 저장소의 경우 git password}

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

Java Keytool을 활용한 bootstrap.yml 설정

# Config Server
encrypt:
  key-store:
    location: {Key 저장 위치}
    password: {Key의 비밀번호}
    alias: {Key를 만들때 제작한 alias}

Config Server에서 [POST] /encrypt, /decrypt를 이용해 암호화된 값, 복호화된 값을 알 수 있다.


Git Repository에서 관리되는 설정 정보들 (내꺼 기준)

image

이 중에서 user-service.yml 을 보면

image

Java Keytool을 활용해 암호화된 값들을 Config Git Repository에 기입하여 반영한 다음 push를 하게 되면 RabbitMQ에 연결된 모든 마이크로서비스들의 설정 정보를 전파하게 되고, Keytool로 암호화 된 것이 [GET] config-server host/user-service/default로 접속하면 암호화된 값이 변경된 값으로 복호화해서 보여준다.

반응형

'Language & Framework > Spring' 카테고리의 다른 글

[MSA] 데이터 동기화를 위한 Kafka 활용 -2  (0) 2021.05.24
[MSA] 데이터 동기화를 위한 Kafka 활용 -1  (0) 2021.05.24
[MSA] Spring Cloud Config  (3) 2021.05.15
[MSA] API Gateway  (0) 2021.05.11
[MSA] Service Discovery  (0) 2021.05.06