티스토리 뷰

 

이번에 백엔드 팀원들끼리 깃허브를 활용해 협업을 진행하다가 불편한 점이 생겼고, 이를 서브모듈로 해결을 했습니다.
이 경험을 좀 더 기억하고싶고, 추후에도 사용할 기회가 있을 것 같아 기록을 남겨보려 합니다.

 

우선, 먼저 불편한 점이 다음과 같았습니다.
스프링 서버를 개발하면서, 중요한 key값들은 전부 application.yml파일에 저장을 하였습니다.
혼자 개발을 할땐 그냥 .gitignore 파일에 추가하여 git 추적을 하지 않으면 상관없었지만,
팀원들과 협업을 하며 개발할 때엔, 따로 application.yml파일을 주고 받아야 했기 때문에 위험하기도 했고, 귀찮기도 했습니다.

 

 

우선 저희가 처음에 했던 방식은 다음과 같습니다.

다른 스프링 코드들은 깃허브로 서로 공유를 하고 있었지만, application.yml 파일 안엔 비밀 정보들이 있기 때문에, 깃허브가 아닌 카톡이나 메일을 통해서 수동으로 공유를 진행했습니다.

 

이렇게 수동으로 공유를 진행하니 생긴 문제가 다음과 같습니다.

 

  1. 실수로 깃허브에 올리는 경우 치명적.
  2. 수동으로 공유할 때 번거로움.

위와 같이, 깃허브에 실수로 올릴경우 다른사람들도 볼 수 있기 때문에 치명적이며, 수동으로 공유 할때 그때마다 번거롭다는 점이 안 좋았습니다. 
특히, 제가 실수로 한번 깃허브에 올렸다가 AWS 계정이 해킹당한 적도 있어서, 그 이후로는 노심초사 하면서 github에 push하고 그랬던 기억이 있습니다.

 

 

 

 

그래서 이 문제를 어떻게 해결할까 고민하던 결과, 찾아낸 방법이 서브모듈입니다.

 

 

서브모듈이란?

-GIT 저장소 안에 또 다른 GIT 저장소를 포함하는 기능입니다. 주로 큰 프로젝트를 여러부분으로 레포를 나누어 개발하고자할 떄 사용되는 기술로, 하나의 Repo 안에 다른 Repo들을 넣어 관리하는 기술입니다.

서브모듈을 어떻게 활용?

 

서브모듈을 활용하는 방법은 다음과 같습니다.

  • private Repository를 생성함.
  • 이를 원래 Repository에 서브모듈 추가함.
  • 원래 Repository에서 서브모듈로 private Repository 연결
  • 팀원들은 private Repository를 볼 수 있지만, 외부사람들은 권한이 없어 못봄.

즉, private Repository를 하나 생성한 후, 원래 Repository에 서브모듈로 이를 추가하면, 팀원들은 권한이 있기때문에 서브모듈을 볼 수 있지만, 외부사람들은 권한이 없기 떄문에 서브모듈을 볼 수 없어, 안전한 공유가 가능한 것입니다.

 

 

스프링 서버에서 서브모듈 적용법

 

서브모듈 적용 단계는 다음과 같습니다.

  1. private Repoistory 생성 및 application.yml파일 push
  2. 원래 Repository에서 서브모듈 생성
  3. .gitignore파일에 application.yml파일 추가.
  4. build.gradle에 서브모듈 copy 설정 추가.
  5. github에 해당 변경사항 push

한번 이 과정을 자세하게 알아보겠습니다.

 

  • private Repository 생성 및 application.yml 파일 push
    -이 과정은 매우 간단한 과정이라 스킵을 하겠습니다.
    협업을 하시고 있다면 Organization에 새로운 private Repository를 생성한 후, application.yml 파일을 넣어주시면 됩니다.

  • 원래 Repository에서 서브모듈 생성
    이제 다시 원래 Repository로 돌아와 서브모듈을 생성해야합니다. 해당 서브모듈 명령어는 다음과같습니다.
    아래의 명령어를 통해 현재 Repository에 서브모듈을 추가할 수 있으며, 해당 명령어가 정상적으로 완료되면, 현재 Root 디렉토리에 config파일과 .gitmodules 파일이 생성이 됩니다.
  git submoudle add (private Repository 주소)

 

  • .gitignore파일에 application.yml파일 추가
    이제 application.yml파일 git추적을 끊어야합니다. Root 디렉토리에 있는 .gitignore 파일안에 다음과 같은 코드를 추가합니다.
    다음과 같은 코드를 추가하게 되면, 이제 git에선 관리를 안하게 되고 오직 서브모듈로만 파일을 관리할 수 있게 됩니다.
