다챠(Datcha) 는 개인 간 모바일 데이터를 안전하게 사고팔 수 있는 플랫폼입니다.
클라이언트 모듈은 데이터 거래, 경매, 자체 결제(Pay) 기능을 포함해 모바일 데이터 거래의 전 과정을 지원합니다.
- 일반 거래: 판매자가 지정한 가격에 즉시 구매 가능
- 입찰 거래: Redis Lua Script를 활용한 동시성 제어 기반 경매 기능 제공
- 최고 입찰자가 자동 낙찰
- 거래 완료 시 충전권 발급
| 거래 방식 | 설명 | 결제 방식 |
|---|---|---|
| 일반 거래 | 판매자가 설정한 가격에 즉시 거래 | Pay |
| 입찰 거래 | 최고가 입찰자가 낙찰 | Pay |
- 충전: 결제 시스템을 통해 Pay 충전
- 사용: 데이터 구매 및 입찰 참여 시 Pay 차감
- 환전: 거래 완료 후 획득한 Pay를 현금 환전 또는 서비스 내 재사용 가능
- 보유 데이터 관리: 사용자 데이터 잔여량 조회/관리
- 판매용 데이터 설정: 보유 데이터 중 일부를 거래 가능 상태로 지정
- 거래 완료 시 사용자 통신사에 맞는 데이터 충전권 자동 발급
- 발급된 충전권을 통해 서비스 내 데이터 충전 가능
- Elasticsearch 기반의 거래글 검색 및 조건별 필터링 지원
- 가격, 용량, 거래 방식 등 다양한 조건으로 검색 가능
프로젝트 구조 보기
orchestrator-module/
├── src/
│ ├── main/
│ │ ├── java/eureca/capstone/project/orchestrator/
│ │ │ ├── alarm/ # 실시간 알림 관련 기능
│ │ │ ├── auth/ # 인증/인가 관련 기능
│ │ │ ├── common/ # 공통 기능, 유틸리티, 예외 처리
│ │ │ ├── event/ # 이벤트 퀴즈 관련 기능
│ │ │ ├── market_statistics/ # 데이터 시세/통계 기능
│ │ │ ├── pay/ # 결제 관련 기능 (토스 페이먼츠)
│ │ │ ├── transaction_feed/ # 거래 내역 관련 기능
│ │ │ └── user/ # 사용자 관리 기능
│ │ └── resources/
│ │ ├── elasticsearch/ # Elasticsearch 설정 및 매핑
│ │ └── scripts/ # Lua 스크립트
│ └── test/
│ └── java/eureca/capstone/project/orchestrator/ # 단위/통합 테스트
서비스 전체 구조 및 데이터 흐름 다이어그램
Kafka + Redis Pub/Sub + SSE 기반 실시간 알림 아키텍처
Redis Lua Script 기반 입찰 동시성 제어 아키텍처
| 개선 항목 | 이전 성능 | 개선 성능 | 개선 효과 |
|---|---|---|---|
| 입찰 처리 TPS | 14.35 req/sec | 91.58 req/sec | 6.4배 증가 |
| 입찰 평균 응답시간 | 32s | 0.09s | 99% 이상 성능 단축 |
| 입찰 95% 응답시간 | 60s | 0.13s | 99% 이상 성능 단축 |
- Redis Lua Script로 입찰 동시성 제어 최적화
- Jmeter로 성능 부하 테스트 진행 (1000명의 가상 사용자)
- SSE 알림 유실 문제: Redis Pub/Sub 을 통한 알림 전파, Nginx 타임아웃 해결을 위한 하트비트 구축, 버퍼 설정 조정
- 입찰 중복 처리: DB 비관적 락 → Lua Script 처리로 해결