환경변수를 통한 경로 관리
Intro
프로젝트를 진행하면서 여러 스크립트에서 공통으로 사용해야 하는 경로가 있을 경우, 이러한 경로를 환경 변수로 설정하여 관리하는 것은 매우 효율적입니다. 이는 스크립트의 유연성을 높이고 유지보수를 쉽게 만들어 줍니다. 이 글에서는 Windows 배치 파일과 Python 스크립트에서 환경 변수를 사용하여 경로를 설정하고 사용하는 방법을 설명합니다.
환경 변수 설정
Windows 배치 파일에서는 set
명령을 사용하여 환경 변수를 설정할 수 있습니다. 다음은 server.bat
파일에서 SOURCE_DIR
및 기타 관련 경로를 환경 변수로 설정하는 예시입니다
@echo off
set SOURCE_DIR=D:\playground
set TARGET_DIR=%CD%
set SOURCE_STATIC_DIR=%SOURCE_DIR%\resources
set TARGET_CONTENT_DIR=%TARGET_DIR%\Content
set TARGET_STATIC_DIR=%TARGET_DIR%\Static
:: 환경 변수 확인을 위한 출력
echo Source Dir: %SOURCE_DIR%
echo Target Dir: %TARGET_CONTENT_DIR%
python add_meta.py
if %errorlevel% neq 0 (
echo Error occurred in script/add_meta.py
exit /b %errorlevel%
)
이 스크립트는 다음과 같은 작업을 수행합니다:
SOURCE_DIR
를D:\playground
로 설정합니다.TARGET_DIR
를 현재 디렉토리로 설정합니다(%CD%
는 현재 디렉토리를 나타냄).SOURCE_STATIC_DIR
는SOURCE_DIR
하위의resources
디렉토리로 설정합니다.TARGET_CONTENT_DIR
와TARGET_STATIC_DIR
도 각각TARGET_DIR
하위의 특정 디렉토리로 설정합니다.
Python 스크립트에서의 환경 변수 사용
Python 스크립트에서는 os.environ.get()
을 사용하여 배치 파일에서 설정한 환경 변수를 가져와 사용할 수 있습니다. 이를 통해 여러 Python 스크립트에서 동일한 경로 설정을 공유할 수 있습니다. 아래는 Python 스크립트에서 환경 변수를 사용하는 예시입니다:
import os
# 환경 변수에서 경로를 가져옴
source_dir = os.environ.get('SOURCE_DIR', r"D:\playground")
source_static_dir = os.environ.get('SOURCE_STATIC_DIR', source_dir + r"\resources")
# 확인을 위한 출력
print(f"Source Directory: {source_dir}")
print(f"Source Static Directory: {source_static_dir}")
이 스크립트는 다음과 같은 작업을 수행합니다:
os.environ.get('SOURCE_DIR', r"D:\playground")
:SOURCE_DIR
환경 변수를 가져오고, 설정되어 있지 않을 경우 기본값으로D:\playground
를 사용합니다.os.environ.get('SOURCE_STATIC_DIR', source_dir + r"\resources")
:SOURCE_STATIC_DIR
환경 변수를 가져오고, 설정되어 있지 않을 경우source_dir
의resources
디렉토리를 기본값으로 사용합니다.
왜 환경 변수를 사용할까?
환경 변수를 사용하여 경로를 설정하고 관리하는 데에는 여러 가지 장점이 있습니다:
중앙 집중식 관리
- 경로를 하나의 위치에서 관리할 수 있어, 경로가 변경될 경우 여러 스크립트를 수정할 필요 없이 환경 변수만 수정하면 됩니다.
유연성 증가
- 서로 다른 환경(예: 개발, 테스트, 프로덕션)에서 서로 다른 경로를 사용할 수 있습니다.
- 예를 들어, 환경 변수만 변경하여 동일한 스크립트를 다양한 환경에서 쉽게 실행할 수 있습니다.
유지보수 용이성
- 스크립트의 가독성이 높아지며, 경로 변경 시 오류 발생 가능성을 줄일 수 있습니다. 이번 섹션에서는 여러개의 스크립트가 사용하므로, 경로 관리 및 재사용성 향상을 위해 각 스크립트는 위와 같은 방식으로 작성되었습니다.