smart_ims/docs/design/DIRECTORY_STRUCTURE.md

75 lines
3.7 KiB
Markdown

# SmartIMS 프로젝트 디렉토리 구조 (Directory Structure)
본 문서는 SmartIMS 플랫폼의 전체 프로젝트 구조와 각 디렉토리의 역할을 설명합니다.
---
## 1. 전체 구조 개요
```text
smartims/
├── docs/ # 설계서, 가이드, 매뉴얼 등 프로젝트 관련 문서
├── public/ # 파비콘, 로고 등 정적 자원
├── server/ # Node.js (Express) 기반 백엔드 서버
├── src/ # React (Vite) 기반 프론트엔드 어플리케이션
├── tools/ # 개발 및 관리에 필요한 유틸리티 도구
├── package.json # 프론트엔드 의존성 및 스크립트
├── tailwind.config.js # Tailwind CSS 설정
└── vite.config.ts # Vite 빌드 설정
```
---
## 2. 프론트엔드 구조 (`src/`)
프론트엔드는 **모듈형 아키텍처**를 따르며, 플랫폼 엔진과 독립적인 비즈니스 모듈로 구성됩니다.
### 2.1 Core & Infrastructure
- `src/core/`: 플랫폼의 핵심 인터페이스 및 공통 타입 정의 (`types.ts`).
- `src/platform/`: 시스템의 뼈대 구현.
- `App.tsx`: 메인 엔트리 및 전체 레이아웃 구성.
- `ModuleLoader.tsx`: 등록된 모듈을 동적으로 로드하고 라우팅을 구성.
- `styles/`: 전역 스타일 및 디자인 토큰(`global.css`) 관리.
- `src/app/`: Context Provider(인증, 시스템 설정 등)와 같은 전역 상태 관리.
### 2.2 Functional Components
- `src/modules/`: 독립적인 비즈니스 영역. 각 폴더는 하나의 서비스 모듈을 의미함.
- 예: `asset/`, `cctv/`, `license/` 등.
- 각 모듈은 `module.tsx` (또는 `index.tsx`)를 진입점으로 가짐.
- `src/widgets/`: 여러 페이지에서 재사용되는 복합 UI 블록 (예: `MainLayout`, `Sidebar`).
- `src/shared/`: 프로젝트 전역에서 사용되는 공통 UI 컴포넌트, 유틸리티, API 클라이언트.
---
## 3. 백엔드 구조 (`server/`)
백엔드는 RESTful API 제공 및 데이터베이스 관리를 담당합니다.
- `server/index.js`: 서버 엔트리 포인트. 환경 설정, 미들웨어 등록, 라우트 연결 총괄.
- `server/routes/`: API 엔드포인트 정의. (예: `auth.js`, `system.js`, `asset.js`).
- `server/middleware/`: 요청 처리 과정에서 동작하는 공통 로직 (인증 필터, 에러 핸들러).
- `server/configs/`: 데이터베이스 연결 (`db.js`) 및 외부 서비스 설정.
- `server/utils/`: 서버 측 공통 유틸리티 (로그 관리, 파일 업로드 등).
- `server/schema.sql`: 데이터베이스 테이블 명세 및 초기 데이터.
---
## 4. 기타 주요 디렉토리
- `docs/`:
- `operation/`: 설치 및 운영 관련 가이드 (환경 설정, 배포, 라이선스 서버 등)
- `modules/`: 모듈별 상세 기술 및 사용자 가이드 (자산 분류 기준 등)
- `design/`: 플랫폼 설계 원칙, 시스템 아키텍처 및 디렉토리 구조
- `version_control/`: Git 운영 정책 및 버전 관리 규정
- `roadmap/`: 프로젝트 통합 마스터 플랜 및 단계별 로드맵 (`INTEGRATED_ROADMAP.md`)
- `tools/`:
- 라이선스 관리 도구, 데이터 마이그레이션 스크립트 등 개발 보조 도구 포함.
---
## 5. 아키텍처 원칙 요약
1. **느슨한 결합 (Loose Coupling)**: 플랫폼은 모듈 내부 로직을 모르며, 모듈은 정의된 인터페이스를 통해 플랫폼과 통신합니다.
2. **높은 응집도 (High Cohesion)**: 특정 기능(예: 자산 관리)에 필요한 코드는 해당 모듈 폴더(`src/modules/asset/`) 내에 모여 있어야 합니다.
3. **디자인 시스템 준수**: 모든 스타일은 플랫폼이 제공하는 CSS Variables를 사용하여 일관성을 유지합니다.