14.github-copilot

Episode 14: "GitHub Copilot: AI 페어 프로그래머의 등장"

코딩의 미래, 인간과 AI의 협업


프롤로그: 코드를 작성하는 AI의 탄생

2021년 6월, GitHub와 OpenAI가 공동으로 발표한 Copilot은 개발자 커뮤니티에 충격을 안겼습니다. "주석을 쓰면 코드가 자동으로 생성된다"는 것은 마치 공상과학 영화 같은 이야기였으니까요.

하지만 더욱 놀라운 것은, 이것이 실제로 작동했다는 점입니다. 그리고 2년 후인 2023년, Claude, ChatGPT 같은 대화형 AI들이 등장하면서 프로그래밍의 패러다임은 완전히 바뀌게 됩니다.

이 글에서 다룰 내용
  • GPT 모델이 코드를 생성할 수 있게 된 배경
  • AI 코딩 어시스턴트의 등장과 진화
  • 현실적인 한계: Context Window와 비용의 문제
  • AI와 효과적으로 협업하는 방법

Chapter 1: GPT의 코드 생성 능력 발견

Transformer의 등장

모든 것은 2017년 구글의 "Attention is All You Need" 논문에서 시작되었습니다. Transformer 아키텍처는 원래 자연어 번역을 위해 만들어졌지만, 곧 사람들은 깨닫게 됩니다: 프로그래밍 언어도 결국 언어다.

python
# 자연어와 프로그래밍 언어의 유사성
자연어:    "만약 비가 오면, 우산을 가져가세요"
프로그래밍: "if raining == true, then take_umbrella()"

# 둘 다 문법(grammar)과 의미(semantics)를 가진 언어

GitHub의 거대한 훈련 데이터

GitHub는 무려 수억 개의 오픈소스 저장소를 보유하고 있었습니다. 이것은 AI에게 있어 인류가 쓴 모든 코드의 집대성이나 다름없었죠.

GitHub의 코드 데이터셋

AI 학습의 보물창고

  • 수십억 줄의 코드: Python, JavaScript, Java, C++ 등 모든 주요 언어
  • 실제 프로젝트: 이론이 아닌 실무에서 작동하는 코드
  • 버전 히스토리: 코드가 어떻게 진화하고 개선되는지
  • 리뷰와 이슈: 무엇이 좋은 코드이고 나쁜 코드인지

Codex: GPT-3의 코딩 특화 버전

OpenAI는 GPT-3를 GitHub의 코드로 추가 학습시켜 Codex를 만들었습니다. 결과는 놀라웠습니다:

javascript
// 주석만 작성하면...
// Function to fetch user data from API and display in table

// Copilot이 자동으로 생성
async function fetchAndDisplayUsers() {
  const response = await fetch('https://api.example.com/users');
  const users = await response.json();
  
  const table = document.createElement('table');
  users.forEach(user => {
    const row = table.insertRow();
    row.insertCell().textContent = user.name;
    row.insertCell().textContent = user.email;
  });
  
  document.body.appendChild(table);
}
Copilot의 혁신성

Copilot은 단순히 코드 스니펫을 복사하는 것이 아니라, 맥락을 이해하고 적절한 코드를 생성할 수 있었습니다. 주변 코드, 파일명, 프로젝트 구조까지 고려한 지능적인 제안이었습니다.


Chapter 2: "AI가 내 일을 뺏을까?"에서 "AI와 함께 일하자"로

초기의 불안감

Copilot이 처음 등장했을 때, 많은 개발자들이 불안해했습니다:

1

첫 번째 단계: 부정

"이건 그냥 Stack Overflow 복붙 자동화일 뿐이야"

2

두 번째 단계: 분노

"이게 내 일자리를 위협한다고?"

3

세 번째 단계: 타협

"음... 반복적인 코드 작성에는 쓸만하네"

4

네 번째 단계: 수용

"AI 없이는 이제 개발이 안 돼"

실제로는 생산성 도구

시간이 지나면서 개발자들은 깨달았습니다. AI는 개발자를 대체하는 것이 아니라, 단순 반복 작업에서 해방시켜주는 도구라는 것을요.

