AI 한테 시켰는데 정답 같아 보였다.

2 주 뒤. 프로덕션 에서 *그 코드가 9일간 *조용히 묻혔다. 사용자 게시판 에 “빈 화면” 글이 3 건 올라온 후에야 진단 시작.

코드 자체 틀린 데 없었다. 다만 내 시스템 의 *5 월 17일 사고맞물려 있다는 사실 을 AI 는 *몰랐다. 내가 *알려주지 않았으니까.

이 글은 2026 년 현재 AI 코딩 도구가 *진짜 잘하는 것 과 *진짜 못 하는 것18 시간의 사고 추적 경험 과 함께 정리한다. 그리고 AI 가 작성한 코드가 *쓰레기 코드 로 *변질 되지 않게 하는 5 가지 *합의 가능한 기준** 을 *시니어 백엔드 개발자현실적 시각 에서 풀어본다.


TL;DR — 한 줄 결론

AI 는 *국지적 정답놀랍게 잘 만든다. 다만 시스템 전체의 *맥락, 조직의 암묵적 결정, 과거 사고의 *함정, layer 간 contract, 비즈니스의 *진짜 목적** 의 *5 가지모른다. 그 5 가지 를 *AI 가 모른다는 사실 을 *코드 작성자가 의식적으로 *책임지지 않으면** *AI 가 만든 코드는 *시간이 지나면 *비용이 커지는 *쓰레기 코드 로 변한다. 기준은 *5 가지 — 시스템 맥락 / 미래 의 자기 자신 / 다른 사람 의 이해 가능성 / 사고 학습 의 반영 / 비즈니스 의 *진짜 목적 의 *연결.


1. *발단 — *AI 가 한 줄 쓰면 정답인 줄 안다**

Claude Code 가 잘 짠 코드받았다. 컴파일 OK, 테스트 통과, lint clean. 그래서 그대로 머지. 2 주 뒤 *프로덕션 에서 *알 수 없는 *p99 spike**.

진단해보니 :

  • 코드 자체는 기술적으로 정확
  • 다만 5 개월 전 동일 패턴의 *N+1 사고있었던 것을 *반영하지 않았다
  • AI 는 그 사고를 *알 리가 없다. 내가 *commit message 어디에도 *그 사고 를 *연결하지 않았으니까**

AI 가 만든 코드의 *책임자AI 가 아니라 *나. 그 책임 의 *정의 가 *AI 시대재정립 되어야 한다*.


2. AI 가 *진짜 잘하는 것 5 가지*

2.1 *국지적 *패턴 의 정답**

Spring Boot 의 @Transactional 안에서 *외부 HTTP 호출비동기 outbox 로 *옮겨라**. 이런 *완결된 패턴AI 가 *교과서적으로 정확.

적용 코드 의 *문법, *문맥, *boilerplate 까지 *완벽. 시니어가 *10 분 걸릴 일10 초에 *해결.

2.2 *광범위한 *기술 지식 의 *재현**

ZGC 와 G1GC 의 *p99 pause 차이. HikariCP 의 maxLifetime 과 *DB wait_timeout 의 *비율. Kafka *partition key 의 *순서 보장 의미.

책 한 권을 *몇 분에 *재구성 해서 지금 내 문제 에 *맞게 응용. 학습 비용 의 *극단적 단축.

2.3 *Boilerplate / *반복 코드 의 *자동화**

JPA Entity 작성, DTO mapper 작성, unit test 의 *given-when-then *기본 골격. 시간 가는 *반복 작업AI 가 *압축.

시니어의 *시간 을 *판단이 필요한 일집중 시킬 수 있다.

2.4 문서화 / *주석 작성

잘 쓴 코드에 *주석 다는 일. 복잡한 알고리즘 의 *의도 를 *자연어로 *번역. API 문서, *README, *CHANGELOG 의 *초안 작성. 대부분 *시니어가 미루는 일AI 가 *빠르게 채움.

2.5 *코드 리뷰의 *1 차 필터**

lint / linting / 보안 스캔 같은 기계적 검사. 명백한 안티패턴 (N+1, SQL injection, race condition) 의 초기 탐지. 사람 리뷰어의 *집중을 *진짜 *판단이 필요한 부분 에 *남기는 *효과.


3. AI 가 *못 하는 것 5 가지*

3.1 *시스템 전체의 *맥락**

AI 는 내가 보여준 *파일 들 만 본다. 다음을 모른다 :

  • 다른 *서비스 의 API contract
  • 그 서비스가 *내 변경 에 *어떻게 반응 할지*
  • 우리 *팀 의 *컨벤션 의 *암묵적 룰 (예: “lemuel-default LimitRange 가 cpu max ratio 8 을 강제한다”)

