AI의 컨텍스트는 그 어느 때보다 풍부해졌지만, 여전히 당신의 표준을 알지 못합니다. 컨텍스트와 규칙은 같은 것이 아닙니다.
요약
AI에게 코드베이스 컨텍스트를 제공하는 것과 명시적인 규칙을 제공하는 것의 차이를 분석합니다. 컨텍스트는 패턴을 추측하게 하지만, 레거시 코드나 불일치가 존재하는 환경에서는 명확한 표준을 보장하지 못합니다.
핵심 포인트
- 컨텍스트는 AI가 국소적 패턴을 추측하게 돕지만 표준을 정의하지는 못함
- 코드베이스는 표준의 결과물일 뿐, 표준 그 자체에 대한 정의가 아님
- 레거시 코드나 불일치가 있는 경우 AI는 컨텍스트 기반의 추측에 의존함
- 일관성을 유지하기 위해서는 추측이 아닌 명시적인 규칙(Rules) 제공이 필수적임
더 많은 컨텍스트(Context)를 제공한다는 약속은 매우 매력적입니다.
AI가 코드를 생성하기 전에 사용자의 코드베이스(Codebase)를 더 많이 볼 수 있다면, 더 잘 어울리는 결과물을 만들어낼 것입니다. 패턴을 파악하고, 관례(Conventions)를 추론하며, 이미 존재하는 것들을 통해 새로운 것들이 어떻게 구축되어야 하는지를 이해할 수 있어야 합니다.
이것이 바로 AI에게 프로젝트 전체에 대한 접근 권한을 부여하는 도구들의 논거입니다. 더 많은 파일, 더 많은 히스토리(History), 그리고 작성하려는 코드 주변에 무엇이 있는지에 대한 더 높은 인지(Awareness). 더 많은 컨텍스트가 더 일관된 결과물을 만들어낼 것이라는 가정이 깔려 있습니다.
이 가정은 부분적으로는 맞지만, 근본적으로는 불완전합니다.
더 많은 컨텍스트는 AI가 더 나은 국소적 결정(Local decisions)을 내리는 데 도움을 줍니다. 사용자가 TypeScript를 엄격하게 사용한다는 것을 알 수 있고, 특정 폴더 구조에 훅(Hooks)이 있다는 것을 볼 수 있습니다. 표면적인 패턴 중 일부를 파악하여 이를 확장할 수도 있습니다.
하지만 AI가 할 수 없는 것은 코드베이스로부터 당신의 표준(Standard)을 추론하는 것입니다. 왜냐하면 당신의 코드베이스는 당신의 표준이 만들어낸 '결과물'이지, 표준 그 자체에 대한 '정의(Definition)'가 아니기 때문입니다. 결과와 정의 사이에는 결정적인 차이가 있으며, 이 차이가 더 많은 컨텍스트가 실제로 문제를 해결할 수 있는지 여부를 결정합니다.
컨텍스트가 실제로 AI에게 제공하는 것
컨텍스트는 AI에게 예시(Examples)를 제공합니다.
AI는 당신의 프로젝트에서 컴포넌트(Components)가 어떻게 생겼는지 볼 수 있습니다. 훅(Hooks)이 주로 어디에 위치하는지 볼 수 있습니다. 접근 가능한 파일들 내의 명명 패턴(Naming patterns)을 관찰할 수 있습니다. 읽어들인 내용을 바탕으로 관례에 대해 교육된 추측(Educated guesses)을 할 수 있습니다.
이것은 진정으로 유용합니다. 프로젝트 전체에 접근할 수 있는 모델은 현재 파일에만 접근할 수 있는 모델보다 더 나은 추측을 할 것입니다. 국소적 일관성(Local consistency)이 향상되고, 명백한 불일치(Mismatches)가 줄어듭니다.
하지만 예시로부터 추측하는 것은 규칙(Rules)을 따르는 것과 같지 않습니다. 그리고 이 둘의 차이는 바로 일관성이 가장 중요해지는 상황에서 명확하게 드러납니다.
AI가 예시를 통해 추측할 때는 예시들이 일관되게 보여주는 것만을 추론할 수 있습니다. 만약 당신의 코드베이스에 조금이라도 변동 사항이 있다면 — 즉, 두 가지 서로 다른 접근 방식이 공존하는 곳, 과거의 불일치(inconsistency), 혹은 무언가가 다르게 처리된 기능이 있다면 — AI는 그중 하나를 선택해야 합니다. 그리고 AI는 컨텍스트 윈도우(context window) 내에서 어떤 패턴이 더 흔한지, 혹은 어떤 것이 가장 최근에 나타났는지, 아니면 현재의 프롬프트가 무엇을 암시하는지에 따라 선택을 내릴 것입니다.
그 선택은 추측입니다. 컨텍스트가 없을 때보다는 더 정보가 있는 추측이겠지만, 결국 추측입니다.
규칙(Rules)은 추측이 아닙니다. 규칙은 '이것은 항상 이런 방식으로 수행된다'라고 말합니다. '내가 볼 수 있는 것에 기반하여 보통 이런 방식으로 수행된다'라고 말하는 것이 아닙니다. 항상 말이죠. AI는 아무것도 추론할 필요가 없습니다. 결정은 이미 내려졌으며 명시적으로 전달되었기 때문입니다.
컨텍스트가 실패하고 규칙이 성공하는 사례들
컨텍스트와 규칙의 차이는 모든 프로젝트가 결국 직면하게 되는 특정 상황에서 가장 명확하게 드러납니다.
레거시 불일치 (Legacy inconsistency). 몇 달 이상 된 모든 코드베이스에는 현재의 표준이 확립되기 전에 방식이 달랐던 지점들이 존재합니다. 이러한 불일치들은 AI가 읽는 컨텍스트 안에 존재합니다. AI가 컨텍스트로부터 패턴을 추론할 때, AI는 당신이 더 이상 원하지 않는 과거의 방식들을 포함하여 모든 것의 평균을 내버립니다. 규칙은 과거의 평균이 아니라 현재의 표준을 지정합니다.
새로운 패턴 (New patterns). 팀이 새로운 접근 방식 — 새로운 기능 구조화 방식, 새로운 상태 관리(state management) 패턴, 새로운 임포트(import) 컨벤션 등 — 을 채택하기로 결정했을 때, 초기 컨텍스트에는 새로운 패턴보다 기존 패턴이 더 많이 나타납니다. AI는 예시들이 보여주는 대로 기존 패턴을 계속 생성할 것입니다. 하지만 규칙은 과거의 예시가 어떤 모습이든 상관없이 즉시 새로운 표준을 적용합니다.
모호한 상황 (Ambiguous situations). 많은 아키텍처 결정은 컨텍스트 (Context)만으로는 진정으로 모호합니다. 이 상태를 로컬 (Local)로 두어야 할까요, 아니면 글로벌 (Global)로 두어야 할까요? 이 로직을 훅 (Hook)에 두어야 할까요, 아니면 서비스 (Service)에 두어야 할까요? 이 컴포넌트를 지금 분리해야 할까요, 아니면 나중에 해야 할까요? 컨텍스트는 서로 다른 상황에서 두 가지 접근 방식의 예시를 모두 보여줍니다. AI는 여기서 어떤 것이 적용되는지 추측해야 합니다. 규칙 (Rules)은 결정을 명시적으로 만듦으로써 이러한 추측을 제거합니다.
세션 간 일관성 (Cross-session consistency). 컨텍스트는 어떤 파일이 열려 있는지, 코드베이스의 어느 부분이 보이는지, 프롬프트 (Prompt)가 무엇에 집중하는지에 따라 매 세션마다 변합니다. AI의 추론 (Inferences)은 컨텍스트에 따라 변합니다. 규칙은 일정합니다. 규칙은 이번 세션의 컨텍스트에 어떤 파일이 포함되어 있는지와 상관없이 적용됩니다.
이것들은 예외적인 사례 (Edge cases)가 아닙니다. 이것들은 더 많은 컨텍스트가 해결해 줄 것이라고 기대했던 불일치 (Inconsistency)를 만들어내는 바로 그 상황들입니다. 그리고 더 많은 컨텍스트는 이 문제를 해결하지 못합니다. 왜냐하면 문제는 예시의 양이 아니라, 명시적인 결정의 부재이기 때문입니다.
개발자들이 컨텍스트가 정답이라고 믿는 이유
컨텍스트 논리는 인간 개발자가 학습하는 방식을 반영하기 때문에 직관적입니다.
새로운 개발자가 프로젝트에 합류하면 코드베이스를 더 많이 보면서 실력이 향상됩니다. 코드를 더 많이 읽을수록 패턴을 더 잘 이해하게 됩니다. 더 많은 컨텍스트를 가질수록 더 일관되게 코드를 작성합니다.
따라서 AI에도 동일한 논리를 적용하는 것이 자연스럽게 느껴집니다. 프로젝트를 더 많이 경험한 개발자처럼, AI에게 더 많은 컨텍스트를 주면 더 일관되게 코드를 작성할 것이라고 생각합니다.
하지만 결정적인 차이가 있습니다. 인간 개발자는 단순히 예시만 보는 것이 아닙니다. 그들은 대화를 나눕니다. 질문을 합니다. 설명을 듣습니다. 코드 리뷰 (Code reviews)를 통해 명시적인 피드백을 받습니다. 그들은 코드베이스가 어떻게 생겼는지뿐만 아니라, 왜 그렇게 생겼는지, 그리고 자신이 코드를 추가할 때 그것이 어떤 모습이어야 하는지를 흡수합니다.
AI는 예시(examples)만을 얻을 뿐입니다. 대화(conversations)를 얻지는 못합니다. 설명(explanations)을 얻지도 못합니다. "우리는 6개월 전에 그런 방식을 그만두었습니다. 여기 현재의 접근 방식이 있습니다"라고 말하는 코드 리뷰(code reviews)도 얻지 못합니다. AI는 자신이 볼 수 있는 것들로부터 추론(infer)하며, 이는 결코 완전한 그림이 될 수 없습니다.
규칙(Rules)은 인간 개발자에게 대화가 제공하는 것을 AI에게 제공합니다. 더 많은 예시가 아니라, 명시적인 결정(Explicit decisions)을 제공합니다. 이것이 표준(standard)입니다. 이것이 언제나 정답입니다. 이것이 바로 당신이 여기서 수행하는 방식입니다.
규칙이 컨텍스트(context)가 줄 수 없는 것을 제공하는 방식
규칙은 한 번 내려지고 명시적으로 전달되는 결정(decisions)입니다.
규칙은 추론(inference)을 필요로 하지 않습니다. 기존 코드베이스(codebase)의 일관성(consistency)에 의존하지 않습니다. 컨텍스트 윈도우(context window)에 어떤 파일이 포함되어 있는지에 따라 변하지도 않습니다. 어떤 예시가 보이든 상관없이 모든 세션(session)에 적용됩니다.
이것이 실질적인 측면에서 규칙을 컨텍스트와 다르게 만드는 점입니다.
상태 배치(state placement) 결정을 생각해 보십시오. 컨텍스트가 더 많은 프로젝트는 AI에게 상태(state)가 때로는 컴포넌트(components)에 있고, 때로는 훅(hooks)에 있다는 것을 보여줄 수 있습니다. 그러면 AI는 둘 다 허용된다고 추론하고, 어떤 것이 적용될지에 대해 세션마다 판단을 내립니다. 일관성이 없는 것입니다.
규칙은 상태가 기능(feature) 내의 전용 훅(dedicated hook)에 속해야 한다고 말합니다. 항상 말이죠. AI는 아무것도 추론할 필요가 없습니다. 결정은 이미 내려졌습니다. 컨텍스트가 무엇을 보여주든 상관없이 모든 세션은 동일한 답을 내놓습니다.
다음은 컨텍스트가 신뢰성 있게 결정할 수 없는 일련의 결정들에 걸쳐 이것이 어떻게 나타나는지에 대한 예시입니다:
컨텍스트가 대체할 수 없는 규칙들:
- 상태 범위(State scope)는 코드가 작성되기 전에 결정됩니다. 로컬 상태(Local state)는 로컬에 머뭅니다. 공유 상태(Shared state)는 전용 훅(hook)으로 이동합니다. 전역 상태(Global state)는 두 개의 독립적인 기능이 필요할 때만 사용합니다. 컨텍스트는 이 세 가지의 예시를 보여줍니다. 규칙은 언제 무엇을 적용할지 명시합니다.
- 도메인 언어(Domain language)는 명시적으로 정의됩니다. 고객(Customer)은 이것을 의미합니다. 사용자(User)는 저것을 의미합니다. 주문(Order)은 이것을 의미합니다. 장바구니(Cart)는 저것을 의미합니다. 결코 이러한 대안적인 의미로 사용되지 않습니다. 컨텍스트는 사용된 모든 단어를 보여줍니다. 규칙은 어떤 단어를 사용해야 하는지 정의합니다.
...
이러한 규칙들은 유용성을 보장할 만큼의 신뢰성을 가지고 컨텍스트로부터 추론될 수 없습니다. 이들은 명시적으로 기술되어야 합니다. 컨텍스트는 많은 것들에 유용합니다. 하지만 명시적인 결정을 대체하는 것은 그중 하나가 아닙니다.
컨텍스트와 규칙 사이의 올바른 관계
컨텍스트와 규칙은 서로 경쟁하는 접근 방식이 아닙니다. 이들은 함께 작동하며, 각자는 상대방이 할 수 없는 일을 수행합니다.
컨텍스트는 AI가 이미 존재하는 것이 무엇인지 이해하도록 돕습니다. 이는 로컬 일관성(local consistency)에 도움을 줍니다. 또한 기존 패턴이 명확하고 일관적일 때 AI가 기존 패턴을 확장할 수 있도록 돕습니다. 이는 진정으로 가치 있는 일이며, 일반적으로 컨텍스트는 적은 것보다 많은 것이 좋습니다.
규칙은 AI에게 무엇이 존재해야 하는지를 알려줍니다. 규칙은 기존 코드가 무엇을 보여주든 상관없이 새로운 코드가 충족해야 하는 표준(standard)을 정의합니다. 규칙은 컨텍스트가 일관되지 않은 추측을 만들어내는 상황에서 모호함을 제거하는 명시적인 결정입니다.
좋은 컨텍스트와 좋은 규칙을 갖춘 프로젝트는 두 가지 이점을 모두 얻습니다. AI는 기존 코드베이스를 이해하고, 이를 추가할 때 정의된 표준을 따릅니다. 출력물이 일관적인 이유는 AI가 좋은 추측을 했기 때문이 아니라, AI가 추측을 시작하기 전에 결정이 내려졌기 때문입니다.
좋은 컨텍스트는 있지만 규칙이 없는 프로젝트는 더 나은 로컬 추측이라는 이점을 얻습니다. 출력물은 컨텍스트가 없을 때보다 더 일관적입니다. 하지만 규칙이 명시적으로 만들어냈을 결정들을 AI가 여전히 추측하고 있기 때문에, 중요한 측면에서는 여전히 일관성이 없습니다.
더 많은 컨텍스트 (Context)가 AI 출력의 불일치에 대한 해답은 아닙니다. 그것은 결여된 토대 위에 쌓아 올린 부분적인 개선일 뿐입니다. 그 토대는 바로 규칙 (Rules)입니다. 그리고 그 어떤 양의 컨텍스트도 실제 표준 (Standard)이 무엇인지 정의해야 할 필요성을 대체할 수 없습니다.
프롬프트 (Prompt)는 중요하지 않습니다. 규칙 (Rules)이 중요합니다.
당신의 AI는 그 어느 때보다 더 많은 컨텍스트 (Context)를 가지고 있습니다. AI는 당신의 폴더 구조, 기존 컴포넌트 (Components), 패턴 (Patterns), 명명 규칙 (Naming), 그리고 아키텍처 결정 (Architectural decisions)을 볼 수 있습니다.
하지만 AI는 여전히 당신의 표준 (Standard)을 알지 못합니다. 왜냐하면 당신의 표준은 예시 (Examples) 안에 있는 것이 아니라, 그 예시들 뒤에 숨겨진 결정 (Decisions) 속에 있기 때문입니다. 그리고 결정 (Decisions)은 일관되게 따르기 위해서 반드시 명시적으로 기술되어야 합니다.
AI에게 무엇이 존재하는지 이해하는 데 필요한 컨텍스트 (Context)를 제공하십시오. 그리고 무엇이 존재해야 하는지 알기 위해 필요한 규칙 (Rules)을 제공하십시오. 오직 명시적인 결정 (Explicit decisions)만이 할 수 있는 일을 더 많은 예시 (Examples)가 해낼 것이라고 기대하는 것을 멈추십시오.
당신의 React 프로젝트가 규칙이 필요한 곳에 컨텍스트 (Context)에 의존하고 있는 지점을 찾고 싶습니까?
저는 바로 그 지점을 정확히 찾아낼 수 있도록 도와주는 무료 24가지 체크리스트를 만들었습니다. AI가 따르는 대신 추론하고 있는 구조적 격차와 그로 인해 발생하는 불일치를 찾아낼 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기