Fable · 골목 대문 사진 판정 · 2026-08-07

간판은 글씨, 가게 앞은 사진.
사진은 원에 들어오지 않고, 문이 되어 선다.

오너의 요구("골목 상가에 대문 사진을 걸고 싶다")와 문패 철학("사진이 0장이어도 완성")은 싸우는 게 아니라 실제 골목의 서로 다른 두 면을 말하고 있다. 철학은 간판을, 오너는 가게 앞을. 실제 골목엔 둘 다 있다 — 간판은 글씨로 읽고, 가게 앞은 눈으로 본다. 그래서 문패는 영원히 도장으로 남고, 대문 사진은 원이 아닌 문(門)의 모양으로 카드의 반대편 가장자리에 선다. 얼굴이 아니라 문이다.

1부판정 — 철학은 지키고, 코드를 고치고, 자리를 나눈다

세 갈래(지킨다·고친다·나눈다) 중 하나를 고르라는 물음이었지만, 답은 셋 다 조금씩이다. 정확히 말하면: 철학의 문장은 지키고 · 철학을 어긴 코드는 고치고 · 사진의 자리는 나눈다.

판정. 문패 철학의 핵심 문장 — "실제 골목에서 가게를 알아보는 건 주인 얼굴이 아니라 간판 글씨다" — 은 옳았고 지금도 옳다. 그런데 그 문장은 간판에 대한 문장이지 가게 앞에 대한 문장이 아니다. 실제 골목을 걷는 사람은 간판 글씨로 가게를 알아보고, 가게 앞 모습으로 가게가 진짜임을 본다. 알아보는 축(이름·문패)과 실재하는 축(가게 앞·사진)은 다른 일이라 서로를 대체할 수 없다. 그래서 문패 원은 어떤 경우에도 사진으로 덮이지 않고, 대문 사진은 목록 카드의 오른쪽 가장자리에 세로 문(44×56) 모양으로 서며, 가게 단면에서는 이름 아래의 맞이(가로 한 판)가 된다. 오너의 "골목 상가에 걸고 싶다"는 목록의 문으로 전부 듣고, 철학의 "사진 0장이어도 완성"은 문이 없어도 아무 자리도 비지 않는 구조로 전부 지킨다.

단면에만 두면 안 되나 — 감독의 감대로 "목록은 이름, 사진은 가게 안"으로?

절반만 맞다. 그 절반(목록의 얼굴은 이름)은 채택한다. 그러나 오너의 문장은 정확히 "골목 상가에 걸고 싶다"였고, 이건 자부심의 문제다 — 사진을 찍어 걸었는데 골목을 걸어도 안 보이면 주인에게 그 사진은 걸린 게 아니다. 실제 골목도 그렇다: 골목을 걸으면 간판만 보이는 게 아니라 가게 문도 보인다. 다만 문은 간판을 밀어내지 않는다. 그래서 목록에 선다, 단 얼굴이 아니라 문으로 — 작고, 고정 크기고, 카드의 정보 위계 (이름→말→창→기록)를 한 줄도 건드리지 않는 자리로.

⚠긴급 — 지금 코드가 철학을 어기고 있다. Munpae.tsxbackground: shop.imageUrl ? url(...) : tone.bg 분기는 사진이 오는 순간 한글 도장을 사진 원으로 바꾼다. 이 컴포넌트는 골목 목록·가게 단면·정문 골목 단·내 가게 콘솔 네 화면이 같이 쓴다. 내일 심방에서 첫 사진이 걸리는 순간 네 화면의 원이 동시에 사진이 되고, "같은 가게는 어디서나 같은 색"이라는 낯익음의 축이 그날 무너진다. 이 분기는 제거한다 — 사진은 원에 들어오지 않는다. 소네트가 짓고 있는 거는 길(/shop/mine)보다 먼저 들어가야 하는 한 줄이다.

문패 철칙 ①(빈 사진 프레임 금지)은?

그대로 산다. 문이 없는 카드에는 문 자리가 아예 없다 — 글줄이 카드 끝까지 흐른다. 점선 사각형도, "사진을 올려주세요"도, 회색 자리표시도 앱 어디에도 없다. 문은 부가물이지 척도가 아니다.


2부사진 셋의 자리 — 상태·사건·물건

사진 칸이 셋이라 셋이 부딪힐 위험이 있다. 부딪히지 않는 방법은 크기 조절이 아니라 문법을 갈라주는 것이다 — 각 사진이 무엇의 사진인지(시제·주인·자리)가 다르면 한 화면에 서도 안 싸운다.

