Spring Cloud Config
- 분산 시스템에서 서버, 클라이언트 구성에 필요한 설정정보 (application.yml)를 외부 시스템에서 관리
- 하나의 중앙화된 저장소에서 구성 요소 관리 가능
- 각 서비스를 다시 빌드하지 않고 바로 적용 가능
- 애플리케이션 배포 파이프라인을 통해 DEV - UAT - PROD 환경에 맞는 구성 정보 사용
기존에 각 프로젝트마다 존재하던 yml 파일을 외부에서 관리하도록 하여
동적으로 서버 구성 정보를 적용할 수 있도록 한다.
- private git repository ->
- secure vault ->. Spring cloud config server
- secure file storage ->
local repository를 만들어 confi yml 파일을 생성하기
로컬에 설정 파일을 관리할 폴더를 새로 만들고 ecommerce.yml 파일을 생성하고
필요한 정보를 입력
git에서 관리해주도록 설정
git init
git add ecommerce.yml
git commit -m 'message'
스프링 config server를 의존성으로 하는 새로운 프로젝트를 생성한다.
dependencies {
implementation 'org.springframework.cloud:spring-cloud-config-server'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
해당하는 서버가 config server 역할을 하기 위해 다음과 같은 애노테이션을 추가해준다.
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
yml 설정
file 경로를 지정해준다.
server:
port: 8888
spring:
application:
name: config-service
cloud:
config:
server:
git:
uri: file:///Users/Rene/Documents/rene/inflearn/msa-with-springcloud-config
정상적으로 등록을 마쳤다면 해당 서버를 기동하고 다음과 같은 주소로 접속하면 아래와 같은 json 포맷이 보이게 된다.
http://localhost:8888/ecommerce/default
{"name":"ecommerce","profiles":["default"],"label":null,"version":"f292a59922df704baf5756dc8fb68e62a4a9a790","state":null,"propertySources":[{"name":"file:///Users/Rene/Documents/rene/inflearn/msa-with-springcloud-config/ecommerce.yml","source":{"token.expiration_time":86400000,"token.secret":"user_token","gateway.ip":"192.8.0.0"}}]}
UserService 에서 등록한 yml을 읽어오기
먼저 dependency를 추가해준다.
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
}
bootstrap.yml을 추가해 다음 내용을 작성한다.
spring:
cloud:
config:
uri: http://127.0.0.1:8888
name: ecommerce
여기서 bootstrap.yml의 내용은 다음을 의미한다.
url: cloud config 서버
name: 읽어올 yml 파일
즉, config 서버에서 해당하는 yml 파일을 읽어오는 설정이다.
이렇게 하면 가장 먼저 해당 yml 을 읽어오며 로그에 다음과 같이 출력된다.
config 파일이 변경에 반영되는 방법은 다음 3가지다.
1. 서버 재기동
2. actuator를 이용
3. spring cloud bus 사용
첫 번째 방식은 계속해서 서버를 껐다 켜야 하는 번거로움이 있다. 2,3번의 방법으로 이러한 문제를 해결할 수 있다.
Actuator를 사용하기
spring actuator endpoints
yml 파일에 enpoints를 볼 수 있는 설정을 추가해준다.
management:
endpoints:
web:
exposure:
include: refresh, health, beans, busrefresh, info, metrics, prometheus
다음과 같이 정보 확인이 가능해졌다.
여기서 Post 요청으로 refresh를 시키면 yml 설정이 새롭게 반영된다.
gateway에서는 actuator의 httptrace 기능을 이용해볼 수 있다.
의존성, yml에 위와 같이 추가하고 다음과 같은 bean 등록을 해준다.
@SpringBootApplication
public class ApigatewayServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ApigatewayServiceApplication.class, args);
}
@Bean
public HttpTraceRepository httpTraceRepository(){
return new InMemoryHttpTraceRepository();
}
}
클라이언트가 요청했던 trace 정보가 memory에 담기고 endpoint를 호출하게 되면 해당하는 값을 사용할 수 있게 된다.
ref. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4/dashboardhttps://www.inflearn.com/course/%EC%BD%94%EC%96%B4-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0/dashboard
'Programming > Java, Spring' 카테고리의 다른 글
[Spring Cloud] config에서 대칭키 암호화 설정하기 (0) | 2023.06.01 |
---|---|
[Spring Cloud] bus, rabbitmq를 이용해 서버 연결하고 actuator를 이용한 갱신 집합화하기 (0) | 2023.06.01 |
[Spring Cloud] JWT 토큰 생성과 API Gateway에서 검증 필터 구현 (0) | 2023.06.01 |
[Spring Cloud] API Gateway Routing 시 마이크로서비스 식별 주소값을 제외하고 실용적인 uri를 전달하는 방식 (0) | 2023.06.01 |
[Spring Cloud] Users MicroService를 Api Gateway에 등록하기 (0) | 2023.05.31 |