AI 동작 원리 — 컨텍스트 윈도우 · 환각 방어 · 영구 규칙 파일
AI는 머릿속 의도를 읽는 도구가 아니라, 현재 컨텍스트 윈도우(작업 책상)에 올라온 문서만 보고 다음 토큰을 추론하는 엔진이다.
대화가 길어질수록 앞에서 정한 제약을 잊거나 없는 함수명을 만들어내는 현상은 모델의 구조적 특성에서 비롯된다. 작동 원리와 작업 책상 용량 한계를 기준으로 세션을 관리하면 결과물 품질이 일정하게 유지된다.
01 · 핵심 원리 정리
LLM 추론 특성과 3가지 태생적 한계
거대언어모델(LLM)은 주어진 문맥 뒤에 이어질 확률이 가장 높은 토큰 조각을 순차적으로 생성한다. 아래 세 가지 특성을 전제로 작업을 설계한다.
- 지식 기준 시점(Knowledge Cutoff): 모델 구축 이후 바뀐 최신 라이브러리 문법은 모를 수 있으므로 패키지 버전이나 공식 문서 근거를 직접 건네준다.
- 비결정성(Non-determinism): 같은 요청도 매번 조금씩 다르게 작성하므로 반드시 지켜야 할 기준은 수치와 규칙 파일로 고정한다.
- 그럴듯함 편향(환각): 확실하지 않은 내용도 그럴듯하게 이어 쓰려는 성향이 있으므로 실제 파일 열람과 빌드 확인을 필수로 묶는다.
컨텍스트 윈도우(Context Window) = 유한한 작업 책상
한 번의 응답을 생성할 때 동시에 참조할 수 있는 최대 토큰 용량이다. 내가 친 질문뿐 아니라 시스템 프롬프트, 규칙 파일, 읽어들인 코드, 이전 대화와 에러 로그가 모두 이 공간을 차지한다.
컨텍스트 사용량 = 시스템 지시 + 규칙 파일 + 읽은 파일 본문 + 누적 대화 + 명령 실행 로그- 책상이 80% 이상 차면 초기에 적어 둔 제약 조건이 희미해지는 중간 망각(Lost in the Middle) 현상이 나타난다.
- 독립된 기능 하나가 마무리되면 대화를 압축(`/compact`)하거나 **새 세션(New Chat)**을 열어 깨끗한 상태에서 다음 작업을 이어간다.
영구 프로젝트 규칙 파일 (CLAUDE.md · AGENTS.md · .cursor/rules)
매번 반복하는 기본 원칙을 프로젝트 루트 규칙 파일에 적어 두면 새 대화를 열 때마다 자동으로 먼저 반영된다.
- 포함할 내용(50~120줄 압축): 기술 스택·버전, 타입체크·빌드 명령어, 폴더 구조, 디자인 토큰 경로, 절대 금지 규칙(`.env` 수정 금지, 무분별한 패키지 추가 금지 등).
- 제외할 내용: 일회성 작업 메모나 수천 줄짜리 장황한 문서(매 턴 컨텍스트만 낭비하고 핵심 규칙이 묻힌다).
02 · 기준 수치 · 비교표
| 환각 유형 | 증상 | 발생 원인 | 방어 기준 |
|---|---|---|---|
| 없는 패키지·API 호출 | 존재하지 않는 npm 패키지나 구버전 함수를 import 해 에러 발생 | 유사 라이브러리 패턴을 확률적으로 합성 | `package.json` 선행 확인 강제 및 신규 패키지 추가 전 승인 요청 |
| 안 읽은 경로·변수 추측 | 프로젝트에 없는 파일 경로나 임의의 CSS 변수명 사용 | 실제 파일을 열지 않고 일반적 관례로 추측 | 수정 전 관련 파일을 먼저 `read` 도구로 열람하도록 지정 |
| 요구 범위 임의 확장 | 버튼 색만 바꾸랬는데 주변 레이아웃과 문구까지 변경 | 빈틈 있는 지시를 자의적으로 보완 | 지시문 끝에 '지정 파일 및 범위 외 수정 절대 금지' 명시 |
| 미확인 완료 보고 | 타입 에러나 화면 깨짐이 남았는데 완료했다고 응답 | 빌드·렌더링 확인 없이 코드 편집만으로 종료 | `tsc --noEmit` 통과 여부와 실제 확인 결과를 함께 보고하도록 지정 |
| 현재 상황 | 권장 방식 | 이유 |
|---|---|---|
| 방금 만든 컴포넌트의 수치·색상만 미세 조정할 때 | 현재 세션 그대로 유지 | 직전에 읽은 파일 맥락이 살아 있어 바로 수정 가능 |
| 헤더 작업을 끝내고 전혀 다른 페이지 작업으로 넘어갈 때 | 새 세션(New Chat) 시작 | 이전 작업 코드가 새 작업 추론에 섞이는 혼선 차단 |
| 큰 작업 중 대화가 20턴 이상 길어지고 로그가 쌓였을 때 | `/compact` 요약 또는 진행 상황을 문서에 적고 새 세션 전환 | 결정사항만 남기고 시행착오 로그를 비워 추론 품질 회복 |
03 · 자주 꼬이는 패턴 vs 권장 기준
초반의 실패 코드와 에러 로그가 누적되어 뒤로 갈수록 정확도가 급격히 떨어진다.
기능 1개 완료 = Git 커밋 1회 = 새 대화창 시작 패턴으로 작업 단위를 끊는다.
분량이 너무 길면 정작 프로젝트에서 꼭 지켜야 할 핵심 제약 몇 줄이 희석된다.
폴더 구조, 실행 명령어, 금지 사항 위주로 한눈에 들어오게 압축해 유지한다.
