// projects/hola-climbing
Hola Climbing
클라이밍 영상을 업로드하면 AI가 동작 기술과 동적/정적 성향을 분석하고, SNS 피드·암장·기록·채팅 경험으로 연결하는 서비스
- role
- Spring Boot 백엔드 + Python AI worker pipeline 단독 담당
- impact
- GCS 직접 업로드, Redis Streams/SSE, snapshot cursor로 업로드·분석·추천 흐름 분리
- proof
- cursor aggregate p95 9.794ms, Spring/AI E2E smoke, raw/presentation evidence
Project.java
GCS v4 Signed URL기반 영상 바이너리 업로드 분리Redis Streams + Pub/Sub + SSE기반 AI 분석 요청·진행률·결과 저장 분리- Spring Boot 서버와 Python AI 워커 간 callback 계약 정리, E2E smoke 검증
- snapshot cursor cache + public thumbnail URL 전환, cursor page p95 약 9.8ms 증거 확보
Role.md
- 회원·인증·OAuth·JWT·약관·프로필 API
- 영상 메타데이터, GCS Signed URL, 댓글, 좋아요 API
- 암장 검색, 난이도, 리뷰, 즐겨찾기, 운영상태 API
- Redis Streams 기반 AI 분석 dispatch와 SSE 진행률
- AI worker callback 결과 저장, 분석 피드백, 재시도
- WebSocket STOMP 암장별 채팅과 GPS 암장 인증
- pgvector + 팔로잉 boost 기반 추천 피드와 snapshot cursor
- Flyway, Testcontainers, Swagger/ErrorCode 문서화
- Spring REST/STOMP API 계약 다수, AI worker health/readiness 계약 코드 기준 정리
- PostgreSQL·Redis·GCS·AI worker 연결 분석 E2E 흐름 검증
- 추천 피드 성능 evidence: raw 결과 + presentation 이미지 분리, 포트폴리오용 근거 확보
TechDecision.md
Backend
AI
Data
Infra
Test
Docs
이 범주의 대표 기술은 없습니다.
GCS Signed URL 직접 업로드
Redis Streams 기반 AI dispatch
MyBatis over JPA
Problems.md
추천 피드 tail latency와 signed URL 병목
Redis snapshot으로 ranking SQL 재계산 회피.AI worker callback 계약 정합
AI.md
MediaPipe Pose keypoint sequencetechniques, isDynamic, dynamicProbability, segment start/end/confidence- GCS object 다운로드
- OpenCV frame sampling
- MediaPipe Pose 33 keypoint 추출
- segment 분리
- optical flow 기반 영상 단위 dynamic/static feature 추출
- 촬영 각도, 루트, 동작 속도 편차가 큰 클라이밍 영상
- 정적 자세에서도 발생하는 keypoint jitter, coordination false positive 가능성
- 동작 라벨: 하이스텝, 플래깅, 훅, 락오프, 다이노, 코디네이션 중심
- coordination one-hit false positive 감소: active frame ratio + same-frame 동시 이동 조건
- flagging/hook 오탐 조정: rule_v3
- flow RF 역할 제한: dynamic/static 영상 단위 prior, 약한 dynamic segment 보정만
Evidence/

Backend/AI Architecture
GCS direct upload, Cloud Run Spring backend, Redis Streams, AI worker, PostgreSQL/pgvector, 외부 OAuth/SMTP/FCM 흐름
Minjoun 담당: Spring backend, Redis dispatch, AI worker pipeline

ERD
회원, 영상, 암장, 분석, 추천, 기록, 채팅 도메인 관계

Recommendation Performance Summary
추천 피드 성능 테스트 요약: 100k videos / 10k users seed 기준 p95, SQL 실행 시간, 오류율
p95 123ms, SQL 81ms, error_rate 0% 측정 근거

Cursor Cache Comparison
Redis snapshot cursor cache 적용 후 2·3페이지 cursor 호출 p95 분리 측정
2페이지 9ms, 3페이지 10ms, cursor 전체 10ms

App Screen Overview
마이페이지, 주변 암장 탐색, 월간 기록 화면 최종 UI
영상 분석 결과를 기록·암장 탐색·월간 회고 흐름으로 연결

AI Pose Analysis
MediaPipe 33 keypoints 기반 클라이밍 자세 추출 화면

Technique Classification
프레임별 기술명과 dynamic/static 성향 분류 결과

Monthly Report
월간 클라이밍 리포트: 성향 비율, 기술 빈도, 코칭 팁

Gym Detail
암장 상세: 관련 영상, 운영 시간, 실시간 채팅 진입

Gym Exploration
내 주변 암장 탐색과 맞춤 추천 화면
추천 피드 HTTP p95
251.233ms -> 122.642ms
local-baseline 대비 current 측정. 같은 조건 반복 측정 결과로만 최종 문구 확정.
추천 피드 SQL execution
181.086ms -> 80.966ms
temp blocks written 9,138 -> 0.
cursor aggregate p95
9.794ms
Redis snapshot cursor cache 적용 후 2~3페이지 호출 기준.
AI worker model version
rule_v3+flow_rf_v2
flow gate on일 때 top-level dynamicProbability와 isDynamic을 callback.
Retrospective.md
learned
- 런타임이 다른 백엔드/AI worker: 메시지 큐와 결과 callback 분리 필요
- 대용량 바이너리: 애플리케이션 서버 우회 설계로 운영 부담 감소
- 포트폴리오용 성능 주장: raw evidence + 사람이 읽는 presentation evidence 동시 보관
regrets
- Kafka vs Redis Streams 사전 실측 비교 부족
- 데이터 누적 이후 확정 가능한 pgvector 인덱스 전략
- 단일 노드 가정 밖의 멀티 노드 STOMP/SSE fan-out 과제
improvements
- 동일 조건 3회 이상 반복 측정, 최종 성능 수치 고정
- post-MVP AI 모델 재평가: fine-tuning 또는 재촬영 UX
- 발표용 아키텍처 도식의 담당 영역 명확화
collaboration
프론트 담당자와 API 명세, OAuth callback, 영상 업로드 완료 후 메타데이터 등록, 분석 상태 vocabulary 정합