[Spring] Spring-Cloud(1) - config server

KIM Jongwan·2024년 9월 6일
0

SPRING

목록 보기
6/7
post-thumbnail

관리하는 프로젝트의 수가 많아질수록, 배포 환경이 다양해질수록 속성(properties)파일을 관리하는게 번거로워질 수 있습니다. 하나의 Github repository로 여러개의 속성파일을 관리하는 방법을 알아봅시다.

2021년 회사에 입사 후 2년 반정도를 일하면서 사내 개발 환경에 많은 변화가 있었습니다.
기존 운영 서버 단일 환경으로만 개발/배포/운영 및 유지보수가 함께 이뤄지던 환경이 로컬/개발/운영 환경으로 분리되었고, PHP와 C#이 주를 이루던 프로젝트들도 java(Spring)으로 고도화를 진행하며 현재는 Spring Boot프로젝트의 비중이 더욱 많아진 상황입니다.

프로젝트 배포에 있어서는 Jenkins를 활용하고 있기에 관리해야하는 프로젝트의 수가 적은 상황에서 각각 배포 환경에 맞게 application-{환경}.yml 파일을 분리하고 적절한 구동 shell script만 작성하면 로컬에서 확인한 내용을 개발서버로 배포 -> 최종 운영 환경 적용까지 간단한 프로세스로도 가능했습니다.

하지만 점차 프로젝트의 수가 늘어나고 배포의 횟수가 많아지거나 properties 파일의 수정이 일어나는 횟수가 많아지면서 기존의 방식으로는 한계를 느끼게되었습니다. properties 파일에 어느 지점에 수정이나 추가가 발생하면 해당 프로젝트 개발서버 SSH 접속 -> properties 파일 수정 -> 프로젝트 재구동 이 과정을 운영 서버에도 동일하게 적용해주어야했기 때문에 좀 더 효율적으로 properties 파일을 관리하는 방법을 찾아보게 되었습니다.

역시나 이미 선배 개발자분들께서도 동일한 문제 상황을 겪으셨고 Spring-Cloud란 도구를 만들어 주셨습니다. 이번 포스트에서는 Spring Cloud Config Server (설정 정보 제공 서버)를 구축하고 필요한 설정 파일을 제대로 가져오는 지 확인하는 과정을 작성해보도록 하겠습니다.

프로젝트 생성

Spring Initializr에서 새로운 프로젝트를 생성합니다.이때 Spring-Cloud의 Config Server 의존을 추가해줍니다. Actuator 의존의 경우 현재 실행중이 애플리케이션 서버의 상태를 확인할 수 있는 의존으로 선택적으로 추가하시면 되겠습니다.

설정 파일을 관리할 원격 Repository 생성

Spring Cloud는 사용자가 명시한 git주소를 찾아 들어가 properties 파일의 정보를 가져옵니다.

테스트 용도로 사용할 Repository를 github에 생성하였습니다. 설정 정보의 경우 노출되면 안되는 민감한 정보들을 포함하고있기 때문에 절대로 private 권한으로 Repo를 생성해주셔야합니다.

생성한 Repo에 간단한 샘플 properties.yml을 추가해보겠습니다.

application-test.yml이라는 파일명으로 이미지와 같은 정보를 입력해주었습니다.

@EnableConfigServer

이제 맨 처음 Spring Initializr로 생성하였던 프로젝트의 Application.class 파일로 가보겠습니다.
Spring Boot cloud-config-server 의존을 정상적으로 추가하였다면 @EnableConfigServer 어노테이션을 사용할 수 있습니다. Applicaiton.class에 해당 어노테이션을 추가합니다.

...
import org.springframework.cloud.config.server.EnableConfigServer;


@SpringBootApplication
@EnableConfigServer // -- Spring Config Server를 활성화하기 위해 추가
public class Application {

	public static void main(String[] args) {
    	SpringApplication.run(Application.class args);
    }

}

application.yml 작성

이제 Spring Cloud config server와 properties파일을 관리할 github Repository를 연동해주어야합니다. application.yml파일을 작성하는 것으로 간단하게 작업을 진행할 수 있습니다. (Spring boot 프로젝트 최초 생성 시 application.properties로 생성되는 설정 정보를 .yml로 변경해주세요.)

server:
 port: 8888  ## spring cloud document에서 default port 8888 권장
 
spring:
 application:
  name: sample-config-server ## 사용하실 config server의 이름
 cloud:
  config:
   server:
    git: 
     uri: https://github.com/JK-Kim4/cloud-config-test-repo ## 앞서 생성한 github의 Repository 주소를 입력해주세요.
     default-label: main ## 기본적으로 참조할 branch를 명시합니다.
     username: {본인의 github 계정}
     password: {본인의 github access token}

위와같이 간단한 작성만으로도 설정값들을 가져오는 것을 확인할 수 있습니다. 이제 Spring Boot Application을 구동하고 정상 동작 여부를 확인해보겠습니다.

설정 파일 요청은 연결된 원격 리포지토리의 파일명으로 요청할 수 있습니다.

  • application-test.yml 파일 요청 -> localhost:8888/application/test
  • config-prod.yml 파일 요청 -> localhost:8888/config/prod

때문에 필요에 따라 properties 파일명을 구분하여 요청할 수 있습니다.


마무리

앞서 알아본 config server는 가장 간단한 방법으로 구현되었습니다. 실무에 적용을 위해서는 사용자 인증 방식이나 brach 관리, 특정 properties 명시 등 고려해야 할 많은 부분들이 있습니다. 사용법을 더 자세히 알아보고 싶은 경우 Spring Cloud Config Document를 참고해주세요.

(추가) github personal token을 사용하여 인증을 하실 경우 해당 리포지토리에 대하여 읽기 가능한 권한이 포함되어있는 token을 사용하여야 정상적으로 조회할 수 있습니다.

profile
3년차 백앤드 개발자입니다.

0개의 댓글