포스트

Public Repository에서 민감정보가 담긴 파일(application.yml)를 감추는 방법

서론

스프링부트에선 application.propertise혹은 application.yml을 통해 애플리케이션 설정을 할 수 있습니다. 대표적으로 MySQL 접속정보 (아이디, 패스워드…)가 이 파일에 담깁니다.

저는 예전에 이 파일을 제대로 관리하지 못해서 협업하는 팀원이 실수로 DB를 초기화 시키는 상황을 겪게 되었습니다 (포스트 참고). 과거에 저는 yml에 담긴 민감정보를 숨기기 위해서 환경 변수를 사용하였고, 협업하는 팀원 간에는 카카오톡을 통해 개인적으로 환경 변수 정보를 공유하고 있었습니다.
이러한 방식은 민감정보를 감추는 것에는 성공적이었지만, 결국 팀원 간 정보 동기화가 되지 않아 참사를 불러일으키게 되었습니다.

관련 인사이트를 얻기 위해 다른 사람들이 만든 Github Public Project들을 열심히 관찰하던 도중, Submodule이라는 해결책을 알게 되었습니다.

본론

서브모듈이 무엇인지 간단하게 느껴보기

어떻게 하는지 보여 드리기 앞서, 간단하게 어떤 것인지 설명드리도록 하겠습니다. 공개 레포지토리 사진 위와 같은 Public Repository가 있습니다. Repository Link 링크에 들어가셔서 config 폴더를 한번 눌러보시겠어요?

404 만약 config라는 폴더에 권한이 없는 여러분들은 위같은 화면을 보게될 것입니다.

하지만 저는 권한이 있기 때문에 아래 wanted2023-config라는 다른 Private Repository로 리다이렉트됩니다. wanted2023-config repository

대충 어떤 방식인지 아시겠나요? 요약하자면, Git 에서 Public Repository에서 Private Repository를 특정 디렉토리로 링킹하여 민감정보를 감출 수 있고, 이러한 방식을 SubModule이라고 칭합니다.

어떻게 하면 되는가?

  1. 민감정보를 담을 Private Repository를 생성합니다.
  2. Public Repository 루트 디렉터리에 .gitmodules 파일을 생성합니다.
  3. Public Repository에서 터미널을 열어 다음 명령어를 입력합니다.
    1
    2
    
     git submodule add {private repository 링크} config
     # 예시 git submodule add https://github.com/PENEKhun/wanted2023-config config
    
    1
    
     git submodule update --remote
    
  4. Submodule 디렉터리 (여기에선 config 폴더) 내 yml 파일들을 생성합니다.
  5. yml 파일을 수정 후 업데이트 하고 싶을때 다음 처럼 ./config 디렉터리 내에서 커밋하면 됩니다. 서브모듈 디렉터리 내에서 cli로 작업 고고
  6. Public Repositry에서 build 될때마다 yml을 업데이트 해야하니, build.gradle에서 다음 테스크를 생성합니다.
    1
    2
    3
    4
    5
    6
    7
    8
    
     tasks.register('copyYml') {
         group = 'build setup'
         description = '서브모듈에 담긴 yml 파일을 소스루트에 복사합니다.'
         copy {
             from 'config'
             into 'src/main/resources'
         }
     }
    
  7. Public Repository에서 gradle Task로 불러온 yml파일이 깃에 커밋되지 않게 .gitignore을 추가합니다.
    1
    
     src/main/resources/application*.yml
    
  • 주의 사항

    ⚠️ 만약 배포 자동화를 사용하고 있는 경우, Build 전에 무조건 copyYml Task를 추가로 실행하도록 수정해야 합니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

Comments powered by Disqus.