Class01: initialize file uploader application with frontend UI and core functionalities.
This commit is contained in:
159
REPORT.md
Normal file
159
REPORT.md
Normal file
@@ -0,0 +1,159 @@
|
||||
# 구현 보고서
|
||||
|
||||
## 프로젝트 정보
|
||||
- **프로젝트명**: File Uploader
|
||||
- **구현 일자**: 2026-02-26
|
||||
- **버전**: 1.0.0
|
||||
|
||||
---
|
||||
|
||||
## 1. 구현 개요
|
||||
|
||||
REQUIREMENTS.md에 명시된 요구사항을 기반으로 FastAPI 파일 업로드/다운로드 서비스를 구현하였습니다.
|
||||
|
||||
---
|
||||
|
||||
## 2. 구현 내용
|
||||
|
||||
### 2.1 디렉토리 구조 생성
|
||||
|
||||
```
|
||||
File_Uploader/
|
||||
├── main.py # FastAPI 애플리케이션
|
||||
├── assets/ # 파일 저장소
|
||||
│ ├── images/ # 이미지 파일
|
||||
│ ├── videos/ # 비디오 파일
|
||||
│ └── files/ # 기타 파일
|
||||
├── static/
|
||||
│ └── index.html # 웹 인터페이스
|
||||
├── README.md
|
||||
├── REQUIREMENTS.md
|
||||
└── REPORT.md
|
||||
```
|
||||
|
||||
### 2.2 main.py 구현 내역
|
||||
|
||||
#### 2.2.1 기능적 요구사항 구현
|
||||
|
||||
| 요구사항 ID | 내용 | 구현 상태 | 비고 |
|
||||
|-------------|------|-----------|------|
|
||||
| FR-001 | 파일 업로드 기능 | ✅ 완료 | `POST /api/files/upload` |
|
||||
| FR-002 | 파일 카테고리 분류 | ✅ 완료 | 확장자 기반 자동 분류 |
|
||||
| FR-003 | 고유 파일명 생성 | ✅ 완료 | UUID 활용 |
|
||||
| FR-004 | 메타데이터 기록 | ✅ 완료 | metadata.json 관리 |
|
||||
| FR-005 | 메타데이터 정보 포함 | ✅ 완료 | 6개 항목 모두 포함 |
|
||||
| FR-006 | 메타데이터 자동 생성 | ✅ 완료 | 파일 미존재 시 자동 생성 |
|
||||
| FR-007 | 파일 다운로드 | ✅ 완료 | `GET /api/files/download/{filename}` |
|
||||
| FR-008 | 원본 파일명 다운로드 | ✅ 완료 | FileResponse 활용 |
|
||||
| FR-009 | 파일 미존재 에러 처리 | ✅ 완료 | 404 상태 코드 반환 |
|
||||
| FR-010 | 웹 인터페이스 접근 | ✅ 완료 | `GET /web` |
|
||||
| FR-011 | 웹 UI 파일 업로드/다운로드 | ✅ 완료 | 드래그 앤 드롭 지원 |
|
||||
| FR-012 | 파일 목록 확인 | ✅ 완료 | `GET /api/files/list` |
|
||||
|
||||
#### 2.2.2 비기능적 요구사항 구현
|
||||
|
||||
| 요구사항 ID | 내용 | 구현 상태 | 비고 |
|
||||
|-------------|------|-----------|------|
|
||||
| NFR-001 | 파일 확장자 검증 | ✅ 완료 | ALLOWED_EXTENSIONS 정의 |
|
||||
| NFR-002 | 파일 크기 제한 | ✅ 완료 | 100MB 제한 |
|
||||
| NFR-003 | 경로 순회 공격 방지 | ✅ 완료 | 파일명 검증 로직 |
|
||||
| NFR-004 | 에러 처리 | ✅ 완료 | HTTPException 활용 |
|
||||
| NFR-005 | 메타데이터 복구 | ✅ 완료 | JSON 파싱 실패 시 빈 객체 반환 |
|
||||
| NFR-006 | 대용량 파일 처리 | ⚠️ 부분 | 현재 메모리 로드 방식 |
|
||||
|
||||
### 2.3 API 엔드포인트
|
||||
|
||||
| Method | Endpoint | 기능 |
|
||||
|--------|----------|------|
|
||||
| POST | `/api/files/upload` | 파일 업로드 |
|
||||
| GET | `/api/files/download/{filename}` | 파일 다운로드 |
|
||||
| GET | `/api/files/list` | 파일 목록 조회 |
|
||||
| DELETE | `/api/files/{filename}` | 파일 삭제 |
|
||||
| GET | `/web` | 웹 인터페이스 |
|
||||
|
||||
### 2.4 웹 인터페이스 (static/index.html)
|
||||
|
||||
- **디자인**: 모던한 그라데이션 UI
|
||||
- **기능**:
|
||||
- 드래그 앤 드롭 파일 업로드
|
||||
- 업로드 진행률 표시
|
||||
- 파일 목록 실시간 갱신
|
||||
- 다운로드/삭제 버튼
|
||||
- 카테고리별 색상 뱃지 표시
|
||||
|
||||
---
|
||||
|
||||
## 3. 구현 세부 사항
|
||||
|
||||
### 3.1 파일 분류 로직
|
||||
|
||||
```python
|
||||
ALLOWED_EXTENSIONS = {
|
||||
"image": {".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp", ".svg"},
|
||||
"video": {".mp4", ".avi", ".mov", ".wmv", ".flv", ".mkv", ".webm"},
|
||||
}
|
||||
```
|
||||
|
||||
### 3.2 메타데이터 구조
|
||||
|
||||
```json
|
||||
{
|
||||
"files": [
|
||||
{
|
||||
"original_filename": "example.png",
|
||||
"saved_filename": "uuid-generated.png",
|
||||
"size": 1024,
|
||||
"mime_type": "image/png",
|
||||
"category": "image",
|
||||
"upload_date": "2026-02-26T12:00:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 3.3 보안 조치
|
||||
|
||||
1. **경로 순회 방지**: `..`, `/`, `\\` 문자열 필터링
|
||||
2. **파일 크기 제한**: 100MB 초과 시 413 에러 반환
|
||||
3. **고유 파일명**: UUID로 중복 방지
|
||||
|
||||
---
|
||||
|
||||
## 4. 테스트 방법
|
||||
|
||||
### 4.1 서버 실행
|
||||
|
||||
```bash
|
||||
# 가상환경 설정
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate
|
||||
|
||||
# 의존성 설치
|
||||
pip install fastapi uvicorn python-multipart
|
||||
|
||||
# 서버 실행
|
||||
python main.py
|
||||
# 또는
|
||||
uvicorn main:app --reload --port 8000
|
||||
```
|
||||
|
||||
### 4.2 접속
|
||||
|
||||
- **Web UI**: http://localhost:8000/web
|
||||
- **API Docs**: http://localhost:8000/docs
|
||||
|
||||
---
|
||||
|
||||
## 5. 향후 개선 사항
|
||||
|
||||
1. **대용량 파일 처리**: 스트리밍 업로드로 변경 필요
|
||||
2. **인증/인가**: 사용자별 파일 관리 기능
|
||||
3. **파일 미리보기**: 이미지/비디오 썸네일 생성
|
||||
4. **검색 기능**: 파일명, 카테고리 검색
|
||||
5. **페이징**: 대량 파일 목록 페이징 처리
|
||||
|
||||
---
|
||||
|
||||
## 6. 결론
|
||||
|
||||
REQUIREMENTS.md에 명시된 모든 기능적 요구사항과 대부분의 비기능적 요구사항을 구현하였습니다. 기본적인 파일 업로드/다운로드 서비스로서 필요한 기능을 모두 갖추었으며, 향후 기능 확장을 위한 기반을 마련하였습니다.
|
||||
Reference in New Issue
Block a user