OFFLINE / DAY 2
2일차 · 4교시 본문 교재
이 파일에는 해당 일차의 교시·실습·프롬프트·강사 설명만 담았습니다. 실습 교재에는 학생용 단계별 절차가 있습니다.
이 폴더 안에서 발표·교재·코드·심화 원문을 오프라인으로 이동할 수 있습니다.
OFFLINE / DAY 2
이 파일에는 해당 일차의 교시·실습·프롬프트·강사 설명만 담았습니다. 실습 교재에는 학생용 단계별 절차가 있습니다.
| 기술 | 종류 | 역할 |
|---|---|---|
| HTML·CSS | 마크업·스타일 언어 | 화면 구조와 표현 |
| JavaScript·TypeScript | 프로그래밍 언어 | 화면·서버의 동작 |
| React·Next.js | UI 라이브러리·웹 프레임워크 | 컴포넌트·페이지·서버 경로 |
| Node.js | 서버 실행 환경 | TypeScript/JavaScript 서버 실행 |
| PostgreSQL·SQL | 관계형 DB·질의 언어 | 저장·조회·무결성 |
| Supabase | 백엔드 플랫폼 | DB·Auth·Storage·API |
| Docker·Vercel | 컨테이너 도구·배포 플랫폼 | 로컬 스택·공개 앱 |
세 프로젝트의 주 DB는 Supabase PostgreSQL이다. MySQL·SQLite는 관계형 DB, MongoDB는 문서형 DB의 비교 예시다. uc-anchor의 선택형 Python PDF 서비스는 Next.js·Vercel 기본 배포와 분리해 설명한다. 현재 운영 전체 기능을 재검증한 표는 아니다.
목차와 처음으로 ↑과제 체크 앱 수정·검색, 기능별 커밋과 PR, Docker 개발 환경
전날 앱의 실제 파일을 읽고 기존 데이터를 보존하며 과제를 수정한다.
산출물: 기능 브랜치와 과제 수정 기능의 첫 커밋
| 번호 | 제목 | 진행 내용 |
|---|---|---|
| 047 | 어제 만든 앱, 오늘 개선하기 | 아래 단계별 실습을 진행한다. |
| 048 | Codex: 과제 수정·저장·취소 | 아래 전체 구현 요청을 사용한다. |
| 049 | Codex로 기존 앱 읽고 수정하기 | 전날 앱의 실제 파일을 읽고 기존 데이터를 보존하며 과제를 수정한다. / 산출물: 기능 브랜치와 과제 수정 기능의 첫 커밋 / 도입8 · clone/브랜치10 · 읽기/수정20 · 짝검증8 · 정리4분 |
| 050 | 핵심 개념 | Codex의 작업 폴더와 실제 소스 읽기 / 같은 저장 키·id를 보존하는 작은 변경 / 기능 브랜치와 첫 커밋 |
| 051 | Codex 수정도 작은 Git 기록부터 | 작업 폴더→staging area→commit의 세 영역을 구분한다. / 수정 전에 폴더·브랜치·실행 명령·변경 파일을 확인한다. / 시제품을 가져오면 서버·DB·외부 API 의존성부터 읽는다. / 과제 수정 기능을 작게 구현하고 diff와 검증을 남긴다. |
| 052 | uc-anchor · 이번 실습에 적용할 판단 | 기록: 기능이 확장되며 화면과 업무 규칙을 함께 점검했다. / 비교: 프런트엔드 수정도 DB 저장 규칙과 연결된 부분을 읽어야 한다. / 적용: 과제 수정 전 기존 추가·완료·삭제의 성공 기준을 적는다. |
| 053 | 실습 절차 | 아래 단계별 실습을 진행한다. |
| 054 | Codex에 입력할 요청 | 아래 전체 구현 요청을 사용한다. |
| 055 | 완료 확인과 오류 대응 | 수정 후 id·완료·생성시각·개수가 유지된다. / 취소와 공백 입력을 확인한다. / 첫 기능 커밋을 만들고 diff를 설명한다. |
J01~J06과 B01~B08을 사용한다. 학생 절차·명령·예제 요청·강사 설명과 체크포인트 파일을 제공한다.
2일차 전체 단계별 실습 교재 ↗ · 시작·중간·완성 코드 ZIP
해당 교시의 설명을 대체하거나 실습 뒤 선택한다. 별도 수업시간을 추가하지 않는다.
Git 명령 전체를 암기시키지 않는다. 이번 변경의 diff·검증·커밋을 한 묶음으로 설명하고 긴 명령 예제는 원문 파일에서 선택한다.
1교시 도입 8분에 전날 앱을 다시 연다. Codex 접근이 제한되면 ZIP의 starter→checkpoint-edit→solution을 비교하며 Git 절차를 계속한다. 무료 AI로 시작한 앱을 Codex의 실제 파일 편집으로 이어가는 과정이다. GitHub는 원격 저장소, clone은 내 컴퓨터 복사본, Codex는 이 폴더의 파일을 읽고 수정하는 도구라고 설명한다. 복사본 폴더를 여러 개 만들지 않는다. 로컬 서버가 필요하면 Codex가 설치된 실행 도구를 확인해 띄우게 한다. Python 등 새 도구 설치를 수업의 필수로 만들지 않는다. 브랜치를 만들었다고 폴더나 배포 사이트가 새로 생기지 않는다. Git 이력의 작업 지점을 나눈 것이다. Worktree는 별도 폴더가 필요한 때의 선택 시연으로만 다룬다. 기존 작업은 보존한다. 1교시 50분은 도입8·clone/브랜치10·읽기/수정20·짝 검증8·커밋/정리4로 진행한다. AI가 전체 앱을 다시 만들면 저장 키와 id 보존 조건을 재확인한다. 코드 저장과 commit의 차이를 보여준다. 상세 실습은 assignment-day2-lab.html과 J01~J06을 사용한다. Next.js·React·TypeScript는 언어/프레임워크 비교 확장으로 설명하며 이 앱의 필수 실습은 단일 HTML을 유지한다.
현재 폴더의 과제 체크 앱을 읽고 현재 경로, Git 브랜치와 status, index.html의 역할, localStorage 키와 데이터 구조를 먼저 요약해줘. 이어 각 과제에 수정 버튼을 추가하고 기존 입력 폼에서 제목·과목·마감일을 수정·저장·취소할 수 있게 최소 변경해줘. 같은 id 항목만 변경하고 done·createdAt·과제 개수와 기존 저장 데이터는 유지해줘. 취소는 저장하지 않고 수정 버튼으로 초점을 돌려줘. 빈값·공백·길이·날짜 검증, textContent, 입력 label과 네이티브 버튼을 유지해줘. 수정 중인 항목을 삭제할 때 폼도 정리해줘. 변경 파일과 diff, 실제 검증 결과를 설명해줘. 서버·DB·외부 패키지·API는 추가하지 마. 아직 commit·push·PR·merge는 실행하지 마.현재 과제 체크 앱의 diff를 검토하고 실제 실행한 검사와 미확인을 구분해줘. 전날 데이터가 유지되는지, 완료한 과제를 수정해도 id·done·createdAt·개수가 같은지, 취소 전후 저장 데이터가 같은지, 공백 수정 거절, 제목/과목 검색·대소문자·빈 결과·완료 필터 조합·검색 지우기, 수정 중 삭제/되돌리기, 추가·완료·새로고침·날짜 집계·저장 실패 안내를 확인해줘. 390px 화면과 키보드 초점도 확인해줘. 문제는 재현 절차와 최소 수정으로 보고해줘. 마지막으로 기능별 커밋 메시지와 PR 제목·본문 초안을 제안해줘. 현재 경로·브랜치·remote와 대상 파일을 다시 확인해주고 사용자 데이터·비밀값을 출력하지 마. 원격 push·PR 생성·merge·배포는 내가 해당 단계에서 실행할게.Codex가 파일을 만들기 전에 기존 구조를 읽게 하는 이유는?
현재 버전과 경로, 프로젝트 규칙을 알아야 중복 파일과 잘못된 API 사용을 줄일 수 있다.
제목·과목 검색을 추가하고 기존 기능의 회귀를 검사한다.
산출물: 검색 기능의 두 번째 커밋과 실제 검사표
| 번호 | 제목 | 진행 내용 |
|---|---|---|
| 056 | Codex: 제목·과목 검색 | 아래 전체 구현 요청을 사용한다. |
| 057 | 새 기능 다음엔 기존 기능도 확인 | 완료한 과제 수정: id·완료·생성시각·개수 유지 / 수정 취소: 저장 값 그대로 · 공백 입력 거절 / 검색 + 완료 필터 · 없는 결과 · 지우기 / 추가·삭제/되돌리기·날짜 집계·새로고침·390px |
| 058 | 과제 검색과 기존 기능 검증 | 제목·과목 검색을 추가하고 기존 기능의 회귀를 검사한다. / 산출물: 검색 기능의 두 번째 커밋과 실제 검사표 / 검색요구8 · 구현15 · 회귀15 · 짝검증8 · 정리4분 |
| 059 | 핵심 개념 | 검색과 완료 필터의 교집합 / 동일 항목 수정과 취소 / 새 기능 뒤 기존 동작을 다시 검사하는 회귀 검증 |
| 060 | 검색 개선과 회귀 검사·복구의 기준 | 검색은 표시 조건만 바꾸고 실제 저장 데이터를 바꾸지 않는다. / 회귀 검사로 추가·수정·완료·삭제·새로고침을 다시 확인한다. / 충돌은 파일별 의도를 읽고 해결한 뒤 실행과 diff를 검사한다. / 복구 대상이 작업 파일·로컬 commit·공유 이력 중 무엇인지 먼저 정한다. |
| 061 | uc-anchor · 이번 실습에 적용할 판단 | 기록: 화면과 업무 규칙이 결합되며 기존 동작의 일관성이 중요해졌다. / 비교: 검색 구현도 목록 표시와 저장 결과를 따로 검증한다. / 적용: 이전 기능을 확인한 체크리스트와 작은 기능별 commit을 남긴다. |
| 062 | 실습 절차 | 아래 단계별 실습을 진행한다. |
| 063 | Codex에 입력할 요청 | 아래 전체 구현 요청을 사용한다. |
| 064 | 완료 확인과 오류 대응 | 제목·과목 검색과 완료 필터가 함께 작동한다. / 검색·취소가 저장 데이터를 바꾸지 않는다. / 회귀 검사표와 두 번째 커밋을 남긴다. |
J01~J06과 B01~B08을 사용한다. 학생 절차·명령·예제 요청·강사 설명과 체크포인트 파일을 제공한다.
2일차 전체 단계별 실습 교재 ↗ · 시작·중간·완성 코드 ZIP
해당 교시의 설명을 대체하거나 실습 뒤 선택한다. 별도 수업시간을 추가하지 않는다.
충돌/복구 명령은 별도 실습 저장소에서 선택 심화로 진행한다. 학생 과제의 미커밋 변경을 지우는 명령을 기본 진행 순서에 넣지 않는다.
2교시 50분은 검색 요구8·구현15·회귀 검증15·짝 검증8·커밋/정리4다. 검색 기능이 쉬워 보여도 저장 데이터와 필터 조합에 영향을 줄 수 있음을 보여준다. 첫 커밋 덕분에 두 변경의 이유를 따로 설명할 수 있다. 개발자 도구의 localStorage를 지우거나 운영 데이터를 덮어쓰지 않는다. localhost와 Pages는 서로 다른 origin이라 목록이 다른 것은 정상이다. 강사 공개 앱의 루트와 /day2/는 같은 origin·키로 목록을 이어 읽도록 설계했다. 상세 실습은 assignment-day2-lab.html과 J01~J06을 사용한다. Next.js·React·TypeScript는 언어/프레임워크 비교 확장으로 설명하며 이 앱의 필수 실습은 단일 HTML을 유지한다.
현재 수정 기능과 기존 추가·완료·삭제/되돌리기·저장·날짜 집계를 보존하고 제목·과목 부분 검색을 추가해줘. 앞뒤 공백을 제거하고 대소문자를 무시하며 전체/미완료/완료 필터와 함께 적용해줘. 검색어가 비면 기존 필터 목록, 결과가 없으면 안내, 검색 지우기 버튼과 현재 표시 개수를 제공해줘. 검색은 과제를 삭제하거나 전체 집계·저장 데이터를 바꾸지 않는 화면 조건이야. label이 연결된 네이티브 search 입력을 쓰고 검색 조건은 저장하지 마. 추가·수정 저장 뒤 검색과 완료 필터를 초기화해 결과를 보여줘. 모바일 가로 넘침과 키보드 조작을 확인해줘. 변경 파일·diff·검증 결과를 보여주되 commit·push·PR·merge는 아직 하지 마.현재 과제 체크 앱의 diff를 검토하고 실제 실행한 검사와 미확인을 구분해줘. 전날 데이터가 유지되는지, 완료한 과제를 수정해도 id·done·createdAt·개수가 같은지, 취소 전후 저장 데이터가 같은지, 공백 수정 거절, 제목/과목 검색·대소문자·빈 결과·완료 필터 조합·검색 지우기, 수정 중 삭제/되돌리기, 추가·완료·새로고침·날짜 집계·저장 실패 안내를 확인해줘. 390px 화면과 키보드 초점도 확인해줘. 문제는 재현 절차와 최소 수정으로 보고해줘. 마지막으로 기능별 커밋 메시지와 PR 제목·본문 초안을 제안해줘. 현재 경로·브랜치·remote와 대상 파일을 다시 확인해주고 사용자 데이터·비밀값을 출력하지 마. 원격 push·PR 생성·merge·배포는 내가 해당 단계에서 실행할게.검색했을 때 목록이 줄어드는 것과 실제 과제 삭제는 어떻게 구분하는가?
검색은 표시 조건만 바꾼다. 검색 지우기와 새로고침 뒤 원래 과제·개수·완료 상태가 유지되는지 확인한다.
기능별 커밋을 PR로 검토·병합하고 공개 앱을 확인한다.
산출물: 커밋2개·병합 PR·Pages 배포 근거와 공개 URL
| 번호 | 제목 | 진행 내용 |
|---|---|---|
| 065 | 두 커밋에서 하나의 PR로 | 아래 단계별 실습을 진행한다. |
| 066 | 병합·배포·동작은 각각 확인 | PR 병합 뒤 Pages/Actions의 배포 커밋 확인 / 공개 github.io에서 수정·검색·저장 다시 검사 / 로컬 main은 switch → pull --ff-only로 갱신 / 남길 증거: 커밋2개 · PR · 배포 커밋 · 공개 URL |
| 067 | Git·GitHub PR과 Pages 재배포 | 기능별 커밋을 PR로 검토·병합하고 공개 앱을 확인한다. / 산출물: 커밋2개·병합 PR·Pages 배포 근거와 공개 URL / 도입8 · push/PR12 · 짝검토10 · 병합/Pages8 · 검증8 · 정리4분 |
| 068 | 핵심 개념 | stage·commit·push의 위치와 역할 / PR의 base/head·diff·검토·병합 / main·Pages 배포 커밋·공개 동작의 서로 다른 근거 |
| 069 | origin/main·PR·병합을 눈으로 확인 | origin은 원격 별칭, main은 로컬 브랜치, origin/main은 원격 추적 참조다. / fetch는 참조를 갱신하고 pull은 현재 브랜치에 통합한다. / PR 검토·merge·배포 완료는 서로 다른 단계다. / 아래 Git 상태 시뮬레이터로 add→commit→push→원격 변경→fetch를 비교한다. |
| 070 | 관찰 실습: Git 상태 변화 | 이 화면은 가상 이력 시뮬레이션이며 실제 Git 저장소를 변경하지 않는다. / 원격 추가 commit 이후 fetch를 해도 로컬 파일은 그대로 남는다. |
| 071 | kysong · 이번 실습에 적용할 판단 | 기록: GitHub 저장소와 Vercel 배포를 연결해 기능을 확장했다. / 비교: 로컬 commit·원격 push·서비스 배포의 결과를 각각 확인한다. / 적용: 학생 과제 앱은 PR 병합 뒤 Pages의 실제 공개 기능을 재검사한다. |
| 072 | 실습 절차 | 아래 단계별 실습을 진행한다. |
| 073 | Codex에 입력할 요청 | 아래 전체 구현 요청을 사용한다. |
| 074 | 완료 확인과 오류 대응 | 내 저장소에 커밋2개를 포함한 PR을 만든다. / 병합과 Pages 배포 상태를 구분한다. / 공개 URL에서 실제 기능을 검사한다. |
J01~J06과 B01~B08을 사용한다. 학생 절차·명령·예제 요청·강사 설명과 체크포인트 파일을 제공한다.
2일차 전체 단계별 실습 교재 ↗ · 시작·중간·완성 코드 ZIP
해당 교시의 설명을 대체하거나 실습 뒤 선택한다. 별도 수업시간을 추가하지 않는다.
Thomas dot의 브랜치·origin/main 설명을 이 교시에서 사용한다. 병합 방식/30분 추가 연습/질문 카드는 선택 참고이며 기존 PR 실습시간을 연장하지 않는다.
3교시 도입8분에 G05 상태 변화를 보여준다. push/PR12·짝 검토10·병합/Pages8·배포 검증8·정리4분이다. PR 제목보다 변경 이유·검증 근거를 읽게 한다. private 토큰·실제 학생 과제는 본문에 넣지 않는다. PR 병합은 소스 반영, Pages built는 배포 결과, 브라우저 검사는 사용자가 보는 동작의 근거다. 서로 구분한다. 원격 main을 병합한 뒤 로컬 main도 갱신한다. 기능 브랜치 삭제·충돌 해결은 필수가 아니다. 4교시는 기존 Docker·로컬 Supabase 준비로 이어가며 하루 시간은 늘리지 않는다. 상세 실습은 assignment-day2-lab.html과 J01~J06을 사용한다. Next.js·React·TypeScript는 언어/프레임워크 비교 확장으로 설명하며 이 앱의 필수 실습은 단일 HTML을 유지한다.
현재 과제 체크 앱의 diff를 검토하고 실제 실행한 검사와 미확인을 구분해줘. 전날 데이터가 유지되는지, 완료한 과제를 수정해도 id·done·createdAt·개수가 같은지, 취소 전후 저장 데이터가 같은지, 공백 수정 거절, 제목/과목 검색·대소문자·빈 결과·완료 필터 조합·검색 지우기, 수정 중 삭제/되돌리기, 추가·완료·새로고침·날짜 집계·저장 실패 안내를 확인해줘. 390px 화면과 키보드 초점도 확인해줘. 문제는 재현 절차와 최소 수정으로 보고해줘. 마지막으로 기능별 커밋 메시지와 PR 제목·본문 초안을 제안해줘. 현재 경로·브랜치·remote와 대상 파일을 다시 확인해주고 사용자 데이터·비밀값을 출력하지 마. 원격 push·PR 생성·merge·배포는 내가 해당 단계에서 실행할게.현재 과제 체크 앱의 diff를 검토하고 실제 실행한 검사와 미확인을 구분해줘. 전날 데이터가 유지되는지, 완료한 과제를 수정해도 id·done·createdAt·개수가 같은지, 취소 전후 저장 데이터가 같은지, 공백 수정 거절, 제목/과목 검색·대소문자·빈 결과·완료 필터 조합·검색 지우기, 수정 중 삭제/되돌리기, 추가·완료·새로고침·날짜 집계·저장 실패 안내를 확인해줘. 390px 화면과 키보드 초점도 확인해줘. 문제는 재현 절차와 최소 수정으로 보고해줘. 마지막으로 기능별 커밋 메시지와 PR 제목·본문 초안을 제안해줘. 현재 경로·브랜치·remote와 대상 파일을 다시 확인해주고 사용자 데이터·비밀값을 출력하지 마. 원격 push·PR 생성·merge·배포는 내가 해당 단계에서 실행할게.한 커밋에 화면 수정과 인증 정책 변경을 함께 넣으면 무엇이 어려운가?
검토와 오류 원인 추적, 일부 변경만 되돌리기가 어려워진다.
분리된 로컬 DB에서 인증과 데이터 실험을 시작한다.
산출물: 로컬 Supabase 실행과 연결 확인
| 번호 | 제목 | 진행 내용 |
|---|---|---|
| 075 | Docker와 로컬 Supabase | 분리된 로컬 DB에서 인증과 데이터 실험을 시작한다. / 산출물: 로컬 Supabase 실행과 연결 확인 / 도입8 · 실습30 · 짝검증8 · 정리4분 |
| 076 | 핵심 개념 | 컨테이너 실행 환경 / 로컬과 클라우드의 분리 / 설정과 로그의 확인 |
| 077 | 분리한 작업 폴더와 Docker 개발 환경 | Worktree는 같은 저장소의 다른 작업 폴더이며 브랜치와 다르다. / 폴더가 달라도 포트·환경 파일·DB 연결은 충돌할 수 있다. / Docker 로컬 Supabase는 운영 데이터를 건드리지 않는 검증 환경이다. / 별도 작업 폴더·포트·DB 대상을 기록하고 실습 뒤 본인 환경만 정리한다. |
| 078 | u-livet · 이번 실습에 적용할 판단 | 기록: Docker의 로컬 Supabase에서 인증·업무 기능을 검증했다. / 판단: 운영은 관리형 Supabase와 Vercel로 역할을 나눴다. / 적용: 과제 앱도 로컬 가상 계정으로 RLS를 실험한다. |
| 079 | 실습 절차 | 아래 단계별 실습을 진행한다. |
| 080 | Codex에 입력할 요청 | 아래 전체 구현 요청을 사용한다. |
| 081 | 완료 확인과 오류 대응 | 수업용 로컬 프로젝트를 식별한다. / 앱과 로컬 DB의 연결을 확인한다. / 대상 서비스의 시작·로그·종료 방법을 설명한다. |
해당 교시의 설명을 대체하거나 실습 뒤 선택한다. 별도 수업시간을 추가하지 않는다.
Docker가 브랜치마다 DB를 자동 분리해준다고 설명하지 않는다. Worktree 생성·멀티기기·정리는 선택 심화이고 본 실습은 로컬 스택의 실행과 연결 확인이다.
u-livet README의 실제 로컬 실행 흐름을 보여준다. Docker는 로컬 Supabase를 재현하는 환경이며, 프로젝트를 Vercel에 공개하는 단계와 역할이 다르다. 첫 이미지 다운로드는 수업 전에 끝내 둔다. 실습에서 reset이나 일괄 정리 명령을 기본 복구법으로 가르치지 않는다.
Docker와 Supabase CLI의 현재 상태를 읽기 전용으로 확인해줘. 기존 다른 프로젝트의 컨테이너와 포트를 보존해줘.
이 새 수업용 폴더에만 로컬 Supabase를 초기화하고 실행할 명령을 --help 기준으로 설명해줘. 다른 프로젝트와 포트가 겹치면 이 프로젝트 설정만 바꿔줘.
앱에 로컬 URL과 공개 가능한 키를 연결하는 방법을 알려주되 비밀값은 출력하지 마. 원격 DB 연결·초기화·컨테이너 전체 정리는 하지 마.실행 실패의 원인을 Docker 엔진, 포트 충돌, 이미지 다운로드, 프로젝트 설정 순서로 확인해줘. 대상 프로젝트의 컨테이너와 로그만 읽고 원인을 설명해줘. docker system prune이나 다른 프로젝트 삭제로 해결하지 마.로컬 Supabase에 만든 데이터가 클라우드에도 자동으로 생기는가?
서로 다른 환경이다. 스키마와 데이터 적용은 별도 절차와 검증이 필요하다.
목차와 처음으로 ↑전날 만든 같은 과제 체크 앱에 수정·검색을 추가하고 기능별 커밋 2개, PR 검토·병합, Pages 재배포로 연결한다.
개선 앱 ↗ · 시작·중간·완성 ZIP · 실제 강사 PR ↗ (온라인 안내) · 1일차 실습
| 교시 | 50분 운영 | 산출물 |
|---|---|---|
| 2일차 1교시 | 도입8·clone/브랜치10·읽기/수정20·짝 검증8·정리4 | 기능 브랜치·수정 기능·첫 커밋 |
| 2일차 2교시 | 검색 요구8·구현15·회귀15·짝 검증8·정리4 | 검색 기능·검사표·두 번째 커밋 |
| 2일차 3교시 | 도입8·push/PR12·짝 검토10·병합/Pages8·검증8·정리4 | 병합 PR·공개 URL·배포 근거 |
| 2일차 4교시 | 기존 Docker·로컬 Supabase 실습 유지 | 다음 날 DB·인증 연결 준비 |
Codex 로그인·이용 범위·사용량, Git 설치·GitHub 인증과 본인 저장소를 확인한다. 계정 제한 때는 ZIP 체크포인트로 이어간다. 학생은 본인 저장소의 최상위 index.html을 수정한다. 강사 공개 예제만 1일차 화면 보존을 위해 /day2/에 둔다. starter는 전날 기준, checkpoint-edit는 수정 기능, solution은 수정+검색이다. ZIP은 Git 이력을 포함하지 않으므로 clone한 저장소 안에서 해당 HTML을 참고한다.
Codex는 현재 소스 파일을 직접 읽고 수정한다. 파일 저장, commit, push, PR, merge, Pages 배포는 서로 다른 단계다. Git에는 소스 이력이 기록되고 브라우저에 입력한 과제 목록이 자동 저장되는 것은 아니다.
목차와 처음으로 ↑요청 1→검사→커밋 1, 요청 2→검사→커밋 2 순서다. 계정 이용 조건은 수업 전에 확인하며 이 앱 안에서는 AI API를 호출하지 않는다.
현재 폴더의 과제 체크 앱을 읽고 현재 경로, Git 브랜치와 status, index.html의 역할, localStorage 키와 데이터 구조를 먼저 요약해줘. 이어 각 과제에 수정 버튼을 추가하고 기존 입력 폼에서 제목·과목·마감일을 수정·저장·취소할 수 있게 최소 변경해줘. 같은 id 항목만 변경하고 done·createdAt·과제 개수와 기존 저장 데이터는 유지해줘. 취소는 저장하지 않고 수정 버튼으로 초점을 돌려줘. 빈값·공백·길이·날짜 검증, textContent, 입력 label과 네이티브 버튼을 유지해줘. 수정 중인 항목을 삭제할 때 폼도 정리해줘. 변경 파일과 diff, 실제 검증 결과를 설명해줘. 서버·DB·외부 패키지·API는 추가하지 마. 아직 commit·push·PR·merge는 실행하지 마.현재 수정 기능과 기존 추가·완료·삭제/되돌리기·저장·날짜 집계를 보존하고 제목·과목 부분 검색을 추가해줘. 앞뒤 공백을 제거하고 대소문자를 무시하며 전체/미완료/완료 필터와 함께 적용해줘. 검색어가 비면 기존 필터 목록, 결과가 없으면 안내, 검색 지우기 버튼과 현재 표시 개수를 제공해줘. 검색은 과제를 삭제하거나 전체 집계·저장 데이터를 바꾸지 않는 화면 조건이야. label이 연결된 네이티브 search 입력을 쓰고 검색 조건은 저장하지 마. 추가·수정 저장 뒤 검색과 완료 필터를 초기화해 결과를 보여줘. 모바일 가로 넘침과 키보드 조작을 확인해줘. 변경 파일·diff·검증 결과를 보여주되 commit·push·PR·merge는 아직 하지 마.현재 과제 체크 앱의 diff를 검토하고 실제 실행한 검사와 미확인을 구분해줘. 전날 데이터가 유지되는지, 완료한 과제를 수정해도 id·done·createdAt·개수가 같은지, 취소 전후 저장 데이터가 같은지, 공백 수정 거절, 제목/과목 검색·대소문자·빈 결과·완료 필터 조합·검색 지우기, 수정 중 삭제/되돌리기, 추가·완료·새로고침·날짜 집계·저장 실패 안내를 확인해줘. 390px 화면과 키보드 초점도 확인해줘. 문제는 재현 절차와 최소 수정으로 보고해줘. 마지막으로 기능별 커밋 메시지와 PR 제목·본문 초안을 제안해줘. 현재 경로·브랜치·remote와 대상 파일을 다시 확인해주고 사용자 데이터·비밀값을 출력하지 마. 원격 push·PR 생성·merge·배포는 내가 해당 단계에서 실행할게.본인의 1일차 Pages 앱에서 가상 과제 2개를 만들고 하나를 완료한다. 현재 공개 URL과 수정 전 화면을 기록한다. 오늘은 수정·검색을 추가하고 커밋 2개와 PR로 변경 이유를 남긴다.
Git·GitHub 계정·Codex 로그인과 파일 편집 가능 여부를 확인한다. Codex 이용 가능 범위와 사용량은 계정마다 다를 수 있다. 이 실습 앱에는 AI API 키가 필요 없다.
1교시 도입 8분에 전날 앱을 다시 연다. Codex 접근이 제한되면 ZIP의 starter→checkpoint-edit→solution을 비교하며 Git 절차를 계속한다. 무료 AI로 시작한 앱을 Codex의 실제 파일 편집으로 이어가는 과정이다.
YOUR_ID를 본인 GitHub 아이디로 바꾸고 아래 명령을 한 줄씩 실행한다. 이미 clone했다면 해당 폴더에서 status·remote만 확인한다. Codex 프로젝트에 그 폴더를 연결하고 index.html과 .git이 있는 저장소를 기본 작업 폴더로 선택한다. Codex에 현재 실행 환경을 확인시켜 로컬 미리보기를 연다.
git clone https://github.com/YOUR_ID/assignment-check.git
cd assignment-check
git status -sb
git remote -v
git branch --show-currentgit remote -v가 본인 저장소인지 확인한다. 다운로드 ZIP에는 Git 이력이 없으므로 commit·push 실습은 clone한 폴더에서 한다. 편집기와 터미널이 같은 폴더여야 한다.
GitHub는 원격 저장소, clone은 내 컴퓨터 복사본, Codex는 이 폴더의 파일을 읽고 수정하는 도구라고 설명한다. 복사본 폴더를 여러 개 만들지 않는다. 로컬 서버가 필요하면 Codex가 설치된 실행 도구를 확인해 띄우게 한다. Python 등 새 도구 설치를 수업의 필수로 만들지 않는다.
status에 미커밋 변경이 없고 기본 브랜치가 main인 것을 확인한 뒤 아래 명령을 실행한다. 기본 브랜치가 다르면 실제 이름으로 바꾼다. feature/edit-tasks가 이미 있으면 기존 작업을 확인하고 새 이름을 정한다.
git switch main
git pull --ff-only origin main
git switch -c feature/edit-tasks
git status -sb브랜치 이름이 feature/edit-tasks로 바뀌고 작업 파일은 그대로 보인다. 변경이 있거나 ff-only가 실패하면 중단하고 강사와 원인을 확인한다. reset --hard나 강제 push로 해결하지 않는다.
브랜치를 만들었다고 폴더나 배포 사이트가 새로 생기지 않는다. Git 이력의 작업 지점을 나눈 것이다. Worktree는 별도 폴더가 필요한 때의 선택 시연으로만 다룬다. 기존 작업은 보존한다.
아래 수정 요청을 Codex에 입력한다. 수정 버튼→기존 값 불러오기→변경 저장→취소를 직접 실행한다. 완료한 과제를 수정해도 완료 상태와 개수가 같은지 확인한다. 통과한 뒤 diff를 읽고 index.html만 stage·commit한다.
git diff -- index.html
git add index.html
git diff --cached
git commit -m "Add assignment editing"현재 폴더의 과제 체크 앱을 읽고 현재 경로, Git 브랜치와 status, index.html의 역할, localStorage 키와 데이터 구조를 먼저 요약해줘. 이어 각 과제에 수정 버튼을 추가하고 기존 입력 폼에서 제목·과목·마감일을 수정·저장·취소할 수 있게 최소 변경해줘. 같은 id 항목만 변경하고 done·createdAt·과제 개수와 기존 저장 데이터는 유지해줘. 취소는 저장하지 않고 수정 버튼으로 초점을 돌려줘. 빈값·공백·길이·날짜 검증, textContent, 입력 label과 네이티브 버튼을 유지해줘. 수정 중인 항목을 삭제할 때 폼도 정리해줘. 변경 파일과 diff, 실제 검증 결과를 설명해줘. 서버·DB·외부 패키지·API는 추가하지 마. 아직 commit·push·PR·merge는 실행하지 마.제목·과목·마감일만 바뀌고 원래 과제는 1개다. 취소하면 원래 목록이 유지된다. git diff --cached에 의도한 파일만 있다. 커밋 메시지는 Add assignment editing이다.
1교시 50분은 도입8·clone/브랜치10·읽기/수정20·짝 검증8·커밋/정리4로 진행한다. AI가 전체 앱을 다시 만들면 저장 키와 id 보존 조건을 재확인한다. 코드 저장과 commit의 차이를 보여준다.
검색 요청을 Codex에 입력한다. 제목 일부와 과목을 각각 검색하고 영어 대소문자와 공백, 결과 없음, 완료 필터를 함께 시험한다. 검색 지우기 뒤 정상 목록이 돌아오는지 확인한 뒤 두 번째 commit을 만든다.
git diff -- index.html
git add index.html
git diff --cached
git commit -m "Add title and subject search"
git log --oneline -3현재 수정 기능과 기존 추가·완료·삭제/되돌리기·저장·날짜 집계를 보존하고 제목·과목 부분 검색을 추가해줘. 앞뒤 공백을 제거하고 대소문자를 무시하며 전체/미완료/완료 필터와 함께 적용해줘. 검색어가 비면 기존 필터 목록, 결과가 없으면 안내, 검색 지우기 버튼과 현재 표시 개수를 제공해줘. 검색은 과제를 삭제하거나 전체 집계·저장 데이터를 바꾸지 않는 화면 조건이야. label이 연결된 네이티브 search 입력을 쓰고 검색 조건은 저장하지 마. 추가·수정 저장 뒤 검색과 완료 필터를 초기화해 결과를 보여줘. 모바일 가로 넘침과 키보드 조작을 확인해줘. 변경 파일·diff·검증 결과를 보여주되 commit·push·PR·merge는 아직 하지 마.검색은 보이는 목록만 바꾸고 데이터와 전체 현황 숫자는 유지한다. git log에 수정 기능과 검색 기능이 서로 다른 커밋으로 보인다.
2교시 50분은 검색 요구8·구현15·회귀 검증15·짝 검증8·커밋/정리4다. 검색 기능이 쉬워 보여도 저장 데이터와 필터 조합에 영향을 줄 수 있음을 보여준다. 첫 커밋 덕분에 두 변경의 이유를 따로 설명할 수 있다.
검증 요청과 아래 체크표로 확인한다. 새로고침 뒤 수정 내용과 완료 상태를 확인한다. 같은 제목을 새로 추가한 것이 아닌지, 취소가 저장하지 않는지 검사한다. 수정 중 삭제와 되돌리기, 빈 검색, 휴대폰 화면도 확인한다.
git status -sb
git diff main...HEAD -- index.html
git log --oneline --decorate -4현재 과제 체크 앱의 diff를 검토하고 실제 실행한 검사와 미확인을 구분해줘. 전날 데이터가 유지되는지, 완료한 과제를 수정해도 id·done·createdAt·개수가 같은지, 취소 전후 저장 데이터가 같은지, 공백 수정 거절, 제목/과목 검색·대소문자·빈 결과·완료 필터 조합·검색 지우기, 수정 중 삭제/되돌리기, 추가·완료·새로고침·날짜 집계·저장 실패 안내를 확인해줘. 390px 화면과 키보드 초점도 확인해줘. 문제는 재현 절차와 최소 수정으로 보고해줘. 마지막으로 기능별 커밋 메시지와 PR 제목·본문 초안을 제안해줘. 현재 경로·브랜치·remote와 대상 파일을 다시 확인해주고 사용자 데이터·비밀값을 출력하지 마. 원격 push·PR 생성·merge·배포는 내가 해당 단계에서 실행할게.통과/실패/미확인과 실제 결과를 기록한다. 검사 데이터는 가상 과제만 쓴다. 저장 값 확인은 수업용 가상 데이터에 한해 개발자 도구 Application→Local Storage에서 id·done·createdAt을 비교한다.
개발자 도구의 localStorage를 지우거나 운영 데이터를 덮어쓰지 않는다. localhost와 Pages는 서로 다른 origin이라 목록이 다른 것은 정상이다. 강사 공개 앱의 루트와 /day2/는 같은 origin·키로 목록을 이어 읽도록 설계했다.
대상 remote와 브랜치를 확인한 뒤 push한다. 본인 GitHub 저장소의 Pull requests→New pull request에서 base:main, compare:feature/edit-tasks를 선택한다. 제목과 아래 PR 본문 예시를 채우고 Files changed에서 변경을 읽은 뒤 PR을 만든다.
git push -u origin feature/edit-tasks커밋 2개가 PR에 보이고 본인 저장소의 main을 대상으로 한다. push만으로 main이 바뀌거나 Pages에 기능이 공개된 것은 아니다. 강사 예제 저장소에 학생 PR을 만들지 않는다.
3교시 도입8분에 G05 상태 변화를 보여준다. push/PR12·짝 검토10·병합/Pages8·배포 검증8·정리4분이다. PR 제목보다 변경 이유·검증 근거를 읽게 한다. private 토큰·실제 학생 과제는 본문에 넣지 않는다.
짝이 PR의 변경과 검사 결과를 읽고 개선점을 한 가지 적는다. 본인 PR을 Merge pull request로 병합한다. Settings→Pages/Actions에서 배포 완료와 사용한 커밋을 확인하고 본인 github.io 주소에서 수정·검색·새로고침을 다시 검사한다. 로컬 main을 아래 명령으로 갱신한다.
git switch main
git pull --ff-only origin main
git log --oneline -3기록: PR URL, 두 기능 커밋, main 병합 커밋, Pages 배포 커밋, 공개 앱 URL, 확인자와 실제 결과. 배포 대기 중은 미확인으로 기록하고 다음 교시 시작 때 확인한다.
PR 병합은 소스 반영, Pages built는 배포 결과, 브라우저 검사는 사용자가 보는 동작의 근거다. 서로 구분한다. 원격 main을 병합한 뒤 로컬 main도 갱신한다. 기능 브랜치 삭제·충돌 해결은 필수가 아니다. 4교시는 기존 Docker·로컬 Supabase 준비로 이어가며 하루 시간은 늘리지 않는다.
체크박스는 실제 확인한 항목만 채운다. 아래 공개 PR은 강사가 제공한 참고 사례이며 학생은 자기 저장소에 별도 PR을 만든다.
## 변경 이유
마감일과 과제명을 고치고 많은 과제에서 제목·과목을 빠르게 찾기 위해 개선했습니다.
## 변경 내용
- 과제 수정·저장·취소
- 제목·과목 검색과 기존 완료 필터 조합
## 직접 검증
- [ ] 기존 데이터·완료 상태·id·생성시각·개수 유지
- [ ] 취소·공백 거절·검색/필터·삭제/되돌리기
- [ ] 새로고침·휴대폰·키보드
## 공개 확인 (병합 뒤 작성)
Pages 배포 커밋: / 앱 URL: / 확인자·결과:개선 앱 ↗ · 시작·중간·완성 ZIP · 실제 강사 PR ↗ (온라인 안내) · 1일차 실습
목차와 처음으로 ↑| 검사 | 행동 | 기대 결과 |
|---|---|---|
| 기존 데이터 | 전날 목록을 읽기 | 제목·날짜·완료 상태 유지 |
| 수정 저장 | 완료한 과제의 제목·과목·마감일 변경 | 동일 id·done·createdAt·개수, 편집 값만 변경 |
| 취소 | 값 변경 후 수정 취소 | 저장 값 불변·수정 버튼 초점 복귀 |
| 입력 검증 | 제목 공백·잘못된 날짜 | 저장 거절·오류 안내 |
| 검색 | 제목 일부·과목·영문 대소문자·앞뒤 공백 | 해당 과제만 표시 |
| 복합 조건 | 검색어 + 완료/미완료 | 두 조건 동시 적용·전체 집계 유지 |
| 빈 결과/지우기 | 없는 검색어→지우기 | 빈 결과 안내→원래 필터 목록 |
| 편집과 삭제 | 수정 중 해당 항목 삭제→되돌리기 | 추가 모드 복귀·원래 항목 복원 |
| 기존 기능 | 추가·완료·집계·새로고침·삭제/되돌리기 | 전날 기능 정상 |
| 기기/조작 | 390px·Tab·Enter·Space | 가로 잘림 없음·조작/초점 정상 |
| Git 근거 | 커밋2개·PR Files changed | 기능별 변경과 검증 근거 |
| 공개 확인 | 병합 후 Pages URL에서 검사 | 최신 배포와 실제 기능 확인 |
체크표 CSV에 통과/실패/미확인, 실제 결과·확인자·공개 URL을 남긴다. 서버 DB와 로그인은 이후 교시에서 별도로 연결한다.
목차와 처음으로 ↑| 증상 | 확인 | 조치 |
|---|---|---|
| Author identity unknown | git config user.name와 user.email 확인 | 본인 이름과 GitHub의 noreply 이메일을 저장소 로컬 설정으로 등록한 뒤 재시도 |
| not a git repository | clone한 폴더인지 확인 | cd와 Codex 기본 폴더를 맞춘다 |
| 미커밋 변경/ff-only 실패 | status와 log 확인 | 기존 변경을 보존하고 강사와 통합한다 |
| push 인증 실패 | 계정·저장소 권한·remote 확인 | GitHub 로그인 안내를 따르고 토큰을 코드에 넣지 않는다 |
| PR 변경이 없음 | base/head·커밋·push 확인 | 본인 저장소의 기능 브랜치를 compare로 선택 |
| 기존 과제가 사라짐 | origin·브라우저·저장 키/스키마 확인 | 데이터를 지우지 말고 원인과 백업부터 확인 |
| 수정했는데 새 항목이 생김 | 편집 id와 추가/수정 분기 확인 | 동일 항목의 세 필드만 수정 |
| 검색이 안 됨 | 제목/과목·대소문자·완료 필터 확인 | 검색과 완료 조건을 함께 검사 |
| 병합 후 이전 화면 | Pages build와 커밋·URL 확인 | 완료 후 새로고침하고 직접 기능 검사 |