설정 파일 분리를 위한 Submodule

홍성민·2023년 8월 13일
0

민감한 정보를 가진 설정파일을 분리하기 위해 여러가지 방법이 있습니다.

그 중 submodule을 사용하였고 적용 방법을 공유하고자 합니다.

submodule이 무엇인가

모듈안에 하위 모듈을 만들어 관리하는 방법입니다.

이번 글에선 민감한 정보를 감추기 위해 private repository(이하 레포)를 submodule로 만들어 관리하는 방법에 대해 쓰겠습니다.

submodule 어떻게 쓰나요

  1. github에 비어있는 private 레포를 만듭니다.
  2. 그 레포 안에 application-prod.yml을 만들어 설정을 만듭니다.
  3. 루트 모듈의 원하는 디렉토리에서 git submodule add ${submodule주소}를 칩니다.
  4. 끝!

위와 같은 절차를 거치면 private 레포가 루트 모듈의 하위 모듈이 되었습니다.

add했을 때 생기는 .gitmodules는 submodule의 정보를 가지고 있습니다.

꼭 커밋해주세요.

submodule update

submodule의 변경사항을 push한 후에 루트 모듈에서 git update —remote ${submodule이름}을 해주면 간단하게 최신화가 가능합니다.

ec2에서 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 파일 분리

로컬에선 로컬의 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의 설정 파일을 불러올 수 있습니다.

profile
안녕하세요

1개의 댓글

comment-user-thumbnail
2023년 8월 13일

글 잘 봤습니다.

답글 달기