이번 포스트에는 cloud config server를 도커 환경에서 실행하고 배포하기 위한 CI/CD의 단계를 진행할 것이다.
MSA로 서비스를 분리하면서 많은 서비스를 관리해야 하는 상황이 온다. 이때 각각 설정들이 다른 경우가 매우 많아서, config만 집중 관리해주는 서버가 꼭 필요하다.
각 서비스의 dev.yml을 올릴 저장소를 생성하고, 파일을 push 한다.

yml 코드 중 가장 중요한 것은 깃허브 레파지토리 주소이다.
server:
port: 8888
spring:
cloud:
config:
server:
git:
uri: 깃허브 레파지토리 주소
default-label: main
config 프로젝트에서의 기능은 깃허브 레파지토리의 yml 읽어오는 역할이기 때문에 주소를 정확히 기재해야 한다.
@EnableConfigServer메인 애플리케이션에 애노테이션 추가. 애노테이션을 추가함으로써 Spring Boot 애플리케이션이 Spring Cloud Config Server 역할을 하게 만들어준다.
앱을 컨테이너로 만들기 위한 파일이다.
FROM amazoncorretto:17
MAINTAINER dev@xxx.com
VOLUME /tmp
EXPOSE 8080
COPY build/libs/*.jar /app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
실행 : 로컬 -> 도커 컴포즈
이제 Config Server 빌드, 릴리즈 하면 준비는 끝이 난다.
터미널에서 사용하는 코드는 아래와 같다.
./gradlew clean build
./gradlew clean build docker build-t 태그이름(도커 id와 동일해야함)/backend-config:0.0.1 .
docker push 도커id/backend-config:0.0.1
도커 허브에서 이미지 생성 -> push까지 한 것이다.
이제 모든 다른 서비스들에 의존성을 추가한다.
implementation 'org.springframework.cloud:spring-cloud-starter-config’
implementation 'org.springframework.boot:spring-boot-starter-actuator'
dev.yml
spring:
config:
import: optional:configserver:http://host.docker.internal:8888
local-yml
cloud:
config:
enabled: false
그 후에는 모두 도커 파일을 추가하면 되고 유레카 서버만 포트번호 8761, 나머지는 8080으로 설정한다.
마지막으로, service 폴더에다가 서비스 실행 순서 등 설정값이 들어있는 도커 컴포즈 파일을 추가하고 실행시키면

이런식으로 실행이 잘 됨을 알 수 있다.
지금까지 user, post, 유레카, api 게이트 웨이 등 서비스를 나눠서 실행시키는 실습을 했다.
1. 많은 서비스를 중앙에서 설정을 관리해주기 위해서 config 서버를 만들었고
2. docker를 이용해서 이미지를 빌드 -> push 하여
3. 결론적으로 여러 서비스를 컨테이너로 통합 실행할 수 있는 상태를 만든 것이다.
코드를 빌드, 테스트, 실행할 수 있는 CI 상태 + 수동 배포 완료라고 보면 된다.
Zipkin은 분산 시스템에서 각 서비스 간의 호출 관계 및 지연 시간을 시각화하고 분석할 수 있는 분산 추적 시스템이다.
서비스가 느리거나 반응이 느려질 때 확인할 수 있는 유용한 툴이다.
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-tracing-bridge-otel'
implementation 'io.opentelemetry:opentelemetry-exporter-zipkin'
spring:
zipkin:
tracing:
endpoint: http://localhost:9411/api/v2/spans
,
management:
tracing:
sampling:
probability: 1.0 # 0.0 ~ 1.0 사이 값 (모든 요청을 트레이싱하려면1.0)
logging:
pattern:
level: "%5p [%X{traceId},%X{spanId}]" # 로그에 traceId, spanId 추가
이후에는 도커 컴포즈 파일을 따로 추가하고, 실행하면
http://localhost:9411 에서 확인이 가능하다.