# 여행의 결 — 서울·도쿄 여행 일정 앱

서울·도쿄의 프로젝트 내 장소 데이터를 사용해 날짜별 여행 일정을 만드는 정적 웹앱입니다. HTML, CSS, 순수 JavaScript로 작동하도록 구성되어 있으며 npm 설치, 서버 백엔드, 로그인, 앱 내 LLM 호출, 유료 API, API 키는 필요하지 않습니다. 장소별 지도 버튼은 Google Maps 검색 링크를 엽니다.

## 실행 방법

1. `index.html`, `styles.css`, `places.js`, `planner.js`, `app.js`를 같은 폴더에 둡니다.
2. 브라우저에서 **`index.html`을 직접 열거나**, 정적 웹 호스팅의 진입 파일로 지정합니다. HTML은 CSS를 `./styles.css?v=4`로, JavaScript를 `./places.js?v=4`, `./planner.js?v=4`, `./app.js?v=4`로 불러옵니다. 기본 파일 경로는 같은 폴더를 기준으로 합니다. `index.html`에는 미리보기 환경의 외부 CSS 경로 문제에 대비한 기본 스타일도 들어 있습니다.
3. 나라·도시·여행 시작일·기간을 선택하고 **일정 만들기**를 누릅니다. 각 날짜의 방문 권역 선택창에서 권역을 고른 뒤 **변경 적용**을 누르거나, 장소 카드의 **다른 장소로 변경**으로 후보를 선택합니다.

프로젝트 폴더의 `asset-manifest.json`은 여행 앱이 아니라 T04 정보판(`t04-board.html`)을 진입점으로 가리킵니다. 따라서 Workbench가 manifest의 진입점을 자동 선택하는 경우에는 다른 과제 화면이 열릴 수 있습니다. 여행 앱을 확인하려면 파일 목록에서 `index.html`을 명시적으로 선택하세요. 브라우저/Workbench의 실제 동작은 제출자가 직접 확인해야 합니다.

## 지원 범위와 사용 방법

- 지원 데이터가 있는 도시는 **서울과 도쿄**, 여행 기간은 각각 **1~3일**입니다.
- 나라 선택에는 데이터 미준비 도시도 표시됩니다. 부산·오사카·방콕·파리는 준비 중이며, 일정 생성은 지원하지 않습니다.
- 일정 생성 후 날짜 카드마다 방문 권역 선택창과 **변경 적용** 버튼이 있습니다. 아직 쓰지 않은 권역을 선택하면 해당 날짜를 새 권역 일정으로 다시 구성합니다. 다른 날짜에서 이미 사용하는 권역을 선택하면 두 날짜의 권역과 장소 구성을 교환합니다. 날짜와 일차는 유지됩니다.
- **다른 장소로 변경**은 해당 날짜의 현재 권역 후보 중 전체 일정에서 아직 쓰지 않았고 하루 일정 시간에 들어오는 장소를 보여주도록 구현되어 있습니다. 후보가 없으면 안내합니다.
- 일정 생성 및 변경은 브라우저 `localStorage`에 저장을 시도합니다. 새로고침 후 저장된 일정 복원을 시도하며, 복원에 실패하면 이유를 표시하고 원본 저장본은 삭제하지 않도록 되어 있습니다.
- 나라·도시·시작일·기간만 변경하면 현재 화면의 일정을 비우지만 기존 저장본은 유지하도록 구현되어 있습니다. 새 일정을 만들거나 장소·권역 변경을 적용하면 저장본 갱신을 시도합니다. **불러온 일정 지우기**는 저장본 삭제 동작입니다.
- **인쇄 · PDF**는 브라우저 인쇄 대화상자를 엽니다. 실제 PDF 저장은 브라우저에서 사용자가 선택해야 합니다.

## 일정 규칙과 정확성 한계

- 하루는 현지 기준 **09:00 시작, 18:00 이내 종료**를 목표로 합니다. 권역당 서로 다른 관광지 3곳, 점심·저녁 식사 시간, 휴식·여유 시간, 이동 예상 시간을 일정에 배치합니다.
- 체류시간은 현장 공식 운영시간이 아니라 **앱이 일정 구성을 위해 둔 추천값**이며, 실제 체류시간을 보장하지 않습니다.
- 이동시간은 같은 권역 10분, 권역 간 35분을 사용하는 **프로그램상 추정값**입니다. 교통 상황이나 실제 경로를 조회한 값이 아닙니다.
- 권역은 일정을 묶기 위한 데이터 분류이며, 실제 거리·동선 최적화나 지리 검증은 하지 않습니다. 숙소와 항공편을 추측하지 않고, 식당 이름도 지정하지 않습니다.
- 장소 데이터에는 영업시간·휴무·요금·좌표·평점을 임의로 넣지 않았습니다. 방문 전 각 장소의 최신 운영시간·휴무·예약·요금 등을 확인해야 합니다.

## 장소 데이터 및 출처 표기

장소명, 권역, 간단한 소개, 분류, 추천 체류시간은 `places.js`에 있습니다. 데이터에 붙은 URL은 관련 공식 관광/시설 안내처를 참고할 수 있도록 기록한 링크입니다. 이번 중간 점검에서 각 장소 페이지를 열어 소개나 최신 운영정보를 대조하지 않았으며, 따라서 해당 페이지들을 확인·검증했다고 주장하지 않습니다. 각 장소 카드도 방문 전 운영시간 확인을 안내합니다.

