submodule 적용하기

0_0_yoon·2022년 11월 10일
0
post-thumbnail

문제상황

프로젝트에 포함된 Credential 관련 내용(DataSource, 인증, 인가에 관련된 설정 등)들이 Public Repo 에 그대로 노출될 위험이 있다.

해결

첫 번째 해결 방법 Jasypt(Java Simplified Encryption) 암호화 라이브러리 사용

장점: 설정 정보들이 암호화 되어 있어서 암화화할때 사용된키값만 잘 관리한다면 노출되어도 큰 문제가 없다.

단점: 프로덕션 코드에 암호화를 위한 코드를 추가해야한다.

두 번째 해결 방법 Submodule(private repository) 사용

장점: 별도로 프로덕션 코드에 추가되는게 없다.

단점: 외부에 대한 접근을 막을 수 있지만 내부 사용자끼리 실수로 유출되는 건 막을수 없다.

프로덕션 코드에 변경없이 한 곳에서 설정 정보들을 관리하기 위해 서브 모듈을 사용하기로 했다.

서브 모듈 적용 과정

  1. Private Repository 생성
    1. Organization을 생성한다.(organization member를 추가해준다)
    2. 생성한 Organization 에서 Private Repository를 생성한다.
    3. 생성한 Private Repository 에서 Credential 설정 정보를 가진 YML 파일을 추가한다.
  2. 프로젝트 저장소 에 서브 모듈 추가하기
    1. 프로젝트 저장소 Branch 에서 명령어를 실행
      // default branch를 기준으로 서브 모듈을 등록한다.
      git submodule add {private_repository_URL}
      // 특정 브랜치를 기준으로 서브 모듈을 추가한다.
      git submodule add -b {branch_name} {private_repository_URL}
    2. 서브 모듈 파일과 메인 프로젝트 연결하기(build.gradle 파일에 설정추가)
      	// 서브 모듈의 파일을 복사한다
      	task copySubmodule(type: Copy) {
      		copy {
      			from 'security'
      			include "*.yml"
      			into 'src/main/resources'
      		}
      	}
    3. 서브 모듈 추가한 내용을 Commit, Push 하면 끝

다른 팀원 로컬에 서브 모듈 가져오기

프로젝트 저장소를 Clone 해서 로컬로 가져올 경우 포함되있는 서브모듈의 파일들은 가져오지 않는다.

// private repository 라서 권한이 없으면 해당 명령어를 실행 할 수 없다
git submodule init

// clone submodules 
git submodule update

서브 모듈 내용을 수정한 경우

프로젝트 저장소 보다 먼저 Push 또는 Pull을 해야 한다. 만약 프로젝트 저장소에 Push/Pull 하고 서브 모듈을 Push/Pull 하면 예상치 못한 오류가 발생한다. 그 이유는 프로젝트 저장소에는 서브 모듈을 그대로 가지지 않고 Path, Url, Commit 정보만 저장하기 때문이다.

profile
꾸준하게 쌓아가자

0개의 댓글