# frontend

Nuxt 3 기반 프론트엔드 (SSG · 정적 생성 → nginx 정적 호스팅).

## 기술 스택

- **Nuxt 3** (Vue 3 + Vite) — 파일 기반 라우팅, 자동 임포트
- **Pinia** (`@pinia/nuxt`) — 상태 관리
- **Axios** — 중앙 인스턴스 + 응답 인터셉터 (에러코드 매핑)
- **ESLint** (`@nuxt/eslint`) · **oxfmt** — 린트/포맷

## 디렉터리 구조

```
frontend/
├── app.vue                  # 최상위 진입점 (NuxtLayout + NuxtPage)
├── error.vue                # 전역 에러 페이지 (404 등)
├── nuxt.config.ts           # Nuxt 설정 (SSG, runtimeConfig, 모듈)
├── pages/                   # 파일 기반 라우팅 (index.vue = '/')
├── composables/             # useApi(axios), useUser 등 — 자동 임포트
├── stores/                  # Pinia 스토어 (user.store.ts)
├── shared/utils/            # 순수 유틸 함수 (format.ts) — 자동 임포트
└── public/                  # 정적 자원 (favicon 등)
```

## 환경변수

- `NUXT_PUBLIC_API_BASE_URL` — API 베이스 URL (`runtimeConfig.public.apiBaseUrl`).
  - 도커 빌드 시 `docker-compose.yml` 의 `VITE_API_BASE_URL`(=`FRONT_API_URL`) 인자가
    Dockerfile 에서 `NUXT_PUBLIC_API_BASE_URL` 로 매핑됩니다.

## 프로젝트 실행

```sh
npm install
```

### 개발 서버 (HMR)

```sh
npm run dev
```

### 정적 생성 (운영 빌드)

```sh
npm run generate   # 산출물: .output/public
```

`npm run preview` 로 생성 결과를 로컬에서 확인할 수 있습니다.

### 타입 검사 / 린트 / 포맷

```sh
npm run typecheck
npm run lint
npm run format
```

## 참고

- 렌더링 방식은 SSG 입니다. 동적 SSR(Node 서버)이 필요해지면 `nuxt.config.ts` 에서
  `ssr: true` 유지 + `npm run build` 산출물(`.output/server`)을 Node 로 구동하고
  Dockerfile/nginx 구성을 서버 모드로 전환하면 됩니다.
