FastAPI - Environment Variables

KjjeddΒ·2026λ…„ 1μ›” 13일

FastAPI

λͺ©λ‘ 보기
3/16
post-thumbnail

🌱 ν™˜κ²½ λ³€μˆ˜ (Environment Variables)

FastAPI와 같은 λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ λ•Œ λ°˜λ“œμ‹œ ν•¨κ»˜ 이해해야 ν•˜λŠ” κ°œλ…μ΄ μžˆλ‹€.

λ°”λ‘œ ν™˜κ²½ λ³€μˆ˜(Environment Variables)λ‹€.


πŸ€” ν™˜κ²½ λ³€μˆ˜λž€?

단어뢀터 차근히 ν’€μ–΄λ³΄μž.

  • Environment β†’ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” μ£Όλ³€ ν™˜κ²½
  • Variable β†’ 값을 λ‹΄λŠ” λ³€μˆ˜

즉, ν™˜κ²½ λ³€μˆ˜λž€

πŸ‘‰ 운영체제(OS)에 μ €μž₯λ˜μ–΄ 있고, ν”„λ‘œκ·Έλž¨μ΄ μ½μ–΄μ˜¬ 수 μžˆλŠ” κ°’

μ€‘μš”ν•œ 점은 이 값이

  • Python μ½”λ“œ 밖에 μ‘΄μž¬ν•˜κ³ 
  • ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œ ν•„μš”ν•  λ•Œ μ½μ–΄μ˜¨λ‹€

🏠 λΉ„μœ λ‘œ μ΄ν•΄ν•˜κΈ°

ν™˜κ²½ λ³€μˆ˜λŠ” μ§‘ μ•žμ— λΆ™μ–΄ μžˆλŠ” μ£Όμ†ŒνŒκ³Ό κ°™λ‹€.

  • μ§‘ μ•ˆ(μ½”λ“œ)μ—λŠ” μ—†μŒ
  • μ§‘ λ°–(운영체제)에 λΆ™μ–΄ 있음
  • 집을 고쳐도 μ£Όμ†ŒνŒμ€ κ·ΈλŒ€λ‘œ μœ μ§€λ¨

πŸ‘‰ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³ λ„ μ„€μ • 값을 λ°”κΏ€ 수 있게 ν•΄μ£ΌλŠ” μž₯μΉ˜λ‹€


πŸ’‘ ν™˜κ²½ λ³€μˆ˜κ°€ μ€‘μš”ν•œ 이유

이유 μ„€λͺ…
λ³΄μ•ˆ λΉ„λ°€λ²ˆν˜Έ, API ν‚€λ₯Ό μ½”λ“œμ— 직접 μ“°μ§€ μ•Šμ•„λ„ 됨
ν™˜κ²½ 뢄리 개발 / ν…ŒμŠ€νŠΈ / 운영 ν™˜κ²½μ„ μ‰½κ²Œ ꡬ뢄 κ°€λŠ₯
μœ μ—°μ„± 같은 μ½”λ“œλ‘œ λ‹€λ₯Έ 섀정을 μ‚¬μš© κ°€λŠ₯
ν‘œμ€€ ν˜„λŒ€ μ›Ή μ„œλΉ„μŠ€μ˜ κΈ°λ³Έ μ„€μ • 방식

πŸ‘‰ FastAPI, Docker, AWS, Kubernetes λͺ¨λ‘ ν™˜κ²½ λ³€μˆ˜ 기반 섀정을 κΈ°λ³Έ μ „μ œλ‘œ ν•œλ‹€


πŸ–₯️ ν„°λ―Έλ„μ—μ„œ ν™˜κ²½ λ³€μˆ˜ μ„€μ •ν•˜κΈ°

Linux / macOS / Git Bash

# ν™˜κ²½ λ³€μˆ˜ μ„€μ •
export MY_NAME="철수"

# ν™˜κ²½ λ³€μˆ˜ μ‚¬μš©
echo "μ•ˆλ…•ν•˜μ„Έμš” $MY_NAME"

좜λ ₯ κ²°κ³Ό:

μ•ˆλ…•ν•˜μ„Έμš” 철수

Windows (PowerShell)

$Env:MY_NAME = "철수"
echo "μ•ˆλ…•ν•˜μ„Έμš” $Env:MY_NAME"

🐍 Pythonμ—μ„œ ν™˜κ²½ λ³€μˆ˜ 읽기

μš΄μ˜μ²΄μ œμ— μ„€μ •λœ ν™˜κ²½ λ³€μˆ˜λŠ” Python μ½”λ“œμ—μ„œ os.getenv둜 읽을 수 μžˆλ‹€.

예제: main.py

import os

