관리 메뉴

JIE0025

우분투 시스템 환경변수 설정과 applicaiton.yml에서 해당 값 사용 본문

백엔드/웹, 배포

우분투 시스템 환경변수 설정과 applicaiton.yml에서 해당 값 사용

Kangjieun11 2023. 6. 20. 00:08
728x90

 

✅ 개요

이전 프로젝트를 다시 배포하는 중에

스프링부트 프로젝트를 실행시켰는데, 에러가 발생했다.

 

encyException: Error creating bean with name 'securityConfig' defined in URL [jar:file:/home/ubuntu/seb42_pre_024/backend/build/libs/stackoverflow-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/com/codestates_pre024/stackoverflow/global/auth/config/SecurityConfig.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtTokenizer': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'JWT_KEY' in value "${JWT_KEY}"

 

 

답은 아주 간단했다.

 

 

특정 Bean(빈) 생성 중 application.yml의 값을 가져오는 작업이 있었고,

application.yml에는 환경변수에서 값을 가져오도록 설정되어 있는 부분이 존재,

 EC2 인스턴스 환경에선 환경변수가 존재하지 않아 발생하는 에러였다.

 

 

 

이를 위해 생성한 인스턴스에  환경변수를 세팅해주면 된다.

 

 

 

아래처럼 appication.yml에 특정 값을 그대로 사용해도 되지만,

jwt:
  key: 아무랜덤한문자열
  access-token-expiration-minutes: 30
  refresh-token-expiration-minutes: 60

 

인스턴스에 환경변수로도 만들고 가져오도록 만들수도 있다.

jwt:
  key: ${JWT_KEY}
  access-token-expiration-minutes: ${JWT_ACCESS_EXPIRATION_MIN}
  refresh-token-expiration-minutes: ${JWT_REFRESH_EXPIRATION_MIN}

 

 

해당 과정을 밟아보자.

 

 


 

✅ ${변수이름}

위에서 본 것처럼 ${변수이름}을 적어주면, 환경변수에서 값을 찾아와 할당하게 된다.

jwt:
  key: ${JWT_KEY}
  access-token-expiration-minutes: ${JWT_ACCESS_EXPIRATION_MIN}
  refresh-token-expiration-minutes: ${JWT_REFRESH_EXPIRATION_MIN}

 

✅ 우분투 리눅스에 환경변수 설정하기

1) .bashrc파일에 환경변수를 선언해주면 된다.

 

echo 'export JWT_KEY=변수에할당할문자열' >> ~/.bashrc

 

2) .bashrc를 적용한다

3) 잘 적용되었는지 확인한다.

source ~/.bashrc
echo $JWT_KEY

 

 

 

설정 이후 다시 서버를 실행시켜보니까

 

에러가 사라지고 정상적으로 작동한다!