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 # 메인 실행 코드 (스크립트 실행)
├── 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
'컴퓨터사이언스 > 파이썬 & 알고리즘' 카테고리의 다른 글
최소 신장 트리(MST, Minimum Spanning Tree), Kruskal 알고리즘, Prim 알고리즘 (2) | 2024.09.28 |
---|---|
[파이썬] 웹크롤링 하기 전에 필요한 사전 지식 정리 | css-selector, selenium, parsing 外 (1) | 2024.09.20 |
VSCODE에서 외장그래픽 잘 연결되었는지 확인하는 터미널 코드 (0) | 2023.09.17 |
이진 탐색 (Binary Search) (0) | 2022.09.21 |
정렬 알고리즘 개념 정리(Selecting, Inserting, Quick, Counting) (0) | 2022.09.18 |