콘텐츠로 이동

3 서비스 아키텍처 — 텍스트로 보기

← 다이어그램으로 · 그림의 라벨과 연결을 원본 draw.io 파일에서 그대로 뽑았습니다. 183항목 · 69연결.

FillMap · Application Architecture (SA v2 · 2026.07)

  • 색상 = 화면 (헤더에서 선언 → 나가는 선 → 호출하는 API 행 테두리로 종결):
  • 로그인·온보딩
  • ① 지도 홈
  • ② 격자 썸네일
  • ③ 핫구역
  • ④ 격자 상세
  • ⑤ 신고 모달
  • ⑥ 촬영·업로드
  • ⑦ 개인 도감
  • 설정·프로필
  • 운영자 콘솔
  • 스폰서 포털
  • ③ 서비스 계약
  • 사용자
  • 운영자
  • 스폰서 (광고주)

① 클라이언트

로그인·온보딩

  • 카카오 로그인 (OIDC)
  • Apple·로컬 로그인 (미정)
  • 위치·카메라 권한 요청
  • 세션 유지 (Refresh)

① 지도 홈

  • 내 격자 색칠 (뷰포트 폴링)
  • 미점령 격자 미표시 정책
  • 미션 레이어 (면·선·점·경계)
  • 미션 칩 + 숫자 배지
  • 미션 바텀시트 (3단)
  • 행정동 검색·자동완성
  • 게스트 열람 (지도·핫구역)

② 격자 썸네일

  • 격자 요약 (점령·영상 수)
  • 최근 업로드·누적 조회수
  • 썸네일 그리드 (정렬 고정)
  • 좋아요 · 취소

③ 핫구역

  • 순위 리스트 (조회수 산정)
  • 갱신 시각·카운트다운
  • 항목 탭 → 격자 상세

④ 격자 상세

  • 격자 표시명 (행정동)
  • 행정 지역명·활동 지표
  • 격자 내 영상 목록
  • 영상 재생 (상태 분기)
  • 영상 신고 진입

⑤ 신고 모달

  • 신고 사유 선택
  • 제출 → 접수 안내

⑥ 촬영·업로드

  • 촬영 (격자 내 GPS 검증)
  • 갤러리 선택 (1~30초)
  • 업로드·인코딩 진행 표시
  • AI 하이라이트 구간 조정
  • AI 블러 확인·토글
  • 공개 범위 선택
  • 스탬프 획득 연출
  • 영상 교체·삭제·공유

⑦ 개인 도감

  • 요약 (격자·영상·뱃지·스트릭)
  • 지도 뷰 (기존 API 재사용)
  • 갤러리 뷰·정렬
  • 뱃지 뷰·필터
  • 지역별 탐험률 (동 단위)
  • 스탬프북
  • 공개범위 설정

설정·프로필

  • 프로필 조회
  • 닉네임·색상·이미지 수정
  • 로그아웃
  • 계정 삭제

운영자 콘솔 (Admin · Web)

  • 신고 처리 → 블라인드
  • 사용자 차단·Trust Score
  • 통계 모니터링
  • 미션 수동 등록

스폰서 포털 (광고주 · Web · P2)

  • 캠페인 관리
  • 스폰서 격자 지정
  • 성과 리포트 조회

API 카드 헤더 연초록 = 종류 표시 · 서비스·Repository·저장소 연결 = 무채색 · AI 처리 환경 = 남색 강조 · ③ 각 칸의 작은 글씨 = 대응하는 SysA v2 서비스 (9종 1:1) · 경로는 전부 /api 접두사 (버전 미도입)

② REST API

Auth API

  • POST /api/auth/signup · login
  • POST /api/auth/logout
  • POST /api/auth/oauth/{provider}
  • POST /api/auth/reissue

Grid API

  • GET /api/grids (뷰포트)
  • GET /api/grids/{gridId}

Grid 확장 API

  • GET /api/grids/{id}/videos
  • GET /api/grids/hot
  • POST·DEL /api/videos/{id}/likes

Mission API

  • GET /api/missions/active
  • (bbox 없음 · TTL 1h 캐시)

Video 재생 API

  • GET /api/videos/{videoId}
  • (presigned GET · 상태 분기)

Social·Report API

  • POST /api/reports
  • POST /api/friends/requests (P2)
  • PATCH /api/friends/requests (P2)
  • GET·DELETE /api/friends (P2)
  • POST /api/friends/{id}/block (P2)

Video API

  • POST /api/videos/presigned-url
  • POST /api/videos (점령)
  • PUT /api/videos/{videoId}
  • PATCH /api/videos/{id}/visibility
  • DELETE /api/videos/{videoId}

Collection API

  • GET /api/collections/summary
  • GET /api/collections/grids
  • GET /api/collections/videos?regionCode
  • GET /api/collections/badges

Region API

  • GET /api/regions/search
  • GET /api/regions/stats
  • GET /api/regions/stats/by-point·by-grid
  • GET /api/regions/{code}

User API

  • GET /api/users/me
  • PATCH /api/users/me
  • DELETE /api/users/me

Notification API

  • POST·DELETE /api/notifications/tokens
  • GET /api/notifications/preferences
  • PATCH …/preferences/{category}
  • (미설계 — P2 캠페인·리포트)

