YOUR_ID와 저장소명은 본인 것으로 바꿉니다. 한 줄씩 읽고 실행하세요. 미커밋 변경은 보존합니다.

B01 전날 앱과 오늘의 성공 기준 확인
본인의 1일차 Pages 앱에서 가상 과제 2개를 만들고 하나를 완료한다. 현재 공개 URL과 수정 전 화면을 기록한다. 오늘은 수정·검색을 추가하고 커밋 2개와 PR로 변경 이유를 남긴다.

확인: Git·GitHub 계정·Codex 로그인과 파일 편집 가능 여부를 확인한다. Codex 이용 가능 범위와 사용량은 계정마다 다를 수 있다. 이 실습 앱에는 AI API 키가 필요 없다.
강사: 1교시 도입 8분에 전날 앱을 다시 연다. Codex 접근이 제한되면 ZIP의 starter→checkpoint-edit→solution을 비교하며 Git 절차를 계속한다. 무료 AI로 시작한 앱을 Codex의 실제 파일 편집으로 이어가는 과정이다.

B02 내 저장소 clone → 같은 폴더를 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-current
확인: git remote -v가 본인 저장소인지 확인한다. 다운로드 ZIP에는 Git 이력이 없으므로 commit·push 실습은 clone한 폴더에서 한다. 편집기와 터미널이 같은 폴더여야 한다.
강사: GitHub는 원격 저장소, clone은 내 컴퓨터 복사본, Codex는 이 폴더의 파일을 읽고 수정하는 도구라고 설명한다. 복사본 폴더를 여러 개 만들지 않는다. 로컬 서버가 필요하면 Codex가 설치된 실행 도구를 확인해 띄우게 한다. Python 등 새 도구 설치를 수업의 필수로 만들지 않는다.

B03 깨끗한 main → 기능 브랜치 만들기
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는 별도 폴더가 필요한 때의 선택 시연으로만 다룬다. 기존 작업은 보존한다.

B04 Codex로 과제 수정 구현 → 첫 커밋
아래 수정 요청을 Codex에 입력한다. 수정 버튼→기존 값 불러오기→변경 저장→취소를 직접 실행한다. 완료한 과제를 수정해도 완료 상태와 개수가 같은지 확인한다. 통과한 뒤 diff를 읽고 index.html만 stage·commit한다.
git diff -- index.html
git add index.html
git diff --cached
git commit -m "Add assignment editing"
확인: 제목·과목·마감일만 바뀌고 원래 과제는 1개다. 취소하면 원래 목록이 유지된다. git diff --cached에 의도한 파일만 있다. 커밋 메시지는 Add assignment editing이다.
강사: 1교시 50분은 도입8·clone/브랜치10·읽기/수정20·짝 검증8·커밋/정리4로 진행한다. AI가 전체 앱을 다시 만들면 저장 키와 id 보존 조건을 재확인한다. 코드 저장과 commit의 차이를 보여준다.

B05 제목·과목 검색 구현 → 두 번째 커밋
검색 요청을 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
확인: 검색은 보이는 목록만 바꾸고 데이터와 전체 현황 숫자는 유지한다. git log에 수정 기능과 검색 기능이 서로 다른 커밋으로 보인다.
강사: 2교시 50분은 검색 요구8·구현15·회귀 검증15·짝 검증8·커밋/정리4다. 검색 기능이 쉬워 보여도 저장 데이터와 필터 조합에 영향을 줄 수 있음을 보여준다. 첫 커밋 덕분에 두 변경의 이유를 따로 설명할 수 있다.

B06 회귀 검사와 변경 파일 검토
검증 요청과 아래 체크표로 확인한다. 새로고침 뒤 수정 내용과 완료 상태를 확인한다. 같은 제목을 새로 추가한 것이 아닌지, 취소가 저장하지 않는지 검사한다. 수정 중 삭제와 되돌리기, 빈 검색, 휴대폰 화면도 확인한다.
git status -sb
git diff main...HEAD -- index.html
git log --oneline --decorate -4
확인: 통과/실패/미확인과 실제 결과를 기록한다. 검사 데이터는 가상 과제만 쓴다. 저장 값 확인은 수업용 가상 데이터에 한해 개발자 도구 Application→Local Storage에서 id·done·createdAt을 비교한다.
강사: 개발자 도구의 localStorage를 지우거나 운영 데이터를 덮어쓰지 않는다. localhost와 Pages는 서로 다른 origin이라 목록이 다른 것은 정상이다. 강사 공개 앱의 루트와 /day2/는 같은 origin·키로 목록을 이어 읽도록 설계했다.

B07 push → 내 저장소의 Pull Request 만들기
대상 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 토큰·실제 학생 과제는 본문에 넣지 않는다.

B08 짝 검토 → 병합 → Pages 재배포 확인
짝이 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 준비로 이어가며 하루 시간은 늘리지 않는다.