youngseo's TECH blog

[DEVOPOS | AWS | SPRING] application.yml 파일 환경변수 외부주입 - aws env 파일/intellij configuration 본문

BackEnd/DEVOPS

[DEVOPOS | AWS | SPRING] application.yml 파일 환경변수 외부주입 - aws env 파일/intellij configuration

jeonyoungseo 2023. 6. 9. 14:24

평소 ec2에 docker image를 올리는 과정에서 환경변수를 그대로 올리는 형태로 구현해왔다.
아래와 같이 docker image 속에 ec2 host, docker ID/password 등이 그대로 적혀 있게 되면 docker가 private이면 그나마 괜찮겠지만.. public이라면!!😱😱
이 image가 그대로 노출되어 버렸을 때 큰 불상사를 야기할 수 있다.!! 지갑을 지키자

기존 구현 방식

이를 해결하는 효율적인 방법으로 ec2 server단에 환경변수를 저장하는 방법이 존재한다. 
ec2 ubuntu 환경에서 파일을 만드는 것이다.
아래 명령어를 통해 .env 파일을 만들 수 있다.

vim .env ##파일이 없으면 생성, 있으면 수정 또는 추가

 

.env 파일이 만들어져 있고 수정하고 싶을 때 접근하는 명령어

.env파일은 초기에 비어있다. 환경변수값은 application.yml 파일에서
jwt:
    secret: example 로 작성했다면 아래와 같이 JWT_SECRET = example 로 작성해주면 된다.
즉, yml 파일에서 ':'로 계층적 구조를 작성해왔던 것들을 '_'으로 풀어 쓴다고 이해하자!

 

 


추가로 Intellij에서 application.yml 파일에 환경변수를 적지 않고 Intellij 상에 환경변수를 할당하는 방법에 대해 알아보자!

Edit Configurations

위와 같이 Intellij에서 Edit Configuration을 찾아 들어가면 환경변수 Environment variables를 할당받을 수 있는 방법이 있다.

이후 위의 빨간색 버튼을 눌러 환경변수들을 UPPER_CASE와 _언더바를 이용하여 할당해준다. 그러면 왼쪽과 같이 ;로 여러 환경변수들이 분류됨을 알 수 있다.

이 환경변수들은 왼쪽과 같이 .yml 파일에서 ${} 내의 변수로 할당하여 사용할 수도 있고, 
오른쪽과 같이 @Value("jwt-secret") 등의 value annotation에 할당된 변수로도 사용될 수 있다.

 

추가로 공부할 내용

OpenSSL을 이용하여 .env 파일 암호화하기
Linux 에서 파일 권한 제한해보기 - chmod