라이프스타일
실습: 작은 웹사이트 만들기
brief.md에서 Small Steps 할 일 사이트를 계획하고 추가·완료·삭제·필터·로컬 저장을 구현합니다. HTML·CSS·데이터 함수·화면 이벤트·시험을 분리하고 Node와 브라우저로 검증한 뒤 재시작·복원 인계 기록을 남깁니다.
읽는 데 약 20분 · 실습 60 분

고급 · Desktop / CLI / VS Code / JetBrains
이 글의 목차
Codex 학습 목차로 돌아가기Codex 학습 센터: 전체 튜토리얼 목차설치와 첫 작업부터 MD 지침과 고급 연동까지 60개 강의, 열 개 단원을 계획합니다. 수준, 환경, 목표, 명령으로 다음 글을 찾고 미게시 항목의 상태를 확인할 수 있습니다.전체 글 읽기
목표와 시작점
이 단락의 학습 자료: Codex 입문Codex란? ChatGPT와의 차이Codex는 선택한 환경에서 프로젝트를 읽고 파일을 수정하며 도구를 실행하는 개발 에이전트입니다. 모델은 추론을 담당하고, 작업은 하나의 요청이며, 프로젝트는 관련 파일과 작업의 묶음입니다. 채팅이 준 코드를 직접 붙여 넣는 방식과 달리 선택한 작업 공간에서 변경할 수 있습니다.전체 글 읽기
1단계: 빈 작업 공간과 참고 버전 준비
Small Steps 자료를 풀고 expected는 별도 참고 폴더에 보관하세요. 새 website-lab의 brief.md부터 시작하며 다른 편의 통제 실습인 start·broken은 섞지 않습니다. expected의 코드 파일 다섯 개는 막힐 때 비교할 완성본입니다. 작업 터미널에서 node --version, Windows는 py -3 --version, macOS/Linux는 python3 --version을 확인하고 없는 명령은 설치와 경로 설정터미널 경로와 프로젝트 루트Windows, macOS, Linux에서 실습 폴더를 만들고 현재 위치, 상대 경로, 절대 경로를 구분합니다.전체 글 읽기부터 해결하세요.
모든 OS는 같은 HTML/CSS/JavaScript를 씁니다. 데스크톱에서 website-lab을 선택하고 CLI는 cd 후 codex, IDE는 해당 폴더를 프로젝트로 엽니다. 휴대전화로 PC 작업을 추적해도 파일·미리 보기는 실행 호스트에 있으며 휴대전화의 127.0.0.1은 PC가 아닙니다. 휴대전화 시연을 위해 연습 서버를 공개하지 말고 먼저 PC에서 반응형을 확인합니다.
2단계: 결과물과 승인 조건 작성
아래를 brief.md로 저장하세요. 영어 UI 이름을 참고본과 맞춰 다섯 언어에서 같은 버튼을 확인합니다. 추가 후 표시가 Read, 완료 전환이 Update이므로 CRUD 네 동작을 충족하며 로그인·동기화·협업은 추가하지 않습니다. 외관뿐 아니라 손상 데이터·공백 입력·키보드 동작도 정의하세요.
# Small Steps website brief
Build a local todo website using HTML, CSS and JavaScript only.
## Files
- index.html: accessible page and form
- style.css: responsive layout
- core.mjs: immutable data functions
- app.js: DOM events and localStorage
- core.test.mjs: Node built-in tests
## Data contract
- Task: {id: string, title: string, completed: boolean}
- Trim titles; accept 1 to 100 non-blank characters. IDs must be unique.
- Export addTask(tasks, title, id), toggleTask(tasks, id), removeTask(tasks, id),
visibleTasks(tasks, filter), decodeTasks(raw), encodeTasks(tasks).
- Filters: all, active, completed. Missing toggle/delete IDs leave data unchanged.
- Store {version: 1, tasks: [...]} under mokaair-codex-todo-v1.
- Invalid stored data must remain untouched; warn and allow temporary work.
## Interface and acceptance
- Labels: New task, Add task, Show, All tasks, Active, Completed, Delete.
- Show active and total counts, including when a filter is selected.
- Add, toggle, delete, filter and reload must work.
- Render task text as text, not HTML.
- Visible keyboard focus; preserve sensible focus after list updates.
- Fit 360px, 390px and 1280px viewports without page overflow.
- Include an About this exercise disclosure with a Reset practice data button.
- Reset practice data removes only this app's storage key.
- No dependencies, account, backend, analytics or external requests.
## Delivery
Explain changes, run node --test core.test.mjs, and list actual browser checks.
Do not claim checks that were not run. Do not publish or deploy.
3단계: 설계 확인 후 단계별 구현
Plan 모드Plan 모드로 구현 전 계획하기Plan 모드는 범위와 접근법을 결정할 때 유용합니다. 결과물은 구현 계획이며 완성된 코드는 아닙니다. 입력, 출력, 제한과 검증 방법이 포함되었는지 확인합니다.전체 글 읽기로 brief.md를 읽고 다섯 파일의 책임·데이터 흐름·검증을 제안하게 합니다. core.mjs는 DOM을 접근하지 않고 app.js가 조작·저장을 맡으며 프레임워크·추가 서비스가 없는지 확인하세요. 손상·복원이 빠졌으면 계획에 보충하고 구현으로 전환합니다. 데이터·시험과 화면·상호작용 두 단계로 나눠 매번 실제 변경·미검증 항목을 보고하게 합니다.
Implement core.mjs and core.test.mjs from the approved brief.md contract.
Keep all data operations immutable. Test empty and long titles, Unicode,
duplicate IDs, filters, missing IDs, storage round trips and invalid storage.
Run node --test core.test.mjs and report the command, result and remaining work.
Do not change the brief, publish anything or build the UI in this stage.
Implement index.html, style.css and app.js using the tested core.mjs.
Follow the UI, storage, accessibility and responsive criteria in brief.md.
Do not weaken the data tests to accommodate UI bugs.
Run the data tests again. Give local preview instructions and list which
browser interactions you actually verified and which still need verification.
각 단계 후 직접 파일을 보고 시험을 실행하세요. 참고 core.test.mjs에는 여러 단언을 가진 상위 시험 세 개가 있지만 생성된 시험 수는 달라도 되므로 개수만 비교하지 않습니다. 구현·시험이 같은 오해를 공유할 수 있어 다음 독립 화면 점검이 필요합니다. 막히면 expected의 해당 파일을 비교해 원인을 이해하고 미저장 작업을 통째로 덮어쓰지 마세요. 되돌리기는 Git과 복원Git, 브랜치, diff와 복원Git은 파일 이력, 브랜치는 변경 묶음, diff는 차이를 관리합니다. 대화를 재개한다고 파일이 복원되지는 않습니다.전체 글 읽기을 먼저 확인합니다.
4단계: 같은 폴더 미리 보기
node --test core.test.mjs
py -3 -m http.server 4173 --bind 127.0.0.1
node --test core.test.mjs
python3 -m http.server 4173 --bind 127.0.0.1
http://127.0.0.1:4173을 열고 터미널을 유지하며 다른 명령은 별도 터미널을 씁니다. 포트가 사용 중이면 자신의 연습 서버인지 확인한 뒤 중단을 판단하고 빈 포트로 바꾸면 URL·검증 기록도 바꾸세요. HTML 직접 열기의 file URL은 ES module을 제한할 수 있습니다. 다른 버전이 보이면 전체 재작성을 요청하기 전에 제공 폴더·URL·Network의 app.js를 확인합니다.
5단계: 기능과 화면 검증
About this exercise를 펼쳐 모두 버려도 되는 가상 데이터인지 확인한 뒤 Reset practice data로 전용 키만 지웁니다. Show에서 All tasks를 선택하고 0 active / 0 total을 확인한 뒤 Read·Build를 추가하고 Read를 완료하세요. All tasks는 두 개, Active는 Build, Completed는 Read, 통계는 1 active / 2 total이어야 합니다. 새로고침 후 유지되는지 확인하고 All tasks로 돌아와 Read를 삭제하면 Build가 남습니다. 첫 화면 한 장으로 끝내지 말고 다음 표를 검증하세요.
| 사례 | 동작 | 예상 결과 |
|---|---|---|
| 공백 | 공백 세 개 제출 | 추가 안 됨·이해 가능한 오류 |
| Unicode | 寫作 ✨ 추가 | 새로고침 후 유지 |
| 텍스트 안전 | 아래 HTML 시험 문자열 추가 | 문자 표시·이미지 요소 없음 |
| 키보드 | Tab·Enter·Space | 초점 표시·완료/삭제 후 조작 가능 |
| 휴대전화 폭 | 360px·390px, 긴 제목 | 줄바꿈·페이지 가로 넘침 없음 |
| 데스크톱 폭 | 1280px | 목록·통계·조작 읽기 가능 |
반응형 모드는 실제 iOS/Android 시험이 아니며 첨부 Windows/Edge 참고 화면은 이번 생성 결과의 증거가 아닙니다.
<img src=x>
6단계: 손상 데이터·수정·전달
고급 확인은 로컬 가상 페이지에서만 합니다. 필요한 기록을 저장하고 개발자 도구 Storage/Application → Local Storage에서 현재 127.0.0.1과 포트를 선택하세요. mokaair-codex-todo-v1을 bad-json으로 바꿔 새로고침하면 경고가 나와야 합니다. 임시 항목 추가 후 저장값이 몰래 덮어써지지 않고 bad-json인지 확인합니다. Reset practice data로 해당 키만 지운 뒤 새 항목·새로고침으로 저장 복구를 확인하세요. 다른 사이트 전체 데이터를 지우지 않습니다.
인계 전에 가상 데이터를 비운 뒤 아래 순서로 진행하고 기대와 관찰을 나누어 적습니다. 참조 구현을 써도 자신의 페이지를 관찰하세요. 필터를 적용해도 전체 작업을 세는 조건은 보이는 일부만 세는 오류를 잡습니다. 미리보기를 사용할 수 없으면 미검증으로 남기고 기대값을 실측으로 적지 마세요.
# Website handoff
Root / source version:
Node test command / exit status:
Browser / version / viewport / date:
| Step | Expected active / total | Observed |
| --- | --- | --- |
| Reset fictional practice data; select All tasks | 0 / 0 | |
| Add Read, then Build | 2 / 2 | |
| Complete Read | 1 / 2 | |
| Select Active; only Build visible | 1 / 2 | |
| Select Completed; only Read visible | 1 / 2 | |
| Select All tasks, delete Read | 1 / 1 | |
Input/storage recovery evidence:
Keyboard and narrow-layout evidence:
Actual changed files:
Unverified requirements:
How to restart / restore:
실패하면 입력·동작·예상·실제 값을 정확히 전달하고 버그 절차버그 수정의 전체 과정디버깅은 재현 가능한 증상에서 시작해 근거로 원인을 좁히고 수정 결과를 검증합니다. 입력, 단계, 기대와 실제 결과를 전달하세요.전체 글 읽기로 해당 계층만 수정·재검증하게 합니다. brief·파일 다섯 개·Node 기록·넓은/좁은 화면·미실측 플랫폼·복원 방법을 전달하세요. 원래 터미널 Ctrl+C로 서버를 중지하고 인계 형식맥락과 작업 인계긴 작업에는 결정과 증거를 남깁니다. README는 사용법, 설계 문서는 이유, 인계는 진행 상황, AGENTS.md는 지속할 규칙으로 구분합니다.전체 글 읽기으로 재시작법을 요청합니다. 프레임워크·백엔드·공개 호스팅은 별도 명시한 범위이며 로컬 표시를 배포 완료로 보지 않습니다.
Codex 학습 목차로 돌아가기Codex 학습 센터: 전체 튜토리얼 목차설치와 첫 작업부터 MD 지침과 고급 연동까지 60개 강의, 열 개 단원을 계획합니다. 수준, 환경, 목표, 명령으로 다음 글을 찾고 미게시 항목의 상태를 확인할 수 있습니다.전체 글 읽기
자세한 설명 보기
Brief to HTML / CSS to Browser checks


