프로젝트 디렉터리 구조
ROTA/ ├── README.md ├── src/ │ ├── app.py │ ├── settings.py │ ├── utilities/ │ │ ├── tools.py │ │ └── log_handler.py │ └── components/ │ ├── processor.py │ └── handler.py ├── tests/ │ ├── test_app.py │ └── test_settings.py └── requirements.txt
디렉터리 및 파일 설명
- README.md: 프로젝트 개요, 설치 방법, 실행 절차를 포함한 문서.
- src/: 핵심 소스 코드가 위치한 폴더.
- app.py: 애플리케이션 진입점. 전체 흐름을 제어함.
- settings.py: 외부 설정 파일에서 환경 변수를 읽어오는 역할.
- utilities/: 재사용 가능한 보조 기능 제공.
- tools.py: 데이터 변환, 유효성 검사 등 공통 함수 포함.
- log_handler.py: 로깅 인스턴스를 생성하고 출력 형식을 정의.
- components/: 비즈니스 로직을 담당하는 모듈 집합.
- processor.py: 주요 작업 처리 로직 구현.
- handler.py: 외부 입력 또는 이벤트에 반응하는 기능 포함.
- tests/: 단위 테스트 및 통합 테스트 코드 저장소.
- test_app.py: 애플리케이션 시작 과정 테스트.
- test_settings.py: 설정 값 로드 기능 검증.
- requirements.txt: pip을 통해 설치해야 하는 파이썬 패키지 목록.
애플리케이션 진입점: app.py
프로그램의 시작을 담당하는 스크립트로, 전반적인 초기화 절차를 관리합니다. 다음은 간소화된 예시입니다.
from settings import fetch_configuration
from utilities.log_handler import setup_logger
from components.processor import execute_processing
from components.handler import start_handling
def run_application():
logger = setup_logger()
logger.info("ROTA 시스템 초기화 중...")
try:
config = fetch_configuration()
logger.info(f"설정 로드 완료: {config['environment']}")
execute_processing()
start_handling()
except Exception as e:
logger.error(f"실행 오류 발생: {e}")
raise
if __name__ == "__main__":
run_application()
스크립트는 조건부 블록 if __name__ == "__main__" 내에서 실행되며, 직접 호출 시에만 메인 루틴이 작동합니다.
설정 관리 모듈: settings.py
외부 JSON 파일로부터 설정 정보를 동적으로 불러오는 기능을 제공합니다. 코드 예시:
import json
import os
CONFIG_FILE = "config.json"
def fetch_configuration():
"""config.json 파일에서 설정을 읽어 딕셔너리 형태로 반환."""
if not os.path.exists(CONFIG_FILE):
raise FileNotFoundError(f"설정 파일 누락: {CONFIG_FILE}")
with open(CONFIG_FILE, 'r', encoding='utf-8') as file:
return json.load(file)
이 방식은 하드코딩을 피하고, 다양한 배포 환경(개발, 운영 등)에서 유연하게 대응할 수 있도록 해줍니다.