AI 코딩 도구 6개월 실사용 후기 — 생산성이 정말 올랐을까?
처음 3개월은 마법 같았다. 6개월 지나니 품질 부채가 보이기 시작했다.
우리 팀 (4명 개발자)이 Copilot, Claude, Cursor를 6개월간 실제로 사용한 경험을 정직하게 공유한다.
Month 1-3: 마법의 시간
처음 도입했을 때:
"와, 이게 이렇게 잘되다니?"
"코드 작성 속도가 진짜 2배네요"
"보일러플레이트는 이제 AI가 하네"
실제로 측정한 데이터:
| 메트릭 | AI 도구 전 | 도입 후 1주일 | 변화 |
|---|---|---|---|
| 코드 작성 시간/기능 | 45분 | 18분 | 60% 단축 |
| 테스트 작성 시간 | 30분 | 12분 | 60% 단축 |
| 코드 리뷰 시간 | 20분/PR | 35분/PR | 75% 증가 |
코드 리뷰 시간이 늘어난 이유? AI 생성 코드의 미묘한 버그를 잡느라.
Month 3-6: 현실이 보이기 시작
문제점들이 나타났다:
1. AI 코드의 테스트 커버리지가 낮다
2. 엣지 케이스를 놓친다
3. 과거 코드 패턴을 모른다
4. 성능 최적화는 하지 않는다
예시:
// AI가 생성한 코드
async function processLargeFile(filePath: string) {
const content = await fs.readFile(filePath, 'utf-8');
const lines = content.split('
');
for (const line of lines) {
await processLine(line); // ❌ 직렬 처리, 느림
}
}
// 개발자가 수정한 코드
async function processLargeFile(filePath: string) {
const content = await fs.readFile(filePath, 'utf-8');
const lines = content.split('
');
await Promise.all(lines.map(line => processLine(line))); // ✅ 병렬 처리
}
AI는 작동하는 코드를 생성한다. 하지만 최적화는 개발자가 해야 한다.
도구별 평가
GitHub Copilot (월 $10)
장점:
- IDE 통합이 가장 자연스러움
- 단일 라인/함수 자동완성이 뛰어남
- 팀이 이미 GitHub를 쓰고 있음
단점:
- 긴 파일에서 context 부족
- 전체 함수 생성은 Claude가 낫다
- 가끔 이상한 제안 (한국어 변수명 감지 못함)
실제 사용 비율: 30% (주로 자동완성)
Claude (Claude API 기반 Cursor 등)
장점:
- 긴 문맥 이해 (200K tokens)
- 복잡한 기능 설명이 가능
- 코드 리뷰, 리팩토링에 최고
- 한국어 이해가 좋음
단점:
- 비용 (월 $20 vs Copilot $10)
- 응답 속도 (Copilot이 빠름)
실제 사용 비율: 50% (주로 복잡한 기능)
Cursor IDE (Claude 기반)
장점:
- Ctrl+K (코드 편집 AI)가 강력함
- 전체 파일 context를 자동으로 이해
- Git diff 기반 수정 제안
단점:
- 새로운 IDE (VS Code 익숙도 차이)
- 팀 협업이 덜 mature
- 기존 VS Code 확장이 100% 호환 아님
실제 사용 비율: 20% (시험 중)
생산성 분석: 정량적 결과
6개월 후 정리한 데이터:
| 항목 | 개선도 |
|---|---|
| 새 기능 구현 시간 | 40% 단축 |
| 버그 수정 시간 | 20% 단축 (복잡도에 따라 다름) |
| 테스트 작성 시간 | 50% 단축 |
| 코드 리뷰 시간 | 30% 증가 |
| 리팩토링 시간 | 25% 단축 |
| 전체 개발 시간 | 22% 단축 (리뷰 포함) |
예상: 40% 단축
실제: 22% 단축
왜? 코드 리뷰에 더 많은 시간을 쓰게 되었기 때문이다.
AI 코드의 함정
함정 1: 보안 감시 부족
AI가 생성한 코드:
// ❌ AI 생성
app.post('/api/user/:id', (req, res) => {
const user = {
id: req.body.id,
email: req.body.email,
password: req.body.password, // ← 평문 저장!
};
db.save(user);
});
개발자가 수정:
// ✅ 수정된 버전
app.post('/api/user/:id', async (req, res) => {
const { email, password } = req.body;
const hashedPassword = await bcrypt.hash(password, 10);
const user = {
id: req.params.id, // ← URL에서, body가 아님
email,
password: hashedPassword,
};
await db.save(user);
});
AI는 요청한 대로 만든다. 하지만 보안은 따로 생각해야 한다.
함정 2: 성능
// ❌ AI 생성 (O(n²))
function findDuplicates(arr: number[]) {
const duplicates = [];
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
duplicates.push(arr[i]);
}
}
}
return duplicates;
}
// ✅ 개선 (O(n))
function findDuplicates(arr: number[]) {
const seen = new Set();
const duplicates = new Set();
for (const num of arr) {
if (seen.has(num)) {
duplicates.add(num);
} else {
seen.add(num);
}
}
return Array.from(duplicates);
}
함정 3: 타입스크립트 any 증가
AI가 작동하는 코드를 빨리 만들려고 any를 쓴다:
// ❌ AI 생성
function handleData(data: any) {
return data.map(item => item.value);
}
// ✅ 올바른 타입
interface DataItem {
value: string;
}
function handleData(data: DataItem[]) {
return data.map(item => item.value);
}
6개월 동안 any의 개수가 23% 증가했다. 이건 부채다.
최고의 사용 방법: Multi-model 전략
우리 팀이 찾은 최고 효율 방식:
1. 복잡한 기능 구상: Claude (Cursor) 사용 → 아키텍처 제안받기
2. 구현 시작: Copilot 자동완성으로 빠르게 작성
3. 완성 후: Claude로 코드 리뷰 (성능, 보안, 타입 체크)
4. 최종 리뷰: 시니어 개발자 (인지적 오류 체크)
이 프로세스로 품질을 유지하면서도 속도를 얻었다.
팀 규칙
1. AI 생성 코드에는 항상 TODO 주석 (리뷰 표시)
2. 보안 관련 코드는 AI로 생성하지 않음
3. 성능이 중요한 함수는 AI 생성 후 반드시 최적화
4. any는 금지 (satisfies 연산자로 대체)
5. 테스트는 항상 수동 작성 (AI 테스트는 불충분)
결론: 정직한 평가
AI 코딩 도구는 생산성을 올린다. 하지만 40%가 아니라 20-25%다.
그리고 코드 리뷰 비용이 증가한다.
하지만 보일러플레이트 작성 시간이 크게 줄면, 더 중요한 설계와 최적화에 집중할 수 있다.
오랜 개발 경험에서: AI 도구는 손가락이다. 뇌는 여전히 인간이어야 한다.