Junghyun99 / Test

0 stars 0 forks source link

프로젝트 구조 #11

Open Junghyun99 opened 1 week ago

Junghyun99 commented 1 week ago

프로젝트의 파일 구조를 설계할 때는 코드의 유지보수성과 확장성을 높이고 협업을 용이하게 만드는 것이 중요합니다. 프로젝트 성격에 따라 다를 수 있지만, 아래는 대부분의 프로젝트에 필요한 주요 요소입니다.

  1. 기본 파일 구조

README.md: 프로젝트 설명, 설치 방법, 사용법 등을 포함한 문서.

LICENSE: 프로젝트의 사용 조건을 설명하는 라이선스 파일.

requirements.txt: 프로젝트의 종속 라이브러리를 명시한 파일 (Python의 경우).

.gitignore: Git에 포함하지 않을 파일과 폴더를 정의하는 파일.

  1. 소스 코드 디렉토리 (src 또는 app)

app 또는 src: 실제 코드가 포함된 디렉토리입니다. 프로젝트의 메인 코드가 여기에 위치하며, 기능별로 분리하여 구성할 수 있습니다.

모델 (models): 데이터 구조나 데이터베이스 모델을 정의하는 디렉토리입니다.

서비스 (services): 비즈니스 로직을 처리하는 디렉토리입니다. 데이터베이스 연결, API 호출 등의 기능을 여기에 넣을 수 있습니다.

컨트롤러 (controllers): API 엔드포인트나 UI 이벤트 핸들링 등을 담당하는 파일을 담습니다.

유틸리티 (utils): 다양한 기능에 공통으로 쓰일 유틸리티 함수나 도구 모음 파일.

구성 설정 (config): 설정 파일들이 포함된 디렉토리입니다. 예를 들어, config.yaml 또는 환경 설정 파일이 포함될 수 있습니다.

  1. 테스트 디렉토리 (tests 또는 test)

단위 테스트 및 통합 테스트를 포함한 테스트 파일들입니다. 각 기능이나 모듈별로 테스트 파일을 나누어 구조화할 수 있습니다.

  1. 빌드 및 배포 설정 (build, dist)

build: 빌드 관련 설정 파일이 포함됩니다. 예를 들어, 컴파일된 파일이나 패키징된 파일이 위치할 수 있습니다.

dist: 배포할 파일들을 모아둔 폴더입니다. 최종 배포 패키지 등을 여기에 생성할 수 있습니다.

  1. 문서화 디렉토리 (docs)

docs: 프로젝트 설명서, API 문서, 개발 가이드 등을 포함하여 팀원과 사용자에게 도움을 줄 수 있는 문서들이 위치합니다.

  1. 설정 파일 (config 또는 settings)

config.yaml 또는 settings.py: 프로젝트의 전역 설정값을 담은 파일로 환경 변수, 데이터베이스 설정, API 키 등이 포함될 수 있습니다.

  1. 환경별 설정 (environments)

environments: 개발, 테스트, 운영 환경별 설정 파일을 포함할 수 있습니다. 예를 들어, dev.env, test.env, prod.env와 같은 파일로 환경에 따른 설정을 관리할 수 있습니다.

  1. 데이터 및 리소스 (data, assets, resources)

data: 예제 데이터셋, CSV 파일 등 프로젝트에서 사용하는 데이터 파일이 포함됩니다.

assets: 이미지, 스타일시트(CSS), 스크립트(JavaScript) 같은 웹 자산이나 미디어 파일을 담습니다.

resources: 설정 외 프로젝트에 필요한 기타 리소스들을 포함합니다.

  1. 스크립트 디렉토리 (scripts)

scripts: 프로젝트 실행, 빌드, 배포 등의 스크립트 파일이 위치합니다. 예를 들어, setup.sh, deploy.sh 등 자동화 스크립트를 포함할 수 있습니다.

  1. CI/CD 설정 디렉토리 (.github/workflows 또는 .gitlab-ci.yml)

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

이렇게 파일 구조를 짜면 모듈화와 가독성이 높아지며, 유지보수와 협업이 훨씬 수월해집니다.

Junghyun99 commented 1 week ago

인터페이스는 별도로 모아두고 구현은 맞는 위치에 둔다

project-root/ ├── src/ │ ├── interfaces/ │ │ └── repository_interface.py # 추상화 클래스 위치 │ ├── services/ │ │ ├── repositories/ │ │ │ └── user_repository.py # 구현체 │ │ └── business_logic_service.py │ └── models/ │ └── user_model.py

Junghyun99 commented 1 week ago

api 추상화도 인터페이스에 구현체인 더미와 실제는 비지니스에

Junghyun99 commented 1 week ago

로깅도 추상화는 인터페이스에 구현체는 서비스에 설정은 유틸에?