사진컬럼시제누가 거나서는 자리안 서는 자리
대문 (가게 앞) markets.image_url 상태 — 오래 간다. 가게가 이사하거나 단장할 때만 바뀐다. 주인 본인 (my_shop_cover, 000209) ① 골목 카드의 (오른쪽, 44×56 고정) ② 단면의 맞이(이름 아래, 가로 한 판·높이 160 고정) 문패 원 · 정문 골목 단(GolmokStrip) · 본보기 가게(영원히)
오늘 나온 것 markets.today_photo_url 사건 — 하루. 한마디와 한 몸(000183, 타임스탬프 공유). 심방이 찍는다 단면의 한마디 말풍선 바로 아래(현행 유지, 캡션 "오늘 나온 것 — 한마디와 함께 올랐어요") 골목 카드(현행 금지 유지) · 단면 상단
물건 사진 market_listings.photo_urls 물건의 것 — 물건이 사는 동안. 파는 사람 장터의 물건 화면(골목 밖) 골목 카드의 창 줄 · 단면의 차림표(차림표는 글씨 — 창 줄 문법 유지)

한 화면에서 몇 장까지 만나나?

골목 목록: 카드당 최대 1장(문). 가게 단면: 최대 2장(대문+오늘 나온 것) — 대문은 이름 아래(장소의 사진), 오늘 나온 것은 한마디 아래(사건의 사진)라 층이 다르고, 대문에는 캡션이 없고 오늘 나온 것에는 날짜 딸린 캡션이 있어 문법이 갈린다. 물건 사진은 골목의 어느 화면에도 0장 — 차림표는 글씨라는 창 줄 문법이 단면까지 지켜진다.

왜 대문에는 캡션이 없나?

캡션은 사건을 말할 때만 쓴다("오늘 나온 것 — 한마디와 함께 올랐어요"는 오늘 일어난 사건의 문장이다). 대문은 사건이 아니라 상태고, "주인이 걸었어요" 같은 문장을 붙이는 순간 문장 검사법에 걸린다 — 건 날짜를 DB가 갖고 있지 않아서(000209는 URL만 받는다) 그 문장이 말하는 사건의 행이 없다. 자리가 말하게 둔다: 이름 바로 아래 가로 한 판이면 그게 가게 앞이라는 걸 누구나 안다.


3부목록에서의 대문 — 철칙 ②를 지키는 다섯 불변

"사진 있는 가게가 더 커지지 않는다"를 말이 아니라 구조로 만든다. 사진이 골목에 들어와도 바뀌지 않는 것 다섯을 먼저 못박고, 그 다음에 사진을 들인다.

#불변구조가 하는 일
크기 불변카드 높이는 글줄(이름·말·창·기록)이 정한다. 문은 44×56 고정 — 글줄 높이 안에 이미 들어가는 크기라 문이 있어도 카드는 1px도 안 자란다.
얼굴 불변왼쪽 문패 원은 언제나 한글 도장. 사진은 원에 못 들어온다(Munpae의 imageUrl 분기 제거). 훑어 읽는 눈은 계속 왼쪽 열(도장→이름)을 탄다.
차례 불변사진은 정렬 재료가 아니다. 목록 차례는 지금처럼 사건(hasFreshEvent)이 정한다 — 사진 걸었다고 위로 올라가지 않는다. 사진은 상태지 사건이 아니다.
빛 불변잉크코발트 링은 지금처럼 "오늘 한마디"에만. 문에는 테두리·그림자·강조 없음 — 모서리 9px 둥근 절제된 직사각형 하나.
자리 불변문 없는 카드엔 문 자리가 없다. 빈 프레임 0 · 자리표시 0 · 재촉 문구 0. 글줄이 오른쪽 끝까지 흐르는 지금 모양 그대로다.

그래도 사진 있는 카드가 눈에 더 띄지 않나 — 없는 가게가 "덜 갖춘 가게"로 보이면 실패라 했는데.

눈에 띄는 것과 초라해 보이는 것은 다른 사건이다. 초라함은 같은 자리가 비어 보일 때 생긴다 — 프로필 원에 남은 이니셜, 사진 격자에 낀 회색 판. 이 설계에는 그 "같은 자리"가 없다: 문 없는 카드는 문이 빠진 카드가 아니라 원래 그 모양으로 완성된 카드다(오늘까지의 골목 전체가 그 증거다). 게다가 카드에서 가장 크고 가장 색이 진한 것은 여전히 모든 카드가 가진 문패 도장이고, 문은 그보다 작고 채도 낮은 부속이다. 축이 그대로면 부속은 위계를 못 뒤집는다.

