Backend 개발자/아키텍처

Spring Cloud Config Server 구성 간단한 예제 가이드 Quickstart With Java21 Springboot 3.2.x

by 앵과장 2024. 1. 26. 07:19
반응형

왜!? 사용하는가?

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

실전! Spring Boot 3 마이그레이션

들어가며 안녕하세요. LINE Plus에서 태국 LINE BK 채널 서버 개발 및 운영 업무를 맡고 있는 이석재입니다. LINE BK에서는 지난 9월에 LINE BK 보험 중개 서...

techblog.lycorp.co.jp

 
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

Spring Cloud Config

Spring Cloud Config provides server and client-side support for externalized configuration in a distributed system. With the Config Server you have a central place to manage external properties for applications across all environments. The concepts on both

spring.io

공식 문서 Github 링크
https://github.com/spring-cloud-samples/configserver

GitHub - spring-cloud-samples/configserver

Contribute to spring-cloud-samples/configserver development by creating an account on GitHub.

github.com

 

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