같은 주제의 글
라이프스타일
Codex 학습 센터: 전체 튜토리얼 목차
설치와 첫 작업부터 MD 지침과 고급 연동까지 60개 강의, 열 개 단원을 계획합니다. 수준, 환경, 목표, 명령으로 다음 글을 찾고 미게시 항목의 상태를 확인할 수 있습니다.
라이프스타일
Worktree와 작업 격리
Worktree는 하나의 Git 저장소에 다른 브랜치의 작업 폴더를 만듭니다. 파일이 분리되어도 DB, 포트와 외부 서비스는 공유될 수 있습니다.
라이프스타일
사용량과 효율: 재작업 줄이기
조건, 모델 선택, 시간, 결과를 기록해 불필요한 재시도와 과도한 문맥을 줄입니다.
라이프스타일
기존 코드베이스 이해
읽기 흐름으로 진입점, 데이터 흐름, 테스트를 찾아 파일 근거가 있는 프로젝트 지도를 만듭니다.
최신 여행 소식·가이드

가이드도쿄
도쿄 어디에 묵을까? 신주쿠·우에노·도쿄역·시부야·아사쿠사·이케부쿠로·긴자 일곱 지역 비교: 공항 교통, 숙박세, 짐 배송까지
도쿄 어디에 묵을까? 신주쿠, 우에노, 도쿄역, 시부야, 아사쿠사, 이케부쿠로, 긴자 일곱 지역을 같은 기준으로 비교한다. 나리타·하네다 공항에서 오는 방법, 교통 노선, 주변의 볼거리, 동네 분위기, 적합한 여행자를 비교표와 야마노테선 안내도로 살펴보고, 2026년 9월에 확인한 도쿄도 숙박세(2027년 4월부터 3%)와 공항 택배로 짐을 보내는 규정도 정리했다.
- 예산
- 호텔

