Back-End/Database & etc

Yaml 을 Private Submodule 로 추가하여 관리하기

haema_dev 2023. 6. 8. 01:18

1. Yaml 파일 property 값들이 빈으로 등록되지 않는 문제 발생

build.gradle
// 메인 프로젝트와 경로를 맞춰줘야 런타임 시에 정상적으로 주입이 된다
sourceSets {
    main {
        resources {
            srcDirs = ['src/main/resources', 'buddy-wisdom-private/src/main/resources']
        }
    }
}

올바른 classpath 설정 필요.

application.yml 파일은 Runtime 시에 빈으로 주입되어야하기 때문에 메인 프로젝트와 경로를 맞춰줘야한다. 서브모듈 하위에 application.yml 의 위치를 기존 메인 프로젝트 Yaml 파일과 맞춰준다.

그리고 메인 프로젝트의 Yaml 은 반드시 지울 것!!

그렇지 않으면 중복 에러가 발생한다.

 

 

2. Gradle 설정 + Yaml 을 파싱할 dependency 주입

build.gradle
// gradle 에서 yml 을 읽어오기 위한 설정
tasks.register('readYaml') {
    doLast {
        File file = new File("buddy-wisdom-private/src/main/resources/application.yml")
        ObjectMapper mapper = new ObjectMapper(new YAMLFactory())
        def config = mapper.readValue(file, Map.class)
        println config
    }
}
    dependencies {
    
    ...
    
    // Jackson yaml
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.0'
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.0'
    
    ...
    
    }
// gradle 에서 yml 을 읽어오기 위한 설정
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
// Compiletime 이 아닌 Runtime 시에 동작하므로 buildscript 에 의존성 추가
// Gradle 초기 설정 단계에서 클래스 경로가 설정되어야 하므로 buildscript 블록은 스크립트 파일의 상단에 위치
buildscript {
    dependencies {
        classpath 'com.fasterxml.jackson.core:jackson-databind:2.15.0'
        classpath 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.0'
    }
}

plugins {

...

}

SnakeYaml 대신 JacksonYaml 을 사용하는 이유는 보안상의 이슈 때문이다.

SnakeYaml 는 보안 취약점이 발견된 이후 업데이트가 없으나 JacksonYaml 는 그 이후로도 계속 업데이트가 되고 있다. 버전은 2.15 이상을 권장.

 

 

3. Submodule 추가

.gitmodules
[submodule "buddy-wisdom-private"]
	path = buddy-wisdom-private
	url = https://github.com/f-lab-edu/buddy-wisdom-private.git

해당 파일은 git submodule add [private-repo] 를 추가하고 나면 생성된다.

 

 

4. Submodule 업데이트

git submodule update --remote

 

 

5. 주의할 점

  • 서브 모듈 수정 후, 반드시 해당 디렉토리를 메인 프로젝트에서 commit 해주어야 변경된 내용으로 반영된다.
  • 혹시라도 Yaml 에 추가해준 데이터베이스에서 서버 IP가 허용되어 있지 않은지 꼭 확인해보자.