정문 골목 단(GolmokStrip)에는?

안 선다. 정문의 골목 단은 명판 — 문패 도장만 늘어서는 자리다. 문은 골목 목록부터 시작한다. 정문까지 사진이 올라가면 정문이 사진 앱의 첫 화면이 된다.


4부어떤 사진인가 — 대문의 결

대문 사진은 딱 하나를 찍는다: 길에서 본 가게 앞. 문·간판·진열이 보이는 바깥 한 장.

왜 "가게 앞"인가근거
발걸음의 예습이 화면의 전환은 장바구니가 아니라 발걸음이다. 손님이 실제로 처음 만나는 것이 가게 앞이므로, 대문 사진은 도착 장면의 예습이 된다 — "가면 이 문이 있다".
초상권의 선가게 안 사진에는 손님이 찍히고, 사람이 주인공인 사진은 걸 수 없다(이 저장소가 이미 조심하는 지점 — 000183의 초상권 원장은 비노출). 가게 앞은 사람 없이 찍기 가장 쉬운 각이다.
장르 분리물건 접사는 물건 사진(photo_urls)의 일이고, 오늘의 물건은 오늘 나온 것(today_photo_url)의 일이다. 대문이 물건을 찍기 시작하면 사진 셋의 문법이 무너진다.
잘 찍은 사진과 폰으로 대충 찍은 사진이 같은 골목에 섰을 때. 큰 판일수록 사진 실력이 심사대에 오른다 — 히어로 배너는 스튜디오 사진과 폰 사진의 격차를 화면 가득 확대한다. 이 설계의 문은 44×56이다. 그 크기에서 폰 사진과 작품 사진은 거의 같은 사진이다. 단면의 맞이도 높이 160 고정(오늘 나온 것과 같은 급)이라 화면을 삼키지 않는다. 크기 제한이 곧 평등 장치다 — 필터도, 품질 심사도, 보정 안내도 만들지 않는다. 그리고 결이 하나("길에서 본 가게 앞")로 통일되면, 골목의 문들은 잘나고 못남이 아니라 같은 골목을 걷는 한 시선으로 읽힌다.

거는 자리의 안내 문장은?

내 가게 콘솔(주인의 방)에서만, 한 줄로: "길에서 가게 앞이 보이게 찍어주세요. 사람 얼굴이 크게 나온 사진은 걸 수 없어요." 공개 화면에는 어떤 안내·재촉도 없다. 주인의 방은 행동의 방이라 문이 있어야 하지만, 그 문도 점선 빈 프레임이 아니라 한마디·내력 편집기와 같은 결의 조용한 줄 하나다.


5부화면 목업

오늘 실측: 사진 건 가게 0곳 — 그래서 MOCK1은 "심방 뒤"임을 밝히고 그린다. 사진 자리는 일부러 회색 판으로 둔다(진짜 사진이 아닌 것을 진짜처럼 그리지 않는다).

MOCK 0같은 사진, 두 운명 — 원이 되면 죽고 문이 되면 산다

✕ 지금 코드대로 — 사진이 원을 덮는다

사진 원

카페 소월

도장이 배지로 쪼그라들고, 훑는 눈은 사진의 명암을 읽어야 한다.

양림동 · 8월 6일에 문패를 걸었어요

해온

해온 반찬

사진 없는 가게의 도장만 원으로 남아, 도장이 "아직 사진이 없음"의 기호가 된다 — 이니셜 원의 실패가 그대로 재연된다.

양림동 · 8월 5일에 문패를 걸었어요

○ 이 설계 — 도장은 도장대로, 사진은 문으로

소월

카페 소월

도장·이름의 축은 그대로, 가게 앞이 문 크기로 곁에 선다.

양림동 · 8월 6일에 문패를 걸었어요

가게 앞
사진
해온

해온 반찬

문 없는 카드는 글줄이 끝까지 흐르는 완성형 — 빈 자리가 애초에 없다.

양림동 · 8월 5일에 문패를 걸었어요

왼쪽이 이 의뢰의 핵심 위험이다. 사진이 원을 덮는 순간 골목은 사진 격자가 되고, 사진 없는 가게의 도장은 완성이 아니라 결핍의 기호로 강등된다. 오른쪽에서는 도장이 모든 카드의 공통 얼굴로 남아 있어, 문이 있건 없건 카드의 신분이 같다.

MOCK 1골목 목록 — 문이 걸린 가게와 아닌 가게가 한 줄에/madang/market · 심방 뒤 화면(오늘은 사진 0)

‹ 마당

우리 골목

지금 4곳이 문 열었어요

1
소월

