kt-event-marketing/develop/dev/test-backend.md
2025-10-27 14:42:03 +09:00

306 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 백엔드 테스트 결과서
## 테스트 개요
- **테스트 일시**: 2025-10-27 13:46
- **대상 서비스**: analytics-service
- **서버 포트**: 8086
- **테스트 환경**: 로컬 개발 환경
## 1. 서버 상태 확인
### 1.1 Health Check
**요청**:
```bash
curl -X GET "http://localhost:8086/actuator/health"
```
**응답**:
```json
{
"status": "UP",
"components": {
"db": {
"status": "UP",
"details": {
"database": "PostgreSQL",
"validationQuery": "isValid()"
}
},
"redis": {
"status": "UP",
"details": {
"version": "7.2.3"
}
},
"diskSpace": {"status": "UP"},
"livenessState": {"status": "UP"},
"readinessState": {"status": "UP"}
}
}
```
**결과**: ✅ **성공** - 서버 정상 작동, DB 및 Redis 연결 정상
---
## 2. API 테스트 결과
### 2.1 성과 대시보드 조회 API
**엔드포인트**: `GET /api/v1/events/{eventId}/analytics`
**테스트 케이스**:
```bash
curl -X GET "http://localhost:8086/api/v1/events/evt_2025012301/analytics"
```
**응답**:
```json
{
"success": false,
"errorCode": "EVENT_001",
"message": "이벤트를 찾을 수 없습니다",
"timestamp": "2025-10-27T13:46:50.7331807"
}
```
**결과**: ❌ **실패** - EventStats 데이터 미생성
- **원인**: Kafka Consumer 미작동으로 EventCreated 이벤트 미처리
- **근본 원인**: Kafka 브로커 연결 실패
---
### 2.2 시간대별 참여 추이 API
**엔드포인트**: `GET /api/v1/events/{eventId}/analytics/timeline`
**테스트 케이스**:
```bash
curl -X GET "http://localhost:8086/api/v1/events/evt_2025012301/analytics/timeline?interval=daily"
```
**응답**:
```json
{
"success": true,
"data": {
"eventId": "evt_2025012301",
"interval": "daily",
"dataPoints": [
{
"timestamp": "2024-09-24T00:00:00",
"participants": 36,
"views": 108,
"engagement": 36,
"conversions": 24,
"cumulativeParticipants": 36
}
// ... 150개 데이터 포인트
],
"trends": {
"overallTrend": "stable",
"growthRate": 11.1,
"projectedParticipants": 944,
"peakPeriod": "2024-09-24"
},
"peakTimes": [
{
"timestamp": "2024-09-24T00:00:00",
"metric": "participants",
"value": 40,
"description": "최대 참여자 수"
},
{
"timestamp": "2024-09-27T00:00:00",
"metric": "views",
"value": 200,
"description": "최대 조회수"
}
]
}
}
```
**결과**: ✅ **성공** - TimelineData 정상 조회
- **데이터 포인트**: 150개 (30일 × 5개 채널)
- **기간**: 2024-09-24 ~ 2024-10-23
- **트렌드 분석**: 정상 작동
- **Peak Time 분석**: 정상 작동
---
### 2.3 채널별 성과 분석 API
**엔드포인트**: `GET /api/v1/events/{eventId}/analytics/channels`
**테스트 케이스**:
```bash
curl -X GET "http://localhost:8086/api/v1/events/evt_2025012301/analytics/channels"
```
**응답**:
```json
{
"success": true,
"data": {
"eventId": "evt_2025012301",
"channels": [],
"comparison": null,
"lastUpdatedAt": "2025-10-27T13:46:55.9759532"
}
}
```
**결과**: ⚠️ **부분 성공** - 응답은 정상이나 데이터 비어있음
- **원인**: ChannelStats 데이터 미생성
- **근본 원인**: Kafka Consumer 미작동으로 DistributionCompleted 이벤트 미처리
---
### 2.4 투자 대비 수익률 분석 API
**엔드포인트**: `GET /api/v1/events/{eventId}/analytics/roi`
**테스트 케이스**:
```bash
curl -X GET "http://localhost:8086/api/v1/events/evt_2025012301/analytics/roi"
```
**응답**:
```json
{
"success": false,
"errorCode": "EVENT_001",
"message": "이벤트를 찾을 수 없습니다",
"timestamp": "2025-10-27T13:46:58.6552438"
}
```
**결과**: ❌ **실패** - EventStats 데이터 미생성
- **원인**: Kafka Consumer 미작동으로 EventCreated 이벤트 미처리
---
## 3. 문제 분석
### 3.1 Kafka 연결 실패
**로그 확인**:
```
2025-10-27 13:46:46 [kafka-producer-network-thread] INFO o.apache.kafka.clients.NetworkClient -
[Producer clientId=analytics-service-producer-1] Node 101 disconnected.
2025-10-27 13:46:56 [kafka-producer-network-thread] INFO o.apache.kafka.clients.NetworkClient -
[Producer clientId=analytics-service-producer-1] Node 100 disconnected.
```
**문제점**:
1. Kafka 브로커(20.249.182.13:9095, 4.217.131.59:9095)에 연결 실패
2. SampleDataLoader가 이벤트를 발행했지만 브로커에 도달하지 못함
3. Kafka Consumer가 이벤트를 수신하지 못함
### 3.2 Consumer 설정 확인
**파일**: `EventCreatedConsumer.java:23`
```java
@ConditionalOnProperty(name = "spring.kafka.enabled", havingValue = "true", matchIfMissing = false)
```
**설정**:
- `application.yml`: `spring.kafka.enabled: ${KAFKA_ENABLED:false}`
- 실행 프로파일: `KAFKA_ENABLED=true`
**Consumer 토픽**:
- `sample.event.created` - EventCreatedConsumer
- `sample.distribution.completed` - DistributionCompletedConsumer
- `sample.participant.registered` - ParticipantRegisteredConsumer
### 3.3 데이터 생성 흐름
**정상 흐름**:
```
SampleDataLoader (시작 시)
↓ Kafka 이벤트 발행
├─ EventCreated (3개) → EventCreatedConsumer → EventStats 생성
├─ DistributionCompleted (3개) → DistributionCompletedConsumer → ChannelStats 생성
├─ ParticipantRegistered (180개) → ParticipantRegisteredConsumer → ChannelStats 업데이트
└─ TimelineData 직접 생성 (90개)
```
**실제 흐름**:
```
SampleDataLoader (시작 시)
↓ Kafka 이벤트 발행 시도
├─ EventCreated → Kafka 연결 실패 → EventStats 미생성 ❌
├─ DistributionCompleted → Kafka 연결 실패 → ChannelStats 미생성 ❌
├─ ParticipantRegistered → Kafka 연결 실패 → 처리 안됨 ❌
└─ TimelineData 직접 생성 (90개) ✅
```
---
## 4. 테스트 결과 요약
| API | 엔드포인트 | 상태 | 비고 |
|-----|----------|------|------|
| Health Check | `/actuator/health` | ✅ 성공 | DB, Redis 연결 정상 |
| 성과 대시보드 | `/api/v1/events/{eventId}/analytics` | ❌ 실패 | EventStats 미생성 |
| 시간대별 추이 | `/api/v1/events/{eventId}/analytics/timeline` | ✅ 성공 | 150개 데이터 정상 조회 |
| 채널별 분석 | `/api/v1/events/{eventId}/analytics/channels` | ⚠️ 부분 | 빈 배열 반환 |
| ROI 분석 | `/api/v1/events/{eventId}/analytics/roi` | ❌ 실패 | EventStats 미생성 |
**성공률**: 1/4 (25%)
- **완전 성공**: Timeline API
- **부분 성공**: Channel API (응답 정상, 데이터 없음)
- **실패**: Dashboard API, ROI API
---
## 5. 개선 사항
### 5.1 즉시 조치 필요
1. **Kafka 브로커 연결 확인**
- 브로커 상태 확인: `20.249.182.13:9095`, `4.217.131.59:9095`
- 네트워크 방화벽 규칙 확인
- Kubernetes Service 확인: `kubectl get svc -n kafka`
2. **Kafka Consumer autoStartup 확인**
```java
@KafkaListener(
topics = "sample.event.created",
groupId = "analytics-service",
autoStartup = "true" // 추가 확인
)
```
### 5.2 대안 방안
**Kafka 없이 테스트하는 방법**:
1. SampleDataLoader 수정하여 Kafka 없이 직접 Repository에 데이터 생성
2. 또는 `KAFKA_ENABLED=false` 설정하고 REST API로 데이터 직접 등록
### 5.3 장기 개선
1. **Resilience 향상**
- Kafka 연결 실패 시 Retry 메커니즘 추가
- Circuit Breaker 패턴 적용 (Resilience4j 이미 설정됨)
2. **모니터링 강화**
- Kafka Consumer Lag 모니터링
- 이벤트 처리 실패 알림
3. **테스트 환경 구성**
- 로컬 테스트용 Embedded Kafka 설정
- Docker Compose로 Kafka 로컬 환경 구성
---
## 6. 결론
### 6.1 현재 상태
- **기본 기능**: 정상 작동 (서버, DB, Redis 연결)
- **API 응답**: 구조적으로 정상 (에러 처리 적절)
- **Timeline API**: 완전 정상 작동
- **Kafka 의존 API**: Kafka 연결 문제로 데이터 부재
### 6.2 권고 사항
1. **단기**: Kafka 브로커 연결 문제 해결 후 재테스트
2. **중기**: Kafka 없이도 테스트 가능한 대안 구현
3. **장기**: 이벤트 기반 아키텍처 안정성 개선
### 6.3 다음 단계
1. Kafka 브로커 상태 확인 및 연결 복구
2. Consumer 활성화 확인 및 이벤트 재처리
3. 전체 API 재테스트 및 결과 검증