본문 바로가기
Spring Cloud

스프링으로 배우는 MSA (2) - Spring Cloud Netflix Config Server

by DarrenH 2023. 6. 24.
반응형

MSA프로젝트를 시작 하기 앞서 Config서버를 만드려고한다.

 

config서버는 우리가 스프링 프로젝트에서 application.properties/yml 파일을 따로 모아서 관리하려고 한다.

 

해당 파일을 왜 따로 관리하냐면, 프로젝트가 여러개다보니까 설정 파일이 바뀔일이 많이 생기기 때문이다.

그럴 때마다 해당 프로젝트를 가서 서버를 다시 켜줘야하는데, 이런 설정 파일을 한 곳에서 관리하고 그 설정 파일을 바라보게 해주면 손쉽게 관리 할 수 있기 때문이다. 

더 나아가 Actuator를 이용해서 설정 파일이 바뀌더라도 서버를 직접 껏다 키는 것이 아니라 url요청으로 서버를 다시 켜서 설정 파일의 내용을 반영 시킬 수 있기 때문에 사용한다.

 

먼저 config서버를 만들어야한다. 

 

프로젝트를 새로 만든 후 build.gradle설정에 디펜던시를 추가해준다.

 

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.6.7'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'com.config'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '11'
}

repositories {
    mavenCentral()
}
ext {
    set('springCloudVersion', "2021.0.0")
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    implementation 'org.springframework.cloud:spring-cloud-config-server'

    implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'

    implementation 'org.springframework.boot:spring-boot-starter-actuator'

    implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

tasks.named('test') {
    useJUnitPlatform()
}

 

그리고 나서 main클래스에 @EnableConfigServer 어노테이션을 추가한다.

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

 

config서버를 만들 때 config에 담긴 파일을 바라보게 해야하는데 2가지 방법이 있다.

1. 로컬파일의 위치를 가르킨다.

2. 깃허브레포지토리를 바라 보게한다. (pub/pri)

 

여기서는 2번으로 실습하려고 한다.

 

server:
  port: 8888

spring:
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri: //깃허브 레포 URL  ex)https://github.com/깃허브이름/repo이름
          default-label: main //브랜치명
          ignore-local-ssh-settings: true
          private-key: '{cipher}f3174d67478f9e84b7c0f90eca49810807accabfe48c17b1f46d7b487180d8f1034e20bb00ef9a4a707da162794d4136e6489c0abc0c05c631afbe536383b6f4c380232f821ee7a5a0a0d02392b5ba6a532f3cc9881fc504b9eaf8794e3cd33eb9474136fbff2790623e3bbffb97494062d37873bf402e50a28c721d0692c2699481d8cfe4c512be4ae2d40a87aa44bf0355dd4ac88e3347eb2ddee38b50e8aefba6a05ba04fb2fd1d61b5f2ca877bc300b096b5114b975fed99719860ece9ee38abc81dea6c09cac79da71deb2de9995a840ed09814504e0c206aef46e4d7e45a40348492163be6c723a0c0215f1839f001dfdd6572fad6e6379b09acaa964f812cb6a5a12761fb10ab623bc4b7aba82dfdf0475dd9c7c7188656b04022fe543a1d9403fbe1a1db8c262c9026640d9aca7dceeed35c66d1633498adaef232b3cd196fc2b96d0d71db1bde53f5492654'

          passphrase: '{cipher}5d1844da20cc8de75f85e8724246018b3d44c9fa616f53db622bede1add03db7'
          timeout: 4

 

필자는 private repo를 이용해서 연결했기에 ssh를 이용하여 암호화를 했다. 이는 다른 블로그를 참조하면 좋을 것 같다.

public repo로 실습을 할 경우 ignore-local-ssh-settings밑으로 지워주면 된다. 

 

그리고 나서 따로 폴더를 만들어서 yml파일을 모아주면 된다. 해당 파일들을 깃허브에 올리면 된다. 

이런 식으로 yml파일만 존재하면 된다. 해당 레포지토리를 바라보게 위에 설정에서 uri를 적어주면 된다.

 

그리고 실행을 하면 끝이다. 여기서 주의점이있다. 

yml파일 이름을 >> {application-name}-{profiles}.yml 형식으로 생성해야한다.

 

실행 한 뒤에 http://localhost:8888/application-name/profiles로 접속하면 파일의 정보를 볼 수 있다. 

 

이런식으로 url에 접속이 된다면 성공한 것이다. 간혹 맞게 했는데 url에 접속이 안된다면 yml파일에 코드를 잘 못 적은것이므로 수정하면 된다.

 

참고 자료

https://imprint.tistory.com/m/213