저장한 장소를 한 번만 관리하고, 필요한 모음에 자유롭게 담습니다.
renderRdardMarker()는 동일).여러 모음에 동시에 담을 수 있습니다.
placesplace_extensionsplaces는 고치지 않고, 확장 타입과 전문 테이블만 추가한다.spots는 principal이 소유한 독립 저장 기록이다. 여러 spot_collections에 동시에 넣을 수 있고, maps는 개인 분류와 분리한다.| 테이블 | 최소 컬럼 | 역할 |
|---|---|---|
users | id · provider · email | 사용자 신원 |
places | id · canonical_name · location · status | 공유 POI · PostGIS Point |
maps | id · owner_id · title · visibility | 지도 표현·운영 검수 |
spots | id · owner_principal_id · place_id/waypoint_id · note | 개인의 독립 저장 위치 |
spot_collections | id · owner_principal_id · name · visibility | 개인 스팟 모음 |
spot_collection_items | collection_id · spot_id · sort_order | Spot 다중 모음 배치 |
waypoints | id · created_by_principal_id · location · label | Place 없이 저장한 좌표 |
place_extensions | id · place_id · type_code · schema_version · status | 전문 확장 연결부 |
extension_types / schemas | type_code · version · status | 허용 타입·버전 관리 |
category_map_display_profiles | category_code · min/standard/detail_zoom · label_min_zoom · priority | 카테고리 표시 기본값 |
place_map_display_overrides | place_id · nullable zoom/priority | 개별 Place 표시 예외 |
UNIQUE(owner_principal_id, place_id) · PK(collection_id, spot_id) · UNIQUE(place_id, type_code). Spot 모음에는 해당 owner의 Spot만 들어간다.| 단계 | 하는 일 |
|---|---|
DRAFT | place_extensions와 타입별 전문 행을 하나의 트랜잭션으로 생성 |
| 검증 | 필수 값·타입·스키마 버전·FK를 확인 |
ACTIVE | 검증을 통과한 확장만 API에서 사용 |
createTransitExtension()과 같은 타입별 서비스를 사용하고, 무제한 범용 insert는 열지 않는다.DB에는 SVG 파일 경로나 버전을 저장하지 않는다. marker_kind, variant, line_codes 같은 의미만 전달한다.
00-meta/ 문서규칙 · 용어집canon · 미결질문10-product/ 컨셉 · 단계 · 코어루프 · PRD인덱스20-domain/ 장소 확장형 데이터 모델canon40-engineering/ 엔진 · 지도 · Rive · 서버스택canon · 명명canon50-ops/ 도메인canon90-history/ 데이 히스토리renderRdardMarker()가 이 Lab과 #spotlab 실지도를 동일하게 구동합니다. 배경을 바꿔가며 상태 사다리를 비교하세요.renderRdardMarker()로 카테고리 5종과 지하철·버스 예외를 idle→filtered→event→selected→saved→collected 순으로 검증합니다. 기본 행은 standard(16px), 마지막 행은 detailed(20px) 기준입니다. (2026-07-13 #spotlab에서 이관 — 상호작용 검증은 #spotlab에서 계속합니다.)CATEGORY_ICON_FALLBACK ↔ app-client ASSET_KEY_ICON_NAME(PlaceGlyphMarker.tsx) 1:1 대응을 수동 대조한 값입니다 — 두 저장소가 분리돼 있어 API로 노출되지 않습니다.svg/manifest.json.riv 파일과 M1/M1c 실기기 검증 결과만 보존하며, 신규 저작 경로는 SVG Motion Lab이 정본입니다.api.roadaround.com → :30100/health/auth/login · /register · /refresh/maps · POST/maps/spot-collections · POST/spot-collections/spot-collections/:id/spots/places?bbox= 뷰포트 검색/spots 장소 저장app.rdard.roadaround.Google 원본 아이콘을 클릭하거나 현재 화면을 검색하고, RDARD SVG 마커로 겹쳐 확인합니다.
viewport는 실제 영역 polygon이 아니므로 polygon은 별도 GIS GeoJSON만 사용합니다.data/seoul-core fixture를 ORM/API와 같은 모양으로 읽는다. DB는 의미만 전달하고 실제 파일·버전은 SVG manifest가 선택한다.docs/40-engineering/02-map-provider-analysis.md
M2 앱 스캐폴드 + M4 SVG Motion Lab
M1·M1c의 Rive 기술 검증 결과는 보존하고 신규 모션 저작은 SVG + code motion으로 전환. M2(레이어 구조·expo-router·글래스 탭바)와 M4(자산·상태 모션)를 빌드업하며 M5(API 서비스 엔진)는 병렬 착수 가능.