민감한 정보를 가진 설정파일을 분리하기 위해 여러가지 방법이 있습니다.
그 중 submodule을 사용하였고 적용 방법을 공유하고자 합니다.
모듈안에 하위 모듈을 만들어 관리하는 방법입니다.
이번 글에선 민감한 정보를 감추기 위해 private repository(이하 레포)를 submodule로 만들어 관리하는 방법에 대해 쓰겠습니다.
위와 같은 절차를 거치면 private 레포가 루트 모듈의 하위 모듈이 되었습니다.
add했을 때 생기는 .gitmodules는 submodule의 정보를 가지고 있습니다.
꼭 커밋해주세요.
submodule의 변경사항을 push한 후에 루트 모듈에서 git update —remote ${submodule이름}을 해주면 간단하게 최신화가 가능합니다.
ec2에서 submodule을 적용하는데 어떤 문제가 있을까요?
바로 ec2 서버는 내 private repository에 대한 권한이 없다는 점입니다.
ec2 ssh에 접속한 후에 ssh-keygen -t rsa
명령어를 사용해 key를 생성합니다
cat ~/.ssh/id_rsa.pub
명령어를 통해 생성된 키를 github 계정에 등록해주세요 (setting → SSH and GPG keys)
이후 pull 이나 clone을 통해 가져온 프로젝트에 .gitmodule 정보가 있다면 git submodule init을 통해 쉽게 submodule을 동기화할 수 있습니다.
이후 update 과정을 거치면 됩니다.
로컬에선 로컬의 yml 파일, 배포시엔 submodule의 yml 파일을 사용하고 싶다면 어떻게 할까요?
profile을 사용해 간단하게 분리 가능합니다
//local의 application.yml 파일
spring:
profiles:
active:
- local //local에서 실행시 local profile 설정 사용
config:
import: classpath:/order-submodule/application-prod.yml
//submodule의 yml을 imoport
---
//local 설정
spring:
sql:
init:
mode: always
config:
activate:
on-profile: local
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:test
h2:
console:
enabled: true
server:
port: 8080
//submodule의 application-prod.yml 파일
spring:
config:
activate:
on-profile: prod //profile을 prod로 설정
datasource:
url: jdbc:mysql://ec2db주소:3306/$dbname
username: $dbusername
password: $dbpassword
driver-class-name: com.mysql.cj.jdbc.Driver
그 후 배포 명령어인 java -jar ${projectname}
에 —-spring.profiles.active=prod
를 붙여주면 성공적으로 submodule의 설정 파일을 불러올 수 있습니다.
글 잘 봤습니다.