카페 소월

“오늘 원두 새로 볶았어요. 오후엔 자리 넉넉해요.”오늘 한마디

다루는 것드립백 · 원두 200g

양림동 · 지금 열려 있음 · 8월 6일에 문패를 걸었어요

가게 앞
사진
2
해온

해온 반찬

아침에 무친 나물을 그날 다 팝니다.

다루는 것취나물 무침오늘 수확 · 열무김치

양림동 · 지금 열려 있음 · 8월 5일에 문패를 걸었어요

3
든든

든든상회

쌀·잡곡·계절 과일을 산지에서 받아옵니다.

방림동 · 지금은 닫혀 있어요 · 8월 6일에 문패를 걸었어요

가게 앞
사진
4
나무결

목공방 나무결 본보기

진짜 가게가 오면 이 자리를 내어줍니다.

양림동 · 8월 1일에 본보기로 세웠어요

문이 걸린 카드 — 도장·이름·말 줄·창 줄·기록 줄 전부 그대로, 오른쪽에 44×56 문 하나. 카드 높이는 글줄이 정하므로 ②와 같은 키다. 링은 여전히 "오늘 한마디"의 것이다.

문 없는 진짜 가게 — 빠진 것도 빈 것도 없다. 글줄이 오른쪽 끝까지 흐르는, 오늘까지의 골목 그대로의 완성형 카드.

닫힌 가게에도 문은 남는다 — 문은 상태라 열림/닫힘과 무관하게 서 있다.

본보기 — 대문 사진은 영원히 없다. 실체 없는 가게의 "가게 앞"은 지어낸 그림이기 때문이다. 본보기의 자기 소개("내어줍니다")가 이미 신분을 밝히므로 문이 없어도 초라하지 않다.

MOCK 2가게 단면 — 맞이(대문) · 한마디 · 오늘 나온 것의 공존/madang/market/[slug]

‹ 골목

소월

카페 소월

카페 · 양림동

1
가게 앞 사진 (markets.image_url)
가로 한 판 · 높이 160 고정 · 캡션 없음
2
“오늘 원두 새로 볶았어요. 오후엔 자리 넉넉해요.”오늘 한마디
3
오늘 나온 것 (today_photo_url)

오늘 나온 것 — 한마디와 함께 올랐어요

문 여는 때매일 10:00–19:00 지금 열려 있음
가는 길광주 남구 양림로 00
전화010-0000-0000
전화로 물어보기길 찾기
4

다루는 것(차림표)은 지금처럼 글줄 — 물건 사진(photo_urls)은 이 화면에 들어오지 않는다.

①맞이. 대문은 이름 아래 · 말풍선 위 — 가게 앞에 도착한 순서 그대로다(문을 보고, 주인의 말을 듣는다). 캡션이 없는 이유는 2부에 — 건 날짜가 DB에 없어 문장을 붙이면 문장 검사법에 걸린다.

②③의 공존. 대문(상태·캡션 없음·상단)과 오늘 나온 것(사건·날짜 캡션·말풍선 곁)은 층과 문법이 달라 한 화면에서 안 싸운다. 대문이 없으면 ①이 통째로 사라질 뿐, 아래 층은 그대로다.

본보기 단면에는 ①이 없다 — "이 가게는 본보기예요" 안내가 그 자리에 서는 지금 구조 유지.

MOCK 3사장님이 거는 자리 — 내 가게 콘솔/shop/mine · my_shop_cover(000209)

걸기 전 — 조용한 줄 하나

내 가게

소월

카페 소월

아직 첫 발걸음을 기다려요

오늘 한마디 — 손님에게 오늘을 말해요쓰기 ›
가게의 이야기 — 한 번 쓰고 오래 둬요쓰기 ›
대문 사진 — 길에서 가게 앞이 보이게 찍어주세요. 사람 얼굴이 크게 나온 사진은 걸 수 없어요.걸기 ›

골목에서 보기

건 뒤 — 문 그대로 보여주고, 내리는 손도 준다

내 가게

소월

카페 소월

발걸음 3 · 도장 1 · 단골 0

가게 앞
사진

대문 사진골목 카드와 가게 한 장, 두 자리에 걸려 있어요.

바꾸기 ›내리기
오늘 한마디 — “오늘 원두 새로 볶았어요…”고치기 ›
가게의 이야기 — 한 번 쓰고 오래 둬요쓰기 ›

골목에서 보기

걸기 전에도 빈 프레임이 아니다. 점선 사각형·회색 이미지 자리 대신, 한마디·이야기 편집기와 똑같은 결의 행동 줄 하나. 주인의 방이므로 문이 있어야 하지만 그 문도 재촉이 아니라 초대의 문법으로 선다.

