요즘 개발자치고 AI(Claude, Gemini 등)를 안 쓰는 사람은 거의 없다. "이거 구현해줘"라고 하면 3초 만에 코드가 쏟아진다. 처음엔 마법 같다. 생산성이 10배는 뛴 것 같다.
하지만 프로젝트가 커지고 파일이 수십 개로 늘어나면 곧 깨닫게 된다. AI가 짜준 코드는 예쁘게 포장된 쓰레기 더미가 되기 쉽다는 것을.
왜일까? AI가 멍청해서가 아니다. 우리가 AI에게 일을 시키는 방식, 즉 '프롬프트'가 잘못되었기 때문이다.
"알아서 잘 짜줘"는 최악의 지시다
많은 개발자가 AI에게 이렇게 말한다.
"유저가 결제하면 포인트를 차감하고 로그를 남기는 API 만들어줘. 아, 트랜잭션 처리도 잘 챙기고, 에러 처리도 깔끔하게 해줘."
이것은 마치 건축가에게 설계도도 주지 않고 "튼튼하고 멋진 집을 지어주세요"라고 말하는 것과 같다. AI는 학습 데이터에 있는 '가장 흔한 패턴'을 무작위로 가져와서 코드를 짠다.
결과는 뻔하다.
- A 파일에서는
QueryRunner로 트랜잭션을 걸고, - B 파일에서는
dataSource.transaction을 쓰고, - C 파일에서는
try-catch로 대충 뭉갠다.
아키텍처의 일관성이 무너진다. 일관성이 없는 코드는 유지보수가 불가능하다. 결국 사람이 다시 다 뜯어고쳐야 한다.
해결책: 프롬프트가 아니라 '팩토리 함수(Factory Function)'를 던져라
개발의 근본이 되는 패턴을 모르면 AI를 써도 비효율적이다. 반대로, 패턴이 강력하게 정해져 있으면 AI는 최고의 일꾼이 된다.
핵심은 AI에게 "생각할 자유"를 주지 않는 것이다. 대신 "빈칸 채우기"를 시켜야 한다. 이것을 가능하게 하는 것이 바로 코드 스니펫을 팩토리 함수처럼 활용하는 전략이다.
나쁜 예
말로 구구절절 설명하는 방식이다.
"NestJS 서비스 메서드인데, 트랜잭션 걸고, 유저 조회해서 없으면 에러 뱉고, 있으면 업데이트해줘."
좋은 예
"구조는 내가 정한다. 너는 파라미터만 채워라."
나는 AI에게 작업을 시킬 때, 아예 템플릿 코드를 던져주고 시작한다.
"아래 TransactionalServiceFactory 템플릿을 사용해. 너는 TODO: Business Logic 부분만 채우면 된다. 다른 건 건드리지 마."
// 📋 Transactional Service Template
async function serviceMethodTemplate(dto: InputDto): Promise<OutputDto> {
// 1. 이미 검증된 트랜잭션 패턴 강제
return this.dataSource.transaction(async (manager) => {
// Constraint: 반드시 manager를 사용해야 함
// ---------------------------------------------------------
// AI 작업 영역 (Parameters): 여기에만 로직을 구현한다.
// ---------------------------------------------------------
// TODO: 1. Validate State
// TODO: 2. Execute Main Logic
// TODO: 3. Return DTO
// ---------------------------------------------------------
});
}이렇게 하면 AI는 트랜잭션을 어떻게 걸지, 에러 처리를 어떻게 할지 고민하지 않는다. 오직 비즈니스 로직에만 집중한다.
결과물은?
- 일관성 100%: 누가, 언제 시켜도 똑같은 아키텍처 구조가 나온다.
- 안전성: 트랜잭션 누락이나 실수 같은 치명적인 버그가 원천 차단된다.
- 속도: AI가 불필요한 추론을 할 필요가 없으니 답변 속도도 빠르다.
개발자는 '코더'가 아니라 '설계자'가 되어야 한다
AI 시대에 개발자의 역할은 바뀌었다. 직접 for 문을 짜고 if 문을 짜는 건 AI가 더 잘한다. 하지만 "어떤 틀에 코드를 부어 넣을 것인가"를 결정하는 건 오직 사람만이 할 수 있다.
개발에서 근본이 되는 패턴(Design Pattern, Architecture)을 모르면, 아무리 좋은 AI 툴을 줘도 결과물은 들쭉날쭉할 수밖에 없다.
자신만의 견고한 '템플릿'를 만들어라. 그리고 AI에게는 그 틀 안에서 놀게 하라. 그것이 AI를 지배하고, 압도적인 생산성과 코드 품질을 동시에 잡는 유일한 방법이다.
요약:
- 말로 설명하면 AI는 제멋대로 짠다.
- 아키텍처가 포함된 '템플릿'를 입력값으로 줘라.
- AI는 그저 그 템플릿의 파라미터만 채우게 만들어라.
- 이것이 시스템화된 고품질 코드를 뽑아내는 비결이다.
