본문 바로가기
백엔드/CS

환경 변수 설정 (feat. 스프링 + 도커)

by ARlegro 2025. 4. 8.

환경변수, 개발을 하면서 특히 DevOps를 하면서 중요한 개념이다.

환경변수란?

운영체제(OS) 수준에서 설정된 전역변수

프로그램이나 애플리케이션이 실행될 때 해당 값을 외부 설정 값으로 받아와서 사용할 수 있다.

사용 이유

1. 유연성 - 재배포 필요성 줄음

개발 및 배포를 할 때, 코드를 바꾸지 않고도 다른 환경에서 실행할 수 있는 것이 중요하다.

예를 들어, 개발용에서는 Swagger 설정을 쓰지만, 프로덕션 환경에서는 Swagger를 쓰지 않도록 설정을 하는 것이다.

환경 변수를 이해하고 잘 활용한다면, 코드 변경은 최소화하고 여러 환경에서 동작할 수 있게 할 수 있다.

**[개발 환경용 설정 파일]**
spring:
  profiles:
    active: dev
		
**[운영 환경용 설정 파일]**
spring:
  profiles:
    active: prod

2. 보안에 유리하다

예를 들어, 중요한 정보(이름, 비밀번호)를 포함해서 yml에 직접 적는 것은 보안상 매우 위험하다

**❌매우 위험❌**
password : pwd1234

**⭐ 안전 ⭐**
password : ${DB_PASSWORD}

환경 변수 확인 방법

리눅스

echo $환경변수명 

printev 

윈도우

echo %환경변수명%

주요 사용 방법 예시

1. Spring Profile 기반 설정

스프링에서는 환경별로 다른 설정을 적용하기 위해 Spring Profile이라는 기능을 제공한다.

이를 활용해서 운영환경(prod), 개발환경(dev), 테스트환경(test) 등 다양한 실행 환경에 따라 서로 다른 YML 파일을 분리해서 적용할 수 있어진다.

기본 YML 구조 구조

**[프로덕션 YML 설정]**
spring:
  profiles:
    active: dev    # 이 YML 파일이 적용될 수 있는 조건    
    ....

프로덕션 YML 설정 의미

  • SPRING_PROFILES_ACTIVE 설정이 “dev”일 경우 해당 YML설정을 통해 코드가 ~된다는 것이다.
**[환경변수 주입 예시 - 도커 컴포즈 YML]**
services:
  discodeit-server:
		...
    environment:
      SPRING_PROFILES_ACTIVE: prod    # 환경변수를 설정하여 실행할 프로파일 결정

environment.SPRING_PROFILES_ACTIVE: prod

  • 도커 컨테이너가 실행될 때의 환경 설정

2. 환경변수를 이용한 YML 값 주입

스프링에서는 application.yml, application.properties 파일에서 ${} 문법을 통해 환경변수를 참조할 수 있다.

**[스프링에서 DB를 연결할 때 쓰는 흔한 방식]** 
spring:
  datasource:
    url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:discodeit}
    username: ${DB_USERNAME:user_name111}
    password: ${DB_PASSWORD:pwd1234}
    driver-class-name: org.postgresql.Driver

위의 코드는 스프링에서 yml 설정을 통해 DB를 연결할 때 쓰는 식이다.

근데 중간중간 ${~~}같은 것들이 들어있는데 이것들은 환경 변수를 활용한 예시다.

${ENV_VAR:defult} 문법

  • ${ENV_VAR}
    • 해당 환경변수 값을 읽는다.
    • 예를 들어 ${DB_HOST: ~ } 는 OS의 환경변수의 Key값인 DB_HOST의 value값을 사용한다는 뜻
  • ${ENV_VAR:default}
    • 해당 환경변수가 없으면 default 값을 사용한다는 뜻

이러한 YML 설정을 활용한 도커 컴포즈 예시

services:
  discodeit-server:
    container_name: discode-server
    build: .
    ports:
      - 8080:8080
    environment:
      DB_HOST: postgres-db
      DB_PORT: 5432
      DB_NAME: discode
      DB_USERNAME: environuser
      DB_PASSWORD: envvar1122

이 외에도 스프링을 사용할 때, RUN configuration에서 직접 설정하는 방법도 있고, CI/CD에서 환경변수 설정하는 다양한 방법이 있다.

'백엔드 > CS' 카테고리의 다른 글

쓰레드와 프로세스  (0) 2025.04.26