Week 11 / Period 01 / Lecture

AI의 답보다
변경 계약을 먼저 읽습니다

좋은 AI 보조 코딩은 강한 Agent에서 시작하지 않습니다. 관찰한 문제, 허용할 파일과 통과 조건을 사람이 먼저 잠그는 데서 시작합니다.

확대경의 읽기 단계, 두 파일의 계획 단계, 권한 문 안쪽의 도구 팔과 마지막 검증 관문을 연결한 입체 작업대
UNDERSTAND → LIMIT → CHANGE → PROVE 프로젝트를 바꾸는 권한은 목적과 증거가 분명할 때만 한 단계 높입니다.

1교시의 도착점

지금은 Agent를 실행하는 시간이 아닙니다. 2교시 시연과 3교시 개인 실습에서 무엇을 승인하고 무엇을 중단할지 먼저 판단할 수 있게 합니다.

  • 01

    Ask, Plan, Agent를 프로젝트 변경 여부와 자율성으로 구분합니다.

  • 02

    관찰, 기대 결과, 범위, 제약과 통과 조건으로 작은 문제를 정의합니다.

  • 03

    hallucination과 과잉 변경을 찾고 script-only 최소 권한을 선택합니다.

  • 04

    diff, Console, Play Mode, 회귀 테스트와 코드 설명으로 완료를 판정합니다.

60분의 설명 흐름

AI의 유창한 문장을 평가하는 대신 변경 전과 후에 확인할 관찰 가능한 사실을 세웁니다.

00-60 min

요청에서 증거까지

Lecture / professor-led

  1. 10주차 baseline 회수

    아트를 교체한 뒤에도 시작, 수집, 성공, 실패와 재시작이 작동하는 상태가 왜 필요한지 확인합니다.

  2. Ask, Plan, Agent 구분

    읽기, 계획과 실행을 프로젝트 변경 여부와 승인 책임으로 나눕니다.

  3. 문제 분해

    모호한 희망을 관찰, 기대 결과, 범위, 제약과 테스트로 바꾸는 문장 구조를 봅니다.

  4. hallucination과 과잉 변경

    존재하지 않는 API, 잘못된 버전, 숨은 의존성, 불필요한 리팩터링과 검증 없는 완료 선언을 찾습니다.

  5. 최소 권한과 변경 계약

    Agent의 구현 코드는 두 C# 파일만 허용하고 Scene, Prefab, Package와 ProjectSettings 쓰기를 금지하는 이유를 설명합니다.

  6. diff와 증거

    파일 목록부터 읽고 상태 문, 값의 경계, 부작용과 기존 기능 회귀를 확인합니다.

  7. 회수 질문

    Agent 실행 전 승인할 여섯 항목과 완료 뒤 요구할 다섯 증거를 화면 없이 복원합니다.

작동하는 시작점이 있어야 변화가 보입니다

오류가 있는 프로젝트에 새 기능을 붙이면 기존 문제와 새 문제를 구분할 수 없습니다. 변경 전 상태는 비교를 위한 첫 증거입니다.

BEFORE

기준 동작을 먼저 기록합니다

Start, 이동, 수집, 30초 타이머, Won, Lost와 Restart를 한 번 실행하고 Console Error 0을 확인합니다.

CHECKPOINT

되돌릴 지점을 만듭니다

Scene을 저장하고 프로젝트를 복제하거나 버전 관리 체크포인트를 남깁니다. Agent의 Undo는 별도 백업을 대신하지 않습니다.

변경 전 기준명시된 목표변경 후 증거판정 가능한 변화

필요한 만큼만 자율성을 높입니다

모드 이름보다 중요한 질문은 하나입니다. 지금 AI가 프로젝트를 실제로 바꿀 필요가 있는가입니다.

