컴퓨터사이언스/파이썬 & 알고리즘

아주 기본적인 파이썬 모듈화 구조에 대한 소개

누군가의 이야기 2025. 1. 29. 10:59
728x90

 

위 이미지는 본인이  LSTM 기반 적정 재고 관리 FastAPI 서버 개발시 구성해본 파일 구조이다.

 

프로젝트를 만들 때 파일을 잘 쪼개서 관리하는 것은 유지보수확장성에 매우 중요하다.

 

프로젝트의 규모나 목적에 따라 구조는 다를 수 있지만,

 

일반적으로 권장되는 디렉토리 구조에 대하여 정리해보았다. (가볍게 보면 좋다.)

1. 기본적인 프로젝트 구조

my_project/
├── data/                        # 데이터 파일 (raw, processed 데이터)
│   ├── raw/                    # 원본 데이터
│   └── processed/         # 전처리된 데이터
├── notebooks/              # Jupyter 노트북 (데이터 분석, 실험 등)
├── src/                          # 소스 코드 (모듈화된 코드)
│   ├── __init__.py         # src 패키지의 초기화 파일
│   ├── preprocessing.py   # 데이터 전처리 코드
│   ├── model.py            # 모델 정의 및 학습 코드
│   └── utils.py               # 유틸리티 함수 (공통 함수들)
├── tests/                       # 단위 테스트
│   ├── test_preprocessing.py
│   ├── test_model.py
│   └── test_utils.py
├── requirements.txt       # 프로젝트 의존성 (필요한 패키지 목록)
├── README.md           # 프로젝트 설명
└── main.py                    # 메인 실행 코드 (스크립트 실행)

2. 각 디렉토리와 파일의 역할

  • data/:
    • raw/: 원본 데이터 파일. 보통 원본 데이터는 외부에서 가져오거나, 다른 시스템에서 다운로드 받은 데이터.
    • processed/: 전처리가 완료된 데이터나, 모델 훈련에 사용할 데이터 파일을 저장. 전처리, 정제, 변환 작업 후 결과 데이터를 이곳에 저장한다.
  • notebooks/:
    • Jupyter 노트북 파일들을 저장하는 폴더. 실험, 데이터 분석, 모델링 과정 등을 기록할 때 사용. 보통 최종 코드와는 별도로 분석을 하거나 실험을 진행한 파일을 넣어놓고는 한다.
  • src/:
    • 소스 코드가 들어가는 폴더.
    • preprocessing.py: 데이터 전처리 관련 함수들을 모아 놓은 파일.
    • model.py: 모델 정의 및 훈련 관련 코드.
    • utils.py: 여러 곳에서 공통적으로 사용되는 유틸리티 함수들을 저장하는 파일입니다. 예를 들어, 모델 저장, 평가, 로깅 등의 함수를 포함한다.
  • tests/:
    • 코드의 단위 테스트를 위한 폴더.
    • 각 기능에 대해 테스트할 파일들을 저장. 예를 들어, preprocessing.py의 함수가 제대로 작동하는지 확인하기 위한 테스트 파일 등.
  • requirements.txt: 프로젝트에 필요한 패키지를 명시하는 파일.
numpy==1.21.2
pandas==1.3.3
scikit-learn==0.24.2

 

  • README.md:
    • 프로젝트 설명 및 사용법을 기록하는 파일. 프로젝트의 목적, 사용 방법, 설치 방법 등을 기술합니다.
  • main.py:
    • 프로젝트의 진입점(entry point). 메인 함수를 실행하는 코드가 들어가며, 전체 파이프라인을 실행하는 스크립트 역할을 한다. 예를 들어, 데이터 로딩, 전처리, 모델 훈련, 결과 저장 등을 이 파일에서 처리한다.

3. 다양한 기능에 맞게 구조 확장 가능

필요에 따라 위 구조를 확장하거나, 다른 디렉토리를 추가할 수 있다:

  • models/: 학습된 모델을 저장하는 디렉토리
    • 예: models/ 폴더에 모델을 joblib 또는 pickle을 통해 저장하거나 로드하는 파일들을 추가할 수 있다.
  • logs/: 학습 로그 파일을 저장하는 디렉토리
    • 예: 모델 훈련 과정에서 발생하는 로그를 저장하는 폴더.
  • config/: 설정 파일
    • 예: 모델 하이퍼파라미터, 데이터 경로 등 설정을 관리하는 파일들을 config/ 폴더에 둘 수 있다.
  • deploy/: 배포 관련 코드
    • 예: API 서버를 구축하는 코드나 모델을 서비스로 배포하는 코드가 들어간다.

4. 모듈화와 재사용성

각각의 파일을 독립적으로 관리하고, 필요한 부분에서 모듈화된 코드를 임포트하여 사용하는 방식은

프로젝트의 유지보수를 용이하게 하고, 다양한 기능을 추가할 때 매우 유용하다.

 

예를 들어:

# main.py에서 모델 학습을 호출하는 방식
from src.preprocessing import preprocess_data
from src.model import create_model, train_model
from src.utils import save_model

# 데이터 전처리
data = preprocess_data(raw_data)

# 모델 생성 및 학습
model = create_model()
trained_model = train_model(model, data)

# 모델 저장
save_model(trained_model, 'saved_model.pkl')
728x90