typescript
// AI가 도움을 주는 영역들
const aiAssistance = {
  excellent: [
    '보일러플레이트 코드 생성',
    '타입 정의 작성',
    '테스트 케이스 생성',
    '문서화 주석 작성',
    '정규표현식 작성',
  ],
  
  limited: [
    '복잡한 비즈니스 로직',
    '아키텍처 설계',
    '성능 최적화 전략',
    '보안 취약점 분석',
  ],
  
  impossible: [
    '요구사항 이해',
    '이해관계자와 소통',
    '기술 의사결정',
    '팀 리더십',
  ],
};

"Copilot은 주니어 개발자를 시니어로 만들지 못하지만, 시니어 개발자를 2배 빠르게 만든다."

Unknown DeveloperTwitter, 2023

새로운 협업 모델의 등장

2023년 이후, ChatGPT, Claude, Cursor 같은 도구들이 등장하면서 대화형 AI 프로그래밍이 가능해졌습니다:

AI 협업의 진화

단순 자동완성에서 페어 프로그래밍으로

1세대 (2021-2022): GitHub Copilot

  • 코드 자동완성
  • 주석 기반 생성
  • 단방향 제안

2세대 (2023-2024): ChatGPT/Claude

  • 대화형 상호작용
  • 코드 설명 및 리팩토링
  • 디버깅 지원

3세대 (2024-현재): Cursor/Windsurf

  • 전체 코드베이스 인식
  • 멀티파일 편집
  • 컨텍스트 기반 제안

Chapter 3: 저작권과 윤리 논란

오픈소스 코드 학습의 딜레마

GitHub Copilot의 등장과 함께 심각한 윤리적 질문이 제기되었습니다: AI가 GPL 라이선스 코드를 학습해서 생성한 코드의 라이선스는 무엇인가?

라이선스 논란
  • AI가 MIT 라이선스 코드를 학습했다면, 생성된 코드도 MIT인가?
  • GPL "전염성"은 AI 생성 코드에도 적용되는가?
  • 저작권 귀속은 누구에게? (원 작성자? AI 개발사? 사용자?)
  • 학습 데이터 사용 동의를 받아야 하는가?

실제 소송 사례들

2022년, 집단 소송이 제기되었습니다:

text
원고: 오픈소스 개발자 커뮤니티
피고: GitHub, OpenAI, Microsoft

주장: 
"GitHub Copilot은 우리의 오픈소스 코드를 무단으로 사용하여 
수익 모델을 만들었으며, 이는 저작권 침해다."

반박:
"AI 학습은 fair use에 해당하며, 
생성된 코드는 원본과 다른 변형물이다."

커뮤니티의 분열

개발자 커뮤니티는 양분되었습니다:

1

찬성파

"오픈소스의 목적은 지식 공유다. AI가 이를 확산시키는 것은 긍정적이다."

2

반대파

"내 코드를 상업적 AI 제품에 쓰는 것은 동의하지 않았다."

3

중도파

"새로운 라이선스 모델이 필요하다. AI 학습 허용 여부를 명시해야 한다."


Chapter 4: 프로그래밍 교육의 패러다임 변화

코딩 부트캠프의 위기

AI의 등장으로 "3개월 만에 개발자 되기" 같은 속성 교육 모델이 흔들리기 시작했습니다:

python
# 예전 초보 개발자의 학습 과정
1. 기본 문법 배우기 (3주)
2. 알고리즘 연습 (4주)
3. 웹 프레임워크 학습 (4주)
4. 프로젝트 만들기 (1주)
Total: 12주

# AI 시대의 초보 개발자
1. AI에게 물어보기 (5분)
2. 생성된 코드 복붙 (1분)
3. ???
4. 문제: 왜 작동하는지 모름

새로운 핵심 역량

이제 개발자에게 요구되는 역량이 바뀌었습니다:

AI 시대 개발자의 필수 역량

