거의 2시간 넘게 삽질한 작업이였다..
사실, 구글링을 해보면 이 내용과 관련된 글이 상당히 많다..
이메일 인증 기능을 구현하며 해당 설정(config)에 내 다음 아이디와 비밀번호가 들어가는데 이걸 그대로 github에 올리면 상당히 위험한 행동이라 판단하여 이 내용을 설정파일에 추가하고 @Value 어노테이션으로 값을 끼워 넣었다.
그런데, 어차피 application.yml또한 github에 올렸었기에 큰 차이가 없었다,
그래서, application.yml을 암호화해서 내 개인정보 및 JWT설정, 우리 rds와 연결하는 부분까지 다 숨겨보고 싶었다.
우선, application.yml자체를 base64로 인코딩하고 그걸 deploy과정에서 바꿔끼워보려 했다.
여기와 여기를 참고해서 해보았는데, 처음엔 deploy가 되긴 했는데 ec2인스턴스의 application.yml을 지워보니 오류가 떴다.
이 오류를 잡을까 고민하다 어차피 이렇게 만들면 나중에 추가될 설정들을 관리하기 힘들기에 즉, 유지 보수가 힘들어지기에 다른 방법을 시도하기로 했다.
우선 로컬에서 편하게 서버를 키고 테스트할 수 있도록 프로필을 추가하기로 했다.
이런식으로 프로필을 새로 만들고 여기에 원래 application.yml에 있던 정보를 그대로 복사해준다.
그다음, 다른 사람들이 알면 위험한 정보들을 모두 환경변수로 만들어 저장해주었다.
우선, 로컬프로필로 동작하는 지 확인하기 위해 인텔리제이 실행 프로필을 바꿔준다.
먼저 Edit Configurations를 눌러 설정 창으로 이동한다.
그리고, 오른쪽 위에 있는 Modify Options를 눌러 vm을 검색하여 VM option을 추가해준다.
그러면 Build and run의 java 버전 탭 밑에 vm을 추가하는 줄이 생기는데 여기에
-Dspring.profiles.active= 설정한 프로필 이름
을 입력해주고 적용해주고 실행해보면 정상적으로 실행되는 걸 볼 수 있다.
이제, 해당 내용을 프로젝트 저장소에 푸쉬해준다.
그러면 우리는 secret을 이용해서 application.yml을 만들 준비가 완전히 끝이 났다.
deploy.yaml수정하기
이제 태초의 application.yml에 저장했던 db url이나 jwt같은 정보들을 또 설정창에서 secret으로 추가 해 보자.
필요한 정보들을 손수 입력해주었다면 이제 deploy.yaml 파일(github workflow 파일)을 열어 수정할 차례다.
여기서 환경변수를 등록할 때 수정한 application.yml에 ${db.url}이렇게 넣었다고 db.url: ${{secrets.DB_URL}} 이렇게 쓰면 안된다!
(내가 이렇게 했었다.)
만약, 그냥 쓰면 모든 작업이 정상적으로 수행되어도 실제 서버를 띄우는 과정에서 context load도 안되고(@Value어노테이션을 사용하니)가장 중요한 DB연결이 안된다.
해당 환경변수는 spring.datasource.url의 값 전체를 바꿔 끼우는 것이기에 db.url이라 적어줘 봤자 인스턴스에서 직접 파일을 열어보면 spring.datasource.url: ${db.url} 이렇게 되어 있는 걸 볼 수 있다.
(뭐, 실제론 yml 들여쓰기가 반영되어 있지만..여기서 들여쓰기 하긴 귀찮으니 넘어가자.)
그러니, 꼭!! properties형식으로 쓰듯이 환경변수를 적어주고 그 값은 방금 secret에 등록한 값을 알맞게 할당해주면 된다.
그러면 deploy작업이 잘 돌아갈 것이고 무사히 배포에 성공할 것이다.
지금 글을 쓰며 정리하니 오래걸릴 작업은 아니였다고 생각하지만,, 그래도 이렇게 여러 오류를 만나고 해결하니 조금은 재밌는 경험이였다.
참고
https://mumomu.tistory.com/132
https://tecoble.techcourse.co.kr/post/2022-10-04-active_profiles/
https://velog.io/@be_have98/IntelliJ-Spring-Boot%EC%9D%98-Active-Profile-%EC%84%A4%EC%A0%95
https://goodgid.github.io/Github-Action-Dynamic-Variable-Substitution/
'DevOps' 카테고리의 다른 글
React+Github Action+AWS로 CI,CD 하기 (0) | 2023.05.01 |
---|---|
[Github actions, secret]github workflow로 배포 시 json 파일 추가하기 (0) | 2023.04.29 |
[AWS RDS] 로컬에서 RDS 연결이 안된다..! (0) | 2023.04.29 |
GitHub Action, AWS S3,CodeDeploy, EC2로 CI, CD해보기 (2) (0) | 2023.04.16 |
GitHub Action, AWS S3,CodeDeploy, EC2로 CI, CD해보기 (1) (1) | 2023.04.16 |