# SQLite + FastAPI + Vue 포트 설정 분리 설계 ## 목표 현재 CRUD 예제의 백엔드와 프론트 실행 포트를 문서와 코드에서 더 분리해, 로컬 포트 충돌이 있어도 최소 수정으로 다시 실행할 수 있게 만든다. ## 배경 기존 예제는 아래 주소를 기본값으로 사용한다. - 백엔드 API: `http://127.0.0.1:8000` - 프론트 정적 서버: `http://127.0.0.1:5173` 실행 중 실제로 `8000`, `5173` 포트가 이미 사용 중이어서 새 서버를 같은 포트에 띄우지 못했다. 따라서 포트를 바꾸는 방법이 코드와 문서에 더 명확히 드러나야 한다. ## 범위 이번 작업은 다음을 포함한다. - 프론트엔드의 API 주소 상수 구조를 분리 - 백엔드 포트 변경 방법을 README에 명시 - 프론트 정적 서버 포트 변경 방법을 README에 명시 - 기본 포트와 대체 포트 예시를 함께 제공 이번 작업은 다음을 포함하지 않는다. - 별도 설정 파일 도입 - `.env` 기반 환경변수 시스템 추가 - 프론트 번들러 도입 - 런타임 자동 포트 탐지 ## 접근 방식 ### 1. 프론트 상수 분리 `frontend/src/main.js`의 API 주소를 하나의 긴 문자열 대신 아래 상수로 분리한다. - `API_HOST` - `API_PORT` - `API_BASE_URL` 예시 구조: ```javascript const API_HOST = 'http://127.0.0.1' const API_PORT = '8000' const API_BASE_URL = `${API_HOST}:${API_PORT}/api` ``` 이렇게 하면 백엔드 포트를 `8001` 같은 값으로 바꿀 때 한 줄만 수정하면 된다. ### 2. 백엔드 실행 포트는 명령에서 제어 백엔드는 FastAPI 코드 내부에서 포트를 고정하지 않는다. 실행 포트는 `uvicorn` 명령의 `--port` 옵션으로 제어한다. 기본 실행: ```bash uvicorn backend.main:app --host 127.0.0.1 --port 8000 ``` 대체 실행: ```bash uvicorn backend.main:app --host 127.0.0.1 --port 8001 ``` ### 3. 프론트 정적 서버 포트는 명령에서 제어 프론트 정적 서버도 코드가 아니라 실행 명령에서 포트를 선택한다. 기본 실행: ```bash python3 -m http.server 5173 -d frontend ``` 대체 실행: ```bash python3 -m http.server 5174 -d frontend ``` ## README 문서화 방식 README에는 아래 내용을 포함한다. - 기본 포트 실행 예시 - 포트 충돌 시 대체 실행 예시 - 프론트에서 `API_PORT` 값을 어디서 바꾸는지 설명 - 백엔드와 프론트 포트는 서로 독립적으로 바꿀 수 있다는 점 ## 데이터 흐름 1. 사용자가 백엔드를 원하는 포트로 실행한다. 2. 프론트는 `API_HOST`와 `API_PORT`를 조합해 API 주소를 만든다. 3. 프론트 정적 서버는 별도 포트에서 독립적으로 제공된다. 4. 포트 충돌 시 백엔드와 프론트 포트를 각각 따로 변경할 수 있다. ## 오류 처리 - 프론트가 잘못된 백엔드 포트를 가리키면 기존처럼 fetch 에러 문구를 보여준다. - README에 포트 불일치 점검 순서를 넣어 사용자가 원인을 쉽게 찾을 수 있게 한다. ## 검증 기준 다음 조건을 만족하면 성공이다. - 프론트 코드에서 백엔드 포트를 한 곳만 바꿔도 API 주소가 함께 변경된다. - README만 읽어도 기본 포트와 대체 포트 실행 방법을 이해할 수 있다. - 기존 CRUD 기능은 변경 없이 유지된다. - 포트 충돌 상황에서 사용자가 다음 행동을 바로 선택할 수 있다. ## 구현 원칙 - 기존 CRUD 구조를 유지한다. - 설정 분리를 위해 새 시스템을 과하게 도입하지 않는다. - 실행 문서는 실제 충돌 상황을 해결하는 데 바로 도움이 되도록 쓴다.