건 뒤에는 골목에서 보이는 그 문(44×56)을 그대로 보여준다 — 미리보기가 실물과 다르면 신뢰가 죽는다는 ShopCard의 원칙 그대로. "내리기"는 my_shop_cover에 빈 값 — 내린 자리는 그냥 사라진다(비운 흔적을 남기지 않는다).


6부문장표 — 이 문장이 말하는 사건을 오늘 DB에서 보여줄 수 있는가

오늘 실측: 가게 10곳 전부 본보기 · image_url 전부 비어 있음 · my_shop_cover 라이브(000209).

화면문장말하는 사건오늘 DB
A골목 카드 · 문(문장 없음 — 사진은 말없이 선다, alt="") markets.image_url 에 우리 버킷 URL이 있다X — 0곳. 걸리는 순간 O
B가게 단면 · 맞이(캡션 없음 — 자리가 말한다) 같은 행의 image_urlX — 0곳. 걸리는 순간 O
C가게 단면 · 오늘 나온 것오늘 나온 것 — 한마디와 함께 올랐어요 today_photo_url + today_note_at (000183, 현행 유지)X — 심방 사진 0장
D/shop/mine · 걸기 전대문 사진 — 길에서 가게 앞이 보이게 찍어주세요. 사람 얼굴이 크게 나온 사진은 걸 수 없어요. 규칙 선언(사건 주장 없음) + my_shop_cover 가 실제로 있다O — 000209 라이브
E/shop/mine · 건 뒤골목 카드와 가게 한 장, 두 자리에 걸려 있어요. image_url 이 있고, 목록·단면 두 화면이 실제로 그것을 그린다X — 건 가게 0곳. 건 순간 그 주인에게 O
F어디에도 없음“주인이 O월 O일에 대문 사진을 걸었어요” 건 날짜 — 000209 는 URL만 받고 날짜를 적지 않는다. 이 문장은 만들 수 없어서 안 만든다("우벨이 아는 것"에도 넣지 않는다)X — 컬럼 없음
G본보기 카드·단면(대문 사진 없음 — 문장도 없음) 본보기에는 실재하는 가게 앞이 없다. is_demo=true 면 image_url 이 있어도 그리지 않는다O — 규칙이 오늘부터 참

금지이 설계가 스스로에게 거는 자물쇠

문패 원 안의 사진

Munpae.tsx 의 imageUrl 분기 제거. 원은 영원히 한글 도장 — 사진이 원에 들어오는 순간 도장이 결핍의 기호가 된다(MOCK 0 왼쪽).

“사진을 올려주세요” · 점선 빈 프레임

공개 화면 어디에도 없다. 문 없는 카드는 미완성이 아니라 원형(原形)이다.

이름 위의 히어로 배너

사진이 이름보다 위에 서는 순간 골목의 축(이름)이 무너지고 사진 실력이 심사대에 오른다. 맞이는 이름 아래, 높이 160 고정.

본보기의 대문 사진

실체 없는 가게의 "가게 앞"은 지어낸 그림이다. is_demo 면 image_url 이 있어도 문·맞이를 그리지 않는다.

사진으로 차례·크기·빛 바꾸기

사진은 정렬 재료도, 카드 확대 사유도, 링 사유도 아니다. 3부 다섯 불변.

사람 얼굴이 주인공인 사진 · 가게 안 손님 사진

초상권 — 거는 자리의 안내 한 줄로 결을 정하고, munpae_ok_at(초상권 원장)은 약속대로 어떤 화면에도 꺼내지 않는다.

정문 골목 단의 사진

정문 단은 명판(문패의 단)이다. 문은 골목 목록부터.

내일 심방을 위한 이음새 하나(감독 확인 요청). my_shop_cover 는 주인 본인만 부를 수 있다. 내일 현장에서 "그 자리에서 찍어 건다"가 성립하려면 사진을 찍는 폰이 주인으로 로그인한 폰이어야 한다 — 심방자의 폰으로 찍는다면 주인 폰으로 옮겨 걸거나, 000183(오늘 나온 것)처럼 심방 경로를 따로 내야 한다. 화면 설계는 두 경우 모두 같지만, 모레 화면이 서려면 이 이음새가 내일 아침 전에 정해져야 한다.

Fable · 대문 사진 판정 목업 · 2026-08-07
간판은 글씨, 가게 앞은 사진 — 사진은 원에 들어오지 않고, 문이 되어 선다.
사진이 0장이어도 골목은 오늘 그대로 완성이다.