코드 작성에서 문제 해결로

  • 문제 정의 능력: 무엇을 만들어야 하는지 명확히 이해
  • 프롬프트 엔지니어링: AI에게 효과적으로 요청하는 법
  • 코드 리뷰 능력: AI가 생성한 코드의 품질 판단
  • 아키텍처 설계: 전체 시스템 구조 설계
  • 디버깅 직관: 문제가 어디서 발생했는지 빠르게 파악

교육 기관의 적응

대학과 교육 기관들도 변화하고 있습니다:

"우리는 더 이상 학생들에게 '코드를 외우라'고 하지 않습니다. 대신 '문제를 정의하고, AI를 활용하여 해결하고, 결과를 검증하는' 능력을 가르칩니다."

MIT Computer Science Department2024 Curriculum Update

Chapter 5: 현실의 벽 - Context Window와 비용의 문제

Context Window: AI의 기억력 한계

2025년 11월 현재, 가장 큰 제약사항은 context window입니다. AI는 한 번에 처리할 수 있는 정보량에 한계가 있습니다.

typescript
// 이상적인 시나리오
const idealAI = {
  contextWindow: Infinity,
  canRead: '전체 코드베이스',
  canRemember: '모든 대화 내용',
  canProcess: '무제한 파일',
};

// 현실의 AI (2025년 기준)
const realAI = {
  contextWindow: '200k tokens (약 150k 단어)',
  canRead: '일부 파일만',
  canRemember: '최근 대화만',
  canProcess: '선택된 컨텍스트만',
};
Context 한계의 현실

대규모 프로젝트에서는 AI가 전체 코드베이스를 "보지" 못합니다. 따라서:

  • 파일 선택이 중요: 관련 있는 파일만 컨텍스트에 포함
  • 요약 제공 필요: 프로젝트 구조를 간단히 설명
  • 특정 부분에 집중: 전체 리팩토링보다는 부분적 개선
  • 반복 작업 필요: 한 번에 모든 것을 해결할 수 없음

대화 누적의 비용 문제

AI와 대화를 길게 이어가면 이전 대화 내용이 계속 입력(input)으로 전송됩니다. 이것은 비용과 직결됩니다.

Claude Sonnet 4.5 가격 (2025년 기준)

토큰당 비용

항목가격 (MTok당)배수
Base Input Tokens$31x
5분 Cache Writes$3.751.25x
1시간 Cache Writes$62x
Cache Hits & Refreshes$0.300.1x
Output Tokens$155x
비용 폭탄의 함정
typescript
// 비효율적인 AI 사용 (코드 라인당 평균 30 tokens 가정)

User: "이 코드 설명해줘" 
- 컨텍스트: 300 라인 ≈ 9,000 tokens input
- AI 응답: ≈ 2,000 tokens output
- 비용: (9k × $3 + 2k × $15) / 1M = $0.027 + $0.03 = $0.057

User: "아, 그럼 이것도" 
- 이전 대화 9k + 2k = 11k tokens 누적
- 새 컨텍스트: 5k tokens
- 총 input: 16k tokens
- AI 응답: 2k tokens
- 비용: (16k × $3 + 2k × $15) / 1M = $0.048 + $0.03 = $0.078

User: "음... 다시 해줘" 
- 이전 대화 누적: 18k tokens
- 새 요청: 8k tokens
- 총 input: 26k tokens
- AI 응답: 2k tokens
- 비용: (26k × $3 + 2k × $15) / 1M = $0.078 + $0.03 = $0.108

// 3번의 간단한 질문에 총 $0.243
// 하지만 처음에 제대로 했다면? $0.057로 끝!

대화를 이어갈수록 이전 내용이 계속 누적되어 비용이 기하급수적으로 증가합니다!

Token 가격의 비대칭성

특히 주목해야 할 점은 Output Token이 Input Token보다 5배 비싸다는 것입니다:

python
# 비용 계산 예시 (라인당 평균 30 tokens)
def calculate_cost(input_tokens, output_tokens):
    input_cost = (input_tokens / 1_000_000) * 3  # $3/MTok
    output_cost = (output_tokens / 1_000_000) * 15  # $15/MTok
    return input_cost + output_cost

