[Spring] application-oauth.yml를 .gitIgnore에 등록하지않고 보안을 유지하고, 깃허브 액션을 사용해서 빌드 방법

2023. 1. 5. 13:46·📂 Backend Engineering
728x90
반응형
하루종일 삽질을 하면서 나 같은 사람이 있을 거라는 생각이 들어 글을 작성하게 되었다.

 

글에 들어가기 전 참고용

 

구성할 환경: 로컬/개발

서버: AWS EC2 1개 개발서버용 (백엔드, 프런트)

DB: H2(로컬) AWS RDS(개발)

CI/CD: 깃허브액션

회원가입: JWT


CI/CD는 깃허브액션을 사용했고, 회원가입 부분에서 JWT를 이용해 application-oauth.yml에서 시크릿 키들을 정의했다.

ssh에 접속해서  resources/ 경로에 vim 명령어를 통해 application-oauth.yml를 생성 및 키 값들을 포함한 내용 작성을 해주었다.

nohup java -jar. jar --spring.profiles.active=dev & 명령어를 통해 백엔드를 배포할 때 application-oauth.yml를 찾지 못한다는 에러를 마주했다.

 

application-oauth.yml를 왜 찾지 못할까? 

그리고 어떻게 하면 application-oauth.yml를 포함하여 빌드와 배포를 할 수 있을까에 대한 글이다.

 

application-oauth.yml

1. application-oauth.yml를 왜 찾지 못할까? 


깃허브액션 빌드 과정 살펴보기

먼저 나는 백엔드(스프링부트) 코드들을 개발(release브런치) 환경에 푸시할 경우 깃허브액션을 이용했다. 

나의 경우 아래의 과정을 거친다.

[release브런치 push - 깃허브액션 실행 - gradle.build -S3... 등등]

위의 과정이 끝나면

ssh로 접속해서 파일과 코드들이 업데이트되고  nohup java -jar. jar --spring.profiles.active=dev & 명령어를 통해 배포를 했다.

하지만 깃허브 액션의 build with Gradle 과정에서 깃허브에 application-oauth.yml이 없으므로 빌드시 application-oauth.yml를 빼고 jar파일을 만들었다.!!! 내가 ssh서버에 접속해서 application-oauth.yml를 만들어줬다 한들 build시 application-oauth.yml를 빼고 build를 했던 것이다.

 

이 문제를 해결하기 위해 application-oauth.yml를 깃허브에 포함해줘야 했다.

 

 

2. application-oauth.yml를 . gitIgnore에 등록하지않고 보안을 유지하는 방법


⭐️ 깃허브 시크릿 키 이용하기

.gitIgnore에 파일 혹은 폴더를 등록하면 깃허브에 등록되지 않는다.

보통 oauth와 같은 보안, 시크릿키등 외부에 노출되면 안 되는 파일/폴더를 등록한다.

 

하지만 여기서는. gitIgnore에 application-oauth.yml를 포함하지 않는다.

그리고 application-oauth.yml의 정보를 깃허브 Secrets - Actions에 정의한다.

 

1. 깃허브 Secrets - Actions 등록

application-oauth.yml

2. 깃허브 액션을 정의한 release.yml파일에 시크릿키 환경변수로 값 받기

[release.yml]

1차 주입!! 여기서는 ${{secrets. 키값}} 을 사용한다.

 

3. 깃허브 액션을 정의한 application-oauth.yml에 파일에 환경변수로 값 받기

[application-oauth.yml]

- release.yml에서 주입된 값을  application-oauth.yml의 ${release.yml 상수값}으로 전달받는다. 

즉 깃허브 시크릿 키 -> release.yml -> application-oauth.yml 이런식으로 주입이 된다.

 

이 방법을 통해 

깃허브에 application-oauth.yml이 등록되지 않아 보안문제를 해결하였고,

정상적인 깃허브액션 빌드와 배포가 실행되었다. 

 

 

 

* 이 문제를 해결하기 위해 구글링, openAI에 질문했는데 정확한 답을 얻지 못했습니다.

더 나은 방법이 있다면 피드백 부탁드립니다 감사합니다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'📂 Backend Engineering' 카테고리의 다른 글

[Spring][JPA] JPA + S3 + DB 사용해서 파일 업로드 하기  (0) 2023.02.01
[Querydsl] Querydsl과 DTO와 BooleanBuilder를 활용하여 조회하기  (0) 2023.01.25
[JPA]즉시로딩과 지연로딩은 언제 사용할까? (feat. 프록시)  (0) 2022.12.27
[SQL] AES 전화번호 복호화시 [blob] 문제 해결하기  (0) 2022.11.16
콜라츠 추측 함수로 쪼개어 풀어보기  (0) 2022.10.01
'📂 Backend Engineering' 카테고리의 다른 글
  • [Spring][JPA] JPA + S3 + DB 사용해서 파일 업로드 하기
  • [Querydsl] Querydsl과 DTO와 BooleanBuilder를 활용하여 조회하기
  • [JPA]즉시로딩과 지연로딩은 언제 사용할까? (feat. 프록시)
  • [SQL] AES 전화번호 복호화시 [blob] 문제 해결하기
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    반응형
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (104) N
      • ⭐ Featured (4)
      • 📂 Backend Engineering (36)
      • 📂 Troubleshooting & Ops (10)
      • 📂 Infra & System (7) N
      • 📂 Reflections (21)
        • Year-in-Review (5)
        • Work & Career (10)
        • Lessons Learned (6)
      • 📂 Team Journal (10)
      • 📂 Archive (16)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    db 초기화
    인프라 로그 저장 비용 감소하는 방법
    validation failed (numeric string is expected)
    azure ci/cd
    Azure 로그 최소 저장 30일
    di동작원리
    JPA
    QueryDSL
    typedi란
    스냅샷과 히스토리
    typedi 동작원리
    db 날림
    창업패키지후기
    nestjs pipe
    토이프로젝트개발일지
    개발썰
    di의존성
    db 날린 썰
    di란
    githubaction 라벨 배포
    Azure log 비용 줄이기
    해피해킹 카라비너
    서이추
    해피해킹 키매핑
    nestjs pipe body
    해피해킹 방향키
    해피해킹 꿀팁
    스냅샷과히스토리성 차이
    githubaction 라벨 ci/cd
    해피해킹 커스텀
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
foodev
[Spring] application-oauth.yml를 .gitIgnore에 등록하지않고 보안을 유지하고, 깃허브 액션을 사용해서 빌드 방법
상단으로

티스토리툴바