AI가 70%를 써줄 때, 나머지 30%는 누가 책임지나
Google Cloud AI 디렉터 Addy Osmani가 2026 JS Nation US 컨퍼런스에서 꺼낸 표현이 꽤 도발적이다. "2026년의 시니어는 그냥 고연봉 코드 편집자다." 폄하처럼 들리지만, 그는 이걸 역설로 썼다. AI가 코드를 생성하는 시대에 시니어 엔지니어의 핵심 역량이 '코드를 작성하는 속도'에서 '코드를 읽고, 판단하고, 맥락을 부여하는 능력'으로 이동했다는 뜻이다.
현장 수치는 냉정하다. 개발자 90%가 AI 코딩 도구를 쓰지만 신뢰도는 오히려 하락 추세다. Osmani가 '70% 문제'라 명명한 현상은 여전히 유효하다. AI가 70~80% 지점까지는 빠르게 데려다주지만, 나머지 20~30%—품질, 정합성, 라스트 마일—은 여전히 사람의 몫이다. PR 크기는 커졌고, AI는 기존 유틸리티 함수를 재활용하는 대신 비슷한 걸 새로 구현하는 경우가 잦다. 겉보기엔 맞지만 실제로는 틀린 코드를 디버깅하는 시간도 늘었다. Osmani는 이를 '이해도 부채(comprehension debt)'라고 부른다.
Claude Code가 보여주는 에이전트의 실체
이 맥락에서 Claude Code의 동작 방식을 이해하면 '왜 시니어의 역할이 바뀌는가'가 더 선명해진다. Claude Code는 단순한 코드 자동완성 도구가 아니다. LLM에 파일 탐색, 터미널 실행, 외부 MCP 연동 등의 도구를 결합한 자율 에이전트다. 작업 흐름은 컨텍스트 수집 → 작업 수행 → 결과 검증의 세 단계로 구성되며, 복잡한 버그 수정이라면 이 루프를 반복한다.
중요한 건 안전장치 설계다. Claude Code는 기본값으로 파일 편집과 셸 명령 전에 사람의 승인을 요청한다. Plan mode(읽기 전용 계획만 생성), accept edits on(셸 명령만 승인), auto mode(백그라운드 안전 검사) 등 권한 모드를 실시간으로 전환할 수 있다. 이 구조가 시사하는 바가 있다. 에이전트는 설계 자체가 '사람이 중간에 개입하는 구조'를 전제로 만들어졌다. Osmani가 말한 '지휘자(conductor)에서 오케스트레이터(orchestrator)로의 전환'과 정확히 맞닿는다. 에이전트 하나를 다루던 시니어가 이제 여러 에이전트를 동시에 감독하는 역할로 이동하고 있다.
21개 앱 보안 감사가 드러낸 '바이브 코딩의 청구서'
그런데 에이전트가 생성한 코드를 제대로 검토하지 않으면 어떤 일이 생길까. 최근 공개된 보안 감사 결과가 이를 정면으로 보여준다. Lovable, Bolt, v0, Cursor, Replit, Windsurf로 만든 공개 앱 21개를 48시간 동안 감사한 결과, 총 162건의 실제 취약점(Critical 20건, High 84건, Medium 58건)이 발견됐다. 취약점이 없는 앱은 단 한 개도 없었다.
반복적으로 등장한 패턴은 다섯 가지다.
- 인증 우회(43%): 서버리스 엔드포인트가 JWT 검증 없이 클라이언트가 전달한 user_id를 그대로 신뢰. curl 명령 하나로 임의 사용자를 사칭할 수 있는 구조.
- rate limiting 부재(43%): 이메일, 인증, LLM 호출 엔드포인트에 요청 제한 없음. 10개 병렬 연결로 60초 안에 API 쿼터 소진 가능.
- 위험한 CORS 설정(33%): 개발 단계에서 느슨하게 열어둔
cors({origin: '*'})가 프로덕션까지 그대로 배포. - 클라이언트 사이드 신뢰(32%):
profiles.is_admin컬럼을 사용자가 직접 수정 가능한 구조. 사용자가 스스로 관리자 권한 획득. - 파일 업로드 검증 부재(14%): MIME 타입 화이트리스트 없음, 크기 제한 없음. 4GB 파일로 스토리지 쿼터 고갈 가능.
이 패턴들의 공통점이 있다. AI가 '기능 구현'에는 능숙하지만 '보안 맥락 판단'에는 취약하다는 것이다. Osmani가 구분한 '바이브 코딩'과 'AI 보조 엔지니어링'의 차이가 여기서 갈린다. 바이브 코딩은 아이디어 검증용으로는 유효하지만, 프로덕션 코드에서는 아키텍처·보안·성능을 전통적인 엔지니어링 원칙 위에서 검토하는 AI 보조 엔지니어링이 필수다.
시니어가 실제로 해야 할 일
세 소스를 조합하면 AI-First 팀에서 시니어 엔지니어의 역할이 어디로 수렴하는지 윤곽이 드러난다.
첫째, 컨텍스트 엔지니어링. AI 에이전트의 결과물 품질은 얼마나 풍부한 맥락(문서, 예시, 코드베이스 구조, 대화 이력)을 제공하느냐에 달려 있다. 이건 주니어가 하기 어렵다. 시스템 전체를 머릿속에 쥐고 있는 시니어만이 에이전트에게 적절한 컨텍스트를 주입할 수 있다.
둘째, 비판적 코드 리뷰. '왜 AI가 이 접근법을 선택했는가'를 따져 묻는 것이 코드 리뷰의 핵심이 됐다. 이해도 부채를 줄이는 작업이 곧 팀의 기술 부채를 줄이는 작업이다. Claude Code의 plan mode처럼, 에이전트가 실행하기 전에 의도를 먼저 검토하는 습관을 팀 문화로 심어야 한다.
셋째, 보안 게이트 설계. 위 21개 앱 감사 결과는 AI가 생성한 코드에 구조적으로 취약점이 반복된다는 신호다. 시니어의 역할은 매번 직접 보안을 잡는 게 아니라, 인증 검증·rate limiting·CORS 정책·권한 분리 같은 보안 체크포인트를 CI/CD 파이프라인에 자동화된 게이트로 심는 것이다.
전망: '편집자'라는 역할의 무게
Osmani는 주니어에게도 냉정한 조언을 남겼다. "AI가 아직 해결하지 못하는 영역에서 깊은 전문성을 쌓으면 오히려 차별화가 된다. 기초와 펀더멘탈을 이해하는 것은 여전히 초능력(superpower)이다." 에이전트 완성도가 70%에서 80%로 올라간 것처럼 앞으로도 계속 높아질 것이다. 하지만 나머지 20%를 메우는 이해도 부채의 관리 비용은 쉽게 줄지 않는다.
'고연봉 코드 편집자'라는 표현을 다시 보면, 이건 폄하가 아니다. 편집자는 글을 쓰는 사람이 아니라 글의 방향과 품질을 결정하는 사람이다. AI가 초고를 쓰는 시대에, 시니어 엔지니어의 가치는 더 빠르게 타이핑하는 능력이 아니라 더 정확하게 판단하는 능력에 있다. 팀 리빌딩을 설계할 때 이 기준을 먼저 잡지 않으면, 빠르게 생성된 코드가 조용히 프로덕션을 갉아먹는 속도를 따라잡기 어려워진다.