Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 키클락
- The law of Demeter
- saga pattern
- zipkin
- Transaction Pattern
- Spring Boot Actuator
- Serial GC
- TypeScript
- 멀티스레드
- spring batch
- Spring Cloud Netfilx Eureka
- 디자인 패턴
- spring cloud
- 타입스크립트
- 체인 패턴
- MSA
- thread
- 스레드
- 알고리즘
- JPA
- 생산자 소비자 패턴
- Resilinece4j
- Java
- Parallel Old GC
- java 정렬
- 디자인패턴
- 배치
- Action Pattern
- 스프링 배치
- 사가 패턴
Archives
- Today
- Total
PSD( Private-Self-Development )
Spring Cloud Config 본문
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 |