| 도시 | 권역 | 등록된 후보 수 |
|---|---|---:|
| 서울 | 종로·광화문 | 8 |
| 서울 | 중구·명동 | 8 |
| 서울 | 용산·이촌 | 8 |
| 서울 | 성수·서울숲 | 8 |
| 도쿄 | 우에노·아사쿠사 | 8 |
| 도쿄 | 마루노우치·긴자 | 8 |
| 도쿄 | 시부야·하라주쿠 | 8 |

총 56개 장소 레코드가 `places.js`에 들어 있습니다(서울 32, 도쿄 24). 기본 일정은 각 권역에서 데이터 순서상 처음 세 장소를 사용하며, 정적 시간 계산에서는 이 기본 조합이 모두 하루 종료 제한 안에 들어옵니다. 이 기본 조합에서 각 장소 하나를 교체할 때, 같은 권역에서 선택되지 않은 후보 5곳 모두가 나머지 두 장소와 함께 하루 시간 제한에 들어오는 것을 각 권역의 체류시간과 `scheduleDay` 규칙으로 대조했습니다. 따라서 **기본 일정에서 각 관광지당 교체 후보는 코드 규칙상 5곳**입니다. 이는 데이터와 시간 조건을 정적으로 대조한 결과이지, 브라우저의 교체 선택창을 실행한 검증은 아닙니다. 다른 장소로 이미 바꾼 일정에서는 남은 후보 수가 달라질 수 있습니다.

## 파일 구성

- `index.html` — 한국어 화면과 폼, 리소스 상대 경로 연결
- `styles.css` — 아이보리·남색·청록 디자인, 모바일 및 인쇄 스타일
- `places.js` — 국가·도시·권역·장소 데이터
- `planner.js` — 데이터 검증, 날짜별 일정, 장소 교체, 권역 변경/교환 및 시간 제한 로직
- `app.js` — 화면 표시, 버튼 동작, localStorage 저장·복원
- `plan.md` — 중간 점검 범위와 작업 계획
- `1차_제출문안.txt` — 중간 점검 입력용 초안
- `1차_제출파일목록.txt` — 제출용 파일 목록

## 중간 점검 확인 상태

이번 작업 환경에서 파일을 읽고 다음 사항을 정적으로 확인했습니다.

- HTML은 같은 폴더의 CSS 및 세 JavaScript 파일을 연결합니다. HTML/CSS에 기본 디자인 규칙이 존재하고, CSS의 괄호·규칙 블록은 눈으로 읽어 확인했습니다. CSS 파서 검사는 하지 않았습니다.
- 서울은 4개, 도쿄는 3개 권역이며 각 권역에 8개 장소 레코드가 있고, 장소의 `areaId`가 상위 권역 ID로 초기화됩니다.
- 일정 생성·교체·권역 변경·저장 복원 경로에서 날짜별 권역 ID와 장소 ID를 사용하고, 중복·하루 시간 제한 검사가 코드에 포함되어 있습니다.
- 조건 변경 handler는 화면 일정을 초기화하고 `localStorage.removeItem`을 호출하지 않습니다. 저장본 삭제는 별도 삭제 버튼 처리에 있습니다.
- 기본 일정의 권역별 장소 교체 후보 5곳은 코드 시간 조건을 데이터의 체류시간에 적용해 정적으로 대조했습니다. 실행 결과가 아닙니다.

다만 이 환경에는 브라우저, JavaScript 실행기, CSS 파서 또는 명령 실행 도구가 없어 동작 검사를 실제로 실행하지 못했습니다. 따라서 서울·도쿄 각 1~3일 생성, 대체 후보 선택, 성수·서울숲 변경, 도쿄 날짜 간 권역 교환, 변경 후 중복/시간 제한, 저장·새로고침 복원, 조건 변경 후 저장본 유지, 브라우저에서의 CSS 적용은 **실제 실행 검증 완료가 아닙니다**. 아래 제출용 체크를 브라우저에서 직접 수행한 뒤 확인 결과를 기록하세요.

## 브라우저에서 확인할 순서

1. `index.html`을 직접 열어 서울/도쿄에서 각각 1일·2일·3일 일정을 생성합니다. 각 날짜에 장소 3곳이 있고 09:00 시작 및 18:00 이내 종료인지 살펴봅니다.
2. 서울 3일 일정에서 하루를 **성수·서울숲**으로 바꿉니다. 도쿄 3일 일정에서 1일차 선택창으로 3일차 권역을 선택해 두 날짜의 권역·장소가 교환되고 일차가 유지되는지 봅니다. 이후 장소 교체를 적용하고, 화면의 전체 일정에서 장소 중복이나 18:00 초과가 없는지 살펴봅니다.
3. 변경한 일정을 새로고침해 같은 날짜별 권역과 장소가 복원되는지 확인합니다. 그 뒤 나라/도시/시작일/기간만 바꿔 화면 일정이 초기화되어도 기존 저장본이 유지되는지 확인합니다. CSS가 적용되지 않으면 개발자 도구 Network에서 `styles.css?v=4` 요청 경로와 상태를 확인합니다.

이 절차는 아직 실행한 검사가 아니라 사용자 확인 안내입니다.
