이 목업은 payload 가 없어 프리렌더 재굽기 대상이 아니다 — `index.html` 한 장이 유일본이고 자산이 지워지면 사람이 되돌려 넣어야 한다(CLAUDE.md 의 ★★ 함정). 지금까지 그 한 장을 이 맥에서만 만들고 있었다. 다른 사람이 이어받을 수 있도록 재료를 전부 올린다. `build/index.html` 은 생성물이라 이그노어 그대로다 — `patch_stay.py` 로 다시 나온다. - build_itinerary.py: 테마 21개 일정 생성. 좌표에서 이동시간을 계산하고(도보 4km/h, 1.5km 초과는 차 25km/h + 주차 5분) 입·퇴실·끼니 창을 맞춘다. 규칙 14종 감사가 **빌드 안**에 있어 하나라도 어기면 payload 를 쓰지 않고 멈춘다 — 검사가 빌드 밖에 있던 동안 뼈대를 고칠 때마다 안 보는 규칙이 생겼다(2026-09-11 REVIEW) - build_story.py: 노래 25곡·인물 57명. 사진은 위키백과 문서 pageimages 만 믿는다 (이름 검색은 동명이인을 끌고 온다 — 이수현→걸그룹, 박성현→골퍼) - patch_stay.py: 캐치프레이즈 100개·자작곡 5곡·객실 사진(A동 12/B동 10)을 넣고 payload 를 갈아 끼운 뒤 inject.css/js 를 `</body>` 앞에 주입해 index.html 을 짠다 - inject.js/css: React 가 다시 그려도 살아남아야 하는 다섯 가지(캐치프레이즈 순환· 헤더 미니 플레이어·지도 링크·사진 저작자 표시·카로셀 제어). `#root` 밖에 둔다 - audit-all.mjs / rails-test.mjs: 실제 브라우저로 34종 검사, 레일 13개 자동 넘김 전수 - README.md: 이어받는 사람이 먼저 읽는 문서. 배포·함정·§7 "내가 틀렸던 6가지" - PROMPTS.md / TEXT.md / REVIEW-2026-09-11.md: 문구 생성 프롬프트 · 전체 텍스트 · 검수 보고 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
9.3 KiB
/s/stay 시연본 — 무엇이 잘못됐고 무엇을 고쳤나
작성 2026-09-11 · 대상 https://web4ai.o2osolution.ai/s/stay
컨펌 요청: 아래 3장을 보고, 틀린 판단이 있으면 짚어 주세요. 컨펌 후 킹서버에 올립니다.
1장. 사장님이 찾은 것 — 스케줄이 왜 말이 안 됐나
잘못된 것
| # | 증상 | 몇 건 |
|---|---|---|
| A | 아침 · 스테이 머뭄 다음 칸이 체크아웃 · 스테이 머뭄 — 같은 자리에 두 칸이 연달아 섰다. 그 사이에 손님은 아무 데도 가지 않는다 |
1건 |
| B | 마지막 날 머뭄이 3번(아침 · 체크아웃 · 마무리) — 하루의 절반이 숙소 칸 | 21건 |
| C | 마지막 날 섬 코스가 저녁도 없이 19:14 에 돌아와 짐만 찾고 끝 | 1건 |
| D | 아침 칸이 2시간 14분 — 끼니 시각을 맞추려고 앞 칸을 늘리다 생긴 값 | 1건 |
왜 이렇게 됐나
A·B 의 원인은 하나입니다. 사장님이 "1번은 스테이 머뭄이어야 한다"고 하셔서 하루의 첫 칸에
아침 · 머뭄 을 넣었습니다. 그런데 마지막 날 뼈대에는 이미 체크아웃 · 머뭄 과
마무리 · 머뭄 이 있었습니다. 첫 칸만 보고 넣었고, 그 하루 전체를 다시 읽지 않았습니다.
그래서 머뭄이 3번이 됐고, 그중 둘이 붙어 있는 날이 생겼습니다.
C·D 는 검사에 그 항목이 없어서 통과했습니다. 저는 그때까지 "끼니 시각 · 이동시간 · 21시 초과" 만 봤고, "하루에 저녁이 있는가", "한 칸이 지나치게 길지 않은가" 는 세지 않았습니다.
고친 것
- 마지막 날 아침과 퇴실을 한 칸으로 합쳤습니다.
아침 · 스테이 머뭄 (75분)— "아침을 차려 먹고 11시 전에 퇴실합니다. 짐은 맡겨 두고 나섰다가 저녁에 찾아 가세요." → 하루가 머뭄 → 바깥 3~4곳 → 머뭄 으로 정리됩니다. - 섬 가는 마지막 날은 바깥 정거장을 둘로 줄였습니다(퇴실 → 선유도 → 늦은 점심 → 마무리). 왕복 두 시간이라 그 이상은 못 넣습니다.
- 아침 상한을 110분으로 내렸습니다.
지금 상태 (예: 걸어서만 도는 1박 2일)
첫째 날 15:00
15:00–15:49 체크인 · 스테이 머뭄
15:52–16:37 오후 · 히로쓰 가옥 (3분 이동)
16:41–17:26 오후 · 초원사진관 (4분 이동)
17:30–18:22 저녁 · 일흥옥 (4분 이동)
18:35–19:17 밤 산책 · 군산 내항 (13분 이동)
19:33–20:05 머뭄으로 · 스테이 머뭄 (16분 이동)
둘째 날 09:20
09:20–10:39 아침 · 스테이 머뭄 ← 퇴실까지 이 칸에서 끝냅니다
10:49–11:36 오전 · 군산근대건축관 (10분 이동)
11:40–12:32 점심 · 한일옥 (4분 이동)
12:36–13:02 오후 · 우체통거리 (4분 이동)
13:10–13:52 마무리 · 스테이 머뭄 (8분 이동)
하루에 머뭄이 3번인 날이 아직 있습니다 — 의도한 것입니다
아침 → … → **쉼**(머뭄) → 저녁 → 머뭄으로 형태입니다.
점심은 늦어도 13:30, 저녁은 일러도 17:30 입니다. 그 사이 네 시간을 바깥 두 곳으로는
못 채웁니다. 억지로 채우면 골목 하나에 두 시간 세우게 되고(전에 실제로 그랬습니다),
독채 펜션에 묵는 손님은 그 시간에 실제로 들어와 쉽니다. 다만 머뭄 칸이 연달아 서는 일은
이제 없습니다. 이게 아니라고 보시면 오후 정거장을 하나 더 넣는 쪽으로 바꾸겠습니다.
2장. 같은 실수가 다시 안 나오게 한 것
원인은 "검사를 안 했다" 가 아니라 "검사가 빌드 밖에 있었다" 입니다. 지금까지 규칙 검사를 매번 그때그때 쓴 일회용 스크립트로 돌렸습니다. 그래서 뼈대를 고칠 때마다 이번에 안 본 규칙이 생겼고, 그걸 사장님이 화면에서 먼저 찾으셨습니다.
이제 검사를 일정 생성 스크립트 안에 넣었습니다
(solution/site/scripts/mockup/build_itinerary.py).
규칙을 하나라도 어기면 payload 파일을 아예 쓰지 않고 빌드가 멈춥니다.
검사하는 규칙 14종:
| 규칙 | |
|---|---|
| 1 | 하루의 첫 칸과 마지막 칸은 스테이 머뭄 |
| 2 | 같은 자리가 연달아 서지 않는다 ← 이번에 걸린 것 |
| 3 | 가운데 머뭄 칸은 '쉼'·'쉬는 날' 뿐 |
| 4 | 이동시간 = 좌표에서 계산한 값 (도보 4km/h, 1.5km 초과는 차 25km/h + 주차 5분) |
| 5 | 입실 15:00 이후 · 점심 11:30–13:30 · 늦은 점심 13:00–15:00 · 저녁 17:30–20:00 · 밤 산책 18:30–20:00 |
| 6 | 퇴실은 11:00 전 |
| 7 | 21:00 초과 금지 (넘는 칸은 렌더러가 조용히 버립니다) |
| 8 | 끼니 자리에는 먹는 곳만 |
| 9 | 같은 날 같은 식당 두 번 금지 |
| 10 | 한 테마 안에서 같은 곳 반복 금지 |
| 11 | "비가 와도 되는" 테마는 실내만 |
| 12 | "걸어서만/차 없이" 테마에 차가 필요한 곳 금지 |
| 13 | 1박 2일 = 2일, 2박 3일 = 3일 |
| 14 | 아이 동반 테마에 술집 금지 |
현재 21개 테마 · 위반 0건.
3장. 앞으로 저에게 어떻게 지시하시면 되는지
제가 이번에 반복한 실수는 두 종류였습니다. 각각에 대응하는 지시 방법을 적습니다.
① "고쳐" 라고만 하면 저는 그 한 줄만 고칩니다
이번 예: "1번은 머뭄이어야지" → 첫 칸만 넣고 그 하루 전체를 다시 안 읽었습니다.
이렇게 말씀해 주시면 됩니다
"X 고치고, 그 화면 전체를 다시 훑어서 같은 종류로 이상한 데 있으면 같이 잡아."
'같은 종류'라는 말이 있으면 저는 한 건이 아니라 그 규칙을 어긴 전수를 찾습니다.
② 제가 "확인했다"고 할 때 무엇으로 확인했는지 물어 주세요
이번에 빨간 줄 건에서, 저는 코드에서 빠진 것만 보고 "고쳤다"고 말씀드렸습니다. 화면으로 확인하지 않았습니다. 그건 제 잘못입니다.
이렇게 말씀해 주시면 됩니다
"브라우저로 열어서 확인하고 말해." "검증 결과를 숫자로 보여줘."
지금은 playwright 로 실제 화면을 열어 확인합니다
(scripts/mockup/verify.mjs · player.mjs). 앞으로 "확인했다"는 말에는 무엇을 몇 건 셌는지
같이 적겠습니다.
③ 규칙을 주실 때는 "예외"까지 같이 주시면 한 번에 끝납니다
이번 예: "1번은 머뭄" → 마지막 날 퇴실은 어떻게 되는지가 안 정해져 있었습니다. 그래서 제가 임의로 칸을 하나 더 만들었고, 그게 연속 칸이 됐습니다.
이렇게 말씀해 주시면 됩니다
"1번은 항상 머뭄. 단 마지막 날은 퇴실이 있으니 그건 네가 판단해서 제안하고 물어봐."
④ 판단이 갈리는 자리는 제가 먼저 여쭙겠습니다
지금 갈릴 수 있는 자리는 이것입니다 — 오후에 숙소로 돌아와 쉬는 칸(위 1장 마지막). 넣는 게 맞는지 빼는 게 맞는지 사장님 판단을 듣고 정하겠습니다.
참고 — 이번 작업에서 바뀐 것 전체 (메일용)
여행 일정 (추천 일정)
- 테마 21개 전부 다시 짬. 모든 일정이 스테이 머뭄에서 출발해 스테이 머뭄으로 복귀
- 하루가 오전만 있고 끝나던 것 → 오전·점심·오후·저녁이 다 있는 하루로
- 이동시간을 좌표에서 계산 (전에는 담 하나 건넌 곳이 8분, 45분 걸리는 섬이 10분이었음)
- 체류시간을 장소별로 (전에는 '오후' 칸이면 무엇이든 90~115분이라 골목에 2시간 서 있었음)
- 입실 15:00 · 퇴실 11:00 · 끼니 시각을 규칙으로 못박음
- 정거장 설명을 "그곳이 무엇인지" → "거기서 무엇을 하는지" 로 전부 교체
- 정거장 사진 제거(카드가 너무 길어짐), 정거장마다 네이버 지도 링크 (191개)
- "숙소에서 조용히 쉬는 날" 테마 추가
가요 다방
- 군산을 노래한 25곡으로 교체 (곡명·가수·작사·작곡·연도·유튜브 링크·출처)
- 숙소가 만든 곡은 이 섹션에서 뺌 — 도시의 노래를 모으는 자리라서
인물 열전
- 57명 (위키백과 '군산시 출신' 분류 · 각자 문서 링크)
- 사진 17장 — 자유 라이선스가 확인된 것만. 저작자 표시를 화면에 남김(라이선스 조건)
음악 플레이어 (신규)
- 헤더 안 카세트 아이콘 + 재생/멈춤 + 목록. 재생 중에는 카세트 릴이 돎
- 머뭄이 만든 곡 5곡, 랜덤 재생
- 목록: 곡별 판 · 제목 · 가수 · 재생 중 막대 애니메이션, 모바일 전용 레이아웃
캐치프레이즈 (신규)
- 100개 (일반 40 · 계절 24 · 월 24 · 날씨 12), 7초마다 단어 단위 애니메이션으로 교체
- 계절/월/실시간 날씨에 맞는 문구가 섞여 나옴
객실 안내
- 야놀자 등록본 사진으로 전면 교체 — A동 12장 · B동 10장 (등록본이 객실에 붙여 둔 순서 그대로)
- 침대 구성(A동 퀸 / B동 킹) · 면적(A동 52m²) · 객실 시설 추가
기타
- 오늘의 엽서에 지도 링크 추가
- 이용 정보 맨 아래 가로선 제거