전체 그림 을 *모르는 AI 가 *국지적 정답내놓는다. 그 국지적 정답 이 *다른 컴포넌트 와 *어긋날 수 있다.

3.2 *조직의 *암묵적 결정**

왜 이 코드는 *PostgreSQL 이 아니라 MySQL 인가. 왜 외부 도메인 은 *cloudflared 가 *호스트 OS 에서 도는가. 왜 *settlement-service 는 *outbox 패턴 을 강제하는가.

이런 결정 의 *이유commit log 에도 *문서에도 *명시되지 않은 경우 가 많다. AI 는 그걸 *알 수 없다. 그래서 AI 가 *조용히 *그 결정을 거스르는 코드 를 *만들 수 있다.

3.3 *과거 사고 의 *함정**

5 월 17일 사고fix 가 9 일 묻혔던 *newest-build race. Velero kopia 의 *좀비 잡 한 달 firing. etcd 가 HDD 위에서 *fsync 12 배 늦었던 사고.

이런 사고 의 *흔적블로그 글이나 PR 문서 에는 남아있지만 *AI 가 *자동으로 참조하지 않는다. 내가 prompt 에 *명시 주입 하지 않으면 같은 사고 의 *재발 을 *못 막는다.

3.4 *Layer 간 *Contract**

Observer Pattern → CPU7 layer. 각 layer 는 다음 layer 의 *추상화 를 *신뢰 하는 암묵적 약속 위에서 동작한다. 내 코드의 *변경어느 layer 의 *약속을 깨는지AI 가 즉시 보지 못한다.

9 일 묻힌 사고layer 0 (CI/CD) 의 *race 였다. layer 4 (frontend code) 만 *완벽해도 *layer 0 이 *조용히 *깨지면 *사용자에게 *9 일 묻힌다. AI 가 *layer 0 의 *race 까지 *내다보지 못한다.

3.5 *비즈니스 의 *진짜 목적**

“검색 응답시간 을 *500ms 로 낮춰라”. 기술적 정답인덱스 추가, 캐시, ElasticSearch 도입.

그러나 진짜 비즈니스 목적“이탈률 을 1% 줄여서 *분기 매출 *5% 증가 시키는 것”. *그 목적 에는 *검색 결과 의 *관련성latency 보다 *훨씬 중요 할 수 있다*.

AI 는 *문제 정의 를 *그대로 받아들인다. 그 문제 정의 가 *진짜 비즈니스 와 *얼마나 어긋나 있는지모른다.


4. 쓰레기 코드 의 *정의 — *시간이 지나면 *비용 ↑ 인 코드**

쓰레기 코드 = 시간이 지나면 *비용 이 *증가 하는 코드. *기능 추가 / 버그 수정 / 인수인계 / 사고 진단 *전부 의 비용이 시간에 따라 *비선형 적으로 증가.

4.1 *왜 *AI 가 만든 코드 가 *쓰레기 가 *되기 쉬운가**

  • 국지적 정답 *수십 개모이면 *전체 가 *복잡한 *불일관성덩어리 가 된다
  • 각 패턴 이 *왜 그렇게 됐는지이유 가 *문서화 되지 않는다
  • 나중에 *변경 하려는 사람이유 를 모르니 *조심 하지 못한다
  • 그래서 *변경 마다 *예기치 못한 *부작용발생

4.2 *시간 의 *비대칭 *비용 곡선**

유지 비용
    ↑
    │
    │  쓰레기 코드 ──╲       ╱─── 폭주
    │              ╲     ╱
    │               ╲ ╱
    │                ╳
    │             ╱   ╲
    │  잘 짠 코드 ──   ╲
    │                  ╲────── 점진적 증가
    │
    +──────────────────────────→ 시간
    0       3개월       1년       3년

초기에는 *둘 다 비슷한 비용. 시간이 지날수록 *쓰레기 코드 의 *비용이 *폭주. 3 년 후엔 *처음부터 다시 쓰는 게 *저렴 한 수준 에 도달.


5. 쓰레기 코드 가 *되지 않는 *5 가지 *기준**

이게 시니어 백엔드 개발자가 *AI 시대 에 *명시적으로 *책임져야 할 *5 가지. AI 의 5 가지 *못 하는 것 의 *대응 표.

5.1 *기준 1 — *시스템 *맥락 의 *연결**

AI 가 작성한 코드가 *다른 컴포넌트 와 *어떻게 *상호작용 하는지* 를 명시적으로 *문서 / commit message / PR description 에 *기록.

이 변경은 settlement-service 의 outbox polling 주기 변경 (1s → 5s).
영향:
- producer 측 (order-service) 에서 정산 요청 후 5s 까지 정산 미반영
- 사용자 화면의 "처리 중" 표시 라이브러리 (frontend/Order.tsx) 와 함께 검토 필요
- 야간 배치의 reconciliation 은 영향 없음 (배치는 outbox 우회)