# 시나리오 1: 많은 컨텍스트, 짧은 질문
# 3000 라인 코드 + 간단한 질문 → 간단한 답변
cost1 = calculate_cost(input_tokens=90_000, output_tokens=2_000)
print(f"시나리오 1: ${cost1:.3f}")  # $0.300

# 시나리오 2: 적은 컨텍스트, 긴 답변 (코드 생성)
# 100 라인 참고 + 상세한 요청 → 500 라인 코드 생성
cost2 = calculate_cost(input_tokens=5_000, output_tokens=15_000)
print(f"시나리오 2: ${cost2:.3f}")  # $0.240

# Output이 5배 비싸므로 긴 출력이 큰 영향!
# 하지만 대화 누적보다는 한 번에 긴 출력이 효율적

역설적 진실: 컨텍스트를 아끼지 말라

Input Token이 Output Token의 1/5 가격이라는 사실은 AI 사용에 있어 중요한 통찰을 제공합니다. 이는 Claude뿐만 아니라 대부분의 AI 서비스에서 공통적으로 적용되는 가격 구조입니다:

주요 AI 서비스 가격 비율

Input vs Output Token 비교

서비스InputOutput비율
Claude Sonnet 4.5$3/MTok$15/MTok1:5
GPT-4 Turbo$10/MTok$30/MTok1:3
GPT-4o$2.5/MTok$10/MTok1:4
Gemini 1.5 Pro$1.25/MTok$5/MTok1:4

공통점: Output이 항상 3~5배 비쌈

이 가격 구조가 의미하는 것은 명확합니다:

1

Input은 상대적으로 저렴하다

충분한 컨텍스트를 제공하는 것이 비용에 주는 영향은 생각보다 적습니다.

2

Output 품질이 핵심이다

비싼 Output의 품질을 높이는 것이 전체 비용 효율성을 결정합니다.

3

초기 투자가 장기적으로 유리하다

처음에 충분한 Input을 제공하면 재작업이 줄어들어 총 비용이 감소합니다.

황금 법칙: 5:1 원칙

"Output 1줄의 재작성을 막기 위해 Input 5줄을 추가하는 것은 항상 이득이다"

가격 비율이 정확히 5:1이므로, 추가 컨텍스트로 재작업을 방지하면 비용이 절감됩니다.

구체적인 예시: 컨텍스트의 힘

typescript
// 시나리오 A: 컨텍스트를 아낀 경우
// ❌ 잘못된 비용 절감 시도

1차 요청 (최소 컨텍스트):
"로그인 API 만들어줘"
- Input: 1,000 tokens (기본 요청만)
- Output: 3,000 tokens (90 라인)
- 비용: $0.048
- 결과: 에러 처리 없음, 타입 불완전

2차 수정:
"에러 처리 추가해줘"
- Input: 5,000 tokens (누적)
- Output: 2,000 tokens
- 비용: $0.045
- 결과: 보안 체크 누락

3차 수정:
"보안 검증 추가해줘"
- Input: 8,000 tokens (누적)
- Output: 2,000 tokens
- 비용: $0.054

총 비용: $0.147
총 시간: 3번 왕복
결과 품질: 여전히 불완전할 가능성
typescript
// 시나리오 B: 충분한 컨텍스트를 제공한 경우
// ✅ 올바른 접근

1차 요청 (충분한 컨텍스트):
"로그인 API 만들어줘

컨텍스트:
- Next.js 15 App Router 사용
- Prisma + PostgreSQL
- JWT 인증 방식
- 기존 User 모델: [코드 첨부]
- 에러 처리 패턴: [코드 첨부]
- API 응답 형식: [코드 첨부]

요구사항:
- 이메일/비밀번호 검증
- bcrypt 해싱
- JWT 토큰 생성
- 적절한 에러 처리
- TypeScript 타입 완전성
- Rate limiting 고려"

- Input: 8,000 tokens (상세한 컨텍스트)
- Output: 5,000 tokens (150 라인, 완성도 높음)
- 비용: $0.099

총 비용: $0.099 (33% 절감!)
총 시간: 1번 왕복
결과 품질: 바로 사용 가능
비용 분석

