왜!? 사용하는가?
Spring Cloud Config Server를 사용하는 목적은 ..
트래픽이 높은 서비스 플랫폼을 제공하기 위해서 분산 처리할수 있는 Application Server 구성이 필수적으로 들어가게 되는데 문제는 여러서버를 구성하다보니 관리 포인트가 늘어나며 동일한 동작을 하는 여러대의 서버에 반복적으로 메뉴얼한 행위를 할때 발생할수 있는 휴먼오류 및 서비스 정책으로 비지니스 로직이 아닌 상수값이 변경 되었을때 무정지 상태로 서비스에 적용해야하는 경우 고려하게됩니다.
현업 에서는 언제 사용 하게 되나요?
- 기존에 24시간 동작하고있는 특정한 기능 예를들어 Legacy 서비스 특정한 API를 개선하고 서비스 안정화 및 개선한 기능으로 특정한 기간동안만 변경이 필요한 스위칭 작업이 필요할 경우
- MSA 구성으로 수많은 서버에 동일한 상수값을 유지하고 관리해야하는 경우
- Application Server Ioc 컨테이너 spring context bean 객체 속성(properties) 상수값을 변경 해야하은 경우
Spring Cloud Config Server 구성 요소
- Spring Cloud Config Server
- Config Repository
- Client Server
- Spring Cloud bus
- (Apache Kafka or RabbitMQ)
- Git 저장소(github,bitbucket 등..)
Intellij 프로젝트 설정 및 Java21, Springboot 3.2.1 마이그레이션
Springboot java21을 사용하기 위해서 마이그레이션이 필요합니다.
라인플러스 마이그레이션 설명이 잘되어있어서 공유합니다.
https://techblog.lycorp.co.jp/ko/how-to-migrate-to-spring-boot-3
Java21 프로젝트 기본 설정
옵션 : Intellij > Settings > Annotation Processors
필수설정 : Intellij > Build, Execution, Deployment > Build Tools > Gradle JVM변경
필수설정 : Project 변경
Spring Cloud Config Server
https://start.spring.io/
공식 문서 가이드 링크
https://spring.io/projects/spring-cloud-config/#samples
공식 문서 Github 링크
https://github.com/spring-cloud-samples/configserver
Git 저장소 webhook
Spring에서 관리되는 설정정보를 config Server에 전달하기 위해서는 이벤트 파이프라인을 구성해야합니다
Repository에서는 사용자가 Git 기능중 Remote Push 하게되면 변경된 내용을 전달하는 기능이 존재합니다
Spring Cloud Config Server 전달정보
Application.yml
Application.properties
Application-{profile}.yml
Client Server
Spring 프레임워크로 구성된 아무프로젝트로 사용 하셔도 무방합니다
변경된 내용을 전달받기 위해서 Config Server 변경 이벤트를 감지해야 하며 Spring Cloud Bus 를 이용하게 됩니다
Kafka 또는 RabittMQ 로 구성되며
Publish 된 변경내용이 Queue로 누적되고 구독하고 있는 Consumer그룹(여러대의 클라이언트서버)는 topic 방식으로 변경내용을 적용하게 됩니다
변경 포인트를 검토하는 방법
- Server Log
- Spring Actuator Api 사용
- 변경된 application.yml 접근
- 별도 모니터링 Tool 사용
Spring Cloud Config Server
간단한 이미지로 표기한다면 이런 형태가 구성됩니다
- 그림 설명
Client-Server (MSA) 2대 구성되어있고
Spring Config Cloud Server 1대
git Repository (github or gitlab or Bitbucket)
DB같이 생긴건 이번설명에서 제외
1. Git commit Remote push 이벤트발생
2. Webhook에 설정된 spring cloud configserver destination(목적지 URI) /monitor 요청
3. Spring Cloud Bus Topic 방식으로 Publish된 요청사항을 Consumer Group 등록된 2대의 Client-Server에서 전달받음
4. Client Server 에 설정된 Actuator Refresh를 통한 Application 환경 설정값 적용
부가설명 : Client-Server 재기동 없이 특정 환경변수 값이 적용될수 있도록 하기위해서는 @Refreshscope 라는 annotation 사용이 필요합니다
이런순서로 적용된다는점 참고 하시고
다음번 내용에서는 직접 구성한 코드레벨을 공유드리겠습니다
#springcloudconfig
#cloudbus
#kafka
'Backend 개발자 > 아키텍처' 카테고리의 다른 글
Springboot Gradle Toml 확장자 알아보기 (1) | 2024.01.30 |
---|---|
Boilerplate 재사용 가능한 멀티모듈 프로젝트 구성하기 Java Springboot Gradle (1) | 2024.01.29 |
MSA 아키텍처 API 자동화 Pact Contract Test Front TO Backend 개발삽질기 러닝커브 실사용후기 챕터5 (0) | 2023.09.13 |
MSA 아키텍처 API 자동화 Pact Provider Unit 테스트 코드 개발 및 Broker Server Status 챕터4 (0) | 2023.09.10 |
MSA 아키텍처 API 자동화 Pact Consumer Unit 테스트 코드 개발 및 Broker Server Publish 챕터3 (0) | 2023.09.04 |