MSA 서버에서 각각의 마이크로 서비스가 가지고 있어야 될 구성 정보 파일(yaml파일 등..)에 대한 외부의 시스템에서 공유에 대해 알아보자.
이런 기술들을 이용 할 수 있다.
이런 환경 설정 정보들을 분리하였기 때문에 자유도 있고, 궁극적인 애플리케이션 구성이 가능할 것이다.
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
application.yml -> application-{name}.yml -> application-{name}-{profile}.yml
Application에 명시적인 지시 사항이 없다면 이러한 우선 순위를 가진다. 자세한것에서부터 큰거로!
물론 이것 외 에도 빌드된 패키지 내부가 우선 순위를 가지고, 외부의 구성 정보가 후순위이다.
(외부, 내부의 큰 순서차이가 있고, 그 속에서는 위와 같은 우선순위를 가진다. )
spring:
cloud:
config:
server:
git:
uri: file:///D:\study\study_alone\mini_project\msa-ecommerce\git-local-repo
Spring Cloud Config Server에 이렇게 경로를 정해두면 그 안의 yml 파일을 읽어 올 수 있다.
what is spring cloud bus?
분산 시스템의 노드(microservice)를 경량 메시지 브로커와 연결(주로 rabbitMq사용)
상태 및 구성에 대한 변경 사항을 연결된 노드에게 전달 (Broadcast)
기존의 p2p 와 달리 메시지 서버인 Middlware를 놓고 메시지를 전달하는 사람이 미들웨어에 전달하면 그 미들웨어에서 메시지를 구독하고 있는 서버에게 전달 사항을 보냄.
왜 그렇다면 MessageQuing 서버를 두는게 유리한가?
- 서버가 1대1로 주고받는 것 보다 안정성이 높아지고,
- 서버끼리 서로에 대해 몰라도 주고 받는게 가능해짐.
각각의 연결된 마이크로 서비스에 클라우드 버스가 직접 데이터를 Push해서 업데이트 사항을 전달해줌.
AMQP(Advanced Message Queuing Protocol)을 통해 연결 되어 있음.(ex: rabbitMQ)
하나가 Config가 refresh되어서 알게되면 그것을 bus에 알려주고 MQ를 통해 전달 된다는 것이다.
방법
HTTP POST /busrefresh 호출을 하게 된다. -> 마이크로서비스에다 직접 호출해도, Gateway , cloud server어디든 상관없이 한번만 호출하면 해당하는 cloud bus에 연결된 노드에 전달이 된다(Broadcast)
Plain text를 사람이 알아 볼 수 없는 것으로 바꾸는 걸 encryption, 그것을 다시 원래의 글로 바꾸는 것을 decryption
Plain text를 사람이 알아 볼 수 없는 것으로 바꾸는 걸 encryption, 그것을 다시 원래의 글로 바꾸는 것을 decryption
encrypt:
key: abcdefghijklmnopqrstuvwxyz0123456789
localhost:8888/encrypt
localhost:8888/decrypt
yaml 파일에 설정을 해놓고, post로 text를 적어서 보내면 됨.
Private and Public Key
Using java keytool
java key tool을 이용하여 RSA 비대칭 키를 만들 수 있다.
PS D:\study\study_alone\mini_project\msa-ecommerce\keystore> keytool -genkeypair -alias apiEncryptionKey -keyalg RSA -dname "CN=Seungyong Kim, OU=API Development, O=jonecnsulting.co.kr, L=Seoul, C=KR" -keypass "test1234" -keystore apiEncryptionKey.jks -storepass "test1234"
다음에 대해 유효 기간이 90일인 2,048비트 RSA 키 쌍 및 자체 서명된 인증서(SHA256withRSA)를 생성하는 중 : CN=Seungyong Kim, OU=API Development, O=jonecnsulting.co.kr, L=Seoul, C=KR
keytool -list -keystore apiEncryptionKey.jks -v
keytool -export -alias apiEncryptionKey -keystore apiEncryptionKey.jks -rfc -file trustServer.cer
keytool -import -alias trustServer -file trustServer.cer -keystore publicKey.jks
encrypt:
key-store:
location: file:///D:\study\study_alone\mini_project\msa-ecommerce\keystore\apiEncryptionKey.jks
password: test1234
alias: apiEncryptionKey