728x90
반응형
※ Spring Config Cloud Server 설정 ※
ext {
set('springCloudVersion', "2022.0.2")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-config-server'
implementation "org.springframework.boot:spring-boot-starter-actuator"
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap:4.0.0'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
[build.gradle]
- dependency 추가
server:
port: 8888
spring:
application:
name: config-service
cloud:
config:
server:
git:
uri : https://github.com/jw0293/Spring-Cloud-Config
default-label: main
encrypt:
enabled: false # Config Server에서 복호화 비활성화
# rabbitmq:
# host: 127.0.0.1
# port: 5672
# username: guest
# password: guest
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
shutdown:
enabled: false # actuator 종료 활성화 설정은 false로 설정
[application.yml]
- local Port 8888로 설정
- 설정 config 파일을 담은 github repository uri 설정
- default-label : config 파일이 위치한 branch 이름
- encrypt.enabled: false로 설정하여 Config Server에서 복호화 비활성화
- rabbitmq : Spring Cloud Bus를 이용하기 위한 설정. 고도화 시 사용 예정
- management : actuator 사용을 위한 설정, shutdown은 false로 설정하여 오류 발생 시 빌드에서 확인하기 위해 false로 설정
※ Spring Config Cloud Client 설정 ※
spring:
cloud:
config:
uri: http://127.0.0.1:8888
name: capstone
profiles:
active: local
[bootstrap.yml]
bootstrap.yml파일이 가장 먼저 로드되고 그 안에 내용이 설정으로 적용된다. 내용을 확인해보면
- Spring Cloud Config로 등록된 uri는 위에서 작성한 Config Server가 된다. Config Server로 접근하면 위에서 보았듯 등록된 git repository 내 파일을 읽어 설정으로 등록하게 된다.
- 나는 Github repository에 저장되어있는 yml 파일 중 [capstone-local.yml] 파일을 읽기 위해 spring.cloud.config.name=capstone으로, spring.profiles.active=local로 설정해주었다.
server:
port: 4002
spring:
application:
name: capstone
management:
endpoints:
web:
exposure:
include: "*"
- Config Server를 통해 설정과 관련된 것들을 관리해주는데 그러면 어떻게 Client에서 적용된 것을 확인하고 재등록이 필요할 때 재배포가 아닌 방식으로 빌드하고 적용시키는지가 중요하다.
- Spring Cloud Bus를 통해 관리하는 방법도 존재하지만 일단 Spring에서 제공하는 actuator를 이용하여 확인해본다.
- Rabbitmq 방식은 후에 고도화를 통해 적용하도록 한다.
@Setter
@Getter
@ConfigurationProperties("com.example")
@RefreshScope
@ToString
public class MyConfig {
private String profile;
private String region;
}
- 위에서 말했듯 설정파일이 변경되었을 때 다시 빌드하는 방식이 아닌 actuator를 이용하여 최신화를 등록하기 위해 @RefreshScope를 적용시켜준다.
- 위 어노테이션을 이용하면 [HTTP : POST] ~/actuator/refresh로 HTTP 통신을 요청하면 자동적으로 최신화가 적용된다.
- url 정보가 2개 나뉘어져있다. 위에서 말한 actuator/refresh를 확인하기 위해 두 가지를 등록해보았다.
- 하나는 local DB 또 다른 하나는 RDS에 배포된 DB URL 정보이다.
- 암호화가 된 정보라 {cipher}이 앞에 붙어있다.
@GetMapping("/info")
public String getInfo(){
log.info("spring.datasource.url : {}", env.getProperty("spring.datasource.url"));
return env.getProperty("spring.datasource.url");
}
- 위처럼 property 정보를 읽어와 출력시키는 방식으로 적용이 잘 되는지 확인해보자
- 우선 Config Server를 실행시킨다.
- Config Client Server를 실행시킨다.
- Client Server가 Config Server에 접근한 후 git repo에 있는 정보를 올바르게 읽어오는지 확인해본다.
성공이다. Client Service가 Config Server에 등록된 git repo 내 파일 정보를 읽어왔다.
- git repository에 있는 파일 정보를 Local정보가 아닌 Mysql 정보로 변경해주었다.
- 그럼 동작중인 Client Server도 해당 정보가 적용될 수 있도록 위에서 설명한 actuator를 이용하여 진행해본다.
- HTTP POST 방식으로 [localhost:4001/actuator/refresh]를 요청한다.
- 아래와 같이 출력되면서 변경정보가 출력된다.
- 똑같이 확인해보자
- Client Server 재시동 없이 actuator/refresh 방법으로 git repository 내 변경된 yml 파일 정보가 서비스에 적용된 것을 확인할 수 있다.
- local 환경에서 Spring Cloud Server 구축과 Client Server와의 연동을 확인해보았다.
- 배포된 환경에서도 위와 마찬가지로 연동이 완료되는 것까지 확인되면 수동으로 actuator 방식으로 모두 적용시키는 것이 아닌 Rabiitmq를 적용하여 Spring Cloud Bus 기능을 적용시켜보고자 한다.
- 또한, 현재는 작업을 편하게 하기 위해 Git Repository가 public으로 열려있는데 private로 변경한 후 SSH 적용을 통해 접근하는 방식을 적용하고자 한다.
현재까지 확인한 것
- 위 과정들 모두 local에서 확인
- 배포된 Client Server가 배포된 Conig Server로 접근하는 것은 안됨
- 배포된 Config Server로 접근하였을 시 DB 연동 경로가 위처럼 나와야하는데 위 과정 모두 진행해보아도 아무 정보가 나오지 않음
- Config Server로 연결이 안되었음
- 무엇이 문제인지 파악해야함
- Config Server가 잘못된 방법으로 배포된 것인가
- Config Server가 올바르게 배포되었을 때 Local에서 접근하는 방식과는 다른 방식으로 Config Server에 접근해야하는가
- 위 두 가지 모두 확인해봐야함
- 우선 인프라 측면은 내가 하기에 제한적인 부분이 있으니 배포된 Config Server와 연동하는 방법을 찾아봐야함
728x90
반응형
'2023 > 2023-1' 카테고리의 다른 글
[5월 18일(목)] 인공지능 입문(이론) - Build CNN, Avoid Overfitting (0) | 2023.05.18 |
---|---|
[캡스톤 디자인] 5월 10일 (0) | 2023.05.10 |
[5월 4일(목)] 인공지능 입문(이론) - CNN & ComputerVision (0) | 2023.05.04 |
[5월 4일(목) : 과제] 인공지능 입문(이론) - Neural Network (2) (0) | 2023.05.04 |
[4월 27일(목)] 인공지능 입문(이론) - Neural Network (0) | 2023.04.27 |