이런 *영향 분석 을 *AI 가 자동 작성하지 못한다. 시니어가 *시스템 그림 을 *알기 때문에 연결 의 *책임자가 된다.

5.2 기준 2 — *미래의 자기 자신 이 이해 가능*

6 개월 후 *내가 *이 코드를 *다시 볼 때 왜 이렇게 했는지명확 한가?*

추천 :

  • commit message 에 *Why명시 (What 은 코드가 말함)
  • 비표준 결정 *(why this number, why this pattern)한 줄 주석
  • *trade-off 가 있는 *결정 은 *PR description 에 *대안과 비교**
// 30s 의 connectionTimeout 을 기본값 30s 그대로 두는 게 *명시적 결정*.
// 이유: cgroup throttling 사고 (PR #18) 이후 short timeout 으로 cascading
// failure 가 더 자주 나는 걸 확인. 3s 로 줄였다 다시 되돌렸음.
val connectionTimeout: Duration = Duration.ofSeconds(30)

AI 가 *왜 그 값 인지모른다. 시니어가 *과거 의 결정 을 *주석 으로 *심는다.

5.3 *기준 3 — *다른 사람 의 이해 가능성**

신입 / 외부 리뷰어 / 미래의 이직자이 코드를 *읽고 *맥락 없이 이해 할 수 있나?*

  • 변수명 / 함수명 이 *비즈니스 도메인 *용어
  • 추상화 level 이 *적절 (너무 잘게도, 너무 크게도)
  • 복잡한 분기 는 *코드 *주석 또는 별도 함수로 *이름 으로 표현

AI 가 영어 docstring완벽 하게 쓸 수 있다. 다만 비즈니스 용어 와 *맞는 *이름 짓기도메인 지식 의 영역. 시니어가 *책임진다.

5.4 *기준 4 — *사고 학습 의 *반영**

과거 의 사고 / 회고 / postmortem 의 *교훈 이 *이 코드 에 *반영 되어 있나?*

  • 우리 *조직의 *블로그 / Wiki 의 사고 기록prompt 에 *주입 하거나 수동으로 검토
  • 과거 사고 와 *유사한 패턴이 PR 에 *있는지명시적 *체크

내 9 일 묻힌 사고는 AI 가 *못 보는 *layer 0 의 race. 그 사고 를 문서로 *박제 한 이후엔 *비슷한 *image-updater 코드 작성 시 *그 문서 참조 *필수. 그게 *내가 *시니어 로 *조직 에 기여하는 *방식.

5.5 기준 5 — *비즈니스 의 *진짜 목적 과 *연결**

이 변경 이 *왜 가치 있는가. *어느 사용자 의 어느 행동 의 *어느 지표 를 *얼마나 *움직이는가**.

  • PR description 에 *비즈니스 목적 *한 줄
  • 기술 spec 과 *비즈니스 가치 의 *연결 다이어그램
  • *측정 가능한 *성공 기준** (KPI / OKR / 운영 지표)

AI 는 문제 를 받아 *기술 적으로 *완벽 한 답을 *내놓는다. 문제 자체가 *진짜인지시니어가 *비즈니스 와 *대화하며 *검증 해야 한다.


6. *내 9 일 묻힌 사고 — AI 가 *어디서 못 막았는가**

9 일 묻힌 frontend 사고 의 layer 별 분석 :

Layer AI 의 책임 가능성 실제
Layer 4 (frontend code) AI 가 *fix 코드 *작성 가능 ✅ 5/17 에 fix merge
Layer 0 (CI/CD pipeline) AI 는 *별도 prompt 없이 *못 봄 ❌ Image Updater race 9 일 묻힘
Layer 0’ (외부 검증) AI 가 *synthetic check *제안 가능 ❌ 본인이 외부 served bytes 검증 안 했음

결론 : 기술적 fix 가 완벽해도 *Layer 0 의 *race 까지 *책임자가 *내다보지 못하면 9 일 묻힌다. AI 의 *작성 책임 과 *내 *전체 시야 의 책임다른 영역 에 있다.


7. 운영 관점 — *AI 가 *작성한 코드 의 *signoff 책임**

AI 도구가 만든 PR 도 *사람이 머지 한다. 그 머지 의 *signoffAI 가 못 한다. 사람이 한다.

시니어 의 *진짜 일 의 형태바뀐다:

과거 (AI 이전) 현재 (AI 시대)
코드 작성 AI 가 작성 → 시니어 가 *signoff
boilerplate 작성 AI 가 자동 → 시니어가 *맥락 검증
문서 작성 AI 가 초안 → 시니어가 *조직 의 결정 주입
코드 리뷰 AI 가 1차 → 시니어가 *시스템 시야 적용
사고 진단 AI 가 hypothesis → 시니어가 *과거 사고 와 *교차 검증

