대략 20년차 개발자입니다. 지난 8개월간 AI로 코딩해 보고 나름 느낀 부분을 공유하고자 글을 씁니다.
개인의 경험을 나누어 다른 분들이 AI 사용에 도움이 되고자 하는 부분이며, 내용이 지금 시점에 맞지 않거나 혹은 제가 잘 알지 못해서 부정확한 부분이 있을수 있습니다.
상세한 글은 아래 github에 달아두었으며, 여기 글은 요약본입니다.
---
한 줄 — 동작하는 코드는 순식간에 나온다. 그런데 그 코드의 품질·일관성·정합성을 사람이 다시 잡아주는 시간이 만만치 않다. "빠른데, 빠른 만큼 새로운 피로가 생긴다."
무엇이 문제인가 (10가지 핵심)
- 데모 ↔ 프로덕션 갭 — "동작하는 코드"와 "운영 가능한 코드"는 다르다. SQL Injection, 환경변수 미사용, 로그 없음등 의 문제점들이 있어도 데모는 문제없다.
- 머릿속 시뮬레이션을 못 한다 — race condition, 타임존, 캐시처럼 코드에 안 적힌 동적 동작은 AI가 못 잡는다. 패턴은 보지만 시간축은 못 돌린다.
- 물어보면 아는데, 짜라고 하면 엉뚱하게 짠다 — "UTC→KST 변환은
Intl.DateTimeFormat을 써야 한다"고 답할 줄은 안다. 그런데 실제 코드를 짤 땐 또toDate()로 돌아간다. - 일관성 부재 — 같은 개념을 세션마다
money/cash/price로 짠다. 6개월 후 누구도 셋이 같은 건지 모른다. - DRY 위반과 누적 부채 — 이미 있는 함수를 또 만든다. 방향 전환 후의 잔재 코드를 못 걷어낸다. 안 쓴다고 지웠는데 string 참조로 살아있어서 새벽 배치가 죽는다.
- 요구사항 충돌 시 회귀 — 두 번째 요구를 짜다가 첫 번째 기능을 깬다. AI는 프로젝트 전체 그림을 보지 않고 시킨 일만 글자 그대로 처리한다.
- Lost in the Middle / Context Rot — 시스템 프롬프트의 중간 규칙이 누락된다. 컨텍스트가 길수록 앞에서 한 결정과 모순되고, 폐기한 패턴을 재도입한다.
- 자동화·사이드킥의 환상 (5분 OK, 5시간 NG) — 5분짜리는 잘하는데 몇 시간 돌리면 자기 작업을 자기가 되돌린다. 자율 에이전트의 시스템 디폴트 자체가 5분(300초)인 게 우연이 아니다.
- 테스트의 거짓 안전감 — Mock이 Mock을 검증하는 테스트, "테스트 통과"를 목표로 reward hacking, 심지어 테스트 자체를 지워서 그린을 만든다.
- 보안·환각 의존성 — 환각된 패키지명을 공격자가 선점하는 slopsquatting, PR description에 숨긴 prompt injection으로 RCE까지.
그래서 어떻게 써야 하나 (실용 처방)
1) 좁히고 — 쪼개고 — 격리하라
- "너는 20년차 Angular 전문가다"처럼 페르소나를 좁힌다.
- 한 번에 하나만 시킨다 (마이크로태스킹).
- 세션·서브에이전트·fresh context로 맥락을 격리한다.
2) 반복은 시키지 말고 "스크립트를 짜라"고 시켜라
- 같은 변환을 N번 시키지 말고, 그 변환을 수행하는 스크립트를 한 번 짜게 하고 실행한다.
3) 사람이 오케스트레이터가 된다
- 5~10분 단위로 끊고, 단위마다 빌드/테스트 그린 확인, 결과를 정리해 다음 단위 입력으로 준다.
- "버그 조사 세션"과 "구현 세션"을 분리한다. Plan mode 결과를 새 세션에 붙여 시작한다.
- 한 단락 끝나면
/clear. 결론만CLAUDE.md나 메모로 옮긴다.
4) 디버깅은 5단계 이정표
- 문제 한 문장으로 정의 → 2. Given-When-Then으로 올바른 동작 정의 → 3. 최소 재현 환경 → 4. 원인 가설 나열 → 5. 가설 하나씩 검증.
- 1~3번이 명확하면 AI가 표면적 패치로 도망갈 수 없다.
5) 잘 짠 테스트 = AI를 가두는 램프 (Kent Beck)
- AI가 어떻게 고치든 "만족시켜야 할 조건"은 사람이 정해서 보존.
- 단, AI가 테스트를 지워서 그린을 만드는 함정 주의 → 테스트 변경은 별도 PR/권한, mutation testing, 테스트 개수 감소 PR 자동 차단.
6) 비용 통제
- 모델 라우팅(Haiku/Sonnet/Opus 분리), prompt cache, 세션당 토큰 예산.
- MCP는 미니멀하게. 안 쓰는 서버는 끈다.
7) 데모 ↔ 프로덕션을 spec으로 메운다
- "observability 없이는 done이 아니다"를 spec 단계에서 강제.
- AI 생성 PR은 SAST + Secret scan + 회귀 테스트가 머지 게이트.
결론 — 한 줄
동작은 5분, 정합성은 5시간. 첫 구현은 빨라졌지만 "이 코드가 실제로 돌 때 무슨 일이 벌어질지" 머릿속에서 돌려보는 일은 여전히 사람이 한다. AI 시대의 진짜 생산성은 모델이 아니라 워크플로우가 만든다.
특히 초창기에 md + rules 를 잘 잡아줄 수록 상당수 문제가 해결됩니다.
그리고, 초기 md + rules 만이 아니라, 작업 진행도에 따른 별도 문서를 생성해서 업무 히스토리를 세션마다 업데이트 쳐서 AI 가 히스토리를 따라갈 수 있게 하면 있는 함수 또 짜고, price, cash, money 와 같이 네임 규칙을 어긋나는 경우도 거의 발생하지 않습니다.
지금 프로덕트를 한 12개째 뽑고 있는데, 초창기 작업한 것들은 말씀하신 대다수의 경우를 겪었는데,
최근엔 거의 안 겪고 있네요.
참. 클로드 코드 세션은 30% 언더에서 닫고 새 세션으로 진행하는 편입니다.
앞으로 AI 가 어떻게 발전할지는 모르겠으나, 적어도 현재는 md 작성과 관련한 스킬이 AI 의 알파이자 오메가 인 것 같아요.