# ν™˜κ²½ λ³€μˆ˜ 읽기 (μ—†μœΌλ©΄ κΈ°λ³Έκ°’ μ‚¬μš©)
name = os.getenv("MY_NAME", "World")

print(f"Hello {name} from Python")

ν™˜κ²½ λ³€μˆ˜κ°€ μ—†μœΌλ©΄ κΈ°λ³Έκ°’ "World"κ°€ μ‚¬μš©λœλ‹€.


πŸ” μ‹€ν–‰ 흐름 정리

  • ν„°λ―Έλ„μ—μ„œ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•œλ‹€
  • Python ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•œλ‹€
  • Python은 μš΄μ˜μ²΄μ œμ— μš”μ²­ν•΄μ„œ 값을 μ½λŠ”λ‹€

πŸ‘‰ Python은 ν™˜κ²½ λ³€μˆ˜λ₯Ό μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€
단지 μš”μ²­ν•΄μ„œ μ½μ–΄μ˜¬ 뿐이닀


⚠️ μ€‘μš”ν•œ κ·œμΉ™: ν™˜κ²½ λ³€μˆ˜λŠ” 항상 λ¬Έμžμ—΄

ν™˜κ²½ λ³€μˆ˜λŠ” 운영체제 λ ˆλ²¨μ— μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— 항상 λ¬Έμžμ—΄(str)둜 μ „λ‹¬λœλ‹€.

import os

port_str = os.getenv("PORT", "8000")
print(type(port_str))  # <class 'str'>

# μˆ«μžκ°€ ν•„μš”ν•˜λ©΄ 직접 λ³€ν™˜
port = int(port_str)
print(type(port))      # <class 'int'>

πŸ‘‰ νƒ€μž… λ³€ν™˜μ€ 개발자의 μ±…μž„μ΄λ‹€


⏱️ μΌνšŒμ„± ν™˜κ²½ λ³€μˆ˜ μ„€μ •

νŠΉμ • λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•  λ•Œλ§Œ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ“°κ³  싢을 μˆ˜λ„ μžˆλ‹€.

MY_NAME="영희" python main.py
  • 이 λͺ…λ Ήμ–΄κ°€ μ‹€ν–‰λ˜λŠ” λ™μ•ˆλ§Œ 적용되고
  • ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ©΄ 사라진닀

🧭 PATH ν™˜κ²½ λ³€μˆ˜

PATHλŠ” μš΄μ˜μ²΄μ œκ°€ μ‹€ν–‰ν•  ν”„λ‘œκ·Έλž¨μ„ μ°ΎλŠ” 경둜 λͺ©λ‘μ΄λ‹€.

ν„°λ―Έλ„μ—μ„œ python을 μž…λ ₯ν•˜λ©΄,

  • PATH에 λ“±λ‘λœ 디렉토리λ₯Ό μˆœμ„œλŒ€λ‘œ κ²€μƒ‰ν•˜κ³ 
  • κ°€μž₯ λ¨Όμ € 발견된 python을 μ‹€ν–‰ν•œλ‹€

μ˜ˆμ‹œ (Linux / macOS)

/usr/local/bin:/usr/bin:/bin

μ•žμ—μ„œ 배운 가상 ν™˜κ²½μ΄ λ™μž‘ν•˜λŠ” μ΄μœ λ„ λ°”λ‘œ 이 PATH λ•Œλ¬Έμ΄λ‹€.


πŸ“Œ Twelve-Factor Appκ³Ό ν™˜κ²½ λ³€μˆ˜

ν™˜κ²½ λ³€μˆ˜ 기반 섀정은 Twelve-Factor Appμ΄λΌλŠ” ν˜„λŒ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계 μ›μΉ™μ˜ 핡심이닀.

πŸ‘‰ 섀정은 μ½”λ“œμ— λ„£μ§€ 말고 ν™˜κ²½μ— 둬라


βœ… 핡심 μš”μ•½

  • ν™˜κ²½ λ³€μˆ˜λŠ” μš΄μ˜μ²΄μ œμ— μ €μž₯된 μ„€μ • 값이닀
  • μ½”λ“œ 밖에 μ‘΄μž¬ν•˜λ©°, μ‹€ν–‰ μ‹œ μ½μ–΄μ˜¨λ‹€
  • 항상 λ¬Έμžμ—΄λ‘œ μ „λ‹¬λœλ‹€
  • λ³΄μ•ˆκ³Ό ν™˜κ²½ 뢄리λ₯Ό μœ„ν•΄ ν•„μˆ˜μ μ΄λ‹€
  • FastAPI ν”„λ‘œμ νŠΈμ—μ„œλŠ” λ°˜λ“œμ‹œ μ‚¬μš©ν•˜κ²Œ λœλ‹€
profile
Gongbuhaja

0개의 λŒ“κΈ€