ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Yaml 을 Private 서브 모듈로 추가하여 관리하기
    Back-End/Database & etc 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. 주의할 점

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

    'Back-End > Database & etc' 카테고리의 다른 글

    DTO, VO, Entity  (0) 2022.09.09
    H2 Server 설치, Error 해결  (0) 2022.09.05
Designed by Tistory.