# API 연동 테스트 결과 보고서

**테스트 일시**: 2025-10-29
**테스트 대상**: 프론트엔드(localhost:3000)와 event-service(localhost:8080) API 연동

---

## ✅ 테스트 결과 요약

### 1. 서비스 실행 상태
- **프론트엔드**: ✅ Next.js 서버 (port 3000) 정상 실행
- **백엔드**: ✅ Event-service (port 8080) 정상 실행
- **데이터베이스**: ✅ PostgreSQL 연결 정상 (헬스체크 통과)

### 2. API 연동 테스트

#### 2.1 백엔드 API 직접 호출 테스트
**테스트 명령어**:
```bash
curl -X GET "http://localhost:8080/api/v1/events?page=0&size=20" \
  -H "Authorization: Bearer <JWT_TOKEN>" \
  -H "Content-Type: application/json"
```

**결과**: ✅ **성공**
- 응답 코드: 200 OK
- 조회된 이벤트: 8개
- 응답 형식: JSON (표준 API 응답 포맷)
- 페이지네이션: 정상 작동

**샘플 응답 데이터**:
```json
{
    "success": true,
    "data": {
        "content": [
            {
                "eventId": "2a91c77c-9276-49d3-94d5-0ab8f0b3d343",
                "userId": "11111111-1111-1111-1111-111111111111",
                "storeId": "22222222-2222-2222-2222-222222222222",
                "objective": "awareness",
                "status": "DRAFT",
                "createdAt": "2025-10-29T11:08:38.556326"
            }
            // ... 7개 더
        ],
        "page": 0,
        "size": 20,
        "totalElements": 8,
        "totalPages": 1
    }
}
```

#### 2.2 인증 테스트
**JWT 토큰**: ✅ 정상 작동
- 토큰 생성 스크립트: `generate-test-token.py`
- 유효 기간: 365일 (테스트용)
- 알고리즘: HS256
- Secret: 백엔드와 일치

#### 2.3 프론트엔드 설정
**환경 변수 파일**: `.env.local` 생성 완료
```env
NEXT_PUBLIC_API_BASE_URL=http://localhost:8081
NEXT_PUBLIC_EVENT_HOST=http://localhost:8080
NEXT_PUBLIC_API_VERSION=v1
```

**현재 상태**: ⚠️ **Mock 데이터 사용 중**
- 파일: `src/app/(main)/events/page.tsx`
- 이벤트 목록 페이지가 하드코딩된 Mock 데이터 표시
- 실제 API 연동 코드 미구현 상태

---

## 📊 API 엔드포인트 정보

### Event Service (localhost:8080)

#### 1. 이벤트 목록 조회
- **URL**: `GET /api/v1/events`
- **인증**: Bearer Token 필수
- **파라미터**:
  - `status`: EventStatus (optional) - DRAFT, PUBLISHED, ENDED
  - `search`: String (optional) - 검색어
  - `objective`: String (optional) - 목적 필터
  - `page`: int (default: 0)
  - `size`: int (default: 20)
  - `sort`: String (default: createdAt)
  - `order`: String (default: desc)

#### 2. 이벤트 상세 조회
- **URL**: `GET /api/v1/events/{eventId}`
- **인증**: Bearer Token 필수

#### 3. 이벤트 생성 (목적 선택)
- **URL**: `POST /api/v1/events/objectives`
- **인증**: Bearer Token 필수
- **Request Body**:
```json
{
  "objective": "CUSTOMER_ACQUISITION"
}
```

#### 4. 추가 엔드포인트
- `DELETE /api/v1/events/{eventId}` - 이벤트 삭제
- `POST /api/v1/events/{eventId}/publish` - 이벤트 배포
- `POST /api/v1/events/{eventId}/end` - 이벤트 종료
- `POST /api/v1/events/{eventId}/ai-recommendations` - AI 추천 요청
- `POST /api/v1/events/{eventId}/images` - 이미지 생성 요청
- `PUT /api/v1/events/{eventId}` - 이벤트 수정

---

## 🔍 발견 사항

