diff --git a/README.md b/README.md index 3b3ac84..4b48bf0 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,57 @@ - `frontend/`: React와 three.js를 사용한 프론트엔드 애플리케이션 - `backend/`: FastAPI를 사용한 백엔드 API 서버 +## 기술 스택 및 문서 + +### Frontend (React + three.js) + +프론트엔드는 React를 기반으로 하며, `@react-three/fiber`를 사용하여 3D 씬을 렌더링합니다. 주요 컴포넌트와 기능은 다음과 같습니다. + +#### Components + +* **`HomePage`** (`src/pages/HomePage.tsx`) + * 애플리케이션의 메인 페이지입니다. + * **역할**: 모델 선택 상태(`selectedModel`)를 관리하고, 선택된 모델의 데이터를 가져오는 로직을 조정합니다. `ModelSelector`와 `ModelViewer`를 배치합니다. + +* **`ModelSelector`** (`src/components/controls/ModelSelector.tsx`) + * **역할**: 사용자에게 사용 가능한 모델 목록을 드롭다운으로 보여주고 선택할 수 있게 합니다. + * **Props**: + * `selectedModel` (string): 현재 선택된 모델의 이름. + * `onModelChange` ((modelName: string) => void): 모델 변경 시 호출되는 콜백 함수. + * **동작**: 마운트 시 백엔드에서 모델 목록을 가져옵니다. + +* **`ModelViewer`** (`src/components/model/ModelViewer.tsx`) + * **역할**: 3D 캔버스를 생성하고 모델을 렌더링합니다. 조명(Ambient, Spot, Point)과 카메라 컨트롤(OrbitControls)을 포함합니다. + * **Props**: + * `objData` (string): 렌더링할 OBJ 파일의 텍스트 데이터. + * **동작**: `objData` 문자열을 파싱하여 3D 메쉬로 변환 후 렌더링합니다. 데이터가 없으면 폴백 박스를 표시합니다. + +#### API Client (`src/api/modelAPI.ts`) + +* `fetchModelList()`: 사용 가능한 모델 이름 목록을 가져옵니다. +* `fetchModel(modelName)`: 특정 모델의 `.obj` 파일 내용을 텍스트로 가져옵니다. + +--- + +### Backend (FastAPI) + +백엔드는 `/models` 디렉토리에 있는 OBJ 파일을 서빙하는 역할을 합니다. + +#### API Endpoints (`app/api/v1/endpoints/model.py`) + +* **`GET /api/v1/models`** + * **설명**: 서버에 저장된 사용 가능한 모든 OBJ 모델의 이름 목록을 반환합니다. + * **응답 예시**: `["cube", "pyramid", "teddy"]` + +* **`GET /api/v1/models/{model_name}`** + * **설명**: 지정된 이름의 OBJ 모델 파일을 다운로드(반환)합니다. + * **파라미터**: `model_name` (확장자 `.obj`는 생략 가능) + * **응답**: `application/octet-stream` (OBJ 파일 내용) + +* **`GET /`** (`app/main.py`) + * **설명**: 서버 상태 확인용 루트 엔드포인트입니다. + * **응답**: `{"Hello": "World"}` + ## 로컬 환경에서 실행하기 이 애플리케이션은 WSL(Windows Subsystem for Linux) 환경에서 테스트되었습니다. @@ -66,4 +117,4 @@ npm run dev ``` - 애플리케이션이 `http://localhost:5173` (또는 다른 사용 가능한 포트)에서 실행됩니다. + 애플리케이션이 `http://localhost:5173` (또는 다른 사용 가능한 포트)에서 실행됩니다. \ No newline at end of file diff --git a/backend/app/core/middleware.py b/backend/app/core/middleware.py index 7413c32..6268e3a 100644 --- a/backend/app/core/middleware.py +++ b/backend/app/core/middleware.py @@ -1,3 +1,4 @@ + import logging from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware