이 가게의 이야기
2019년 겨울, 서울의 로스터리에서 일하다 고향 양림동으로 돌아왔습니다. 가게 이름은 아버지가 부르던 제 별명에서 왔어요. 단골들께는 늘 그 주에 볶은 원두만 내립니다 — 커피는 신선식품이라고 배웠거든요.
주인이 8월 20일에 적었어요
Fable · 자랑의 방 + 동네 정문 · 2026-08-07
오너가 내일 양림동 다섯 가게를 심방한다. 이 설계는 첫 진짜 사장님이 문패를 건 다음 날 아침에 보는 화면이다. 원칙은 쇼호스트 판정 그대로 — 믿음의 최소 단위는 판매보다 먼저 있던, 날짜 붙은 기록 하나. 자랑의 방도 그 기록으로 짓는다.
감독의 감 — "내 가게가 화면에 있다"가 아니라 "내가 한 말이 화면에 있다" — 을 검증한다. 결론부터: 절반은 맞고, 절반은 더 가야 한다.
왜 "내 가게가 화면에 있다"로는 부족한가.
네이버 플레이스에도 내 가게는 있다. 있음은 이제 아무도 감동시키지 않는다. 문패가 걸린 날의 감정은 "등록됐다"가 아니라 "누가 나를 세워줬다"다 — 심방자가 왔고, 사진을 찍었고, 문자로 문 열쇠를 보내줬다. 그 사건의 흔적이 화면에 남아 있어야 화면이 그 감정을 다시 데워준다.
왜 "내가 한 말"만으로도 부족한가.
내 말은 카톡 프로필에도, 인스타에도 쓸 수 있다. 거기 없고 여기만 있는 것은 제3자의 시제 있는 기록이다. "우벨이 아는 것"의 날짜들, 상인방의 한 줄, 그리고 시간이 지나면 손님의 발걸음 — 전부 사장님이 스스로 쓸 수 없는 문장들이다. 자랑의 방의 본체는 그래서 게시판이 아니라 공증의 벽이다. 내 말(한마디·내력)이 걸리고, 그 곁에 내가 못 쓰는 기록이 쌓인다.
✕ 전단 — 자기 말만 있는 화면
도로시
아직 후기가 없어요 · 아직 소식이 없어요
○ 증서 — 내 말 곁에 남의 기록
도로시
우벨이 아는 것
왼쪽이 보내기 쑥스러운 이유는 두 가지다. 화면의 모든 문장을 내가 썼고("제일 아늑한" — 검증 불가한 자기 주장), 화면이 결핍을 자백한다("아직 후기가 없어요").
오른쪽엔 자기 주장이 한 줄도 없다. 오늘의 사건(스콘 두 판), 세워준 손(상인방), 날짜의 벽(우벨이 아는 것). 없는 것에 대해서는 침묵한다 — 빈 섹션은 그리지 않는다는 기존 문법 그대로.
그래서 — 카톡에 링크를 보내고 싶어지려면 화면에 무엇이 있어야 하나.
넷이다. ① 내 문장 하나 — 따옴표와 날짜가 붙은 오늘 한마디(전시가 아니라 게시). ② 내가 안 쓴 기록 — 우벨이 아는 것 + 상인방. 이게 증서의 인지(印紙)다. ③ 결핍의 침묵 — "아직 없어요"류 문장 0개. 손님 눈에 빈 선반이 보이면 증서가 다시 전단이 된다. ④ 보낼 손잡이 — 가게 명함 보내기(ShareCard, 이미 있음). 넷 중 셋은 오늘 DB로 선다.
방의 뼈대는 지금 단면 그대로 두고(찾아가는 줄이 물건보다 위 — 발걸음 원칙 불변), 두 개의 방을 증축한다: 차림표(메뉴)와 가게의 내력(이야기). 위계는 감독 전제 ②를 따른다 — 본체는 이야기, 메뉴는 정보다.
메뉴 — 값 매긴 물건(market_listings)과 어떻게 다른가. 같은 표인가 새 표인가.
같은 표를 쓴다. 카페의 메뉴판과 농장의 좌판은 장르가 아니라 단위가 다를 뿐이다 —
아메리카노 4,500원/잔과 수박 12,000원/통은 같은 문법(title · unit_price · unit)으로 선다.
수확일은 비워두면 그만이고(카페 메뉴에 수확 라벨이 안 붙는 건 이미 harvestLabel이 침묵으로 처리한다),
단면의 "다루는 것" 섹션이 그대로 차림표가 된다 — 표를 하나 더 만들면 진실이 둘이 되고,
이 저장소는 그 계열의 버그(문패 글씨 이중 계산)를 이미 맞았다.
부족한 것은 딱 하나: 메뉴 한 줄에 붙는 주인의 말("원두는 매주 화요일에 볶아요") —
설명 칸 하나(market_listings에 한 컬럼)면 메뉴가 정보에서 이야기의 문장으로 넘어온다.
사진 없는 메뉴는 어떻게 서나.
창 줄 문법 그대로 — 글자가 기본, 사진은 있어도 줄이 커지지 않는다(문패 철칙 ②의 메뉴판).
이름 · 값 · 주인의 한 줄이면 메뉴 한 줄이 완성이다. 사진 자리를 비워두고 회색 네모를 그리는 순간
그 메뉴판은 "사진이 없음"을 전시하는 판이 된다 — 이니셜 원이 실패한 것과 같은 이유다.
사진은 "오늘 나온 것"(today_photo_url) 한 장이 대표로 말한다.
이야기 — 한 번 쓰는 글과 매일 바뀌는 글의 위계.
이야기는 두 몸으로 선다. 오늘 한마디(매일 바뀌는 사건)는 방의 맨 위 — 첫인상은 시제가 정하기 때문이다. 가게의 내력(한 번 쓰고 오래 두는 글)은 차림표 아래 긴 방 — 긴 글은 머무는 사람의 것이고, 카톡 링크로 온 사람은 스크롤한다. 중요도의 위계(이야기 > 메뉴)와 화면의 차례(한마디 → 찾아가는 줄 → 차림표 → 내력)는 모순이 아니다: 이야기의 오늘치가 맨 위에 서고, 전체가 바닥에 깔린다. 내력의 첫 문장은 시간이어야 한다("2019년 겨울부터") — 날짜가 붙는 순간 자기소개가 기록이 된다. 그리고 빈 페이지에서 시작하게 하지 않는다(서재의 원칙): 물음 세 개를 미리 놓는다 — 언제 시작하셨어요 · 가게 이름은 누가 지었어요 · 단골이 꼭 먹어봤으면 하는 것 하나.
‹ 골목
도로시
우벨이 아는 것
차림표도 내력도 없는 날의 방이다. 두 섹션은 그리지 않는다 — 제목만 있는 빈 방을 손님에게 보여주는 순간 "아직 안 채웠음"의 전시가 된다. 지금 단면 코드의 문법(있으면 그린다) 그대로.
이 화면의 모든 문장이 오늘 DB의 행이다: 한마디(today_note) · 사진(today_photo_url) · 날짜 둘(created_at·today_note_at). 이대로 카톡에 보내도 부끄럽지 않은 것 — 그것이 심방 다음 날의 합격선이다.
‹ 골목
도로시
주인에게만 보이는 분필 글씨
오늘 한마디를 여기서 고쳐 쓸 수 있어요. 손님에게는 이 칸이 보이지 않아요.
우벨이 아는 것
채움 안내는 주인의 눈에만. 손님 화면의 침묵과 주인 화면의 할 일 목록은 같은 데이터의 두 얼굴이다 — 분필(ChalkNote) 문법을 확장해 "이 방을 채우는 차례" 세 줄을 건다. 로그인 없이, 심방 문자의 문 열쇠 그대로.
"물건 올리기"(/shop/sell)와 명함(ShareCard)은 있는 문이고, "이야기 적기"만 새 문이다 — 문장표 F행.
‹ 골목
로이스커피
차림표
이 가게의 이야기
2019년 겨울, 서울의 로스터리에서 일하다 고향 양림동으로 돌아왔습니다. 가게 이름은 아버지가 부르던 제 별명에서 왔어요. 단골들께는 늘 그 주에 볶은 원두만 내립니다 — 커피는 신선식품이라고 배웠거든요.
주인이 8월 20일에 적었어요
우벨이 아는 것
방의 차례: 한마디(사건) → 찾아가는 줄(발걸음) → 차림표(정보) → 내력(이야기) → 기록의 벽. 찾아가는 줄이 물건보다 위라는 기존 원칙은 손대지 않았다 — 이 화면의 전환은 여전히 발걸음이다.
차림표의 세 줄은 전부 market_listings 문법이고, 회색 이탤릭 한 줄(설명)과 내력 블록만 새 칸이다. 내력이 적힌 날도 "우벨이 아는 것"에 오른다 — 이야기 자체가 날짜 붙은 사건이 된다.
무료로 열리는 것과 돈을 내야 열리는 것의 경계선.
경계의 기준은 하나다: 새 손님의 눈에 보이는 것은 전부 무료, 돈을 내면 열리는 것은 전부 이미 나를 아는 사람 안에서 작동한다. 자랑의 방 전체(문패·한마디·차림표·내력 한 편·명함·발걸음·단골)는 무료다 — 방이 곧 골목의 콘텐츠라, 방을 잠그면 골목이 빈다. 개통이 무료인 것(과금 재설계의 3단계 영구 무료)과 같은 이치다. 유료 셋은 도달·지면·거울: 단골에게 보내기(내 한마디가 단골의 문자·알림까지 — MARKET_SMS 인프라는 라이브, 스위치만 잠김), 이야기 연재(내력 여러 편 + 사진첩), 살림 리포트(발걸음·단골의 주간 흐름). 셋 다 골목에서의 크기·순서와 무관하다 — 그래서 이 경계선 자체가 전제 ①의 증명이다.
| 방의 부위 | 무료 / 유료 | 작동하는 관계 | 근거 |
|---|---|---|---|
| 문패 · 한마디 · 사진 | 무료 | 새 손님의 눈 | 골목의 콘텐츠 — 잠그면 골목이 빈다 |
| 차림표(글) · 내력 한 편 | 무료 | 새 손님의 눈 | 자랑이 곧 정문의 재료 — 무료여야 채워진다 |
| 발걸음 · 단골 · 명함 | 무료 | 손님 → 가게 | 관계 루프는 파는 물건이 아니라 땅이다 |
| 단골에게 보내기 | 유료 | 가게 → 이미 아는 사람 | 도달 — 동의 기반 fan-out(MARKET_SMS 뼈대) |
| 이야기 연재 + 사진첩 | 유료 | 가게 → 머무는 손님 | 지면 — 단면 안의 깊이지 골목의 크기가 아니다 |
| 살림 리포트(주간) | 유료 | 가게 → 주인 자신 | 거울 — 오늘 숫자는 무료(주인 콘솔), 흐름 해석이 유료 |
내 가게
로이스커피
가게 요금으로 열리는 세 가지 아직 잠김 — 결제 개통 전
숫자 세 개는 오늘 DB의 행이다(my_golmok_shops — footsteps_today·footsteps_total·regulars). 0이면 0을 주인에게는 보여준다 — 주인의 거울은 결핍 보고가 아니라 계기판이다. 손님 화면에는 이 숫자를 올리지 않는다.
결제(PortOne)가 잠긴 지금은 요금 화면 전체가 "청구서의 예행연습"이므로, 이 칸도 잠김을 정직하게 표시한다 — 누르면 결제가 아니라 "곧 열려요 + 지금은 무료로 다 쓰세요"가 맞다.
"노대동에서 접속하면 노대동 골목"을 정문에 세운다 — 단, 골목이 이미 증명한 방식으로: 필터가 아니라 정렬, 권한 팝업이 아니라 기억.
정문은 내 동네를 어떻게 아는가.
비로그인: 골목이 이미 쓰는 열쇠(ubell.golmok.neighborhood, localStorage)를
정문의 골목 단이 같이 읽는다. 새 저장소 0 · 새 팝업 0 — 골목에서 "양림동부터"를 고른 폰은
정문에서도 양림동이 앞으로 온다. 아직 안 고른 폰에게는 원래 차례를 보여주고,
골목 단 상인방 곁에 손잡이 하나("내 동네부터")만 단다 — 누르면 골목과 같은 바텀시트.
로그인: 정문은 /my로 보내므로, /my의 골목 블록이 프로필의 동네를 쓴다 —
프로필에 동네 칸이 아직 없으니 온보딩에 물음 하나가 필요하다(문장표 J행).
GPS는 끝까지 묻지 않는다 — 동네는 좌표가 아니라 대답이다.
⚠ 내 동네에 가게가 0곳일 때 정문이 말하는 것.
정문이 절대 하면 안 되는 말: "노대동에는 아직 가게가 없어요" — 결핍의 자백이고, 그 화면을 본 노대동 주민은 다시 안 온다. 답은 셋으로 갈라진다. ① 심장은 물음이 지킨다 — 오늘의 물음 히어로는 동네와 무관하게 성립하는 콘텐츠라, 가게 0곳인 동네에서도 정문의 첫 자리는 이미 차 있다. 그 자리를 골목이 뺏지 않는다. ② 골목 단은 침묵으로 정렬한다 — 노대동을 고른 폰에도 문패 줄은 그대로 서고, 정렬 규칙(같은 동 → 같은 구 → 나머지)이 조용히 양림동을 앞세운다. "노대동 0곳"은 어디에도 인쇄되지 않는다 — 렌즈 손잡이가 "노대동부터"를 보여주는 것 자체가 "당신 동네를 기억한다"의 전부다. ③ 빈자리의 문은 이미 있다 — 정문 하단 세 개의 문에 "이 골목의 다음 문패는 비어 있어요"(가게 주인의 문)가 있으니, 결핍 문장을 새로 짓지 않는다.
오늘의 물음
요즘 하루 중 가장 마음이 놓이는 시간은 언제인가요?
오늘 광장에 선 이야기 곁에서
노대동부터 ▾
이 골목의 7자리는 아직 본보기예요. 진짜 가게가 올 때마다 한 자리씩 내어드립니다.
오늘의 직거래 전체
화면 어디에도 "노대동"의 결핍이 없다. 렌즈 손잡이가 "노대동부터"를 기억해 보여주고, 정렬이 조용히 가까운 진짜(양림동, 같은 남구)를 앞세울 뿐이다. 개수도, 거리도, 사과도 인쇄하지 않는다.
물음이 첫 자리를 지킨다. 가게가 0곳인 동네에서 정문이 비지 않는 유일한 방법은, 정문의 심장이 애초에 가게가 아닌 것이다 — 산토끼 정문 설계("물음은 여기에만 있다")가 이 대목의 보험이었다.
오늘의 물음
동네에서 단골이라 부를 수 있는 곳이 한 군데라도 있나요?
오늘 광장에 선 이야기 곁에서
양림동부터 ▾
오늘 한 자리
“화요일이라 오늘 볶은 원두가 나왔어요.”
로이스커피 · 지금 열려 있음
오늘의 직거래 광주 남구
승격의 조건은 사실이 문장을 감당하는 것. 상인방이 "양림동 골목"이라 말해도 되는 날은 양림동 문패가 여럿 서고 열림 집계(진짜만)가 0이 아닌 날이다 — 그 전까지는 조직 상인방 문장을 유지한다.
오늘 한 자리가 정문에 올라오는 기준도 돈이 아니라 시제다 — 오늘 말을 건 열린 가게(pickTodaySeat 문법 그대로). 여기가 전제 ①의 최전선이다: 정문의 이 자리는 영영 판매 목록에 없다.
동이 늘어날수록 — 3곳 → 30곳 → 300곳.
모든 단계에서 규칙은 하나다: 자르지 않고 앞으로 부른다. 바뀌는 것은 골목 단의 문장과 덩어리 크기뿐이다.
| 밀도 | 골목 단의 모습 | 상인방 문장 | 렌즈 |
|---|---|---|---|
| 양림동 3곳 (심방 직후) | 문패 한 줄 그대로 — 진짜가 앞, 본보기가 뒤 | "이 골목은 호남신학대학교가 이웃을 위해 엽니다" | 손잡이만 등장("내 동네부터") — 정렬 |
| 양림동 30곳 | 내 동네 문패가 앞줄 전체 + 오늘 한 자리 1곳 | "양림동 골목 — 지금 N곳이 문 열었어요"(진짜만 집계) | 같은 렌즈 — 다른 동네는 뒤로, 사라지지 않음 |
| 광주 300곳 | "우리 동네 골목" 블록으로 승격 — 내 동 문패 줄 + 오늘 한 자리, 다른 동네는 "골목 걷기" 문 뒤로 | 동네 이름이 제목이 된다 — "양림동 골목" | 동 단위 유지 — 구 필터(오늘의 직거래)와 별개로 공존 |
파는 셋의 공통점: 전부 이미 그 가게를 아는 사람 안에서 작동한다. 새 손님의 눈은 팔지 않는다 — 새 손님을 데려오는 것은 오늘의 기록이고, 그것은 무료다. 그래서 "누구에게서"라는 근거가 돈에 오염되지 않는다.
사장님에게 건네는 요금의 한 문장: "자랑하는 데는 돈이 안 들고, 단골에게 더 깊이 닿는 데만 듭니다."
X는 지우지 않고 표시한다. X 일곱 중 다섯이 칸 하나·물음 하나짜리다 — 이 설계의 공사비는 작다.
| 화면 | 문장 | 말하는 사건 | 오늘 DB | X면 무엇이 있어야 O가 되는가 | |
|---|---|---|---|---|---|
| A | 단면 | "8월 7일에 문패를 걸었어요" | 가게 등록 | O | markets.created_at — 이미 그리는 줄 |
| B | 단면 | “오늘 스콘을 두 판 구웠어요” + 오늘 한마디 | 주인이 오늘 말함 | O | today_note·today_note_at — 분필로 씀 |
| C | 단면 | 오늘 나온 것 사진 | 심방이 오늘 찍음 | O | today_photo_url(000183) |
| D | 단면 · 차림표 | "아메리카노 4,500원 / 잔" | 주인이 메뉴를 올림 | O | market_listings — /shop/sell 로 올리면 선다 |
| E | 단면 · 차림표 | "원두는 매주 화요일에 볶아요"(메뉴 한 줄 설명) | 메뉴에 주인의 말이 붙음 | X | market_listings에 설명 칸 하나 |
| F | 단면 · 내력 | "이 가게의 이야기" 본문 | 주인이 내력을 적음 | X | markets에 이야기 칸(story) + 분필에 쓰는 문 |
| G | 단면 · 기록 | "8월 20일 가게의 이야기를 적었어요" | 내력을 적은 날 | X | 이야기 칸의 타임스탬프(story_at) |
| H | 주인 콘솔 | "오늘 발걸음 2 · 단골 1" | 손님이 다녀감·도장 3번 | O | my_golmok_shops RPC — 이미 콘솔이 읽음 |
| I | 주인 콘솔 | "한마디를 단골에게 문자로 보냈어요" | 동의한 단골에게 발송 | X | MARKET_SMS 스위치+운영설정(발송 뼈대·동의 원장은 라이브) + 결제 개통 |
| J | 정문(비로그인) | "노대동부터"(렌즈 손잡이) | 이 폰이 동네를 기억함 | O | ubell.golmok.neighborhood — 골목의 키를 정문 골목 단이 같이 읽는 정렬 한 줄만 추가 |
| K | /my(로그인) | 프로필의 동네로 골목이 정렬됨 | 내가 동네를 알려줌 | X | profiles에 동네 칸 + 온보딩 물음 하나("어느 동네에 사세요?") — GPS 아님 |
| L | 정문 상인방 | "이 골목은 호남신학대학교가 이웃을 위해 엽니다" | 조직이 골목을 엶 | O | golmokHost — 라이브 |
| M | 정문 상인방(승격) | "양림동 골목 — 지금 6곳이 문 열었어요" | 내 동 진짜 가게 여럿이 지금 엶 | O* | 집계 코드는 있음(진짜만) — 문장 승격은 내 동 진짜 문패 복수+열림>0일 때만 |
| N | 정문 | 오늘 한 자리(“화요일이라 오늘 볶은…”) | 오늘 말 건 열린 가게 | O | pickTodaySeat 문법 — 골목에서 정문으로 자리만 확장 |
| P | 주인 콘솔 | "이번 주 발걸음이 지난주보다 늘었어요"(살림 리포트) | 주간 흐름 비교 | X | 주간 스냅샷 적재(지금은 오늘·누계뿐) + 결제 개통 |
구현 각주: 표의 모든 문장은 코드에서 한 문장 = 한 줄(템플릿 리터럴 하나)로 옮긴다 —
"어느 교회가봤는가" 사고의 재발 방지. 조사는 전부 lib/korean.ts의 particle()·ro()를 지난다.
가게 화면 어디에도 교회명·실명·종교색은 오르지 않는다 — 보증은 골목 상인방 한 줄까지다.
"지금 12명이 이 가게를 보고 있어요"
세지도 않는 수를 말하지 않는다. 거짓 활기는 첫 발각과 함께 방 전체의 신용을 태운다.
"별점 4.8 · 리뷰 247개"
별점은 이미 기각된 판정이다 — 평균은 깎이지만 발걸음의 누적은 쌓인 만큼만 말한다.
"손님이 가는 중이에요"
없는 기능이다. 발걸음은 다녀온 뒤에 적는 기록이지 예고가 아니다.
"이번 주 양림동 인기 1위"
순위는 골목을 경마장으로 만든다 — 1등 한 곳을 위해 나머지 전부를 패자로 만드는 문장이다.
"단골 3분이 계세요"(손님 화면)
참말이어도 안 쓴다 — 0~2가 대부분인 철에 이 줄은 결핍의 자백이 된다. 숫자는 주인 콘솔에만.
Fable · 자랑의 방 + 동네 정문 설계 · 2026-08-07
전제 네 가지(밖은 안 판다 · 자랑≠광고 · 동네는 정렬 · 위치는 기억) 아래에서 그렸습니다.
합격선은 하나 — 심방 다음 날 사장님이 이 링크를 카톡에 보내며 부끄럽지 않을 것.