본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

지도는 아무것도 저장 안 한다

~11 min · projection, truth-layer, geocoding, discipline

Level 0표식 없는 길
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"이 지도엔 핀을 못 떨궈. breadcrumb만 남길 수 있고, 지도는 breadcrumb이 이미 아는 걸 그려."

저장 버튼 없는 지도

지리를 정직하게 만드는 invariant가 여기 있어. 지도는 자기 데이터를 하나도 저장 안 해. 'marker 추가' 도구도, 손으로 놓는 핀도, 다른 어디에도 안 사는 지도 전용 annotation 레이어도 없어. Journey Map의 flag는 전부 여행 truth가 심어. breadcrumb에 붙은 place hint를 geocoder가 좌표로 resolve한 거지. flag를 띄우고 싶으면 place 붙은 breadcrumb을 남겨. flag를 옮기고 싶으면 breadcrumb을 고치고. 지도는 crumb의 순수 projection이야. 어긋날 자기 기억이 없어.

crumb이 flag가 되는 법

출시된 v0 truth 레이어에선, crumb의 위치를 정하는 순서가 엄격해. 아빠가 정했으면 intended location, 그다음 captured GPS 좌표, 그다음, 정말 최후에만, 텍스트 place hint를 geocoding. 좌표는 지도로 바로 가고, reverse-geocode된 이름은 점에 label을 붙일 순 있어도 좌표를 절대 대체 안 해. 못 찾은 건 조용히 버리지 않아. 'Unplaced' 스트립에 드러내서, resolve 못 한 장소가 없는 척하는 대신 보여줘. 위치를 지어내길 거부하는 그게 지도가 아무것도 저장 안 하는 거랑 같은 정직함이야. projection은 truth가 받쳐주는 딱 그만큼만 보여주고, 못 하는 건 인정해.

왜 이 규율이 남는 장사야

그릴 수 있는 지도는 곧 두 번째 DB야. 지도에만 있는 핀을 손으로 놓는 순간, 다른 어떤 view도 모르는 fact를 만든 거고, 이제 지도랑 itinerary가 안 맞을 수 있어. 지도 전용 state를 금지해서 Waystone은 지도가 절대 거짓말 못 하게 해. 거짓말할 자기 게 없으니까. 이건 편의 하나(지도에 낙서 못 함)를 팔아서 보장 하나(지도는 언제나 여행 state의 충실한 그림)를 사는 거야. 기억 엔진한텐 그 거래는 고민할 것도 없어.

틀린 핀은 지도에서 절대 안 고쳐. 원천에서 고쳐. crumb의 place hint를 편집하면 projection이 알아서 다시 렌더돼. 그게 진짜 projection의 표시야. view 말고 model을 고쳐.

Code

crumb -> flag resolve 순서 (v0 truth 레이어)·text
breadcrumb 마다:
    location = intended_location            # 아빠의 명시적 override
           or captured_location            # 폰의 GPS 샘플
           or geocode(place_hint)           # 최후: 텍스트 -> 좌표

    location 있으면:  flag 심음 (좌표가 canonical)
    없으면:           'Unplaced' 스트립에 나열  # 절대 안 버림

# 지도는 이 중 아무것도 안 가져. crumb 을 읽고 렌더해.
# 틀린 flag 는 지도가 아니라 crumb 을 편집해서 고쳐.
# reverse-geocode 이름은 점을 LABEL 할 뿐; 절대 안 옮겨.

External links

Exercise

손으로 핀을 떨군 지도 도구를 찾아봐. Google Maps 저장 장소, 커스텀 지도 레이어. 물어봐. 그 핀이 가리키는 장소가 이름이 바뀌거나 문 닫으면, 핀이 알까? 손으로 놓은 핀은 지도 전용 state야. 현실에서 drift하는 두 번째 DB지. 네 도구 어디에 한 view에만 사는 'fact'를 만들었어?
Hint
지도 전용 state 테스트. 지도에 다른 어디에도 없는 정보가 있어? 있으면 그 view가 DB가 된 거고, 결국 다른 것들이랑 안 맞아져. 순수 projection은 drift할 자기 게 없어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.