🔥 분산 시스템 환경에서 중앙 집중식 구성 관리를 제공하는 프레임워크인 Spring Cloud Config 공부하기
[ Spring Cloud Config 주요 기능 ]
- 중앙 집중식 구성 관리: 모든 마이크로서비스의 설정을 중앙에서 관리합니다.
- 환경별 구성: 개발, 테스트, 운영 등 환경별로 구성을 분리하여 관리할 수 있습니다.
- 실시간 구성 변경: 설정 변경 시 애플리케이션을 재시작하지 않고도 실시간으로 반영할 수 있습니다.
[ 환경별 설정 파일 관리 ]
- Config 서버는 환경별로 다른 설정 파일을 제공할 수 있습니다.
- ex) application-dev.yml, application-prod.yml 파일을 Git 저장소에 저장하여 환경별 설정을 관리합니다.
[ 설정 파일 구성 ]
- application.yml 파일에서 Config 서버의 설정을 정의합니다.
server:
port: 8888
spring:
cloud:
config:
server:
git:
uri: https://github.com/my-config-repo/config-repo
clone-on-start: true
- 중요❗❗
- 우리는 Git 저장소에서 설정 파일을 읽어오지 않고 local에서 Project를 동작하여 연습
[ Spring Cloud Config 서버 설정 ]
Dependencies
ConfigApplication.java
- Application에 EnableConfigServer 어노테이션을 추가하여 ConfigServer임을 선언
@EnableConfigServer
@SpringBootApplication
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
application.yml
server:
port: 18080
spring:
profiles:
active: native
application:
name: config-server
# yml 파일들을 resources/config-repo에서 관리
cloud:
config:
server:
native:
search-locations: classpath:/config-repo # resources/config-repo
eureka:
client:
service-url:
defaultZone: http://localhost:19090/eureka/
product-service-local.yml
- Config 클라이언트인 ProductApplication에서 Config 서버의 서버 포트와 메시지를 가져와서 사용하면 성공
server:
port: 19083
message: "product-service-local message update"
[ Spring Cloud Config 클라이언트 설정 ]
Dependencies
- Config 서버에 등록할 Application에 ConfigClient 의존성 추가
application.yml 수정
- Config 클라이언트(ProductApplication)에서 Config 서버의 resources/config-repo에 있는 local.yml을 사용하기 위해 yml 수정
spring:
application:
name: product-service
profiles:
active: local # 활성화할 프로파일을 지정, local 프로파일이 활성화
config:
import: "configserver:" # Spring Cloud Config Server를 사용하여 설정을 가져오겠다는 의미
cloud:
config:
discovery:
enabled: true
service-id: config-server # Config Server의 서비스 ID 지정
server:
port: 0
eureka:
client:
service-url:
# 유레카 서버의 주소 설정
defaultZone: http://localhost:19090/eureka/
message: "default message"
[ Run ]
- Product Application에서 설정한 yml이 아닌, Config에서 설정한 yml을 읽어오면 성공
http://localhost:19090에 접속하여 각각의 인스턴스를 확인합니다.
- PRODUCT-SERVICE의 포트번호가 Config 서버의 yml에서 설정한 19083번으로 나오는걸 확인할 수 있다.
Product.Controller
- 해당 엔트포인트로 접근 시 Config 서버에 설정한 yml의 포트번호와 메시지를 가져오면 성공
@RefreshScope // 설정 파일이 변경되었을 때 애플리케이션을 재시작하지 않고도 새로운 설정을 적용할 수 있게 해준다.
@RestController
public class ProductController {
@Value("${server.port}") // 애플리케이션이 실행 중인 포트를 주입받습니다.
private String serverPort;
@Value("${message}")
private String message;
@GetMapping("/product")
public String getProduct(
) {
return "Product info!!!!! From port : " + serverPort + "and message : " + message ;
}
}
실행 결과
- Product의 Application.yml에서 설정해준 서버포트 값인 "0" , 메시지 내용 "default message"가 아닌,
- Config의 local.yml에서 설정해준 서버포트 값과 메시지 내용을 반환하는 모습을 볼 수 있다.
읽어주셔서 감사합니다😊
'해피 코딩 > Spring' 카테고리의 다른 글
RabbitMQ 실습하기 (0) | 2024.08.16 |
---|---|
Layered Architecture Pattern? 그게 뭔데! (0) | 2024.08.15 |
[Redis] Spring Boot 프로젝트에 캐싱 적용하기 (0) | 2024.08.13 |
[MSA] API 게이트웨이 Spring Cloud Gateway (0) | 2024.08.05 |
[MSA] 로드 밸런싱 Ribbon (0) | 2024.08.04 |