AI가 짠 코드, 시니어는 뭘 보는가
AI와 시니어 개발 시리즈
(3편)- 1.기발자, 디발자 시대 — AI가 역할 경계를 허물고 있다
- 2.AI 3개, 사람 1명 — 시니어 개발자의 리팩토링 워크플로우
- 3.AI가 짠 코드, 시니어는 뭘 보는가
AI 코드는 "동작"해요
AI한테 "로그인 폼 만들어줘"라고 하면, 진짜 동작하는 로그인 폼이 나와요. 입력 받고, 버튼 누르면 제출되고, 에러도 처리해요.
근데 그게 프로덕션에 넣어도 되는 코드인지는 별개의 문제예요.
동작하는 코드와 좋은 코드 사이에는 간극이 있어요. 그 간극을 메우는 게 시니어의 일이에요. 이전 편에서 "시니어의 일은 판단"이라고 했는데, 이번에는 그 판단이 구체적으로 뭔지 얘기해볼게요.
1. 이 컴포넌트는 어디에 있어야 하는가
AI는 코드를 잘 짜요. 근데 파일을 어디에 놓을지는 잘 모를 때가 있어요.
AI는 "동작하는 코드"를 한 파일에 만들어요. 시니어는 "6개월 뒤에 다른 사람이 이해할 수 있는 구조"로 나눠요.
질문: "이 코드를 처음 보는 팀원이 3초 안에 역할을 파악할 수 있는가?"
2. 이 상태는 여기서 관리해야 하는가
AI가 만든 컴포넌트에서 자주 보이는 패턴이에요.
동작해요. 근데 이 상태들이 전부 한 컴포넌트에 있어야 하는 건지는 따져봐야 해요.
시니어가 보는 건:
- URL과 동기화해야 하는 상태는 없는가? (keyword, page → URL 파라미터)
- 서버 상태와 클라이언트 상태가 섞여 있지 않은가? (data, isLoading → React Query)
- 다른 컴포넌트에서도 필요한 상태는 없는가? (selectedRow → 상위로 올려야 할 수 있음)
질문: "이 상태가 이 컴포넌트의 관심사가 맞는가?"
3. 에러가 나면 사용자는 뭘 보는가
AI는 에러 핸들링을 해요. 근데 대부분 이런 식이에요.
"오류가 발생했습니다"를 본 사용자는 뭘 해야 하는지 몰라요.
시니어가 확인하는 건:
- 네트워크 에러와 비즈니스 에러를 구분하는가? (서버 다운 vs 권한 없음)
- 사용자가 다음 행동을 알 수 있는가? (재시도 버튼, 관리자 문의 안내)
- 에러 상태에서 UI가 깨지지 않는가? (빈 화면 대신 fallback UI)
질문: "에러가 났을 때 사용자가 막막하지 않은가?"
4. 키보드로 동작하는가
이건 AI가 가장 많이 놓치는 부분이에요.
AI가 만든 모달:
- 열리면 포커스가 모달 안으로 이동하지 않음
- Tab으로 모달 밖의 버튼이 눌림
- ESC로 닫히지 않음
AI가 만든 드롭다운:
- 화살표 키로 옵션 이동이 안 됨
- Enter로 선택이 안 됨
- 스크린 리더가 현재 선택 상태를 읽지 못함
코드가 동작하는지 확인하는 건 쉬워요. 키보드만으로 동작하는지 확인하는 건 경험이 필요해요.
질문: "마우스 없이 이 기능을 완료할 수 있는가?"
5. 이 코드는 팀의 패턴을 따르는가
AI는 공식 문서의 베스트 프랙티스를 따라요. 근데 우리 팀의 컨벤션은 몰라요.
- 우리 팀은
forwardRef를 쓰는데 AI는 안 썼음 - 우리 팀은
cn()유틸로 className을 병합하는데 AI는 템플릿 리터럴을 씀 - 우리 팀은 CVA로 variant를 관리하는데 AI는 조건문으로 클래스를 붙임
- 우리 팀은 Named export만 쓰는데 AI는 default export를 씀
하나하나는 사소해요. 근데 이게 쌓이면 코드베이스가 일관성을 잃어요. AI가 만든 코드 10개가 전부 다른 패턴이면, 그건 10명이 따로 만든 것과 다를 바 없어요.
질문: "이 코드가 기존 코드베이스에 자연스럽게 녹아드는가?"
CLAUDE.md가 여기서 중요해요
5번 문제를 해결하는 가장 좋은 방법이 CLAUDE.md예요.
팀의 코드 패턴, 컨벤션, 컴포넌트 구조를 CLAUDE.md에 적어두면 AI가 처음부터 우리 팀 스타일로 코드를 짜요.
이렇게 해두면 AI가 만든 코드가 팀 코드와 이질감 없이 섞여요. 리뷰할 때 "이거 우리 스타일이 아닌데"라는 지적이 사라져요.
시니어의 리뷰 체크리스트
정리하면 이거예요.
| 순서 | 질문 | AI가 놓치기 쉬운 이유 |
|---|---|---|
| 1 | 파일 위치가 맞는가? | 동작에는 영향 없음 |
| 2 | 상태 관리가 적절한가? | 어디든 useState면 동작함 |
| 3 | 에러 UX가 괜찮은가? | catch만 있으면 에러 안 남 |
| 4 | 키보드로 되는가? | 마우스로는 다 됨 |
| 5 | 팀 패턴을 따르는가? | 공식 문서 패턴은 다름 |
이 5가지를 확인하면, AI가 만든 코드의 80%는 프로덕션 레벨이 돼요. 나머지 20%는 도메인 로직인데, 그건 어차피 사람만 판단할 수 있는 영역이에요.
정리
- AI 코드는 동작하지만, 좋은 코드와는 다르다 — 그 간극을 메우는 게 시니어의 리뷰
- 5가지만 확인하면 된다 — 위치, 상태, 에러, 접근성, 패턴
- CLAUDE.md로 팀 패턴을 공유하면 — AI가 처음부터 우리 스타일로 짜준다
AI 시대에 코드 리뷰는 "이 코드가 맞는가?"에서 **"이 코드가 우리 팀에 맞는가?"**로 바뀌고 있어요.
시리즈 네비게이션
- 이전 편: AI 3개, 사람 1명 — 시니어의 리팩토링 워크플로우
- 다음 편: 준비 중
관련 링크
- claude-settings — CLAUDE.md 설정 저장소
- hanui — KRDS 기반 React 컴포넌트
HANUI
KRDS 기반 React 컴포넌트 라이브러리. 공공 웹 개발을 더 쉽게.