프로젝트를 하다보면 application에 중요한 정보가 들어갈 때가 많다. 예를 들자면 oauth 로그인 정보나 다른 aws access 정보가 있다. 만약 이게 배포가 된다면 엄청난 보안사고가 일어날 수 있다.
이것을 예방하기위해 제일 쉬운 방법은 gitgnore에 올려 그냥 push를 안하면 된다. 그러면 배포할때 따로 관리를 해줘야 하므로 귀찮을 수가 있다.
이번에 선택한 방법은 submodule을 사용해 application을 관리하는 것이다.
Git Submodules
Git Submodules란 저장소 안에 다른 저장소를 원하는 디렉토리를 복제하는 기능이다.
(생활 코딩 : 저장소안에 저장소 - git submodules youtube) 이 유튜브를 보면 자세하게 설명해준다.
Git submodules를 활용한 배포 방법
- GitHub에 private repo를 만든다. 이 곳에 내가 원하는 application.*파일을 올린다.
- 인텔리제이로 public repo에 접근해 터미널을 열어 서브 모듈을 만든다.
- 포르젝트 빌드/배포할 때 submodules의 설정 파일을 /src/main/resources으로 복사하여 사용한다.
- 복사된 파일은 push하지 않는다.
1. GitHub에 private repo 만들기
이 부분은 그냥 private repo를 만들면 된다.
2. 인텔리제이의 터미널로 submodule을 만든다.
git submodule add [git repo link] config
이렇게 하면 config라는 폴더에 submodule이 만들어진다.
config 폴더와 .gitmodules가 만들어진게 보인다.
이 상태로 push를 한다면
이런 폴더가 만들어지고 private repo에서 끌어 온 것을 알수가 있다.
3. 프로젝트 빌드/배포할 때 submodules의 설정 파일들을 /src/main/resources으로 복사하여 사용한다.
build.grade에 이 부분을 추 해줘야 한다.
4. 복사된 설정 파일들을 gitgnore에 등록해 push하지 않게 한다.
이렇게 하면 설정이 모두 끝났다.
실행
local에서 테스트해볼려고 한다. 일단 application.yml을 만들어 줘야 한다.
여기에 profile에 머가 들어가냐에 따라 dev가 실행될지 main이 실행될지 결정된다.
인텔리제이에 시작버튼 옆에 ~Application을 클릭한 뒤 edit Configurations..를 클릭한다. 그리고 Active profiles에 dev인지 main인지 선택해준다. 그리고 실행을 하면 잘 실행 된다.
트러블 슈팅
제일 처음 실행 했을 때는 에러가 발생했다.
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException 이런 에러였다.
이것을 구글링 해보니 Spring boot 2.6 버전 이후 부터 spring.mvc.pathmatch.matching-strategy 값이 ant_apth_matcher에서 path_pattern_parser로 변경되었다고 한다!!.
우리는 ant_apth_matcher를 사용해야 하므로 저것으로 바꿔주었다.
ant_path_matcher란?
"ant_path_matcher"는 Spring Framework에서 제공하는 클래스로, Ant 스타일 패턴을 사용하여 문자열 경로와 패턴을 비교하는 데 사용된.
"Ant 스타일 패턴"은 Unix의 파일 경로 매칭 규칙을 모방한 패턴 매칭 방법이다. 이 패턴은 와일드카드 문자 '?'와 ' '를 사용하여 문자열 경로와 일치시키는데 사용된다. '?'는 임의의 단일 문자를 나타내고, ' '는 임의의 문자열을 나타낸다.
"ant_path_matcher"는 다양한 유형의 문자열 경로 패턴을 처리할 수 있다. 예를 들어, 패턴 "/api/**"은 "/api/users"와 "/api/admin/orders"와 같은 모든 하위 경로와 일치한다.
'토이프로젝트 > 스프링 부트로 구현한 웹' 카테고리의 다른 글
Github Action으로 자동배포 문제점 해결하기 (0) | 2023.03.15 |
---|---|
Github Actios를 사용하여 자동배포하기 (0) | 2023.03.14 |
EC2 서버에 프로젝트 배포하기 (0) | 2023.03.12 |
스프링 시큐리티와 OAuth2.0으로 로그인 기능 구현하기 - 네이버 (0) | 2023.03.09 |
세션 저장소로 데이터베이스 사용하기 (0) | 2023.03.09 |