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가 허용되어 있지 않은지 꼭 확인해보자.