항상 프로젝트를 하다 보면 고민이 되는 부분이 있다. 바로 Datasource에서 url과 비밀번호를 지정하는 부분이다. 꼭 DB 관련이 아니더라도 설정 파일에 노출하고 싶지 않은 데이터가 있는 경우가 자주 있는데 이럴 때마다 고민에 빠지곤 한다.
전에 MSA 프로젝트를 진행했을 때는 Spring Cloud Config에서 대칭키 암호화 설정 불러오기를 사용했는데 이번 프로젝트에서는 이걸 사용하지 않기 때문에 다른 방법을 찾을 필요가 있었다.
그렇게 검색을 하다가 Git 서브모듈이라는 것을 알게 되었고, 이번 프로젝트에 사용해 보기로 했다.
비공개 저장소 생성하기
먼저 설정 파일이 저장될 저장소를 하나 만들어야 한다.
저장소 만드는 법은 쉬우니 그냥 평소 만들던 대로 진행하면 되고, 안에다가 스프링 프로젝트에서 사용할 설정 파일을 푸시해 주면 된다.
서브모듈 사용하기
비밀 저장소 연결하기
이제 본격적으로 서브모듈을 사용해서 설정 파일을 가져와보자.
git submodule add https://github.com/ness727/code-challenge-config.git
앞서 만들었던 프로젝트 폴더 내에서 위 명령어를 실행한다.
나는 프로젝트 폴더 내에서 해당 설정파일을 불러와 src/main/resource 내에 자동으로 옮길 예정이므로 해당 폴더 내에 진행했다.
만약 성공적으로 수행되었다면 아래와 같이 파일과 폴더가 생성되었을 것이다.
.git이 있는 폴더 내에는 .gitmodules 파일이 생성되었고,
프로젝트폴더 내에는 앞서 만들었던 비밀 저장소 폴더가 생성되었다.
내부를 보니 비밀 저장소를 마치 git clone으로 가져온 것처럼 생겼다.
오류 해결
만약 도중에 뭔가를 잘못해서 오류가 발생한다면
git reset HEAD .gitmodules
위 명령어로 .gitmodules를 스테이지에서 삭제하고 다시 git submodule add로 시도해 보면 된다.
fatal: A git directory for 'code-challenge/code-challenge-config' is found locally with remote(s):
origin https://github.com/ness727/code-challenge-config.git
If you want to reuse this local git directory instead of cloning again from
https://github.com/ness727/code-challenge-config.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
위와 같은 오류가 발생한다면 설명에 나오는 것처럼 아래와 같이 작성하면 된다.
git submodule add --force https://github.com/ness727/code-challenge-config.git
최종적으로 나중에 프로젝트를 원격 저장소에 푸시해 보면 다음과 같은 구조를 확인할 수 있다.
화살표 모양의 폴더가 생성되었고, 누르면 비밀 저장소로 이동된다.
해당 유저로 로그인되어있지 않으면 404 페이지가 뜨며 이동되지 않는다.
build.gradle 설정하기
processResources.dependsOn('copyConfig')
tasks.register('copyConfig', Copy) {
from './code-challenge-config'
include 'application*.y*ml'
into 'src/main/resources'
}
빌드 시 프로젝트 폴더 내의 비밀 저장소에서 가져온 설정 파일을 src/main/resource 내로 복사하도록 설정해야 한다.
위와 같이 작성하면 자동으로 파일을 복사해서 가져온다.
나는 처음에 왜 복사가 안 되지..? 하고 조금 헤맸는데 알고 보니 build.gradle에는 yml로 되어있었고, 내 파일은 yaml로 되어 있었기 때문이었다... 그래서 둘 다 적용되도록 *을 사용하여 수정했다.
git clone으로 프로젝트 가져오기
git clone으로 프로젝트를 가져오면 서브모듈은 가져와지지 않는 문제가 있다.
이럴 때는 아래 명령어를 통해 가져올 수 있다.
git submodule update --init --recursive
아니면 아래 명령어로 한 번에 clone 할 수도 있다.
git clone --recursive 저장소.git
그리고 브랜치가 여러 개일 경우, main만 로컬로 가져와지는 경우가 있는데 그럴 경우 아래 명령어를 사용해서 브랜치를 변경해 주면 된다.
git checkout -b 브랜치명 origin/브랜치명
git submodule update --init --recursive
브랜치 변경 후에는 수동으로 서브모듈을 초기화해주어야 한다.
참고 블로그
정리가 정말 잘 되어 있어서 도움이 많이 되었다.
https://ttl-blog.tistory.com/1346
[배포 및 인프라] 해보자 배포 [6] - Git Submodule을 사용하여 민감한 정보를 관리하기
이전 글에서 애플리케이션을 데이터베이스와 연동할 때 환경변수를 통해서 민감한 정보를 관리했습니다. 이번에는 환경변수 대신 Git Submodule이라는 기능을 통해서 이러한 정보를 관리해 보도록
ttl-blog.tistory.com
'공부 > 기타' 카테고리의 다른 글
[Git] 잔디 안 심어지는 문제 해결하기 (1) | 2024.10.09 |
---|---|
[Ubuntu] NGINX로 포트포워딩 구성하기 (0) | 2024.10.05 |
[RabbitMQ] 우분투 22.04에 RabbitMQ 설치하기 (0) | 2024.09.21 |
프론트에서 쿠키를 사용 시 withCredentials 또는 credential 포함시켜야 하는 이유 (0) | 2024.06.15 |
[Redis] Spring Data Redis 사용하기 (0) | 2024.05.21 |