MSA 구축 (3) : Config 서버 구축

오형상·2024년 11월 16일
0

Ficket

목록 보기
3/27
post-thumbnail

Config 서버 도입 배경

현재 Ficket 프로젝트는 user, admin, event, queue, ticketing, face 총 6개의 마이크로 서비스로 구성되어 있습니다. 기존 방식에서는 각 마이크로 서비스의 설정 파일이 개별적으로 관리되고 있어, 공통 설정을 변경할 때마다 모든 서비스를 수정해야 하는 불편함이 있었습니다. 이는 생산성과 운영 효율성을 저하시키고, 모든 서비스를 다시 빌드하고 배포해야 하는 문제를 발생시켰습니다.

이러한 문제를 해결하기 위해 설정 파일을 중앙에서 통합 관리할 수 있는 Config Server를 도입하였으며, 최종적으로 Spring Cloud Bus(RabbitMQ), Actuator, GitHub Private Repository, 비대칭키 암호화, 모니터링, Webhook 등을 사용해 설정 관리를 자동화하고자 합니다.

Config 서버란?

Config Server 이미지

Spring Cloud Config는 MSA와 같은 분산 시스템에서 서버 및 클라이언트 구성에 필요한 설정 정보를 외부 시스템에서 중앙 집중적으로 관리하는 솔루션입니다.

적용 과정

1. Config 서버 생성 및 설정

1-1. 의존성 추가

새로운 프로젝트를 생성하고 다음과 같은 의존성을 추가합니다:

// Config Server
implementation 'org.springframework.cloud:spring-cloud-config-server'

1-2. @EnableConfigServer 추가

@EnableConfigServer 어노테이션을 사용하여 해당 애플리케이션이 Config Server로 동작하도록 설정합니다:

@EnableConfigServer
@SpringBootApplication
public class ConfigApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication.class, args);
    }
}

1-3. application.yml 설정

server:
  port: 8888

spring:
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri: https://github.com/Fickets/config.git
          default-label: main
          search-paths: ConfigFiles
          username: ${cloud.username}
          password: ${cloud.password}
  • spring.cloud.config.server: Spring Cloud Config Server 관련 설정을 정의합니다.
  • git: Git 저장소에서 Config 설정 파일을 가져옵니다.

Private 레포지토리를 연동하는 방법은 SSH 키 등록 및 GitHub 계정 자체를 연동하는 방법이 있지만 저는 계정 연동 방식으로 진행했습니다.

Git 저장소를 Private으로 생성한 후, usernamepassword에는 Git 토큰을 발급받아 설정합니다.

해당 저장소에는 application-local.yml, user-service-local.yml, user-service-prod.yml 등의 설정 파일을 만들어 두었으며, Spring Cloud Config Server는 이 설정 파일들을 가져와서 다른 마이크로 서비스들에게 제공합니다.

2. 각 마이크로 서비스 설정

2-1. 의존성 추가

각 마이크로 서비스에 다음과 같은 의존성을 추가합니다:

// Config 의존성
implementation 'org.springframework.cloud:spring-cloud-starter-config'

// Actuator 의존성
implementation 'org.springframework.boot:spring-boot-starter-actuator'

2-2. application.yml 설정

각 마이크로 서비스의 application.yml 파일을 다음과 같이 설정합니다:

server:
  port: 0

spring:
  application:
    name: user-service
  profiles:
    active: local
  config:
    import: optional:configserver:http://localhost:8888

2-3. 테스트

http://localhost:8888/user-service/local로 GET 요청을 보내서, 설정 파일의 정보가 반환되면 성공입니다:

Config 테스트 결과


이렇게 해서 Config 서버를 생성하고 설정을 중앙 집중적으로 관리하는 과정을 마쳤습니다. 다음 단계에서는 Spring Cloud Bus, RabbitMQ, 비대칭키 암호화 등의 기능을 통해 더욱 효율적으로 설정을 관리할 수 있도록 하겠습니다.

0개의 댓글