라이프스타일

테스트, 코드 리뷰와 PR

테스트는 조건별 동작, 리뷰는 변경의 결함, PR은 통합 제안을 다룹니다. 테스트 통과, 승인과 병합은 별도 상태입니다.

읽는 데 약 15분 · 실습 30 분

작업 흐름을 설명하는 그림이며 제품 스크린샷이 아닙니다.
사진: Mokaair (© Mokaair)
전체 목차:Codex 학습 센터: 전체 튜토리얼 목차

실습 · Desktop / CLI / VS Code / JetBrains / cloud

이 글의 목차
  1. 목표와 준비
  2. 1단계: 의도적으로 잘못된 제안 준비
  3. 2단계: 올바른 Review 범위 선택
  4. 3단계: 테스트 추가와 잘못된 변경 제거
  5. 4단계: 검토 가능한 commit과 PR 초안
  6. 검증 기록을 최종 버전에 연결
  7. 문제 해결, 복원과 검수

목표와 준비

이 단락의 학습 자료:

테스트는 작성 사례, Review는 놓친 영향, PR은 브랜치 결과 검토입니다. 서로 대체하지 않으며 지적 없음은 무결함 보장이 아니고 PR 생성은 merge/공개가 아닙니다. 이번에는 검증 범위 빈틈을 직접 확인합니다.

1단계: 의도적으로 잘못된 제안 준비

새 codex-review-lab에 expected 다섯 파일을 두고 Git 기초의 로컬 실습 신원으로 main 기준을 commit합니다. 무변경 확인 뒤 다음 브랜치를 만듭니다. 미완료 변경이 있는 저장소를 재사용하지 않습니다.

터미널: Review 브랜치와 기준 · sh
git switch -c codex/review-lab
node --test core.test.mjs

3통과 후 visibleTasks 마지막만 return tasks.reverse();로 바꿉니다. 기존은 Active/Completed만 확인하므로 다시3통과입니다. 의도적인 미검토 제안이며 아직 commit/정상 기능으로 취급하지 않습니다.

터미널: 기존 테스트의 빈틈 확인 · sh
git diff -- core.mjs
node --test core.test.mjs

2단계: 올바른 Review 범위 선택

데스크톱 앱에서 이 Git 프로젝트를 열고 Review 패널의 Unstaged를 선택해 수정한 core.mjs가 보이는지 확인한 다음 Codex 입력창에서 /review를 사용하고 선택된 차이를 확인합니다. CLI에서는 codex-review-lab의 시스템 터미널에서 codex를 시작하고 작업 경로를 확인한 뒤 대화형 입력창에 /review를 입력하고 Review uncommitted changes를 선택합니다. 시스템 셸에 입력하지 마세요. 아직 커밋하지 않았으므로 특정 커밋만 검토하면 reverse를 놓칩니다. 진입점과 범위는 공식 Code review 문서를 참고합니다.

앱에는 Staged, Commit, Branch, Last turn도 있으며 Last turn은 전체 브랜치가 아닙니다. CLI의 미커밋 검토는 스테이징, 미스테이징, 미추적 내용을 포함하므로 git diff만 보는 것보다 범위가 넓습니다. Review 패널에는 사용자나 다른 작업의 수정도 표시될 수 있으므로 여러 repository가 있으면 대상 저장소를 확인합니다. 같은 파일에 두 상태가 함께 있으면 처럼 각각 확인하고 검토할 부분을 지정합니다.

All 순서 유지/입력 불변을 보완합니다. 유효한 지적은 reverse 줄, All 조건, 순서 반전/배열 직접 변경, 누락 테스트를 보여 줍니다. 위치/영향 없는 추상적 품질 개선은 부족합니다.

Codex 프롬프트: 읽기 전용 Review · text
Review the uncommitted change only. All must preserve task order and must not mutate the input array. Existing tests pass, so inspect their coverage rather than treating that as proof.
For each finding, state the file/line, trigger, concrete impact and a verification case. Do not edit, stage, commit or push during this review. If you find no issue, report what you examined and any uncertainty.

놓치면 결론에만 의존하지 않고 reverse와 다음 테스트를 봅니다. 틀린 지적이면 재현 예시를 요청해 판단합니다. Review는 증거를 제공하며 이해한 수정은 별도로 요청하고 최종 차이와 연결합니다.

3단계: 테스트 추가와 잘못된 변경 제거

review.test.mjs를 추가해 All 순서/동결 배열 불변을 확인합니다. 잘못된 버전에서 기존3통과/새2실패를 먼저 봐야 새 테스트가 실제 탐지하는지 압니다.

새 파일: review.test.mjs · javascript
import test from "node:test";
import assert from "node:assert/strict";
import { visibleTasks } from "./core.mjs";

const makeTasks = () => [
  { id: "a", title: "Read", completed: true },
  { id: "b", title: "Build", completed: false },
];

test("All preserves original order", () => {
  assert.deepEqual(visibleTasks(makeTasks(), "all").map((task) => task.id), ["a", "b"]);
});

test("All does not attempt to mutate the input array", () => {
  const tasks = Object.freeze(makeTasks());
  assert.doesNotThrow(() => visibleTasks(tasks, "all"));
});
터미널: 전체 회귀 테스트 실행 · sh
node --test core.test.mjs review.test.mjs

마지막 줄만 return tasks;로 돌려 새 테스트를 남기고5통과를 봅니다. core.mjs는 main과 같고 추가 테스트만 결과입니다. PR은 최종 테스트 보강을 설명하고 차이에 없는 코드 수정을 주장하지 않습니다.

