o2o-site-AEO/solution/site/scripts/mockup/REVIEW-2026-09-11.md
Mina Choi 43ba33dd65 [feat] site/scripts: /s/stay 시연본 조립 도구 일습 — 일정 생성기·주입분·검증
이 목업은 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>
2026-09-11 10:28:52 +09:00

9.3 KiB
Raw Blame History

/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:0015:49  체크인 · 스테이 머뭄
  15:5216:37  오후 · 히로쓰 가옥        (3분 이동)
  16:4117:26  오후 · 초원사진관         (4분 이동)
  17:3018:22  저녁 · 일흥옥             (4분 이동)
  18:3519:17  밤 산책 · 군산 내항       (13분 이동)
  19:3320:05  머뭄으로 · 스테이 머뭄    (16분 이동)

둘째 날 09:20
  09:2010:39  아침 · 스테이 머뭄        ← 퇴실까지 이 칸에서 끝냅니다
  10:4911:36  오전 · 군산근대건축관     (10분 이동)
  11:4012:32  점심 · 한일옥             (4분 이동)
  12:3613:02  오후 · 우체통거리         (4분 이동)
  13:1013: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:3013:30 · 늦은 점심 13:0015:00 · 저녁 17:3020:00 · 밤 산책 18:3020: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²) · 객실 시설 추가

기타

  • 오늘의 엽서에 지도 링크 추가
  • 이용 정보 맨 아래 가로선 제거