제리의 배움 기록

Github private repository로 설정파일 관리하기 본문

개발기록

Github private repository로 설정파일 관리하기

제리92 2021. 12. 10. 15:05

최근에 요소수 정보를 제공하기 위한 요소수소문 서비스를 만들어 운영중입니다.

프론트는 부트스트랩 템플릿 + 타임리프 조합으로 간단하게 구현하였는데요,
개발자 지인이 학습겸 서비스의 프론트를 React로 개발해보겠다고 제안해주었습니다.(^ㅇ^)

프로젝트(yssmap)가 깃허브에 public으로 오픈되어 있어서 소스는 바로 내려받아 사용할 수 있었고
Spring Boot와 Gradle의 마법으로 개발환경을 구성하는 것은 어렵지 않은데요,

설정파일은 어떻게 효율적으로 공유할지 작은 고민(?)이 있었습니다.

이 고민을 private repository를 이용하여 해결한 것을 공유하고자 합니다.

형상관리 툴로 git을 사용하였고, remote repository는 github를 기준으로 작성하였습니다.

설정파일?

Spring Boot에서는 애플리케이션의 포트 정보, 데이터소스 접속 정보, 외부 API key 등의 설정 정보를 별도의
설정파일(application.properties)로 관리합니다.

[설정파일의 장점]

1)애플리케이션 코드와 분리하여 설정 변경에 따른 애플리케이션 재빌드 불필요
2)환경 별(운영환경, 로컬환경, 테스트환경) 다른 설정 적용이 쉽게 가능
3)스프링 부트에서는 설정 정보를 간단하게 입력한 것만으로 관련 라이브러리의 셋팅과 빈의 생성을 도와주어 개발 편의를 제공

설정파일에는 제3자에게 공개되면 안 될 중요 정보들이 있기 때문에
프로젝트를 공개된 저장소(github와 같은)를 이용해 형상관리할 경우 반드시 설정파일을 제외하고 업로드해야합니다.

형상관리 저장소에 설정파일을 업로드 할 수 없으니 프로젝트를 같이 협업하고자 하는 사람에게 메일과 같은 개인적인 통신 수단으로 파일을 전달해야합니다.

그런데 파일을 직접 주고 받으면
1)공통의 공간에서 형상관리가 되지 않아 개발자들간 버전 차이가 있을 수 있고
2)별도의 커뮤니케이션 비용이 발생하는 불편함 점이 있습니다.

설정파일 관리용 private repository를 사용하면 이런 문제점을 해결할 수 있습니다.

스프링 부트의 기본 프로젝트 구조

스프링 부트 기반 프로젝트를 시작하면 resources 디렉토리 하위에 application.properties 파일이 생성됩니다.
저는 계층적으로 설정을 보는 것을 선호하여 application.yml로 형식을 변경하였고, 운영용 설정파일인 application.yml도 별도 구성하였습니다.

[설정파일 관리용 private repository 구성하기]

1. github private repository 생성

1)github에서 설정파일 관리 전용 respository를 private으로 생성합니다.
2)resources 하위에 있는 설정파일을 private repository에 수동으로 업로드 합니다.

2. 프로젝트의 resources 하위 설정파일 삭제

3. 메인 git 프로젝트에 private repository를 submodule로 연결

프로젝트 터미널에서 다음 명령어를 이용해 private repository를 연동합니다.

git submodule add https://github.com/jerry92k/[프라이빗 리포지토리 경로] config

private repository를 해당 git 프로젝트의 submodule로 설정하고, config 디렉토리에 정보를 받아옵니다.

명령어 실행 후 프로젝트 트리를 보면 config 디렉토리가 생성되었고 하위에 private repository에 업로드하였던 파일들이 잘 들어온 것을 확인할 수 있습니다.

스프링 부트가 설정파일을 인식할 수 있는 경로가 몇가지 있는데, 프로젝트 최상위 계층의 config 디렉토리 하위도 자동으로 인식 가능 합니다.

4. remote에 반영

로컬 git에 연동된 것이므로 remote public repository에 반영해주기 위해 push 합니다.

[다른 git 사용자가 동일 개발 환경 구성하기]

1. private repository 접근 권한 받기

private repository의 파일들을 submodule로 함께 받아와야 하기 때문에 접근 권한이 필요합니다.

1)프로젝트 소유자가 해당 github의 private repository에 접속
2)[Setting] - [Manage access] 메뉴에서 접근을 허용할 사용자를 초대

2. 로컬에 프로젝트 구성

로컬에 프로젝트를 구성할 디렉토리를 생성하고 터미널에서 다음 명령어를 입력합니다.
--recurse-submodules 키워드가 중요합니다.

private repository에 권한이 없는 경우, 오류를 출력하면서 메인저장소 파일들만 가져옵니다.

git clone --recurse-submodules [메인저장소]

예시) git clone --recurse-submodules https://github.com/jerry92k/yssmap.git

[submodule 삭제]

등록한 submodule을 삭제하는 경우 아래 명령어를 사용하면 됩니다.

  1. submodule 연결 삭제
  2. git submodule deinit -f yssmap-batch/src/main/resources/config
  3. git에 연결 링크 남아있는 캐시 삭제
  4. git rm -r --cached --ignore-unmatch yssmap-batch/src/main/resources/config
  5. 디렉토리의 파일 삭제
  6. rm -rf .git/modules/yssmap-batch/src/main/resources/config
Comments