Open Junghyun99 opened 1 month ago
인터페이스는 별도로 모아두고 구현은 맞는 위치에 둔다
project-root/ ├── src/ │ ├── interfaces/ │ │ └── repository_interface.py # 추상화 클래스 위치 │ ├── services/ │ │ ├── repositories/ │ │ │ └── user_repository.py # 구현체 │ │ └── business_logic_service.py │ └── models/ │ └── user_model.py
api 추상화도 인터페이스에 구현체인 더미와 실제는 비지니스에
로깅도 추상화는 인터페이스에 구현체는 서비스에 설정은 유틸에?
프로젝트의 파일 구조를 설계할 때는 코드의 유지보수성과 확장성을 높이고 협업을 용이하게 만드는 것이 중요합니다. 프로젝트 성격에 따라 다를 수 있지만, 아래는 대부분의 프로젝트에 필요한 주요 요소입니다.
README.md: 프로젝트 설명, 설치 방법, 사용법 등을 포함한 문서.
LICENSE: 프로젝트의 사용 조건을 설명하는 라이선스 파일.
requirements.txt: 프로젝트의 종속 라이브러리를 명시한 파일 (Python의 경우).
.gitignore: Git에 포함하지 않을 파일과 폴더를 정의하는 파일.
app 또는 src: 실제 코드가 포함된 디렉토리입니다. 프로젝트의 메인 코드가 여기에 위치하며, 기능별로 분리하여 구성할 수 있습니다.
모델 (models): 데이터 구조나 데이터베이스 모델을 정의하는 디렉토리입니다.
서비스 (services): 비즈니스 로직을 처리하는 디렉토리입니다. 데이터베이스 연결, API 호출 등의 기능을 여기에 넣을 수 있습니다.
컨트롤러 (controllers): API 엔드포인트나 UI 이벤트 핸들링 등을 담당하는 파일을 담습니다.
유틸리티 (utils): 다양한 기능에 공통으로 쓰일 유틸리티 함수나 도구 모음 파일.
구성 설정 (config): 설정 파일들이 포함된 디렉토리입니다. 예를 들어, config.yaml 또는 환경 설정 파일이 포함될 수 있습니다.
단위 테스트 및 통합 테스트를 포함한 테스트 파일들입니다. 각 기능이나 모듈별로 테스트 파일을 나누어 구조화할 수 있습니다.
build: 빌드 관련 설정 파일이 포함됩니다. 예를 들어, 컴파일된 파일이나 패키징된 파일이 위치할 수 있습니다.
dist: 배포할 파일들을 모아둔 폴더입니다. 최종 배포 패키지 등을 여기에 생성할 수 있습니다.
docs: 프로젝트 설명서, API 문서, 개발 가이드 등을 포함하여 팀원과 사용자에게 도움을 줄 수 있는 문서들이 위치합니다.
config.yaml 또는 settings.py: 프로젝트의 전역 설정값을 담은 파일로 환경 변수, 데이터베이스 설정, API 키 등이 포함될 수 있습니다.
environments: 개발, 테스트, 운영 환경별 설정 파일을 포함할 수 있습니다. 예를 들어, dev.env, test.env, prod.env와 같은 파일로 환경에 따른 설정을 관리할 수 있습니다.
data: 예제 데이터셋, CSV 파일 등 프로젝트에서 사용하는 데이터 파일이 포함됩니다.
assets: 이미지, 스타일시트(CSS), 스크립트(JavaScript) 같은 웹 자산이나 미디어 파일을 담습니다.
resources: 설정 외 프로젝트에 필요한 기타 리소스들을 포함합니다.
scripts: 프로젝트 실행, 빌드, 배포 등의 스크립트 파일이 위치합니다. 예를 들어, setup.sh, deploy.sh 등 자동화 스크립트를 포함할 수 있습니다.
GitHub Actions 또는 GitLab CI/CD 설정 파일: CI/CD 파이프라인 설정 파일을 넣어 자동화 빌드, 테스트, 배포 등의 작업을 정의합니다.
예시 파일 구조
project-root/ ├── README.md ├── LICENSE ├── .gitignore ├── requirements.txt ├── src/ │ ├── init.py │ ├── main.py │ ├── config/ │ │ └── config.yaml │ ├── models/ │ ├── services/ │ ├── controllers/ │ └── utils/ ├── tests/ │ ├── test_main.py │ ├── models/ │ └── services/ ├── docs/ │ └── API.md ├── environments/ │ ├── dev.env │ ├── test.env │ └── prod.env ├── data/ │ └── example_data.csv ├── scripts/ │ ├── setup.sh │ └── deploy.sh └── .github/ └── workflows/ └── ci.yml
이렇게 파일 구조를 짜면 모듈화와 가독성이 높아지며, 유지보수와 협업이 훨씬 수월해집니다.