gengminy
갱미니의 코딩일지
gengminy
전체 방문자
오늘
어제
  • 분류 전체보기 (61)
    • 🚀 프로젝트 (16)
      • 🎸 고스락 티켓 (4)
      • 🌞 내친소 (5)
      • 🥁 두둥 (7)
    • 📡 백엔드 (31)
      • 🌱 Spring Boot (13)
      • 🐱 Nest.js (10)
      • ⭐ Node.js (8)
    • 🏭 Infra (11)
      • ⚙ 준비를 위한 준비 (2)
      • 🥑 AWS (3)
      • 🐳 Docker (3)
      • ⚡ Github Actions (3)
    • 🌊 프론트엔드 (1)
      • 🌌 React.js (1)
    • 😎 주저리 (2)

블로그 메뉴

  • 💻Github
  • 📸Instagram
  • ✨Blog

공지사항

인기 글

태그

  • 깃헙액션
  • SlackAPI
  • 스프링부트
  • 슬랙알림
  • nest
  • AWS
  • Spring
  • oauth2
  • 네스트
  • github
  • JSON
  • 도커
  • docker
  • OAuth
  • JWT
  • 스프링
  • nodejs
  • nestjs
  • GithubActions
  • springboot

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
gengminy

갱미니의 코딩일지

[Spring] 스프링 부트 프로젝트에서 dotenv 환경변수 파일 사용하기
📡 백엔드/🌱 Spring Boot

[Spring] 스프링 부트 프로젝트에서 dotenv 환경변수 파일 사용하기

2022. 8. 3. 14:12

스프링 프레임워크를 사용하는 웹앱 프로젝트를 진행하면서

환경변수를 저장하기 위한 방법을 검색해보았다

 

그런데 보통 .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 해주면 된다

 

끝

저작자표시 (새창열림)

'📡 백엔드 > 🌱 Spring Boot' 카테고리의 다른 글

[Spring] 스프링 Feign Client 적용하기 (Spring Cloud OpenFeign)  (1) 2023.03.25
[Spring] 스프링 시큐리티 + JWT로 카카오 로그인 구현하기, 프론트엔드와 연결  (0) 2022.09.04
[Spring] OAuth2Service + 스프링 시큐리티 + JWT로 카카오 로그인 구현하기  (0) 2022.08.27
[Spring] Swagger 연동 시 Unable to infer base url 접속 에러 (ResponseBodyAdvice)  (0) 2022.08.11
[Spring] 스프링 시큐리티로 CORS와 preflight 설정하기  (0) 2022.08.11
    '📡 백엔드/🌱 Spring Boot' 카테고리의 다른 글
    • [Spring] 스프링 시큐리티 + JWT로 카카오 로그인 구현하기, 프론트엔드와 연결
    • [Spring] OAuth2Service + 스프링 시큐리티 + JWT로 카카오 로그인 구현하기
    • [Spring] Swagger 연동 시 Unable to infer base url 접속 에러 (ResponseBodyAdvice)
    • [Spring] 스프링 시큐리티로 CORS와 preflight 설정하기
    gengminy
    gengminy
    코딩

    티스토리툴바