앞으로 구현할 Configuration 서비스의 개요입니다.
- 분산 시스템에서 서버 클라이언트 구성에 필요한 설정 정보(application.yaml)를 외부 시스템에서 관리
- 하나의 중앙화 된 저장소에서 구성요소 관리 가능
- 각 서비스를 다시 빌드하지 않고, 바로 적용 가능
- 애플리케이션 배포 파이프라인을 통해 Dev - Stg - Prd 환경에 맞는 구성 정보 사용
Spring Cloud Config Server는 설정 정보를 가지고 와서 마이크로서비스에 적용합니다.
Config Server가 읽어들이는 구성 파일의 우선 순위가 있습니다.
1. application.yml
2. application-name.yml : 예시) ecommerce.yml
3. application-name-.yml : 예시) ecommerce-prd.yml
요약
설정 정보 저장할 레포지토리 만들기
레포지토리를 Git에 놓기
Config Server에 Git 설정하기
각 마이크로서비스들은 bootstrap.yml을 만들고, config server를 설정과 profiles 설정
각 마이크로서비들의 applicaiton.yml에 actuator 설정 추가
설정 정보를 바꾸면 push하고 actuactor로 각 서비스 refresh
소스코드
설정 정보를 놓을 레포지토리를 생성하겠습니다.
git local repository를 만들어 놓을 위치로 이동합니다. 설정 파일들을 만들고 git에 저장하겠습니다.
아래 명령어들을 차례대로 입력합니다.
Windows | |
원격 저장소 설정 | git remote add origin "repo url" |
레포지토리 생성 | mkdir git-local-repo |
레포지토리 이동 | cd git-local-repo |
yml 파일 생성 | visual studio code 프로그램을 이용해서 생성 및 수정합니다. 아래 3개 파일을 생성합니다. ecommerce.yml ecommerce-prd.yml ecommerce-dev.yml |
git 초기화 | git init |
준비상태로 변경 | git add . |
커밋 | git commit -m "upload a default application yaml file" |
푸시 | git push |
ecommerce.yml
token:
expiration_time: 8600000 # 1분 유효
secret: user_token_default # 토큰화할 때 사용할 키
gateway:
ip: 192.168.0.8
ecommerce-prd.yml
token:
expiration_time: 8600000 # 1분 유효
secret: user_token_prd # 토큰화할 때 사용할 키
gateway:
ip: 192.168.0.8
ecommerce-dev.yml
token:
expiration_time: 8600000 # 1분 유효
secret: user_token_dev_1 # 토큰화할 때 사용할 키
gateway:
ip: 192.168.0.8
Config Service 프로젝트를 생성하겠습니다.
Dependency로 아래 것을 추가합니다.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
application.yml을 작성합니다.
native에는 로컬에서 설정 정보를 가져오는 경로를 설정합니다.
git에서는 git에서 설정 정보를 가져오는 경로를 설정합니다.
server:
port: 8888
spring:
appliation:
name: config-service
profiles:
active: native
cloud:
config:
server:
native: # local에서 불러옴
search-locations: file:///C:/Users/ASUS/IdeaProjects/native-file-repo
git: # git 에서 불러옴
uri: https://github.com/conkjh032/spring-cloud-config
# username:
# password:
Postman으로 확인합니다.
127.0.0.1:8888/{파일이름}/{profile}
User Service 프로젝트에 Config Service를 이용하기 위해서 아래와 같이 추가하겠습니다.
Dependency를 추가합니다.
<!-- Config Service -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- Actuator 설정 관련 dependency-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
application.yml 파일에 actuator 내용을 추가합니다.
# Actuator 설정
management:
endpoints:
web:
exposure:
include: refresh, health, beans
bootstrap.yml 파일을 생성합니다. 이름이 틀리면 안됩니다. application.yml을 오른쪽 클릭하여 파일 생성합니다.
profiles.active에서 어떤 설정 정보를 가져올지 선택할 수 있습니다. ( dev, stg, prd )
# Config Service
spring:
cloud:
config:
uri: http://127.0.0.1:8888
name: ecommerce # config repository에 저장된 ecommerce.yml
profiles:
active: prd
생성한 뒤에 terminal에서 git local repository 경로로 이동하여 아래 명령어로 commit 합니다.
git add ecommerce.yml
git commit -m "value changed"
UserController.java에 있는 /heath_check를 아래와 같이 수정합니다. config service 적용 결과를 보기 위해서 입니다.
@GetMapping("/health_check")
public String status() {
return String.format("It's Working in User Service"
+ ", port(local.server.port)=" + env.getProperty("local.server.port")
+ ", port(server.server.port)=" + env.getProperty("server.port")
+ ", token secret=" + env.getProperty("token.secret")
+ ", token expiration time=" + env.getProperty("token.expiration_time"));
}
Postman으로 확인합니다.
User Service 재기동 없이 바뀐 Config 정보를 적용해보겠습니다.
ecommerce.yml를 수정합니다.
terminal에서 commit합니다.
Postman으로 POST 방식으로 refresh합니다.
User Service 재기동 없이 expiration_time이 84000에서 8400000으로 바뀌었습니다.
Api GW Service 프로젝트에 Config Service를 이용하기 위해서 아래와 같이 추가하겠습니다. User Service와 동일합니다.
Dependency를 추가합니다.
<!-- Config Service -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- Actuator 설정 관련 dependency-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
application.yml에 아래 내용을 추가합니다.
# config service 이용
management:
endpoints:
web:
exposure:
include: health, refresh, beans, httptrace # httptrace 이용을 위해서 ApigatewayServiceApplication.java에 빈 등록
bootstrap.yml 파일을 생성합니다. application.yml을 오른쪽 클릭하여 파일 생성합니다.
profiles.active에서 어떤 설정 정보를 가져올지 선택할 수 있습니다. ( dev, stg, prd )
여기서 user service와 다른 토큰 정보를 가지는 설정 정보를 사용한다면, 인증 오류로 접속 불가능합니다. 예 : 토큰 정보가 다른 prd와 dev를 각각 사용
# Config Service
spring:
cloud:
config:
uri: http://127.0.0.1:8888
name: ecommerce # config repository에 저장된 ecommerce.yml
profiles:
active: prd
생성한 뒤에 terminal에서 git local repository 경로로 이동하여 아래 명령어로 commit 합니다.
git add ecommerce.yml
git commit -m "value changed"
ApigatewayServiceApplication.java에 httptrace을 위한 빈을 추가합니다.
@Bean
public HttpTraceRepository httpTraceRepository() {
return new InMemoryHttpTraceRepository();
}
Postman으로 확인합니다.
POST, localhost:8000/actuator/refresh로 config 정보를 적용합니다.
POST, localhost:8000/user-service/usrs로 가입합니다.
POST, localhost:8000/user-service/login으로 로그인합니다.
GET, localhost:8000/user-service/health_check에 token을 넣고 확인합니다.
Spring Cloud Config 에서 bootstrap.yml을 더 이상 지원하지 않기로 했습니다. 제시된 방법은 application.yml에 설정하는 것입니다. 참고 사이트
'IT > Spring Cloud' 카테고리의 다른 글
대칭키 암호화 (0) | 2022.01.05 |
---|---|
Spring Cloud Bus (0) | 2022.01.05 |
User Microservice - 회원 로그인 (0) | 2021.12.17 |
Order Service (0) | 2021.12.15 |
Catalogs Microservice (0) | 2021.12.15 |