# SQLite + FastAPI + Vue 전역 설정 분리 설계 ## 목표 프론트엔드가 백엔드 API 주소를 코드 내부 상수에 직접 고정하지 않고, `index.html`의 전역 설정 객체를 통해 읽도록 바꿔서 포트 변경 시 자바스크립트 로직을 수정하지 않아도 되게 만든다. ## 배경 현재 예제는 `frontend/src/main.js`에 `API_HOST`, `API_PORT`, `API_BASE_URL` 상수가 직접 선언되어 있다. 이 구조는 이전보다 단순하지만, 포트를 바꿀 때 여전히 `main.js`를 수정해야 한다. 예제 사용성 관점에서는 HTML 설정만 바꾸고 Vue 로직은 그대로 두는 쪽이 더 이해하기 쉽다. ## 범위 이번 작업은 다음을 포함한다. - `frontend/index.html`에 전역 설정 객체 추가 - `frontend/src/main.js`가 전역 설정 객체를 읽도록 변경 - 설정이 없을 때 기본값 `127.0.0.1:8000` 사용 - README에 설정 위치를 `index.html` 기준으로 설명 이번 작업은 다음을 포함하지 않는다. - 별도 `config.js` 파일 추가 - `.env` 기반 설정 시스템 도입 - URL 쿼리 파라미터 기반 포트 주입 - 백엔드 설정 시스템 변경 ## 구조 ### 1. HTML 전역 설정 `frontend/index.html`에 아래 형태의 전역 객체를 둔다. ```html ``` 이 값은 프론트엔드 애플리케이션이 시작되기 전에 정의되어야 한다. ### 2. 프론트엔드 설정 읽기 `frontend/src/main.js`는 `window.APP_CONFIG`를 읽어 아래 값을 만든다. - `apiHost` - `apiPort` - `API_BASE_URL` 설정이 없거나 일부 속성이 빠져 있으면 기본값을 사용한다. 예시 구조: ```javascript const appConfig = window.APP_CONFIG ?? {} const apiHost = appConfig.apiHost || 'http://127.0.0.1' const apiPort = appConfig.apiPort || '8000' const API_BASE_URL = `${apiHost}:${apiPort}/api` ``` ## 데이터 흐름 1. 브라우저가 `index.html`을 먼저 읽는다. 2. `window.APP_CONFIG`가 전역으로 설정된다. 3. `main.js`가 이 값을 읽어 실제 API 주소를 조합한다. 4. Vue 애플리케이션은 조합된 API 주소로 CRUD 요청을 보낸다. ## 기본값 처리 전역 설정 객체가 없더라도 예제가 깨지지 않도록 기본값을 유지한다. - 기본 호스트: `http://127.0.0.1` - 기본 포트: `8000` 즉, 설정 객체는 선택 사항이지만 존재하면 우선 적용된다. ## README 문서화 방식 README에는 아래 내용을 포함한다. - 기본 실행 예시 - `index.html`의 `window.APP_CONFIG` 위치 설명 - 포트 충돌 시 `apiPort`를 어떻게 바꾸는지 설명 - 프론트 정적 서버 포트는 여전히 실행 명령에서 따로 바꾼다는 점 ## 오류 처리 - 전역 설정이 없으면 기본값으로 동작한다. - 전역 설정의 값이 잘못되어 연결에 실패하면 기존 fetch 에러 문구를 보여준다. - README에 백엔드 포트와 `apiPort`가 같아야 한다는 점을 분명히 적는다. ## 검증 기준 다음 조건을 만족하면 성공이다. - `main.js`를 수정하지 않고 `index.html`의 `apiPort` 값만 바꿔 다른 백엔드 포트로 연결할 수 있다. - 전역 설정이 없어도 기본값으로 기존 CRUD 기능이 유지된다. - README만 읽어도 설정 위치와 수정 방법을 이해할 수 있다. ## 구현 원칙 - 기존 CRUD 기능은 그대로 유지한다. - 설정 시스템은 예제 규모에 맞게 가장 단순한 수준으로 둔다. - 포트 변경 지점은 한 곳으로 모은다.