모드하는 일프로젝트 변경학생이 확인할 것11주차 사용
Ask코드 흐름, API와 오류를 설명없음설명이 실제 파일과 일치하는가항상 먼저
Plan작업 순서, 파일, 위험과 테스트 제안승인 전 없음불필요한 파일과 단계가 없는가Agent 전에 필수
Agent승인된 범위에서 파일을 작성·수정있음실제 diff가 승인 범위와 같은가Write scripts only
Full autonomyScene, Prefab, Asset과 Editor 작업까지 실행매우 큼초보자가 모든 변화를 설명할 수 있는가이번 주 사용 안 함
  1. ASK현재 구조 읽기

    수정 없이 데이터의 소유자와 호출 흐름을 설명합니다.

  2. RESTATE학생이 다시 정의

    AI 설명을 자신의 프로젝트 사실과 말로 다시 씁니다.

  3. PLAN예상 변화 제출

    파일, 함수, 위험과 테스트를 변경 전에 보여 줍니다.

  4. APPROVE범위 잠금

    불필요한 항목을 지우고 허용 파일과 금지 대상을 정합니다.

  5. AGENT제한 실행

    구현 코드 두 C# 파일만 만들거나 수정합니다.

  6. PROVE사람이 판정

    diff와 실제 플레이로 완료 여부를 결정합니다.

자율성 원칙강한 모드가 더 좋은 모드가 아닙니다. 읽기만 필요하면 Ask에서 멈추고, 변경이 필요해도 Plan을 승인하기 전에는 Agent로 넘어가지 않습니다.

“시간 보너스를 만들어 줘”를 검증 가능한 문제로 바꿉니다

AI는 비어 있는 조건을 스스로 채우려 합니다. 요청이 짧을수록 선택권이 넓어지고 예상하지 못한 변경도 커집니다.

OBSERVED
현재 사실
Playing에서 timeRemaining이 감소함
기존 흐름
Ready, Playing, Won, Lost와 Restart가 작동함
현재 오류
Console Error 0
EXPECTED
사건
Player가 TimeBonus에 처음 접촉
결과
남은 시간에 정확히 5초 추가
경계
최대 30초를 넘지 않음
SCOPE
수정
GameManager.cs
생성
TimeBonus.cs
금지
다른 파일과 설정 전체
ACCEPTANCE
상태
Playing에서만 허용
횟수
같은 보너스는 한 번만 처리
회귀
기존 7주차 흐름 모두 유지

그럴듯함과 프로젝트의 사실을 분리합니다

hallucination은 엉뚱한 문장만 뜻하지 않습니다. 실제 프로젝트에 없는 이름, 버전과 연결을 확신하는 답도 포함합니다.

  • 01
    존재하지 않는 이름을 전제로 함

    GameManager.Instance가 없는데 singleton처럼 호출하거나 실제 변수와 다른 remainingTime을 사용합니다. 먼저 현재 파일에서 정확한 이름을 확인합니다.

  • 02
    Unity 버전과 패키지를 추측함

    설치되지 않은 package API나 다른 Unity 버전의 메뉴를 제안할 수 있습니다. 설치된 버전과 Package Manager를 실제로 확인합니다.

  • 03
    숨은 의존성을 만듦

    새 Script가 Tag, Layer, Collider, Inspector 참조를 요구하면서 설명하지 않을 수 있습니다. 코드 밖의 수동 연결을 Plan에 포함합니다.

  • 04
    요청하지 않은 정리를 함께 함

    함수명 변경, 파일 이동과 리팩터링이 섞이면 diff가 커지고 기존 Inspector 연결을 잃을 수 있습니다. 기능 하나와 정리 작업을 분리합니다.

  • 05
    실행하지 않고 완료를 선언함

    컴파일 가능성은 플레이 성공과 다릅니다. Agent의 “완료”는 주장이고 Console, Inspector와 Play Mode가 증거입니다.

판정 문장

“AI가 맞는 것 같다” 대신 “현재 파일에서 이름을 확인했다”, “diff에 두 파일만 있다”, “T01부터 T08까지 같은 조건에서 통과했다”처럼 다시 관찰할 수 있는 문장을 사용합니다.

