티스토리 뷰

한눈에 보기

  • dotenv란? 코드 밖 .env 파일에 설정값을 넣고 앱 시작 시 불러오는 방식
  • 왜 쓰나? 비밀키 유출 방지, 환경별 설정 분리, 배포/테스트 자동화에 유리
  • 어떻게? .env 작성 → 라이브러리 설치 → 앱 시작 시 로드 → os.environ/process.env로 사용

dotenv가 필요한 이유

  • 보안: API 키·DB 비밀번호 같은 비밀값을 코드와 깃에서 분리
  • 환경 분리: 개발/스테이징/운영별로 값만 바꾸면 코드 수정 없이 동작
  • 배포 자동화: CI/CD, Docker 등에서 값 주입이 쉬움

빠른 시작

Python (python-dotenv)

pip install python-dotenv
# .env
SLACK_BOT_TOKEN=xoxb-xxxxxxxx
PORT=8080
# main.py
from dotenv import load_dotenv
import os

load_dotenv()  # 같은 디렉터리의 `.env` 로드
token = os.getenv("SLACK_BOT_TOKEN")
port = int(os.getenv("PORT", "8000"))

if not token:
    raise RuntimeError("SLACK_BOT_TOKEN 이(가) 없습니다.")

 

실전 사례

1) Slack 봇 토큰 안전하게 관리 (Python)

# .env
SLACK_BOT_TOKEN=xoxb-...
SLACK_SIGNING_SECRET=xxxx
# slack_bot.py
from dotenv import load_dotenv
import os
from slack_sdk import WebClient

load_dotenv()
client = WebClient(token=os.environ["SLACK_BOT_TOKEN"])

resp = client.chat_postMessage(channel="#general", text="안녕하세요! 🤖")
print(resp["ok"])
  • 포인트: 예외처리를 위해 os.environ["KEY"]로 필수값 보장, 없으면 즉시 실패

베스트 프랙티스

  • .gitignore 필수
    # .gitignore
    .env
    .env.*
    !.env.example
  • .env.example 제공: 팀원이 필요한 키를 알 수 있게 샘플 값/빈 값으로
    # .env.example
    SLACK_BOT_TOKEN=
    SLACK_SIGNING_SECRET=
    DB_URL=
  • 필수값 검증
    • Python: pydantic-settings 또는 간단한 체크
    • Node: envalid/zod로 타입·필수 여부 검사
  • 최소 권한·회전: 키는 최소 권한으로 발급, 정기적으로 로테이션
  • 프런트엔드 주의: 브라우저 번들에 비밀값 포함 금지
  • 운영에선 OS 환경변수 우선: 컨테이너/서버에서 .env 없이 주입이 이상적

자주 겪는 오류와 해결

  • 값이 안 읽힘: 앱 시작 “이후”가 아니라 “초기”에 로드해야 함
  • 파일 경로: 워킹디렉터리 기준. 파일이 다른 폴더면 경로 지정
  • 따옴표/공백: KEY="value with spaces" 처럼 감싸기
  • 멀티라인: 가능하면 Base64로 인코딩해 한 줄로 관리
  • 운영 환경에서 덮어쓰기: 동일 키는 OS 환경변수가 .env보다 우선

Docker·CI와 함께 쓰기

  • Docker Compose
    services:
      app:
        env_file:
          - .env
  • GitHub Actions (Secrets)
    env:
      SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}

FAQ

  • dotenv와 환경변수의 차이? dotenv는 “파일 → 환경변수로 로드”를 도와주는 도구. 실제 사용은 모두 환경변수.
  • 운영에서도 .env를 써야 하나? 보통은 아님. 클라우드/오케스트레이션이 제공하는 “환경변수/시크릿” 기능을 사용 권장.
  • 여러 파일을 합쳐 쓰고 싶다: Node는 dotenv-flow, Python은 파일을 순서대로 load_dotenv 호출.

치트시트

  • 문법
    KEY=value
    KEY="value with space"
    # 주석
  • Python
    from dotenv import load_dotenv
    load_dotenv()
    os.getenv("KEY")
  • Node
    node -r dotenv/config app.js
    # 또는
    dotenv -e .env.production -- node app.js

마무리

  • 핵심: 비밀과 설정은 코드 밖, 환경변수로. 개발은 .env, 운영은 환경 주입.
  • 익숙해지면: 예제 파일, 검증 도입, 자동화까지 연결하면 팀 생산성과 보안이 함께 올라갑니다.
  •  
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함