4단계: 검토 가능한 commit과 PR 초안

새 테스트만 스테이지하고 내용 확인 후 commit하며 main 차이가 한 파일인지 봅니다. 추가 편집 뒤 영향 테스트를 다시 실행하고 이전 성공을 인용하지 않습니다. 다음 초안 결과는 실제 관찰 후만 남깁니다.

터미널: 최종 테스트 차이 커밋 · sh
git add review.test.mjs
git diff --cached --name-only
git diff --cached -- review.test.mjs
git commit -m "Test All filter order and input preservation"
git diff --stat main...HEAD
git status --short
문서 템플릿: PR 제목 및 설명 · markdown
Title: Add regression coverage for All filter ordering and input preservation

The existing filter tests cover Active and Completed but miss All ordering and input mutation. Add two focused cases so a reversing implementation is rejected. Production code is unchanged.

Validation: node --test core.test.mjs review.test.mjs — 5 passed, if actually run.
The deliberate reverse variant fails both new tests.
Browser checks: NOT RUN in this test-only change unless separately verified.
Deployment: not performed.

로컬 결과는 검토 가능하지만 PR은 아직 없습니다. 선택 실습은 README 없는 빈 GitHub 저장소를 만들고 실제 URL로 자리표시자를 바꿉니다. remote -v가 자신의 새 저장소인지 확인한 뒤 두 push로 기준/테스트 브랜치를 보냅니다.

터미널 템플릿: 원격 URL 교체 후 push · text
git remote add origin YOUR_REPOSITORY_URL
git remote -v
git push -u origin main
git push -u origin codex/review-lab

GitHub New pull request에서 base main/compare codex/review-lab을 골라 테스트만의 차이/설명을 확인해 생성합니다. 논의 중이면 draft를 씁니다. CI는 설정했을 때만 있으며 현재 head 검사인지 봅니다. merge/공개는 별도 단계입니다.

검증 기록을 최종 버전에 연결

로컬 커밋 후 이 연습 저장소를 수정할 수 있는 다른 작업을 멈추고 아래 명령을 한 줄씩 실행합니다. 전후 HEAD가 같고 status는 깨끗하며, 브랜치는 codex/review-lab, main...HEAD에는 review.test.mjs만 있어야 합니다. 테스트는 5개 통과에 건너뜀은 없어야 합니다. 실제 SHA와 출력을 인계 기록에 첨부하세요. HEAD가 같아도 파일이 수정됐다면 테스트에 미커밋 내용이 포함되므로 해당 커밋만의 결과로 볼 수 없습니다.

터미널: 테스트 버전과 최종 차이 확인 · sh
git branch --show-current
git rev-parse HEAD
git status --short --untracked-files=all
git diff --name-only main...HEAD
node --test core.test.mjs review.test.mjs
git rev-parse HEAD
git status --short --untracked-files=all

Git diff 공식 설명처럼 main...HEAD는 공통 조상부터 HEAD까지 비교하며 미커밋 수정은 포함하지 않습니다. review.test.mjs를 새로 만들어도 git add 전에는 일반 diff에 보이지 않을 수 있으므로 status와 파일 자체도 확인합니다. 이 연습은 로컬 main을 사용합니다. 실제 PR에서는 base, head, 해당 head의 CI를 확인하고 건너뜀, 취소, 미완료를 따로 기록합니다. 초록 아이콘만으로 검증 범위를 판단하지 않습니다.

문제 해결, 복원과 검수

현상필요한 증거
테스트 성공인데 오동작새 사례 전 실패/후 성공
차이가 안 보임미커밋/commit/base 범위
지적 이유 없음위치/조건/최소 재현
PR 무관 파일stage/시작점/base·compare
CI 없음/이전 버전workflow/head SHA
추가 편집최종 차이 재검증

기존3개 누락/새2개 탐지/최종5통과/테스트만 commit을 남깁니다. 반복은 독립 실습에서 reverse를 다시 넣고 복원하며 Git 삭제/공개 기록 변경은 하지 않습니다. 불필요한 실습 PR은 논의를 남겨 닫습니다. 그림1증거,2판단,3전달입니다. 독자의 모델 Review/push/공개는 미실행입니다.

21. 테스트, 코드 리뷰와 PR — 작업 흐름을 설명하는 그림이며 제품 스크린샷이 아닙니다. Tests → Review → PR
21. 테스트, 코드 리뷰와 PR — 작업 흐름을 설명하는 그림이며 제품 스크린샷이 아닙니다. Tests → Review → PR · 사진: Mokaair (© Mokaair)
자세한 설명 보기

Tests to Review to PR

전체 목차

  • 라이프스타일

    Codex 학습 센터: 전체 튜토리얼 목차

    설치와 첫 작업부터 MD 지침과 고급 연동까지 60개 강의, 열 개 단원을 계획합니다. 수준, 환경, 목표, 명령으로 다음 글을 찾고 미게시 항목의 상태를 확인할 수 있습니다.

  • 라이프스타일

    Worktree와 작업 격리

    Worktree는 하나의 Git 저장소에 다른 브랜치의 작업 폴더를 만듭니다. 파일이 분리되어도 DB, 포트와 외부 서비스는 공유될 수 있습니다.

  • 라이프스타일

    실습: 작은 웹사이트 만들기

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

  • 라이프스타일

    사용량과 효율: 재작업 줄이기

    조건, 모델 선택, 시간, 결과를 기록해 불필요한 재시도와 과도한 문맥을 줄입니다.

최신 여행 소식·가이드

출처

라이프스타일