개요
최근 진행하고있는 사이드 프로젝트에 Jwt를 적용하며 Access토큰과 Refresh토큰의 Secret Key를
깃허브 레포지토리에 올리면 안되는 사실을 알곤 있었지만 마냥 사이드 프로젝트니까 민감 정보에 대해서
크게 신경을 쓰고 있지 않았다.
그러다생각해보니 application.yml에 DB 서버 ID 비밀번호가 있다는 사실을 알게 되었고 급하게,,,
yml파일을 Github에서 숨겨야했고, 빌드시에는 사용해야하다보니 방법을 찾다가
깃의 서브모듈이라는 기능으로 민감정보를 숨길 수 있는 방법을 알게되어 적용하게 되었다.
개념
서브모듈의 개념은 메인 레포지토리와 서브 레포지토리가 분리되어있는데, 서브 레포지토리가 메인 레포지토리내의
디렉토리로 생성되어 들어가는 개념으로 이해했다. 따라서 서브 레포지토리를 private으로 설정해서 yml파일의 정보들은 그쪽에서 업데이트 시키고, 빌드시에는 해당 yml파일을 gradle을 통해 업로드 하는 식으로 적용을 할 수 있었다.
구현 방법
- Github에서 Private Repository 생성
- 생성한 Repository에 숨길 민감 파일을 추가
- 메인 Repository에 연결
- 빌드 설정 추가
구현
1. 깃허브에서 Private Repository를 생성해서 디렉토리를 만들고, yml파일을 추가해주었다.
2. 메인 Repository 폴더에서 Git Bash를 열어 방금 생성한 Repository의 주소를 연결해주었다.
명령어 : git submodule add {생성한 레포지토리 주소}
메인 레포지토리를 확인하면 연결한 서브 모듈 레포지토리가 다음과 같이 디렉토리 형태로 추가가 된 것을 확인 할 수 있다. 추가로 .gitmodules 파일도 추가되어있음을 확인 할 수 있다.
3. 마지막으로 build.gradle에 위의 서브모듈의 데이터를 빌드시에 시작시키는 설정을 추가 해준다.
task copyPrivate(type: Copy) {
copy {
from './boos-private/private'
include "*.yml"
into 'src/main/resources'
}
}
이후 서버를 돌려보면 yml 파일이 빌드시 생성되며 정상적으로 DB와 접속이 되는것을 확인 할 수 있다.
추가사항
.gitignore에 src/main/resources/application.yml을 추가하면 커밋시 해당 파일을 등록시키지 않을 수 있다.
만약 submodule의 파일이 수정되었다면?
만약 submodule의 파일이 수정되었다면 git submodule update --remote 명령어를 통해서 submodule의 최신 내용을 메인 프로젝트에 갱신할 수 있습니다.
또한 main project를 새로 clone 하였을 경우에도 위 명령어를 통해서 submodule을 받아 올 수 있습니다.
- 출처 : [GitHub] submodule 사용해서 yml과 같은 민감한 정보 숨기기 (tistory.com)
'💻Spring' 카테고리의 다른 글
Jenkins 파이프라인을 이용한 SpringBoot 자동배포 2 (젠킨스 파이프라인 생성 및 깃허브 액션 연결) (0) | 2023.05.20 |
---|---|
Jenkins 파이프라인을 이용한 SpringBoot 자동배포 (환경설정) (1) | 2023.05.19 |
@ModelAttribute , @RequestParam 정리 (0) | 2023.04.26 |
Spring Security Jwt - 예외처리 커스터마이징 (0) | 2023.04.03 |
IntelliJ SpringBoot MySql 설정 오류 (0) | 2023.03.17 |