[Spring] 스프링 부트 프로젝트에서 dotenv 환경변수 파일 사용하기
스프링 프레임워크를 사용하는 웹앱 프로젝트를 진행하면서
환경변수를 저장하기 위한 방법을 검색해보았다
그런데 보통 .env.properties 파일을 만들어서
그 안에 있는 값을 또 프로퍼티 빈을 만들어서 불러오더라
이렇게 하더라도 비밀키 값 같은 거는
.gitignore 에다가 등록을 하면 되지만
다른 언어를 사용하다가 온 입장에서는
굳이 이렇게 해야하나 싶어서 뭔가 답답하다고 해야하나
그래서 이 프로젝트에서는
.env 파일을 사용해서 환경변수를 불러오는 방법을 도입시켜보았다
📝 /.env
PORT=8000
JWT_SECRET_KEY="MYSUPERSECRETJWTKEY"
...
우선 프로젝트 루트 디렉토리에 .env 파일을 만들었다
📝 /.gitignore
...
.env*
git을 사용중이라면 반드시 이 설정 파일을 gitignore에 등록해서
git에 딸려서 리모트 레포지토리에 올라가지 않도록 하자
안그러면 비밀키가 전세계에 노출되는 대 참사가 일어난다 (찬진맨 선생님 죄송해요 ^^)
📝 /src/main/resources/application.yml
server:
port: ${PORT:8000}
spring:
# .env import
config:
import: optional:file:.env[.properties]
# Using POSTGRESQL
datasource:
url: jdbc:postgresql://${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
username: ${POSTGRES_USER}
password: ${POSTGRES_PASSWORD}
driver-class-name: org.postgresql.Driver
jpa:
database: postgresql
database-platform: org.hibernate.dialect.PostgreSQLDialect
hibernate:
ddl-auto: create
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
database-platform: org.hibernate.dialect.PostgreSQLDialect
thymeleaf:
cache: false
prefix: classpath:/templates/
suffix: .html
logging.level:
org.hibernate.SQL: debug
org.hibernate.type: trace
우리 프로젝트의 설정 파일이다 yml 형식을 사용중이다
중요한 부분은 저 spring:config:import: 에다 .env 파일을 import 해주어야 한다
config:
import: optional:file:.env[.properties]
.env를 .env.properties 로 해석하여 가져오겠다는 뜻이다
optional을 붙여서 .env 파일이 있을 때만 들고오며
없어도 컴파일 오류는 안난다
또한 동일 yml 파일에서 환경변수 값을 읽을 때는
${변수명} 으로 가져오면 된다
datasource:
url: jdbc:postgresql://${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
username: ${POSTGRES_USER}
password: ${POSTGRES_PASSWORD}
driver-class-name: org.postgresql.Driver
기본값을 지정하고 싶다면
${변수명:기본값} 이런식으로 콜론을 붙여주면
해당 환경변수가 없을 때 자동으로 기본 값으로 들어가게 된다
server:
port: ${PORT:8000}
📝 .../JwtTokenProvider
@Slf4j
@Component
public class JwtTokenProvider {
/** 토큰 비밀 키 */
@Value("${JWT_SECRET_KEY}")
private String JWT_SECRET;
...
마찬가지로 클래스 내에서 읽을 때는 클래스의 제일 바깥 블록 안에다가
@Value 에노테이션을 사용해서 가져온다
아래에 해당 값을 주입시킬 변수도 써주면 된다
스프링 프레임워크 빈 팩토리의 것을 import 해주면 된다
끝