mirror of
https://github.com/ktds-dg0501/kt-event-marketing.git
synced 2025-12-06 09:26:24 +00:00
- API-TEST-RESULT.md → test/ - content-service-integration-analysis.md → test/ - content-service-integration-test-results.md → test/ - test-kafka-integration-results.md → test/ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
245 lines
6.6 KiB
Markdown
245 lines
6.6 KiB
Markdown
# 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 호출로 교체하는 것입니다.
|