### ✅ 정상 작동 항목
1. **백엔드 서비스**
   - Event-service 정상 실행 (port 8080)
   - PostgreSQL 데이터베이스 연결 정상
   - API 엔드포인트 정상 응답
   - JWT 인증 시스템 작동

2. **프론트엔드 서비스**
   - Next.js 개발 서버 정상 실행 (port 3000)
   - 페이지 렌더링 정상
   - 환경 변수 설정 완료

### ⚠️ 개선 필요 항목

#### 1. 프론트엔드 API 연동 미구현
**현재 상태**:
- `src/app/(main)/events/page.tsx` 파일이 Mock 데이터 사용
- 실제 API 호출 코드 없음

**권장 수정 사항**:
```typescript
// src/entities/event/api/eventApi.ts (신규 생성 필요)
import { apiClient } from '@/shared/api';

export const eventApi = {
  getEvents: async (params) => {
    const response = await apiClient.get('/api/v1/events', { params });
    return response.data;
  },
  // ... 기타 메서드
};
```

#### 2. API 클라이언트 설정 개선
**현재**:
- `apiClient` 기본 URL이 user-service(8081)를 가리킴
- Event API는 별도 서비스(8080)

**개선 방안**:
```typescript
// 서비스별 클라이언트 분리 또는
// NEXT_PUBLIC_EVENT_HOST 환경 변수 활용
const eventApiClient = axios.create({
  baseURL: process.env.NEXT_PUBLIC_EVENT_HOST || 'http://localhost:8080',
  // ...
});
```

---

## 📝 테스트 체크리스트

### 완료된 항목 ✅
- [x] 백엔드 서비스 실행 상태 확인
- [x] 프론트엔드 서비스 실행 상태 확인
- [x] Event Service API 직접 호출 테스트
- [x] JWT 인증 토큰 생성 및 테스트
- [x] 환경 변수 설정 (`.env.local`)
- [x] API 응답 형식 확인
- [x] 페이지네이션 동작 확인
- [x] 데이터베이스 연결 확인

### 추가 작업 필요 ⏳
- [ ] 프론트엔드 API 연동 코드 작성
- [ ] Event API 클라이언트 구현
- [ ] React Query 또는 SWR 통합
- [ ] 에러 핸들링 구현
- [ ] 로딩 상태 UI 구현
- [ ] 실제 데이터 렌더링 테스트
- [ ] E2E 테스트 작성

---

## 🎯 다음 단계 권장사항

### 1단계: Event API 클라이언트 작성
```bash
# 파일 생성
src/entities/event/api/eventApi.ts
src/entities/event/model/types.ts
```

### 2단계: React Query 설정
```bash
# useEvents 훅 작성
src/entities/event/model/useEvents.ts
```

### 3단계: 페이지 수정
```bash
# Mock 데이터를 실제 API 호출로 교체
src/app/(main)/events/page.tsx
```

### 4단계: 통합 테스트
- 브라우저에서 실제 데이터 렌더링 확인
- 필터링 및 검색 기능 테스트
- 페이지네이션 동작 확인

---

## 📌 참고 정보

### 테스트 토큰 정보
- User ID: `6db043d0-b303-4577-b9dd-6d366cc59fa0`
- Store ID: `34000028-01fd-4ed1-975c-35f7c88b6547`
- Email: `test@example.com`
- 유효 기간: 2026-10-29까지

### 서비스 포트 매핑
| 서비스 | 포트 | 상태 |
|--------|------|------|
| 프론트엔드 | 3000 | ✅ Running |
| User Service | 8081 | ⚠️ 미확인 |
| Event Service | 8080 | ✅ Running |
| Content Service | 8082 | ⚠️ 미확인 |
| AI Service | 8083 | ⚠️ 미확인 |
| Participation Service | 8084 | ⚠️ 미확인 |

---

## ✨ 결론

**백엔드 API는 정상적으로 작동하고 있으며, 프론트엔드와의 연동을 위한 환경은 준비되었습니다.**

다음 작업은 프론트엔드에서 Mock 데이터를 실제 API 호출로 교체하는 것입니다.