시나리오 A (최소 컨텍스트)

  • Input 총합: 14k tokens × $3/MTok = $0.042
  • Output 총합: 7k tokens × $15/MTok = $0.105
  • 총 비용: $0.147

시나리오 B (충분한 컨텍스트)

  • Input: 8k tokens × $3/MTok = $0.024
  • Output: 5k tokens × $15/MTok = $0.075
  • 총 비용: $0.099

차이점:

  • Input을 적게 써서 $0.018 절약 → Output 재작업으로 $0.030 추가 지출
  • 결과: $0.048 더 비싸고, 시간은 3배 더 소요

왜 이런 가격 구조일까?

이 비대칭적 가격 구조는 AI 서비스 제공자의 비용 구조를 반영합니다:

AI 서비스 비용 구조

Input vs Output의 차이

Input Token (읽기)

  • 이미 계산된 임베딩 재사용 가능
  • 캐싱으로 반복 비용 감소
  • 병렬 처리 가능
  • → 상대적으로 저렴

Output Token (생성)

  • 매번 새로 생성 필요
  • 각 토큰이 이전 토큰에 의존 (순차적)
  • GPU 사용 시간이 비례
  • → 상대적으로 비쌈

실전 가이드: 컨텍스트 최대화 전략

1

관련 파일 모두 포함

"이것도 필요할까?" 고민하지 말고 포함하세요. Input은 저렴합니다.

2

프로젝트 구조 설명

200줄의 프로젝트 개요는 고작 6,000 tokens = $0.018입니다.

3

기존 패턴 예시 제공

"이런 스타일로 작성해줘" 예시를 풍부하게 제공하세요.

4

제약사항 명시

"하지 말아야 할 것"을 명확히 하면 재작업을 방지합니다.

5

예상 결과 상세 설명

"이런 형태를 원한다"고 구체적으로 설명하세요.

"Input을 아껴서 $0.01을 절약하려다가, Output 재작성으로 $0.10을 낭비하는 것이 가장 흔한 실수다."

비용 최적화의 역설AI 사용 경험에서

Chapter 6: 효과적인 AI 협업 전략

원칙 1: 한 번에 집중력 있게

대화를 짧게 유지하는 것이 비용 효율적입니다:

1

명확한 목표 설정

"이 함수를 리팩토링해줘"가 아니라 "이 함수의 중복 로직을 제거하고, 타입 안정성을 개선해줘"

2

충분한 컨텍스트 제공

처음부터 필요한 모든 정보를 제공하여 재질문을 방지

3

결과 즉시 검증

생성된 코드를 바로 테스트하고, 문제가 있으면 새 세션에서 다시 시작

4

세션 종료

목표 달성하면 대화를 끝내고, 다음 작업은 새 세션에서

원칙 2: 제대로 된 배경 제공 (그리고 아낌없이!)

사람도 배경 상황 없으면 일을 제대로 못합니다. AI도 마찬가지입니다. 그런데 여기서 핵심은: Input이 저렴하므로, 컨텍스트를 아끼지 마세요.

흔한 실수: 컨텍스트 절약

많은 개발자들이 "토큰 비용"을 걱정하며 최소한의 정보만 제공합니다.

잘못된 생각: "컨텍스트를 줄여서 비용을 아껴야지"
결과: 불완전한 답변 → 재질문 → 비용 2배

실제로는 정반대입니다! Input은 저렴하고, Output 재작성이 훨씬 비쌉니다.

markdown
<!-- ❌ 나쁜 요청 (50 tokens) -->
이 버그 고쳐줘

비용: Input $0.00015 절약
결과: 불완전한 답변 → 재질문 필요
총 비용: $0.20 (재작업 포함)

<!-- ✅ 좋은 요청 (500 tokens) -->
## 프로젝트 컨텍스트
- **스택**: Next.js 15 App Router
- **ORM**: Prisma 5.x
- **DB**: PostgreSQL 15
- **인증**: NextAuth.js
- **배포**: Vercel

