# DB 연결 및 샘플 데이터 조회 페이지 개발 계획

> PostgreSQL 외부 DB 연결 → 샘플 데이터 INSERT → 웹 페이지에 표시

---

## 1. DB 연결 정보

| 항목 | 값 |
|------|-----|
| 호스트 | `192.168.0.60` |
| 포트 | `5432` |
| 사용자 | `casaos` |
| 비밀번호 | `casaos` |
| 데이터베이스 | `casaos` |

---

## 2. 작업 단계

### Step 1: Python에서 DB 연결 테스트

**목표:** 외부 PostgreSQL에 정상 접속되는지 확인

**할 일:**
- `backend/requirements.txt`에 `asyncpg`, `sqlalchemy[asyncio]` 추가
- `backend/database.py` 생성 — async 엔진, 세션 로컬 설정
- 테스트 스크립트로 연결 확인

#### 예상 프롬프트

> PostgreSQL 연결 정보 (host=192.168.0.60, port=5432, user=casaos, password=casaos, dbname=casaos)로 FastAPI에서 접속할 수 있도록 `backend/database.py`에 async SQLAlchemy 엔진과 세션 팩토리를 설정해주세요. 연결 문자열은 `DATABASE_URL` 환경변수에서 읽되, 기본값으로 위 정보를 사용하게 해주세요.

---

### Step 2: 샘플 데이터 테이블 생성 및 데이터 INSERT

**목표:** 게시판용 샘플 테이블 `samples` 생성 + 3~5건 데이터 삽입

**할 일:**
- `backend/init_db.py` — SQLAlchemy 모델로 테이블 생성 (또는 raw SQL)
- 샘플 데이터 INSERT SQL 실행 스크립트

**테이블 구조 (`samples`):**

| 컬럼 | 타입 | 설명 |
|------|------|------|
| id | SERIAL PK | 자동 증가 |
| title | VARCHAR(200) | 제목 |
| content | TEXT | 내용 |
| author | VARCHAR(100) | 작성자 |
| created_at | TIMESTAMP | 생성일 (기본값 now) |

**샘플 데이터 (INSERT):**

| title | content | author |
|-------|---------|--------|
| 첫 번째 샘플 | 안녕하세요, 첫 번째 게시글입니다. | 홍길동 |
| 두 번째 샘플 | PostgreSQL 외부 연결 테스트 중입니다. | 김철수 |
| 세 번째 샘플 | FastAPI와 Vue로 게시판을 만듭니다. | 이영희 |
| 네 번째 샘플 | 데이터베이스 연동이 잘 되네요! | 박민수 |
| 다섯 번째 샘플 | 화면에 표시되는지 확인해보세요. | 최지은 |

#### 예상 프롬프트

> `backend/models.py`에 `Sample` 모델을 정의해주세요. 필드는 id(INTEGER PK, autoincrement), title(VARCHAR 200), content(TEXT), author(VARCHAR 100), created_at(TIMESTAMP, default=now)입니다. 그리고 `backend/seed.py` 스크립트를 만들어 테이블을 생성하고 위 5건의 샘플 데이터를 INSERT하는 코드를 작성해주세요.

---

### Step 3: 샘플 데이터 조회 API

**목표:** `GET /api/samples` 로 샘플 데이터 목록 반환

**할 일:**
- `backend/routers/samples.py` 생성
- `backend/app.py`에 라우터 등록

#### 예상 프롬프트

> `backend/routers/samples.py`에 `GET /api/samples` 엔드포인트를 만들어주세요. DB에서 모든 Sample 데이터를 조회하여 JSON 배열로 반환합니다. Pydantic 스키마는 `backend/schemas.py`에 정의하고, async SQLAlchemy 세션을 사용해주세요. `backend/app.py`에 이 라우터를 include 해주세요.

---

### Step 4: 프론트엔드 — 샘플 데이터 조회 페이지

**목표:** `/samples` 경로에서 DB 데이터를 테이블로 표시

**할 일:**
- `frontend/src/pages/SampleListPage.vue` 생성
- `frontend/src/router.js`에 경로 등록
- `frontend/src/App.vue`에 네비게이션 링크 추가

**페이지 UI 구성:**
```
┌──────────────────────────────────────────┐
│  📋 샘플 데이터 목록                       │
├──────┬────────────────────┬──────────┬────┤
│  ID  │  제목              │  작성자   │ 날짜 │
├──────┼────────────────────┼──────────┼────┤
│  1   │ 첫 번째 샘플       │ 홍길동    │ ... │
│  2   │ 두 번째 샘플       │ 김철수    │ ... │
│  3   │ 세 번째 샘플       │ 이영희    │ ... │
│ ...  │ ...                │ ...      │ ... │
└──────┴────────────────────┴──────────┴────┘
```

#### 예상 프롬프트

> Vue 3 Options API 스타일로 `frontend/src/pages/SampleListPage.vue`를 만들어주세요. mounted()에서 `fetch('/api/samples')`로 데이터를 불러와 테이블 형태로 표시합니다. 컬럼은 ID, 제목, 작성자, 생성일시입니다. `frontend/src/router.js`에 `/samples` 경로를 추가하고, `frontend/src/App.vue` 네비게이션에 "샘플 목록" 링크를 추가해주세요.

---

## 3. 실행 순서

```
1. pip install -r backend/requirements.txt  (asyncpg, sqlalchemy 추가 설치)
2. python backend/seed.py                    (테이블 생성 + 샘플 데이터 INSERT)
3. uvicorn app:app --reload --port 8000      (백엔드 실행)
4. curl http://localhost:8000/api/samples    (API 테스트)
5. npm run dev                               (프론트엔드 실행)
6. http://localhost:5173/samples 접속         (화면 확인)
```

---

## 4. 검증 방법

| 항목 | 방법 |
|------|------|
| DB 연결 | 서버 로그에 연결 에러 없이 정상 기동 |
| 샘플 데이터 | `python backend/seed.py` 실행 후 DB에 5건 INSERT 확인 |
| API 응답 | `curl localhost:8000/api/samples` → 5건 JSON 배열 반환 |
| 화면 표시 | 브라우저에서 `/samples` 접속 → 테이블에 5행 표시 |