signoff 의 *책임AI 시대 에도 *유지 된다. 오히려 *그 책임 의 *가치 가 *더 크게 평가 된다AI 가 잘 못 하는 부분 만 *남기 때문에.


8. *시니어의 *진짜 일이 *바뀌는 방향**

5 년 후 시니어 백엔드 개발자 의 *일 :

8.1 대폭 줄어드는 일

  • 기본 boilerplate 작성
  • 익숙한 패턴 의 *코드
  • 기계적 코드 리뷰 (lint / N+1 / 안티패턴 1차 필터)
  • 공식 docs 의 *복붙

8.2 그대로 또는 늘어나는 일

  • 시스템 전체 의 시야 *유지
  • 비즈니스 와 *대화 / 우선순위 협상
  • 조직 의 *암묵적 결정 의 *문서화
  • 사고 의 *postmortem 과 *교훈 의 *코드/문서 박제
  • 주니어의 *AI 사용 *멘토링AI 가 못 보는 *5 가지 가 *어디인지 *알려주기
  • AI 의 *prompt context 를 *조직 의 *맥락 으로 구성 하는 메타 작업

8.3 완전히 새로 등장하는 일

  • AI 의 *국지적 정답 들 을 *조립일관된 *전체 시스템 으로 유지
  • AI 의 *학습 데이터 가 *내 조직 의 *최신 결정 을 *반영 하도록 내부 문서 / 사고 기록 *체계화
  • AI 가 *내놓은 *위험 한 답조기에 catch 하는 경험 적 *후각 *개발

9. 5 가지 기준 의 *체크리스트 — 다음 PR 에 적용**

PR 머지 직전 5 분 self-check :

  • 기준 1 (시스템 맥락)이 변경 이 *영향 주는 *다른 컴포넌트최소 1 개 명시했나?
  • 기준 2 (미래의 나)6 개월 후 내가 *이 결정 의 *이유 를 알 수 있는가? 비표준 결정엔 주석 있나?
  • 기준 3 (다른 사람)외부인 리뷰어가 *맥락 없이 이 PR 의 주요 변경이해 가능 한가?
  • 기준 4 (사고 학습)내 조직 의 *과거 사고 / 회고 와 *유사한 패턴이 변경 에 없는가? 확인 했나?
  • 기준 5 (비즈니스)이 변경 의 *비즈니스 가치 의 *한 줄 설명 이 *PR description 에 있나?

이 5 가지 만 명시적으로 체크 해도 쓰레기 코드 의 *비율체감 적으로 줄어든다. 5 분의 비용 으로 *3 년 의 유지 비용 을 *상수 시키는 *교환.


10. 교훈

“AI 시대 의 *시니어 의 책임코드 *작성 이 아니라 AI 의 *국지적 정답 들 을 *전체 시스템 의 *맥락 에 *합의 가능 한 형태 로 *조립 + 박제 하는 것* 이다. signoff 의 책임은 *AI 가 아니라 *사람. 그리고 그 책임의 *가치 가 *AI 시대 에 *오히려 *더 크게 평가 된다.”*

AI 는 *국지적 정답천재 가 되었다. 그러나 *전체 시스템 의 *맥락 을 *짜는 사람 의 *역할 은 *여전히 *사람 에게 남아있다. 그 역할 을 *명시 적 으로 *책임 지면 쓰레기 코드 의 비율 이 *줄어든다. 그 역할 을 *AI 에게 *암묵 적 으로 위임 하면 쓰레기 코드 의 비율 이 *늘어난다.

다음에 *AI 한테 코드 를 시킬 때 — *기술적 정답 의 *국지적 완벽 함 만 보지 말고 *5 가지 기준 의 *체크리스트 를 *함께 돌리자**. 그게 *AI 시대 의 *시니어 의 *진짜 일 의 *모습 이다.


시리즈 : C++ 는 클러스터 밖에 있다 · Go 는 클러스터 전체에 있다 · R 은 클러스터에 없다 · 이커머스 SaaS 의 트래픽 제어 · Observer Pattern 의 7 layer stack dive · HikariCP 의 5 시간 설정 · 백엔드 응답시간 + 모니터링 · Python vs Java 알고리즘 · 정산 정합성 · AI 가 할 수 있는 것 / 못 하는 것 (현재 글)

이 글은 *18 시간 의 9 일 묻힌 frontend 사고 추적 + sparta-msa-project + settlement + helm-deploy + 이 블로그 자체 의 *AI 와 사람의 *공동 작업 경험 을 기반으로 작성. AI 도구는 Claude Code (Opus 4.7 1M context).*