④ Repository · 테이블

  • AuthService — SysA · Auth Service
  • UserService — SysA · Auth Service
  • GridQueryService — SysA · Grid Service
  • HotZoneService — SysA · Grid Service
  • MissionService — SysA · Mission Service
  • VideoService + 인코딩 워커 — SysA · Video Service
  • UserGridQueryService — SysA · Collection Service
  • RegionService — SysA · Region Service
  • SocialService — SysA · Social Service
  • ModerationService — SysA · Moderation Service
  • NotificationService — SysA · Notification Service

UserRepository

  • users

GridRepository

  • grids
  • user_grids

VideoRepository

  • videos
  • likes

MissionRepository

  • missions
  • mission_grids
  • user_missions

RegionRepository

  • regions
  • region_stats

CollectionRepository

  • badges
  • user_badges
  • streaks

FriendshipRepository

  • friendships
  • reports

NotificationRepository

  • notifications
  • notification_opt_outs
  • push_tokens

AI 처리 환경 — 상시 Python FastAPI 서버 · EC2

(Lambda·GPU 대안 기각 · 1080p 다운스케일 필수 전제)

  • Kafka video.uploaded 컨슈머
  • 1080p·30fps 다운스케일
  • FFmpeg 인코딩·썸네일
  • PySceneDetect 장면 분할
  • CLIP 하이라이트 스코어링
  • YOLO 얼굴·차번호 블러
  • pHash 중복 검사
  • 산출: 인코딩본·썸네일 → S3 · videos.processing_status = READY · 하이라이트 구간 메타

⑤ 저장소 (Data Tier)

  • PostgreSQL + PostGIS
  • Redis (Hot ZSET·캐시)
  • S3 (원본·인코딩본)

연결

  • Kafka video.uploaded 컨슈머 → 1080p·30fps 다운스케일
  • 1080p·30fps 다운스케일 → FFmpeg 인코딩·썸네일
  • FFmpeg 인코딩·썸네일 → PySceneDetect 장면 분할
  • PySceneDetect 장면 분할 → CLIP 하이라이트 스코어링
  • CLIP 하이라이트 스코어링 → YOLO 얼굴·차번호 블러
  • YOLO 얼굴·차번호 블러 → pHash 중복 검사
  • 사용자 → ① 클라이언트
  • 운영자 → 운영자 콘솔 (Admin · Web)
  • 스폰서 (광고주) → 스폰서 포털 (광고주 · Web · P2)
  • 로그인·온보딩 → Auth API
  • ① 지도 홈 → Grid API
  • ① 지도 홈 → Grid 확장 API
  • ① 지도 홈 → Mission API
  • ① 지도 홈 → Region API
  • ② 격자 썸네일 → Grid API
  • ② 격자 썸네일 → Grid 확장 API
  • ② 격자 썸네일 → Video 재생 API
  • ③ 핫구역 → Grid 확장 API
  • ④ 격자 상세 → Grid API
  • ④ 격자 상세 → Grid 확장 API
  • ④ 격자 상세 → Video 재생 API
  • ④ 격자 상세 → Region API
  • ④ 격자 상세 → Social·Report API
  • ⑤ 신고 모달 → Social·Report API
  • ⑥ 촬영·업로드 → Video API
  • ⑦ 개인 도감 → Collection API
  • ⑦ 개인 도감 → Region API
  • ⑦ 개인 도감 → User API
  • 설정·프로필 → User API
  • 설정·프로필 → Auth API
  • 운영자 콘솔 (Admin · Web) → Social·Report API
  • 운영자 콘솔 (Admin · Web) → Mission API
  • 스폰서 포털 (광고주 · Web · P2) → Sponsor API — 미설계
  • Auth API → AuthService
  • User API → UserService
  • Grid API → GridQueryService
  • Grid 확장 API → HotZoneService
  • Grid 확장 API → VideoService + 인코딩 워커
  • Mission API → MissionService
  • Video 재생 API → VideoService + 인코딩 워커
  • Video API → VideoService + 인코딩 워커
  • Social·Report API → SocialService
  • Collection API → UserGridQueryService
  • Region API → RegionService
  • AuthService → UserRepository
  • UserService → UserRepository
  • GridQueryService → GridRepository
  • MissionService → MissionRepository
  • VideoService + 인코딩 워커 → VideoRepository
  • UserGridQueryService → CollectionRepository
  • UserGridQueryService → GridRepository
  • RegionService → RegionRepository
  • SocialService → FriendshipRepository
  • Social·Report API → ModerationService
  • ModerationService → FriendshipRepository
  • Notification API → NotificationService
  • NotificationService → NotificationRepository
  • UserRepository → PostgreSQL + PostGIS
  • GridRepository → PostgreSQL + PostGIS
  • VideoRepository → PostgreSQL + PostGIS
  • MissionRepository → PostgreSQL + PostGIS
  • RegionRepository → PostgreSQL + PostGIS
  • CollectionRepository → PostgreSQL + PostGIS
  • FriendshipRepository → PostgreSQL + PostGIS
  • HotZoneService → Redis (Hot ZSET·캐시)
  • VideoService + 인코딩 워커 → S3 (원본·인코딩본) — presigned·재생
  • VideoService + 인코딩 워커 → AI 처리 환경 — 상시 Python FastAPI 서버 · EC2 — Kafka video.uploaded
  • AI 처리 환경 — 상시 Python FastAPI 서버 · EC2 → S3 (원본·인코딩본) — 인코딩본·썸네일
  • AI 처리 환경 — 상시 Python FastAPI 서버 · EC2 → PostgreSQL + PostGIS — READY 갱신