yml파일을 사용하게 되면 팀원들과 함께 사용할 데이터들을 정보로 저장해둬야 하지만 예민한 정보들이 함께 들어있는경우 섣불리 Github에 push할 순 없다. private 레포지터리라면 상관없지만 public이라면 더더욱 그렇다.
그렇다면 어떻게 yml파일을 github에 올리지 않고 사용할 수 있을까?
다양한 방법들중 오늘 소개할 방법은 Submodule 이라는 개념을 사용해서 기존 레포지터리의 하위 레포지터리를 연결해 가져오는 방식을 사용하려고 한다.
서브모듈의 장점
환경 설정의 중앙 집중화
여러 프로젝트에서 동일한 설정을 하게 될 경우, 별도의 서브모듈로 yml파일을 가져오기 때문에 한 곳에서만 yml파일을 생성하고 기록해두면 된다.
이 개념은 MSA환경의 Config서버와 동일한 방식으로 봐도 될 것 같다.설정 버전의 관리 용이
Git에서 버전 관리를 효율적으로 할 수 있다.
특정 버전으로 태그를 만들고 관리하면, 버전 컨트롤에 용이하기 떄문이다.CI/CD 자동화 지원
서브모듈을 사용하면 Git Actions , Jenkins, GitLab CI 같은 CI/CD파이프 라인에서 환경설정을 일관되게 할 수 있다.보안관리 강화
yml파일을 비공개 서브모듈로 관리하면, 보안이 중요한 환경 설정을 직접 코드베이스에 포함하지 않고 분리할 수 있다.
이러한 장점을 통해 서브모듈을 사용하게 되었다.
그럼 어떻게 하는지 빠르게 알아보자.
서브모듈 설정 방법
private 레포지터리 생성
Github에서 동일한 레포지터리 또는 다른 레포지터리에서 private 레포지터리를 생성한다.private 레포지터리에 설정 파일을 저장해준다.
경로는 원하는 방식으로 패키지를 생성해서 저장해도 된다. config아래에 각 환경별로 패키지를 나눠 넣어도 좋다.
나는 아래에 테스트용 yml파일에 DB및 s3서버등을 설정해줬다.내가 사용할 프로젝트에 가서 아래와 같은 명령어를 사용해준다.
미리 설정할 private의 레포지터리의 주소를 복사해서 아래 명령어의 [private레포지터리]에 넣어준다.
git submodule add [private레포지터리(서브모듈)] [저장할 내 프로젝트의 경로]
예시 : git submodule add https://github.com/저장소이름/yml파일저장경로.git src/main/resources/
그럼 .gitModules에 지정한 경로의 설정이 완료되고 지정한 경로 아래에 yml파일이 생성된다.
- application.yml 파일을 만들어서 경로를 지정해준다.
spring: config: import: classpath:[파일이 저장된경로]
예시:
spring:
config:
import: classpath:config/application-local.yml
5. 결과 확인
.gitModuels에도 경로가 잘 설정되어 있는지 확인한다.

6. 다른 팀원이 사용해야 할 때
아래 명령어를 수행하면 자동으로 서브모듈의 파일이 업데이트되어서 새로 설정한 환경설정을 사용할 수 있다.
git submodule update --remote
## 만약 잘못 설정한경우
주의! .gitmodules 내용 뿐만 아니라 .git/modules 에도 파일이 저장되므로 함꼐 삭제해주고 다시 지정해줘야 한다.
git submodule deinit -rf config-yml/
rm -rf .git/modules/config-yml/
-- 추가할 yml 다시 위 작업대로 수행하기
'Spring' 카테고리의 다른 글
[Lombok] @Builder를 클래스가 아닌 메서드에 적용하는 이유 (0) | 2025.03.11 |
---|---|
[Spring/Serialization-Deserialization] Date, LocalDate, LocalDateTime 형변환 방법, 직렬화/역직렬화 문제 해결하기 (0) | 2025.03.07 |
[Restful API] Restful한 API 문서 작성법, REST API 성숙도 모델 (0) | 2025.02.13 |
[Spring / Swagger] Cors , Fail to Fetch 해결방법 (0) | 2025.01.24 |
[Spring / IoC, DI] Ioc Container와 Bean (0) | 2025.01.15 |