AI 코드 생성의 현재
AI 코드 생성 도구는 개발 생산성을 크게 향상시켰지만, 맹목적으로 신뢰하면 오히려 기술 부채를 쌓게 됩니다. 한계를 정확히 이해하고 올바르게 활용하는 것이 핵심입니다.
AI 코드 생성의 주요 한계
- 환각(Hallucination): 존재하지 않는 API나 라이브러리를 자신있게 제안
- 컨텍스트 부족: 전체 아키텍처나 비즈니스 로직을 이해하지 못함
- 보안 취약점: SQL 인젝션, XSS 등 보안 문제가 있는 코드 생성
- 최신 정보 부재: 학습 데이터 이후의 API 변경사항 미반영
- 복사-붙여넣기 문제: 학습 데이터의 라이선스 문제 가능성
실제 문제 사례
// AI가 생성한 코드 (보안 문제)
app.get('/user/:id', async (req, res) => {
const query = `SELECT * FROM users WHERE id = ${req.params.id}`;
const user = await db.query(query);
res.json(user);
});
// 올바른 코드
app.get('/user/:id', async (req, res) => {
const user = await db.query(
'SELECT id, name, email FROM users WHERE id = $1',
[parseInt(req.params.id)]
);
if (!user.rows[0]) {
return res.status(404).json({ error: 'User not found' });
}
res.json(user.rows[0]);
});
AI가 잘하는 영역
// 1. 보일러플레이트 코드 생성
interface UserDTO {
id: number;
name: string;
email: string;
role: 'admin' | 'user';
createdAt: Date;
}
function toEntity(dto: UserDTO): UserEntity {
return {
id: dto.id,
name: dto.name,
email: dto.email,
role: dto.role,
createdAt: dto.createdAt,
updatedAt: new Date()
};
}
// 2. 테스트 코드 생성
describe('UserService', () => {
it('should create user with valid data', async () => {
const userData = { name: 'Test', email: 'test@example.com' };
const result = await userService.create(userData);
expect(result).toHaveProperty('id');
expect(result.name).toBe('Test');
});
it('should reject duplicate email', async () => {
await expect(
userService.create({ name: 'Dup', email: 'existing@example.com' })
).rejects.toThrow('Email already exists');
});
});
// 3. 정규표현식 생성
const phoneRegex = /^01[016789]-\d{3,4}-\d{4}$/;
올바른 활용 전략
| 전략 | 설명 | 효과 |
|---|---|---|
| 검증 우선 | AI 코드를 항상 리뷰하고 테스트 | 버그/보안 예방 |
| 컨텍스트 제공 | 충분한 주석과 타입 정보 제공 | 정확도 향상 |
| 점진적 생성 | 큰 단위보다 작은 함수 단위 생성 | 품질 향상 |
| 학습 도구로 | 새 기술 학습의 출발점으로 활용 | 학습 효율 |
| 반복 작업에 | CRUD, 변환, 테스트 등에 집중 | 생산성 극대화 |
효과적인 프롬프트 작성법
// 나쁜 프롬프트: "로그인 기능 만들어줘"
// 좋은 프롬프트:
// "Express.js에서 bcrypt로 비밀번호 해싱하고
// JWT access/refresh 토큰을 사용하는
// 로그인 API 핸들러를 작성해줘.
// - Prisma ORM 사용
// - 에러 처리 포함
// - TypeScript 타입 명시"
팀 차원의 가이드라인
- AI 생성 코드에 대한 코드 리뷰 의무화
- 보안 민감 코드(인증, 결제 등)는 AI 생성 지양
- AI 도구의 컨텍스트 파일(.cursorrules, .github/copilot 등) 팀 공유
- AI가 생성한 코드의 라이선스 검증 프로세스 수립
- 주니어 개발자가 AI 의존도 높아지지 않도록 멘토링 병행
댓글 0