권한은 기능보다 작거나 같아야 합니다

Agent가 작성하는 구현 코드는 두 C# 파일이면 충분합니다. Plan 문서, Unity가 만드는 메타데이터와 학생이 저장하는 Scene은 구현 코드와 구분해 기록합니다.

대상읽기쓰기이유
GameManager.cs허용허용시간 규칙의 소유자에 작은 public 메서드 추가
TimeBonus.cs허용새 파일 허용접촉 사건을 한 번 전달하는 Component
Assets/Plans/*.mdPlan 검토Plan 모드가 저장승인 전 계획인 예상 지원 산출물로 분류
*.metaGUID 확인Unity가 자동 생성Agent가 직접 편집하지 않고 필요한 메타데이터는 보존
Week11_TimeBonus.unity구조 확인학생이 수동 저장Scene 연결의 작성 주체와 이유를 별도 기록
*.prefab필요한 구조만 읽기Agent 쓰기 금지이번 미션은 Scene에서 직접 연결
Packages/버전 확인만금지기능에 새 의존성이 필요하지 않음
ProjectSettings/필요 없음금지입력, Tag와 물리 설정 변경이 목표 밖임
명령과 삭제상태 확인만금지패키지 설치, 파일 삭제와 대량 이동은 승인 범위 밖임
중단 조건Agent가 세 번째 구현 파일이나 Scene, Prefab, Package, 설정 변경을 요구하면 실행을 멈춥니다. Plan, Unity 생성 .meta, 학생이 저장한 Scene은 예상 지원 산출물로 따로 분류합니다.

Agent 전에 여섯 항목을 한 화면에 놓습니다

변경 계약은 prompt를 길게 만드는 장식이 아닙니다. 실행 중 벗어났는지 즉시 판정하는 기준선입니다.

  1. GOAL행동 하나

    TimeBonus 접촉 한 번에 남은 시간 5초 추가.

  2. FILES구현 코드 2개

    Agent는 GameManager 수정, TimeBonus 생성. Plan, .meta, Scene은 별도 분류.

  3. BOUNDARY30초 상한

    Mathf.Min으로 roundDuration을 넘지 않음.

  4. STATEPlaying만

    Ready, Won, Lost에서는 사건을 거부.

  5. MANUALScene 연결은 사람

    Component, Collider와 참조를 Inspector에서 직접 설정.

  6. PROOF8개 테스트

    새 행동과 기존 루프를 같은 표로 검증.

코드보다 먼저 파일 목록을 읽습니다

diff는 AI가 한 일을 기억에 의존하지 않고 변경 전후로 비교하는 기록입니다. 줄 수보다 변화의 책임과 부작용을 봅니다.

  1. 01

    변경 파일 분류

    git status --short 또는 changed files에서 Agent 구현 코드, Plan 문서, Unity 생성 .meta, 학생이 저장한 Scene을 먼저 나눕니다.

    중단 세 번째 구현 파일, 예상하지 않은 Prefab, package manifest나 설정이 보입니다.

  2. 02

    공개 표면

    새 public 메서드가 필요한 호출만 열어 주는지, 기존 함수명과 serialized field를 불필요하게 바꾸지 않았는지 봅니다.

    질문 이 public 메서드를 누가, 언제 호출합니까?

  3. 03

    상태 문과 값의 경계

    Playing이 아닐 때 return하는지, 5초가 양수인지, 결과가 30초 상한을 넘지 않는지 봅니다.

    질문 28초에서 보너스를 얻으면 정확히 몇 초가 됩니까?

  4. 04

    사건의 횟수

    Trigger가 같은 오브젝트에 여러 번 들어와도 보너스를 한 번만 지급한 뒤 비활성화되는지 봅니다.

    질문 상태 기록과 보너스 지급 중 무엇을 먼저 해야 합니까?

  5. 05

    회귀 가능성

    기존 Update, AddScore, FinishRound와 Restart의 흐름이 그대로 남았는지 확인합니다.

    증거 새 기능뿐 아니라 성공, 실패와 두 번의 재시작도 실행합니다.

GameManager.cs · review example
 public GameState CurrentState { get; private set; }
+public bool TryAddTime(float seconds)
+{
+    if (CurrentState != GameState.Playing || seconds <= 0f)
+    {
+        return false;
+    }
+
+    timeRemaining = Mathf.Min(timeRemaining + seconds, roundDuration);
+    UpdateHud();
+    return true;
+}

초록색 줄도 자동 통과가 아닙니다. 상태 거부, 양수 검사, 상한, HUD 갱신과 반환값의 책임을 각각 설명해야 합니다.

“Agent가 완료했다”는 완료 조건이 아닙니다

완료는 생성된 코드가 아니라 독립적으로 다시 확인할 수 있는 다섯 종류의 증거가 함께 있을 때 성립합니다.

DIFF

구현 코드 두 파일만 변경

Agent 코드와 Plan, .meta, 수동 Scene을 분류한 뒤 두 C# 파일의 줄을 직접 읽습니다.

CONSOLE

Error 0

컴파일 오류, NullReferenceException과 Missing Reference가 없습니다.

PLAY MODE

새 행동 재현

20초에서 25초, 28초에서 30초가 되고 같은 보너스는 다시 작동하지 않습니다.

REGRESSION

기존 루프 보존

수집, Won, Lost와 Restart가 변경 전과 같은 결과를 냅니다.

EXPLANATION

코드 구술

두 Script의 책임, 상태 문, 상한과 호출 순서를 코드 없이 말할 수 있습니다.

요청AI 완료 문장사람의 검증완료 판정

설명을 덮고 다섯 문장으로 회수합니다

정답을 보기 전에 소리 내어 답합니다. 답이 모호하면 해당 절로 돌아가 근거가 되는 실제 파일과 테스트를 함께 찾습니다.

Ask와 Plan은 둘 다 프로젝트를 바꾸지 않습니다. 차이는 무엇입니까?

Ask는 현재 구조와 개념을 설명하는 데 적합합니다. Plan은 목표를 여러 단계로 나누고 예상 파일, 순서, 위험과 테스트를 실행 전에 제안합니다.

시간 보너스 기능에 Full autonomy가 필요하지 않은 이유는 무엇입니까?

필요한 코드 변경은 기존 GameManager 한 파일과 새 TimeBonus 한 파일뿐입니다. Scene 연결은 학생이 Inspector에서 직접 할 수 있으므로 더 넓은 쓰기 권한은 목표보다 큽니다.

Agent가 세 번째 구현 파일을 바꾸려 하면 어떻게 합니까?

즉시 중단하고 변경을 적용하지 않습니다. 단, Plan 문서, Unity 생성 .meta, 수동 저장 Scene은 작성 주체를 확인해 예상 지원 산출물로 분류합니다.

diff에서 가장 먼저 보는 것은 무엇입니까?

코드 줄이 아니라 변경된 파일 목록과 작성 주체입니다. 구현 코드가 허용한 두 파일인지 확인한 뒤 공개 메서드, 상태 문, 경계와 부작용을 읽습니다.

완료를 증명하는 다섯 증거는 무엇입니까?

허용 범위의 diff, Console Error 0, 새 행동의 Play Mode 결과, 기존 기능 회귀 테스트와 학생의 코드 구술입니다.

EXIT TICKET

“Agent를 실행하기 전에 나는 ______, ______, ______을 승인하고, 실행 뒤 ______와 ______로 완료를 판정한다.” 빈칸을 자신의 말로 채운 뒤 2교시 시연으로 넘어갑니다.

수업 중 확인할 공식 자료

Unity AI는 베타이며 기능, package version, 권한 표현과 이용 조건이 바뀔 수 있습니다. 수업 직전 설치된 버전과 공식 문서를 다시 확인합니다.