Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- jpa
- aop
- Invalid property 'principal.username' of bean class
- springsecurity
- spring aop
- DI
- 형상관리
- OptimisticLock
- ObjectOptimisticLockingFailureException
- 낙관적 락 재시도
- Spring Cloud Gateway
- redissonlock aop
- S3
- ObjectOptimisticLockingFailureException 처리
- @transactional
- interface
- 소수찾기 java
- multimodule testcontainers
- 멀티모듈 테스트컨테이너
- 알고리즘
- 낙관적 락 롤백
- 백준
- netty
- TestContainers
- spring DI
- RefreshToken
- AccessToken
- java
- kotest testcontainers
- 우아한 테크러닝
Archives
- Today
- Total
조급하면 모래성이 될뿐
서브모듈 적용해서 DB접속정보 보호하기 ! 본문
Why?
- 배포 환경을 구축하다 보니 환경 구성도 분리해야 했다. 그 과정에서 dev환경(aws)의 접속 정보 또한 github에 올려야 했다.
- 사실 로컬에 대한 접속 정보도 올릴 때마다 찝찝했다.. 그리고 이번에 직접 RDS에 구성한 DB에 접속하기 위한 정보를 push를 해야 하는데.. 이건 아니다 싶었다.
How?
- 이것도 여러 가지 방법이 있었다.
- 암호화는 복호화 과정에서 필요한 key를 계속 관리해야 한다는 게.. 마음에 들지 않았다. 또 OS환경변수는 뭔가 너무 간단(?)했다. 그래서 서브모듈을 써봤다.
- 서브모듈을 통해 application-dev.yml 파일을 관리했다.
서브모듈?
- 쉽게 private repository를 만들고 거기에 중요한 파일을 올린다.
- 그리고 프로젝트에 private repository를 서브 모듈로 연결시킨다.
- 결과적으로 서브모듈은 하나의 디렉터리처럼 관리된다.
적용방법
- 적용 자체는 어렵지 않다. 참조한 블로그를 첨부한다.
- 참조
서브모듈을 CI과정에 포함시키는 법
- 서브모듈 디렉터리에 있는 파일을 복사하도록 build.gradle에 추가했다.
task copySecret(type: Copy) {
from file("10wonmoa-BE-Security")
into file("src/main/resources/")
}
- 그래서 CI 돌면서 build 하면서 복사하고, 배포할 때 resources에 application-dev.yml이 잘 배포될 것이라 예상했다..
- 하지만 제대로 배포되지 않았다. 애플리케이션이 구동하면서 application-dev.yml을 읽지 못했다. (DB 테이블이 생성되지 않음..)
- 원인은 CI가 GithubActions Runner에서 동작하면서 서브모듈 디렉터리에서 파일을 인식하지 못했던 것 같다..
- copy 스크립트가 동작하더라도, 해당 디렉터리에 있는 파일을 읽을 수 없었던 것 같다.
- 그럼 필요한 건 Runner에서 서브모듈을 알 수 있게 하자.. 였다.
- 관련 키워드로 찾아보니, 서브모듈에 체크아웃하는 과정이 필요했다.
결과적으로 ci에 서브모듈을 checkout 하는 step을 추가했다.
steps:
- name: Checkout repository and submodules
uses: actions/checkout@v2
with:
token: ${{ secrets.CI_ACCESS_TOKEN }}
submodules: true
- 처음에는 저 token이 뭔지 몰라서.. 그냥 빼고 해 봤는데.. 에러가 났다..
- Checkout 하면서 PW로 token값을 사용하는데, 아무 정보도 없이 checkout 하려고 하니 문제가 발생한 것 같다.
- private 저장소를 만든 계정으로 새롭게 토큰을 하나 만들었다.
- 생성된 토큰을 레파지토리 Secrets Actions에 등록해주었다.
- 즉, checkout 하면서 토큰(pw)를 알 수 있도록했다.
- 나름 많은 삽질을..하면서 결국 성공했다.
- 실제로 CD가 완료되고 application-dev.yml에 있는 RDS의 DB에 접속해서 테이블이 생성됐다 !
다른 팀원이 서브모듈에 Push 하려면 ?
- 기본적인 서브모듈 적용방식은 위에 첨부한 블로그에 역시 잘 설명되어있다.
- 그런데 push할 때 권한이 없어서 문제가 발생했다..
- 다른 사람 계정에서 private repository에 대한 접근권한이 없기때문.
- 해결책은 remote정보를 권한이 있는 token값으로 지정해주면된다.
git remote set-url origin https://{토큰!}@{.git으로 끝나는 서브모듈 레파지토리 URL}
반응형
'TroubleShooting > 데브코스' 카테고리의 다른 글
무중단 배포 적용하기 (0) | 2022.08.26 |
---|---|
Restdocs와 Swagger UI 연동해서 EC2에 배포하기 (0) | 2022.08.04 |
CodeDeploy 적용기 (0) | 2022.07.26 |
Service에서 DataIntegrityViolationException을 Catch 못함 (0) | 2022.07.14 |
S3 파일 업로드 (0) | 2022.07.11 |