본문 바로가기
카테고리 없음

spring boot 로직 내 환경변수 배포 시 오류

by 프로그래머의뇌 2024. 9. 26.

배포 시 고려해야할 보안성 정보 관리

 

 

  • 운영 DB 정보와 환경 변수 처리:
    • 운영 DB와 같은 민감한 정보를 환경 변수로 관리하고 싶어 했습니다. 이를 통해 보안성을 높이고, Git 설정 파일에 민감한 정보가 노출되지 않도록 관리하려고 했습니다.
  • AWS S3 및 CloudFront 환경 변수 설정:
    • AWS S3 및 CloudFront 관련된 환경 변수를 설정하고, 해당 값들을 Spring Boot 애플리케이션에서 사용하려고 했습니다. 이를 위해 cloud.aws.region.static, cloud.aws.credentials.accessKey, cloud.aws.credentials.secretKey, cloud.aws.s3.bucket, cloudfront.url 등을 환경 변수로 관리할 계획이었습니다.
  • PM2 환경 변수 적용 문제:
    • PM2로 Spring Boot 애플리케이션을 실행할 때 환경 변수가 제대로 적용되지 않는 문제를 겪었습니다. 사용자는 PM2를 통해 애플리케이션을 실행할 때 환경 변수가 설정되지 않는 것에 대해 export 명령어를 사용해야 하는지, PM2를 통해 실행할 때 환경 변수를 전달하는 방법을 알고 싶어 했습니다.
  • AWS S3 자격 증명 관련 오류:
    • AWS S3와 관련된 cloud.aws.credentials.accessKey와 cloud.aws.credentials.secretKey 값이 주입되지 않아 S3Config 클래스에서 애플리케이션이 실행되지 않는 문제가 발생했습니다. 이 문제는 환경 변수나 application.properties 파일에서 값을 불러오지 못한 데서 기인했습니다.
  • Spring Boot 실행 시 변수 전달 방법:
    • jar 파일을 실행할 때 필요한 환경 변수를 함께 전달하는 방법을 문의했습니다. Spring Boot 애플리케이션 실행 시 환경 변수를 지정하여 애플리케이션이 이를 사용할 수 있도록 설정하는 방법을 알고 싶어 했습니다.

 

 

그간 열심히 검색한 내용이 정리가 되었는데, 해결법은 간단했다.

 

 

 

수정 전

 

@Value("환경변수명") 사용하여 application-private.properties 에 명시되어 있는 정보를 가져오게끔 설정했다.

 

이 방법은 로컬에서 테스트 할 때만 적용이 되고, 실상 이 파일을 배포했을 때는 cloud.aws.s3.bucket 의 값을 가져오지 못하였다고 에러가 뜬다. ( application-private.properties 는 .gitignore에 포함시켰다)

 

 

 

수정 후

 

 

환경변수는 지우고

 

String bucket = System.getenv("AWS_S3_BUCKET");

 

이걸로 환경변수를 가져오도록 설정했다. 

 

추가로 배포 어플리케이션을 실행할 때 환경변수를 적은 파일을 먼저 실행하고 -> jar 파일을 실행해야  환경변수를 불러오는 부분에서 오류가 나지 않는다.