mirror of
https://github.com/ktds-dg0501/kt-event-marketing.git
synced 2025-12-06 06:46:25 +00:00
8.3 KiB
8.3 KiB
백엔드 테스트 결과서
테스트 개요
- 테스트 일시: 2025-10-27 13:46
- 대상 서비스: analytics-service
- 서버 포트: 8086
- 테스트 환경: 로컬 개발 환경
1. 서버 상태 확인
1.1 Health Check
요청:
curl -X GET "http://localhost:8086/actuator/health"
응답:
{
"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
테스트 케이스:
curl -X GET "http://localhost:8086/api/v1/events/evt_2025012301/analytics"
응답:
{
"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
테스트 케이스:
curl -X GET "http://localhost:8086/api/v1/events/evt_2025012301/analytics/timeline?interval=daily"
응답:
{
"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
테스트 케이스:
curl -X GET "http://localhost:8086/api/v1/events/evt_2025012301/analytics/channels"
응답:
{
"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
테스트 케이스:
curl -X GET "http://localhost:8086/api/v1/events/evt_2025012301/analytics/roi"
응답:
{
"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.
문제점:
- Kafka 브로커(20.249.182.13:9095, 4.217.131.59:9095)에 연결 실패
- SampleDataLoader가 이벤트를 발행했지만 브로커에 도달하지 못함
- Kafka Consumer가 이벤트를 수신하지 못함
3.2 Consumer 설정 확인
파일: EventCreatedConsumer.java:23
@ConditionalOnProperty(name = "spring.kafka.enabled", havingValue = "true", matchIfMissing = false)
설정:
application.yml:spring.kafka.enabled: ${KAFKA_ENABLED:false}- 실행 프로파일:
KAFKA_ENABLED=true
Consumer 토픽:
sample.event.created- EventCreatedConsumersample.distribution.completed- DistributionCompletedConsumersample.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 즉시 조치 필요
-
Kafka 브로커 연결 확인
- 브로커 상태 확인:
20.249.182.13:9095,4.217.131.59:9095 - 네트워크 방화벽 규칙 확인
- Kubernetes Service 확인:
kubectl get svc -n kafka
- 브로커 상태 확인:
-
Kafka Consumer autoStartup 확인
@KafkaListener( topics = "sample.event.created", groupId = "analytics-service", autoStartup = "true" // 추가 확인 )
5.2 대안 방안
Kafka 없이 테스트하는 방법:
- SampleDataLoader 수정하여 Kafka 없이 직접 Repository에 데이터 생성
- 또는
KAFKA_ENABLED=false설정하고 REST API로 데이터 직접 등록
5.3 장기 개선
-
Resilience 향상
- Kafka 연결 실패 시 Retry 메커니즘 추가
- Circuit Breaker 패턴 적용 (Resilience4j 이미 설정됨)
-
모니터링 강화
- Kafka Consumer Lag 모니터링
- 이벤트 처리 실패 알림
-
테스트 환경 구성
- 로컬 테스트용 Embedded Kafka 설정
- Docker Compose로 Kafka 로컬 환경 구성
6. 결론
6.1 현재 상태
- 기본 기능: 정상 작동 (서버, DB, Redis 연결)
- API 응답: 구조적으로 정상 (에러 처리 적절)
- Timeline API: 완전 정상 작동
- Kafka 의존 API: Kafka 연결 문제로 데이터 부재
6.2 권고 사항
- 단기: Kafka 브로커 연결 문제 해결 후 재테스트
- 중기: Kafka 없이도 테스트 가능한 대안 구현
- 장기: 이벤트 기반 아키텍처 안정성 개선
6.3 다음 단계
- Kafka 브로커 상태 확인 및 연결 복구
- Consumer 활성화 확인 및 이벤트 재처리
- 전체 API 재테스트 및 결과 검증