가이드도쿄
도쿄 교통패스 선택법: Suica/Welcome Suica, Tokyo Subway Ticket, JR Pass는 살 만할까?
도쿄를 처음 여행한다면 먼저 1인당 IC 카드 한 장으로 탈 때마다 결제한다(Welcome Suica는 보증금이 없고 28일간 유효). 하루에 지하철을 4번 이상 타면 2,000엔짜리 Tokyo Subway Ticket 72시간권을 추가하고, 간사이에 가지 않고 도쿄만 여행한다면 JR Pass는 반드시 손해다. TOURIST PASMO, iPhone의 Suica, 도쿄 Metro 하루권의 이용 가능·불가 범위를 결정도로 비교한다. 가격은 2026년 9월 확인.
- 교통
- 예산

가이드도쿄
도쿄 디즈니랜드·디즈니씨 가이드: 티켓 가격, 판타지 스프링스 Fantasy Springs, 디즈니 프리미어 액세스 DPA와 스탠바이 패스 이용법, 첫 방문에는 어느 파크가 좋을까
도쿄 디즈니 하루짜리 패스포트는 변동 가격제로, 2026년 9월에는 평일 대부분이 9,900엔, 주말이 10,900엔이다. 공식 홈페이지에서 매일 14:00에 두 달 뒤 같은 날짜의 티켓을 판매한다. 무료 프라이오리티 패스는 공식 서비스 목록에서 빠져 대기 시간을 줄이는 방법은 유료 디즈니 프리미어 액세스(한 사람당 한 번 1,000~3,500엔)뿐이다. 운영 시간, 25주년 행사, 스탠바이 패스, 엔트리 리퀘스트, 판타지 스프링스 이용법, 첫 방문 때 디즈니랜드와 디즈니씨 중 어디를 고를지도 담았다. 2026년 9월 공식 홈페이지에서 확인했다.
- 추천 일정
- 가족 여행
출처
- Codex prompting · 확인일:
- Codex browser · 확인일: