랜딩페이지의 유입 채널, 링크 클릭 수, 이메일 입력 전환율을 수집하기 위한 백엔드 API 시스템
- Spring Boot 4.0.2
- Kotlin 2.3.0
- JPA + PostgreSQL
- Thymeleaf (관리자 페이지)
- JUnit 5 (테스트)
| 필드 | 타입 | 설명 |
|---|---|---|
| id | Long | PK |
| name | String | 프로젝트명 |
| description | String? | 설명 |
| createdAt | LocalDateTime | 생성일시 |
| 필드 | 타입 | 설명 |
|---|---|---|
| id | Long | PK |
| project | Project | FK - 프로젝트 |
| channel | String | 유입 채널 (thread, instagram 등) |
| postNumber | String? | 게시물 번호 |
| ipAddress | String? | 방문자 IP |
| userAgent | String? | 브라우저 정보 |
| createdAt | LocalDateTime | 방문 일시 |
| 필드 | 타입 | 설명 |
|---|---|---|
| id | Long | PK |
| project | Project | FK - 프로젝트 |
| channel | String? | 유입 채널 |
| postNumber | String? | 게시물 번호 |
| String | 이메일 주소 | |
| createdAt | LocalDateTime | 등록 일시 |
페이지 방문 기록
Query Parameters:
projectId(required): 프로젝트 IDchannel(required): 유입 채널postNumber(optional): 게시물 번호
Response: 204 No Content
사용 예시:
GET /api/track?projectId=1&channel=thread&postNumber=42
이메일 수집
Request Body:
{
"projectId": 1,
"channel": "thread",
"postNumber": "42",
"email": "user@example.com"
}Response: 201 Created
프로젝트 목록 조회
프로젝트 생성
프로젝트 통계 조회
Response:
{
"totalPageViews": 1500,
"totalEmails": 45,
"conversionRate": 3.0,
"channelStats": [
{"channel": "thread", "pageViews": 800, "emails": 30},
{"channel": "instagram", "pageViews": 700, "emails": 15}
]
}이메일 목록 조회 (CSV 내보내기 지원)
kr.io.team.uxlog
├── domain/
│ ├── Project.kt
│ ├── PageView.kt
│ └── EmailSubscription.kt
├── repository/
│ ├── ProjectRepository.kt
│ ├── PageViewRepository.kt
│ └── EmailSubscriptionRepository.kt
├── service/
│ ├── TrackingService.kt
│ ├── EmailService.kt
│ └── StatisticsService.kt
├── controller/
│ ├── TrackingController.kt
│ ├── EmailController.kt
│ └── AdminController.kt
├── dto/
│ ├── EmailRequest.kt
│ ├── ProjectRequest.kt
│ └── StatisticsResponse.kt
└── config/
└── WebConfig.kt (CORS 설정)
| 경로 | 설명 |
|---|---|
| /admin | 대시보드 (전체 요약) |
| /admin/projects | 프로젝트 목록 |
| /admin/projects/{id} | 프로젝트 상세 통계 |
| /admin/projects/{id}/emails | 이메일 목록 |
-
대시보드
- 전체 프로젝트 수
- 총 방문 수 / 총 이메일 수
- 최근 7일 추이
-
프로젝트 상세
- 채널별 방문 수 표
- 이메일 전환율
- 일별 방문 추이 차트
-
이메일 관리
- 이메일 목록 테이블
- CSV 내보내기 버튼
- Entity 클래스 생성
- Repository 인터페이스 생성
- Repository 테스트 작성 및 통과
- TrackingService 테스트 작성
- TrackingService 구현
- EmailService 테스트 작성
- EmailService 구현
- StatisticsService 테스트 작성
- StatisticsService 구현
- TrackingController 테스트 작성
- TrackingController 구현
- EmailController 테스트 작성
- EmailController 구현
- AdminController 구현
- Thymeleaf 레이아웃 구성
- 대시보드 페이지
- 프로젝트 상세 페이지
- 이메일 목록 페이지
- CORS 설정
- application.properties 구성
- 통합 테스트
- 모든 외부 도메인에서
/api/track,/api/email호출 허용
- 현재는 모든 방문을 기록 (추후 IP + 시간 기반 중복 제거 가능)
page_view: (project_id, channel, created_at)email_subscription: (project_id, created_at)
- 관리자 페이지는 추후 인증 추가 가능 (현재는 미구현)