3 서비스 아키텍처SERVICE ARCHITECTURE

100% 원본 .drawio ↓
① 클라이언트
① 클라이언트
② REST API
② REST API
③ 서비스 계약
③ 서비스 계약
④ Repository · 테이블
④ Repository · 테이블
⑤ 저장소 (Data Tier)
⑤ 저장소 (Data Tier)
FillMap · Application Architecture (SA v2 · 2026.07)
FillMap · Application Architecture (SA v2 · 2026.07)
색상 = 화면 (헤더에서 선언 → 나가는 선 → 호출하는 API 행 테두리로 종결):
색상 = 화면 (헤더에서 선언 → 나가는 선 → 호출하는 API 행 테두리로 종결):
로그인·온보딩
로그인·온보딩
① 지도 홈
① 지도 홈
② 격자 썸네일
② 격자 썸네일
③ 핫구역
③ 핫구역
④ 격자 상세
④ 격자 상세
⑤ 신고 모달
⑤ 신고 모달
⑥ 촬영·업로드
⑥ 촬영·업로드
⑦ 개인 도감
⑦ 개인 도감
설정·프로필
설정·프로필
운영자 콘솔
운영자 콘솔
스폰서 포털
스폰서 포털
API 카드 헤더 연초록 = 종류 표시 · 서비스·Repository·저장소 연결 = 무채색 · AI 처리 환경 = 남색 강조 · ③ 각 칸의 작은 글씨 = 대응하는 SysA v2 서비스 (9종 1:1) · 경로는 전부 /api 접두사 (버전 미도입)
API 카드 헤더 연초록 = 종류 표시 · 서비스·Repository·저장소 연결 = 무채색 · AI 처리 환경 = 남색 강조 · ③ 각 칸의 작은 글씨 = 대응하는 SysA v2 서비스 (9종 1:1) · 경로는 전부 /api 접두사 (버전 미도입)
사용자
사용자
운영자
운영자
스폰서 (광고주)
스폰서 (광고주)
로그인·온보딩
로그인·온보딩
카카오 로그인 (OIDC)
카카오 로그인 (OIDC)
Apple·로컬 로그인 (미정)
Apple·로컬 로그인 (미정)
위치·카메라 권한 요청
위치·카메라 권한 요청
세션 유지 (Refresh)
세션 유지 (Refresh)
① 지도 홈
① 지도 홈
내 격자 색칠 (뷰포트 폴링)
내 격자 색칠 (뷰포트 폴링)
미점령 격자 미표시 정책
미점령 격자 미표시 정책
미션 레이어 (면·선·점·경계)
미션 레이어 (면·선·점·경계)
미션 칩 + 숫자 배지
미션 칩 + 숫자 배지
미션 바텀시트 (3단)
미션 바텀시트 (3단)
행정동 검색·자동완성
행정동 검색·자동완성
게스트 열람 (지도·핫구역)
게스트 열람 (지도·핫구역)
② 격자 썸네일
② 격자 썸네일
격자 요약 (점령·영상 수)
격자 요약 (점령·영상 수)
최근 업로드·누적 조회수
최근 업로드·누적 조회수
썸네일 그리드 (정렬 고정)
썸네일 그리드 (정렬 고정)
좋아요 · 취소
좋아요 · 취소
③ 핫구역
③ 핫구역
순위 리스트 (조회수 산정)
순위 리스트 (조회수 산정)
갱신 시각·카운트다운
갱신 시각·카운트다운
항목 탭 → 격자 상세
항목 탭 → 격자 상세
④ 격자 상세
④ 격자 상세
격자 표시명 (행정동)
격자 표시명 (행정동)
행정 지역명·활동 지표
행정 지역명·활동 지표
격자 내 영상 목록
격자 내 영상 목록
영상 재생 (상태 분기)
영상 재생 (상태 분기)
영상 신고 진입
영상 신고 진입
⑤ 신고 모달
⑤ 신고 모달
신고 사유 선택
신고 사유 선택
제출 → 접수 안내
제출 → 접수 안내
⑥ 촬영·업로드
⑥ 촬영·업로드
촬영 (격자 내 GPS 검증)
촬영 (격자 내 GPS 검증)
갤러리 선택 (1~30초)
갤러리 선택 (1~30초)
업로드·인코딩 진행 표시
업로드·인코딩 진행 표시
AI 하이라이트 구간 조정
AI 하이라이트 구간 조정
AI 블러 확인·토글
AI 블러 확인·토글
공개 범위 선택
공개 범위 선택
스탬프 획득 연출
스탬프 획득 연출
영상 교체·삭제·공유
영상 교체·삭제·공유
⑦ 개인 도감
⑦ 개인 도감
요약 (격자·영상·뱃지·스트릭)
요약 (격자·영상·뱃지·스트릭)
지도 뷰 (기존 API 재사용)
지도 뷰 (기존 API 재사용)
갤러리 뷰·정렬
갤러리 뷰·정렬
뱃지 뷰·필터
뱃지 뷰·필터
지역별 탐험률 (동 단위)
지역별 탐험률 (동 단위)
스탬프북
스탬프북
공개범위 설정
공개범위 설정
설정·프로필
설정·프로필
프로필 조회
프로필 조회
닉네임·색상·이미지 수정
닉네임·색상·이미지 수정
로그아웃
로그아웃
계정 삭제
계정 삭제
운영자 콘솔 (Admin · Web)
운영자 콘솔 (Admin · Web)
신고 처리 → 블라인드
신고 처리 → 블라인드
사용자 차단·Trust Score
사용자 차단·Trust Score
통계 모니터링
통계 모니터링
미션 수동 등록
미션 수동 등록
스폰서 포털 (광고주 · Web · P2)
스폰서 포털 (광고주 · Web · P2)
캠페인 관리
캠페인 관리
스폰서 격자 지정
스폰서 격자 지정
성과 리포트 조회
성과 리포트 조회
Auth API
Auth API
POST /api/auth/signup · login
POST /api/auth/signup · login
POST /api/auth/logout
POST /api/auth/logout
POST /api/auth/oauth/{provider}
POST /api/auth/oauth/{provider}
POST /api/auth/reissue
POST /api/auth/reissue
Grid API
Grid API
GET /api/grids (뷰포트)
GET /api/grids (뷰포트)
GET /api/grids/{gridId}
GET /api/grids/{gridId}
Grid 확장 API
Grid 확장 API
GET /api/grids/{id}/videos
GET /api/grids/{id}/videos
GET /api/grids/hot
GET /api/grids/hot
POST·DEL /api/videos/{id}/likes
POST·DEL /api/videos/{id}/likes
Mission API
Mission API
GET /api/missions/active
GET /api/missions/active
(bbox 없음 · TTL 1h 캐시)
(bbox 없음 · TTL 1h 캐시)
Video 재생 API
Video 재생 API
GET /api/videos/{videoId}
GET /api/videos/{videoId}
(presigned GET · 상태 분기)
(presigned GET · 상태 분기)
Social·Report API
Social·Report API
POST /api/reports
POST /api/reports
POST /api/friends/requests (P2)
POST /api/friends/requests (P2)
PATCH /api/friends/requests (P2)
PATCH /api/friends/requests (P2)
GET·DELETE /api/friends (P2)
GET·DELETE /api/friends (P2)
POST /api/friends/{id}/block (P2)
POST /api/friends/{id}/block (P2)
Video API
Video API
POST /api/videos/presigned-url
POST /api/videos/presigned-url
POST /api/videos (점령)
POST /api/videos (점령)
PUT /api/videos/{videoId}
PUT /api/videos/{videoId}
PATCH /api/videos/{id}/visibility
PATCH /api/videos/{id}/visibility
DELETE /api/videos/{videoId}
DELETE /api/videos/{videoId}
Collection API
Collection API
GET /api/collections/summary
GET /api/collections/summary
GET /api/collections/grids
GET /api/collections/grids
GET /api/collections/videos?regionCode
GET /api/collections/videos?regionCode
GET /api/collections/badges
GET /api/collections/badges
Region API
Region API
GET /api/regions/search
GET /api/regions/search
GET /api/regions/stats
GET /api/regions/stats
GET /api/regions/stats/by-point·by-grid
GET /api/regions/stats/by-point·by-grid
GET /api/regions/{code}
GET /api/regions/{code}
User API
User API
GET /api/users/me
GET /api/users/me
PATCH /api/users/me
PATCH /api/users/me
DELETE /api/users/me
DELETE /api/users/me
Notification API
Notification API
POST·DELETE /api/notifications/tokens
POST·DELETE /api/notifications/tokens
GET /api/notifications/preferences
GET /api/notifications/preferences
PATCH …/preferences/{category}
PATCH …/preferences/{category}
NotificationRepository
NotificationRepository
notifications
notifications
notification_opt_outs
notification_opt_outs
push_tokens
push_tokens
Sponsor API
Sponsor API
(미설계 — P2 캠페인·리포트)
(미설계 — P2 캠페인·리포트)
AuthService
SysA · Auth Service
AuthServiceSysA · Auth Service
UserService
SysA · Auth Service
UserServiceSysA · Auth Service
GridQueryService
SysA · Grid Service
GridQueryServiceSysA · Grid Service
HotZoneService
SysA · Grid Service
HotZoneServiceSysA · Grid Service
MissionService
SysA · Mission Service
MissionServiceSysA · Mission Service
VideoService + 인코딩 워커
SysA · Video Service
VideoService + 인코딩 워커SysA · Video Service
UserGridQueryService
SysA · Collection Service
UserGridQueryServiceSysA · Collection Service
RegionService
SysA · Region Service
RegionServiceSysA · Region Service
SocialService
SysA · Social Service
SocialServiceSysA · Social Service
ModerationService
SysA · Moderation Service
ModerationServiceSysA · Moderation Service
NotificationService
SysA · Notification Service
NotificationServiceSysA · Notification Service
UserRepository
UserRepository
users
users
GridRepository
GridRepository
grids
grids
user_grids
user_grids
VideoRepository
VideoRepository
videos
videos
likes
likes
MissionRepository
MissionRepository
missions
missions
mission_grids
mission_grids
user_missions
user_missions
RegionRepository
RegionRepository
regions
regions
region_stats
region_stats
CollectionRepository
CollectionRepository
badges
badges
user_badges
user_badges
streaks
streaks
FriendshipRepository
FriendshipRepository
friendships
friendships
reports
reports
PostgreSQL + PostGIS
PostgreSQL + PostGIS
Redis (Hot ZSET·캐시)
Redis (Hot ZSET·캐시)
S3 (원본·인코딩본)
S3 (원본·인코딩본)
AI 처리 환경 — 상시 Python FastAPI 서버 · EC2
(Lambda·GPU 대안 기각 · 1080p 다운스케일 필수 전제)
AI 처리 환경 — 상시 Python FastAPI 서버 · EC2(Lambda·GPU 대안 기각 · 1080p 다운스케일 필수 전제)
Kafka video.uploaded 컨슈머
Kafka video.uploaded 컨슈머
1080p·30fps 다운스케일
1080p·30fps 다운스케일
FFmpeg 인코딩·썸네일
FFmpeg 인코딩·썸네일
PySceneDetect 장면 분할
PySceneDetect 장면 분할
CLIP 하이라이트 스코어링
CLIP 하이라이트 스코어링
YOLO 얼굴·차번호 블러
YOLO 얼굴·차번호 블러
pHash 중복 검사
pHash 중복 검사
산출: 인코딩본·썸네일 → S3 · videos.processing_status = READY · 하이라이트 구간 메타
산출: 인코딩본·썸네일 → S3 · videos.processing_status = READY · 하이라이트 구간 메타
미설계
미설계
presigned·재생
presigned·재생
Kafka video.uploaded
Kafka video.uploaded
인코딩본·썸네일
인코딩본·썸네일
READY 갱신
READY 갱신
Text is not SVG - cannot display

박스에 마우스를 올리면 연결된 것만 남고 나머지가 흐려집니다. 클릭하면 고정되고, 빈 곳을 누르거나 Esc 로 풉니다.