**/src/main/resources/*.yml

 

  • build.gradle에 서브모듈 copy 설정 추가.
    이제 서브모듈에 존재하는 파일들을 실제 applicaiton.yml파일 위치에 복사를 해야합니다. 
    따라서 build.gradle 파일에 다음과 같은 코드를 넣어 resources 파일에 application.yml파일을 복사합니다.
processResources.dependsOn('copySecret')
tasks.register('copySecret', Copy) {
   from '{서브모듈이름}' 
   include "*.yml" 
   into 'src/main/resources' 
}

 

  • Github에 해당 변경사항 push
    지금까지 했던 변경사항들을 모두 깃허브에 push를 하면됩니다.
    이로써 원격 Repository에도, 서브모듈이 적용이 되어 팀원들끼리 공유가 가능합니다.

 

 

 

 

 

+application파일 버전관리

 

위의 방식으로 서브모듈을 추가하게 되면 팀원들과 공유가 가능합니다.
다만, 서브모듈 자체가 로컬에서 자동으로 업데이트 되는것이 아닌, 하나의 Repository로 관리되는거라 로컬에서 업데이트가 안됩니다.
즉, 로컬에서 테스트를 진행할때 서브모듈 application.yml을 수정해봐야 다시 원상태로 돌아오기 때문에 로컬테스트용, 배포용 등등의 다양한 환경 구성을 할 수가 없습니다.

 

이를 해결하는 방법은 다음과 같습니다.

 

위의 사진과 같이,기존 application.yml 파일은 포인터처럼 활용하며 git이 관리하게 냅두면서, application의 다양한 버전의 파일들을 만들어 서브모듈로 관리 하는것입니다.
이렇게 했을때의 장점은 다음과 같습니다.

 

  1. 중요한 정보들은 application.yml 파일에 없기때문에 공유되어도 안전함.
  2. application.yml파일은 서브모듈에 종속되지 않기 때문에, 사용자가 자유롭게 수정하며 버전관리할 수 있음.

 

이렇게 추가적으로 버전관리를 하며 서브모듈을 추가하기 위해선 다음과 같은 추가 과정이 필요합니다.

 

  • 서브모듈 Private Repository에 yml파일 추가
    이제 버전마다 파일을 다르게 해야하기 때문에, 해당 버전에 따른 다양한 yml 파일을 만들어 push를 하면됩니다.
    이때, 꼭 주의해야할점은 이름은 꼭 'application-{버전}.yml' 형태를 띄어야 한다는 것 입니다.
    이 형태에 벗어난 이름을 짓게되면 나중에 Spring에서 파일관리할때 추가 작업이 있어야합니다..ㅠㅠ
  • 서브모듈 업데이트
    서브모듈은 커밋 히스토리 기반으로 관리를 하기 때문에, 서브모듈에서 업데이트가 되어도 로컬에 자동으로 업데이트 되지 않습니다.
    따라서, 직접 아래의 명령어를 통해 서브모듈 Repository를 로컬에서 업데이트를 해야합니다.
git submodule update --remote
  • application.yml 파일 추가
    이제 application.yml파일을 로컬에 생성하고, 다음과 같이 코드를 간단하게 추가합니다.
    다음의 코드는 application.yml 파일에서 다른 application파일에 링크를 걸어 해당 파일의 정보를 가져오는 코드입니다.
    아래 'local'이라고 되어있는 코드에 위에서 생성한   'application-{버전}.yml' 에서 버전을 입력하시면 됩니다.

 

이 과정에 끝난 다음엔 다시 원격 레포지토리에 push를 하시면 됩니다.

 

이렇게 2가지를 수정을 하게되면, application.yml파일은 깃허브에 public으로 공유되지만, 중요정보는 없어 안전하게 관리가 가능하고, 버전 파일들은 서브모듈로 private로 안전하게 다양한 버전을 공유할 수 있기 때문에, 버전관리도 가능합니다.

'' 카테고리의 다른 글

깃허브 액션이란? (Feat.CI/CD)  (0) 2023.09.29
깃 브랜치  (0) 2023.08.24
깃허브 저장 과정  (0) 2023.08.24
깃 기본 명령어  (0) 2023.08.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함