프로젝트를 진행하면서 로컬 개발 환경과 배포 환경에서 각각 다른 환경 설정이 필요하다는 것을 깨달았습니다. 이에 따라, application.yml 설정 파일을 로컬용(application-local.yml)과 개발용(application-develop.yml)으로 분리하기로 결정했습니다.
로컬 환경에서는 개발자의 시스템에 맞춰 유연한 환경 설정이 가능하도록 .env 파일을 사용하여 환경 변수를 관리합니다. 이는 개발자가 로컬에서만 사용하는 데이터베이스 설정과 같은 민감한 정보를 안전하게 관리할 수 있도록 돕습니다.
spring:
config:
import: optional:file:.env[.properties]
activate:
on-profile: local
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${LOCAL_DB_HOST}:${LOCAL_DB_PORT}/${LOCAL_DB_DATABASE}
username: ${LOCAL_DB_ROOT_USERNAME}
password: ${LOCAL_DB_PASSWORD}
jpa:
show-sql: true
hibernate:
ddl-auto: update
CI/CD 파이프라인에서는 GitHub Actions의 secrets을 사용하여 민감한 정보를 안전하게 관리합니다. 이는 프로덕션 준비 과정에서 설정의 신뢰성을 보장하고, 자동화된 환경에서의 실수를 최소화합니다.
spring:
config:
activate:
on-profile: develop
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${DATABASE_URL}
username: root
password: ${DATABASE_PASSWORD}
jpa:
hibernate:
ddl-auto: update
.env
파일을 이용하기 위해서는 .env
파일에서 환경변수를 주입받을 수 있도록 yml 파일에 설정을 추가해주어야 합니다.import: optional:file:.env[.properties]
개인의 민감한 정보가 들어있는 .env
파일은 깃에 올라가면 절대 안됩니다. .gitignore
에 .env
를 추가해주세요!
이 프로젝트에서는 환경변수 이름은 들어있지만, 값이 들어있지 않은 .env.sample
파일을 생성해 깃에 올렸습니다. 이렇게 하면 변경 사항이 있을때마다 .env
파일을 주고 받을 필요 없이 개인 로컬에서 복사해 사용할 수 있습니다.
프로젝트 루트 디렉토리에 .env
파일을 생성해야 합니다.
.env.sample
파일을 복사하여 사용하면 됩니다.CI/CD 파이프라인에서 application-develop.yml
파일을 이용할 수 있도록 Dockerfile
에 명시해주어야 합니다.
# 환경 변수 설정
ENV SPRING_PROFILES_ACTIVE=develop