## 파일 구조
\`\`\`
app/
  api/
    users/
      route.ts  ← 여기서 에러 발생
  lib/
    prisma.ts
    auth.ts
\`\`\`

## 현재 코드
\`\`\`typescript
// app/api/users/route.ts
export async function POST(req: Request) {
  const data = await req.json();
  const user = await prisma.user.create({ data });
  return Response.json(user);
}
\`\`\`

## 문제 상황
사용자 생성 API에서 unique constraint 에러 발생
에러 메시지: "Unique constraint failed on email"

## 관련 스키마
\`\`\`prisma
model User {
  id    String @id @default(cuid())
  email String @unique
  name  String?
}
\`\`\`

## 이미 시도한 것
- try-catch 추가했지만 클라이언트에 제대로 전달 안 됨
- HTTP 상태 코드가 항상 500

## 기대 동작
- 중복 이메일 입력 시 400 상태 코드
- 명확한 에러 메시지: "이미 사용 중인 이메일입니다"
- 다른 Prisma 에러도 적절히 처리

## 제약사항
- 기존 에러 처리 패턴 유지 (app/lib/errors.ts 참고)
- Zod로 입력 검증 추가
- TypeScript strict mode

비용: Input $0.0015 ($0.00135 추가)
결과: 완벽한 답변, 즉시 적용 가능
총 비용: $0.08 (재작업 없음)

💰 실제 절감: $0.12 (60% 절감!)
컨텍스트 풍부하게 제공하기

프로젝트 환경

  • 프레임워크, 라이브러리 버전
  • 디렉토리 구조
  • 설정 파일 내용

현재 코드

  • 관련된 모든 파일 (5~10개 파일도 OK!)
  • 타입 정의
  • 유틸리티 함수

문제 상황

  • 정확한 에러 메시지
  • 재현 방법
  • 예상 vs 실제 동작

맥락

  • 이미 시도한 해결 방법
  • 지켜야 할 코딩 컨벤션
  • 비슷한 기존 코드 예시

10개 파일 (3,000 라인) = 90k tokens = $0.27

이것으로 완벽한 답변을 받아 재작업을 피하면 $0.50+ 절약!

"컨텍스트는 10배 넘치게 주고, Output 재작성은 0번 하는 것이 가장 경제적이다."

경험에서 우러난 조언

컨텍스트 제공 도구 활용하기

매번 프로젝트 컨텍스트를 수동으로 입력하는 것은 번거로울 수 있습니다. 다행히도 대부분의 AI 코딩 도구들은 초기 컨텍스트를 사전에 설정할 수 있는 기능을 제공합니다:

1

Cursor Rules

프로젝트 루트에 .cursorrules 파일을 생성하면 자동으로 모든 대화에 포함됩니다.

markdown
# .cursorrules 예시
- 프레임워크: Next.js 15 App Router
- 패키지 매니저: bun
- UI 라이브러리: shadcn/ui
- 스타일링: Tailwind CSS
- 타입 체킹: TypeScript strict mode

## 코딩 규칙
- Server Actions는 반드시 async 함수로 작성
- 컴포넌트는 app/components/ 에 위치
- API 라우트는 app/api/ 에 위치

## 금지사항
- any 타입 사용 금지
- console.log는 개발 환경에서만

이렇게 설정하면 매 대화마다 프로젝트 구조를 설명할 필요가 없습니다.

2

Windsurf Cascade Rules

Windsurf는 설정(Settings)에서 AI Rules를 정의할 수 있습니다. Cascade 기능과 함께 사용하면 프로젝트 전반에 걸쳐 일관된 컨텍스트를 유지합니다.

  • 특정 언어로 응답하도록 지정 가능
  • 선호하는 프레임워크나 라이브러리 명시
  • 코드 스타일 가이드 사전 설정
3

GitHub Copilot Custom Instructions

GitHub Copilot도 사용자 정의 지침을 설정할 수 있습니다:

  • VSCode 설정에서 "GitHub Copilot: Instructions" 항목 활용
  • 또는 프로젝트의 .github/copilot-instructions.md 파일 생성
  • 팀 전체가 동일한 컨텍스트를 공유할 수 있음
4

기타 확장 도구

  • Continue.dev: .continuerc 설정 파일로 컨텍스트 관리
  • Cline: 프로젝트별 지침 파일 지원
  • Aider: .aider.conf.yml로 프로젝트 규칙 정의
컨텍스트 도구의 경제적 이점

이러한 도구들은 단순히 편의성만 제공하는 것이 아닙니다:

캐싱 효과: 반복되는 컨텍스트가 캐시되어 90% 저렴해집니다
일관성: 모든 대화에서 동일한 고품질 컨텍스트 제공
시간 절약: 매번 타이핑하는 시간 제거
팀 협업: 팀원 모두가 동일한 AI 경험 공유

초기 설정에 10분 투자하면, 향후 수백 번의 대화에서 시간과 비용을 절약할 수 있습니다.

원칙 3: 점진적 개선보다 한 번에

비용 관점에서는 여러 번 수정하는 것보다 한 번에 정확하게 하는 것이 저렴합니다:

비용 비교

점진적 vs 한번에

점진적 개선 (비효율적)

컨텍스트: 200 라인 기존 코드 ≈ 6k tokens

1차: "함수 만들어줘" 
→ 6k input, 2k output (60 라인)
→ (6k × $3 + 2k × $15) / 1M = $0.048

2차: "타입 추가해줘" 
→ (6k + 2k + 1k) = 9k input, 2k output
→ (9k × $3 + 2k × $15) / 1M = $0.057

3차: "에러 처리도" 
→ (9k + 2k + 1k) = 12k input, 2k output
→ (12k × $3 + 2k × $15) / 1M = $0.066

4차: "테스트도 만들어" 
→ (12k + 2k + 1k) = 15k input, 3k output (100 라인)
→ (15k × $3 + 3k × $15) / 1M = $0.090

총 비용: $0.261

한 번에 (효율적)

"타입이 있고, 에러 처리가 되며, 테스트가 있는 함수 만들어줘"
→ 8k input, 7k output (약 230 라인 생성)
→ (8k × $3 + 7k × $15) / 1M = $0.129

총 비용: $0.129

절약: 51% 저렴! (그리고 훨씬 빠름)

원칙 4: 캐싱 활용

반복적으로 사용하는 컨텍스트는 캐싱을 활용하세요:

typescript
// 프로젝트 구조를 캐시에 저장
const projectContext = `
# 프로젝트 구조
- app/: Next.js App Router
- components/: React 컴포넌트
- lib/: 유틸리티 함수
- types/: TypeScript 타입 정의
`;

// 이후 요청에서는 캐시 히트로 10배 저렴하게
// Cache Hit: $0.30/MTok (Base의 1/10)

원칙 5: AI의 한계 인정

AI가 잘하는 것과 못하는 것을 구분하세요:

1

AI에게 맡기기 좋은 작업

  • 보일러플레이트 코드
  • 타입 정의
  • 테스트 케이스
  • 문서화
  • 코드 번역 (Python → TypeScript 등)
2

사람이 해야 할 작업

  • 요구사항 분석
  • 아키텍처 설계
  • 성능 최적화 전략 수립
  • 보안 정책 결정
  • 코드 리뷰 최종 승인

Chapter 7: 미래 전망

더 큰 Context Window

2024년부터 context window는 급격히 증가하고 있습니다:

text
2023년 초: GPT-3.5 (4k tokens)
2023년 중: GPT-4 (8k tokens)
2023년 말: GPT-4 Turbo (128k tokens)
2024년 중: Claude 3.5 (200k tokens)
2025년?: 1M tokens?

하지만 context가 크다고 해서 모든 문제가 해결되는 것은 아닙니다. 비용은 여전히 제약입니다.

Lost in the Middle 문제

연구에 따르면 AI는 긴 컨텍스트의 처음과 끝은 잘 기억하지만, 중간 부분은 놓치는 경향이 있습니다. 따라서 단순히 모든 파일을 던져주는 것보다, 관련 있는 부분만 선별적으로 제공하는 것이 더 효과적입니다.

Agent 기반 워크플로우

미래의 AI 코딩 어시스턴트는 단순한 제안을 넘어 자율적으로 작업을 수행하는 Agent로 진화할 것입니다:

1

요구사항 이해

자연어로 설명한 기능을 분석

2

계획 수립

어떤 파일을 수정해야 하는지 판단

3

코드 작성

여러 파일에 걸쳐 동시 작업

4

테스트 실행

자동으로 테스트를 작성하고 실행

5

문제 해결

에러가 발생하면 스스로 디버깅

6

리뷰 요청

완성된 PR을 인간에게 제출

새로운 직업: AI 멘토

아이러니하게도 AI의 발전으로 "AI를 잘 다루는 시니어 개발자"의 가치가 더욱 높아지고 있습니다:

"미래의 가장 가치 있는 기술은 'AI 멘토링'이다. AI가 무엇을 잘하고 못하는지 알고, 적재적소에 활용하는 능력이 핵심이다."

Andrej KarpathyTesla AI Director

에필로그: 협업의 새로운 정의

AI는 도구지, 마법이 아니다

2025년 현재, 우리는 AI 코딩 어시스턴트의 가능성과 한계를 모두 경험했습니다. 결론은 명확합니다:

AI 시대 개발자의 역할

대체가 아닌 증강

  • 문제 정의: 무엇을 만들어야 하는지 (인간)
  • 코드 생성: 어떻게 구현할 것인지 (AI 지원)
  • 품질 검증: 올바르게 작동하는지 (인간)
  • 의사결정: 어떤 방향으로 갈 것인지 (인간)

비용 의식의 중요성

무료처럼 느껴지는 AI 도구들도 사실은 막대한 비용이 들어갑니다. 효율적으로 사용하는 것은:

  • 경제적 이유: 비용 절감
  • 환경적 이유: AI 학습과 실행은 엄청난 전력 소비
  • 효과적 이유: 집중된 요청이 더 좋은 결과를 만듦

새로운 프로그래밍 시대

우리는 지금 역사적인 전환점에 서 있습니다. GitHub Copilot의 등장 이후 불과 4년 만에 프로그래밍의 방식이 완전히 바뀌었습니다.

역사는 반복된다
  • 1960년대: 펀치카드 → 키보드 (입력 방식 변화)
  • 1980년대: 어셈블리 → 고급 언어 (추상화 수준 상승)
  • 2000년대: 수동 빌드 → 자동화 도구 (반복 작업 제거)
  • 2020년대: 수동 코딩 → AI 협업 (생산성 폭발)

매번 "개발자가 필요없어진다"는 우려가 있었지만, 실제로는 더 많은 개발자가 필요해졌습니다. 더 높은 수준의 문제를 해결하게 되었으니까요.

"AI는 개발자를 대체하지 않습니다. 하지만 AI를 사용하는 개발자가 AI를 사용하지 않는 개발자를 대체할 것입니다."

GitHub CEO2024 Developer Conference

실전 팁: AI와 효과적으로 일하는 법

체크리스트: AI에게 요청하기 전

markdown
☐ 정확한 목표가 정의되어 있는가?
☐ 필요한 컨텍스트를 모두 준비했는가?
☐ 제약사항을 명확히 했는가?
☐ 예상 결과를 구체적으로 설명할 수 있는가?
☐ 관련 파일들을 선별했는가?
☐ 이전 시도와 실패 사례를 포함했는가?

금기사항

하지 말아야 할 것들
  • ❌ "에러 났어. 고쳐줘" (정보 부족)
  • ❌ 전체 프로젝트를 통째로 던지기 (비효율)
  • ❌ 끝없는 수정 요청 (비용 폭탄)
  • ❌ 생성된 코드를 검증 없이 사용 (위험)
  • ❌ AI 제안을 맹목적으로 수용 (사고 중단)

모범 사례

효과적인 AI 활용
  • ✅ 명확하고 구체적인 요청
  • ✅ 충분하되 선별적인 컨텍스트
  • ✅ 단계별 검증
  • ✅ 비용 의식
  • ✅ 인간의 최종 판단


다음 에피소드에서는 "코드 제네레이션: 템플릿에서 LLM까지"를 다룰 예정입니다. 코드를 생성하는 도구들의 진화 역사를 살펴보겠습니다.