MSA 8일차 Part2 : 스프링 클라우드 - config 서버, Zipkin

parang·2025년 6월 9일

LG CNS AM Inspire Camp 2기

목록 보기
41/50

이번 포스트에는 cloud config server를 도커 환경에서 실행하고 배포하기 위한 CI/CD의 단계를 진행할 것이다.

config 서버

MSA로 서비스를 분리하면서 많은 서비스를 관리해야 하는 상황이 온다. 이때 각각 설정들이 다른 경우가 매우 많아서, config만 집중 관리해주는 서버가 꼭 필요하다.

깃허브 레파지토리 생성

각 서비스의 dev.yml을 올릴 저장소를 생성하고, 파일을 push 한다.

config 서버 프로젝트 생성.

의존성 추가

yml

yml 코드 중 가장 중요한 것은 깃허브 레파지토리 주소이다.

server:
  port: 8888
spring:
  cloud:
    config:
      server:
        git:
          uri: 깃허브 레파지토리 주소
          default-label: main

config 프로젝트에서의 기능은 깃허브 레파지토리의 yml 읽어오는 역할이기 때문에 주소를 정확히 기재해야 한다.

@EnableConfigServer

메인 애플리케이션에 애노테이션 추가. 애노테이션을 추가함으로써 Spring Boot 애플리케이션이 Spring Cloud Config Server 역할을 하게 만들어준다.

dockerfile

앱을 컨테이너로 만들기 위한 파일이다.

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

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 에서 확인이 가능하다.

profile
파랑입니다.

0개의 댓글