'내가 다 짜야 한다'는 착각
'내가 다 짜야 한다'는 정체성을 해부하고, 코드 작성자에서 의도 설계자·품질 보증자로 단계적으로 전환하며 위임 경계를 설계하는 법
핵심 요약
- 역할 전환은 코드 작성자 → 위임 시도자 → 의도 설계자 → 품질 보증자로 단계적으로 일어나며, 위임 시도자 구간에서 후퇴하는 시니어가 가장 많다.
- 시니어가 에이전틱 코딩을 거부하는 진짜 이유는 효율이 아니라 "프롬프트만 쓰면 성장하지 않는다"는 성장 불안인 경우가 많다.
- Karpathy는 자기주도 코드 작성이 80%→20%로 줄고 의도 명세가 일차 산출물이 된다고, Osmani는 문제 정의 70%·실행 30%로 역전하라고 본다.
- 같은 인증 미들웨어도 "에러를 구분해 처리하라"는 의도를 명확히 전달하면 AI가 Result 타입과 세분화된 처리를 생성한다.
- 위임은 정답이 하나인지·도메인 판단이 필요한지·실수 비용이 높은지를 기준으로 경계를 의식적으로 설정하는 일이다.
개발자의 정체성은 코드를 짜는 행위 위에 세워져 있다. "나는 개발자다 = 나는 코드를 짠다"라는 등식이 너무 자연스러운 나머지, 이게 전제라는 사실조차 깨닫지 못할 때가 많다.
이 챕터는 그 전제를 의식 위로 꺼내고, 코드 작성자에서 의도 설계자로 넘어가는 역할 전환이 어떤 맥락에서 일어나는지 살펴본다.
한 시니어의 하루: 전환 전 vs 전환 후
같은 개발자의 하루를 두 모드로 나란히 놓고 보면, 역할 전환이 구체적으로 무엇을 뜻하는지 드러난다.
전환 전: 코드 작성자 모드
| 시간 | 활동 | 소요 시간 |
|---|---|---|
| 09:00 | 이메일, 슬랙 확인 | 30분 |
| 09:30 | 신규 기능 직접 구현 시작 | 3시간 |
| 12:30 | 점심 | 1시간 |
| 13:30 | 오전 코드 이어서 구현 | 2시간 |
| 15:30 | 버그 디버깅 - 직접 추적 | 1.5시간 |
| 17:00 | PR 작성, 코드 리뷰 | 1시간 |
| 18:00 | 퇴근 - 기능 70% 완성 | - |
전환 후: 의도 설계자 모드
| 시간 | 활동 | 소요 시간 |
|---|---|---|
| 09:00 | 이메일, 슬랙 확인 | 20분 |
| 09:20 | 신규 기능 의도 설계 및 제약조건 정리 | 40분 |
| 10:00 | AI에 위임, 생성 결과 검증 및 피드백 3회 | 1.5시간 |
| 11:30 | 두 번째 기능 의도 설계 | 30분 |
| 12:00 | AI 위임 및 검증 | 30분 |
| 12:30 | 점심 | 1시간 |
| 13:30 | 버그 리포트 분석, AI에 디버깅 가설 전달 | 1시간 |
| 14:30 | 세 번째 기능 의도 설계 + AI 위임 | 1시간 |
| 15:30 | 전체 통합 테스트 검증 | 1시간 |
| 16:30 | PR 작성, 코드 리뷰 | 1시간 |
| 17:30 | 퇴근 - 기능 3개 완성 | - |
시간 절약이 핵심이 아니다
전환 후에도 퇴근 시간은 비슷하다. 달라지는 건 산출물의 양과 정신적 피로도다. 코드 작성자 모드에서는 3시간을 내리 코딩하다 보니 오후가 되면 지친다. 의도 설계자 모드에서는 사고와 검증을 번갈아 하면서 에너지가 한쪽으로 쏠리지 않는다.
개발자 정체성의 핵심을 해부하다
개발자가 코드를 직접 작성하며 느끼는 만족감은 단순한 습관이 아니다. 정체성의 핵심과 맞물려 있다.
| 정체성 요소 | 연결된 행위 | 에이전틱 시대의 도전 | 전환된 형태 |
|---|---|---|---|
| 장인 의식 | 한 줄 한 줄 정교하게 작성 | AI가 수백 줄을 순식간에 생성 | 의도의 정교함으로 전환 |
| 문제 해결 능력 | 복잡한 로직을 직접 풀어냄 | AI가 대부분의 로직을 해결 | 더 큰 문제 정의 능력 |
| 전문가 인정 | 코드 품질로 동료에게 인정 | AI 생성 코드의 품질 판단이 새 역할 | 시스템 품질 보증 능력 |
| 통제감 | 모든 코드를 내가 이해하고 통제 | AI 생성 코드에 대한 부분적 이해 | 의도 수준의 통제 |
| 성장 실감 | 코드를 짜면서 실력이 느는 느낌 | 프롬프트만 쓰면 성장하는 건가 | 판단력 성장으로 전환 |
마지막 행이 특히 눈에 띈다. 많은 시니어 개발자가 에이전틱 코딩을 마다하는 진짜 이유는 효율성이 아니라 "이렇게 해서 내가 성장하긴 하는 건가"라는 불안일 때가 많다.
정체성 전환은 기술 전환보다 어렵다
새 프레임워크를 배우기도 어렵지만, 정체성을 손보는 일은 그보다 훨씬 어렵다. "React에서 Vue로" 갈아타는 것과 "코드 작성자에서 의도 설계자로" 옮겨가는 것은 난이도 자체가 다르다. 후자는 내가 누구인가를 묻기 때문이다.
"Manifest가 코드를 대체한다" — 역할 전환의 가속
2026년 초, Andrej Karpathy는 개발자가 직접 짜는 코드 비율이 80%에서 20%로 급감하고 있다고 짚었다. 남은 80%는 AI 에이전트가 생성하고, 개발자의 핵심 업무는 의도 명세, 목표 분해, 매크로 레벨 아웃풋 리뷰로 옮겨간다는 것이다.
이 관점은 이 챕터가 말하는 "코드 작성자에서 의도 설계자로"라는 전환과 정확히 맞닿는다. Karpathy가 말하는 "manifest"가 곧 의도 설계 문서이고, 코드가 아니라 의도 명세가 일차 산출물이 되는 세계를 가리킨다.
문제 정의 70%, 실행 30%
Addy Osmani도 같은 맥락에서 **문제 정의에 70%, 실행에 30%**로 비율을 뒤집어야 한다고 말한다. 예전에는 실행(코딩)이 시간의 대부분을 잡아먹었지만, AI가 실행을 빠르게 끝내주면서 문제를 정확히 정의하는 능력이 개발자를 가르는 핵심으로 떠올랐다.
Claude Code v2.1.77-81이 보여주는 방향
최근 Claude Code의 변화도 이 전환을 뒷받침한다. 명령형 resume 패턴이 사라지고 SendMessage 메시지 패싱 패턴으로 바뀌었다. 에이전트에게 "이렇게 해라"고 명령하는 대신 "이런 의도다"를 선언적으로 전달하는 방식이다.
| 변화 | 명령형 (이전) | 선언형 (현재) | 시사점 |
|---|---|---|---|
| 에이전트 제어 | resume으로 단계별 지시 | SendMessage로 의도 전달 | 개발자는 지시자가 아니라 설계자 |
| 행동 설정 | 코드로 에이전트 행동 정의 | effort frontmatter로 선언 | 문서가 코드를 대체 |
| 출력 규모 | 작은 청크로 분할 요청 | 기본 64k 출력 | "작게 나눠라"는 습관을 버려야 함 |
| 활용 범위 | 대화형 도구 | --bare 플래그로 CI/CD 컴포넌트화 | 도구를 넘어 인프라로 |
--bare 플래그를 쓰면 Claude Code를 대화형 도구가 아니라 CI/CD 파이프라인의 자동화 컴포넌트로 돌릴 수 있고, --channels는 이벤트 드리븐 워크플로우(예: 폰에서 도구 승인)를 열어준다. 이 변화들이 한 방향을 가리킨다. 개발자의 역할이 코드 작성에서 의도 설계와 시스템 오케스트레이션으로 옮겨가고 있다.
코드 작성량과 생산성의 탈동조화
에이전틱 시대 이전에도 "코드 작성량 = 생산성"은 정확한 등식이 아니었다. 다만 둘의 상관관계가 높았던 덕에 편리한 근사치로 통했을 뿐이다.
이제 그 상관관계가 무너지고 있다.
생산성 측정의 전환
| 과거 지표 | 에이전틱 시대 지표 | 측정 방법 |
|---|---|---|
| 커밋 수, 코드 라인 수 | 의도한 동작이 정확히 구현된 비율 | 기능 완성도 추적 |
| PR 머지 속도 | 문제 정의에서 작동 솔루션까지의 시간 | 작업 시작-완료 시간 측정 |
| 버그 수정 속도 | 버그가 애초에 발생하지 않는 비율 | 배포 후 결함률 추적 |
| 코드 커버리지 | 검증 전략의 포괄성 | 엣지 케이스 발견율 |
역할 전환의 단계별 여정
"코드 작성자"에서 벗어난다고 어느 날 갑자기 다른 사람이 되지는 않는다. 역할은 보통 단계를 밟아 바뀐다.
각 단계의 시간 배분 비교
관찰 기반 모델
아래 퍼센트는 정밀 측정 결과가 아니라, 역할의 중심이 어디로 이동하는지 보여주기 위한 설명용 비중입니다.
| 활동 | 코드 작성자 | 위임 시도자 | 의도 설계자 | 품질 보증자 |
|---|---|---|---|---|
| 직접 코드 작성 | 65% | 45% | 20% | 10% |
| 의도 설계 | 10% | 20% | 35% | 30% |
| AI 위임 및 대기 | 5% | 15% | 15% | 15% |
| 검증 및 피드백 | 10% | 15% | 25% | 35% |
| 시스템 판단 | 10% | 5% | 5% | 10% |
마지막 단계가 코딩을 안 한다는 뜻이 아니다
품질 보증자 역할에서도 코드를 읽고 이해하고 때로는 직접 짠다. 차이는 기본 모드다. 기본값이 "직접 짠다"에서 "검증한다"로 바뀔 뿐, 직접 짜는 능력을 내려놓는 게 아니다.
Before/After 코드 비교: 위임의 실제
예시: 사용자 인증 미들웨어 구현
Before - 직접 작성 (코드 작성자 모드):
// 30분 소요 - 과거 프로젝트에서 가져와 수정
import jwt from "jsonwebtoken";
import { NextRequest, NextResponse } from "next/server";
export function authMiddleware(handler: Function) {
return async (req: NextRequest) => {
const token = req.headers.get("authorization")?.split(" ")[1];
if (!token) {
return NextResponse.json(
{ error: "토큰이 없습니다" },
{ status: 401 }
);
}
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET!);
// @ts-ignore - 타입 나중에 수정
req.user = decoded;
return handler(req);
} catch (err) {
return NextResponse.json(
{ error: "유효하지 않은 토큰" },
{ status: 401 }
);
}
};
}After - AI에 의도 전달 (의도 설계자 모드):
프롬프트: "Next.js App Router에서 JWT 인증 미들웨어를 만들어줘. 토큰 만료, 형식 오류, 권한 부족을 각각 구분해서 에러로 응답하고, 타입 안전하게 처리해."
// 5분 소요 - AI 생성 후 검증
import { jwtVerify } from "jose";
import { NextRequest, NextResponse } from "next/server";
interface AuthUser {
id: string;
email: string;
role: "admin" | "user" | "viewer";
}
type AuthResult =
| { success: true; user: AuthUser }
| { success: false; error: string; status: number };
export async function authenticate(req: NextRequest): Promise<AuthResult> {
const header = req.headers.get("authorization");
if (!header) {
return { success: false, error: "인증 헤더가 없습니다", status: 401 };
}
const parts = header.split(" ");
if (parts.length !== 2 || parts[0] !== "Bearer") {
return { success: false, error: "토큰 형식이 올바르지 않습니다", status: 401 };
}
try {
const secret = new TextEncoder().encode(process.env.JWT_SECRET);
const { payload } = await jwtVerify(parts[1], secret);
return {
success: true,
user: {
id: payload.sub as string,
email: payload.email as string,
role: payload.role as AuthUser["role"],
},
};
} catch (err) {
if (err instanceof Error && err.message.includes("expired")) {
return { success: false, error: "토큰이 만료되었습니다", status: 401 };
}
return { success: false, error: "유효하지 않은 토큰입니다", status: 403 };
}
}비교의 핵심
두 번째 코드가 더 나은 건 AI가 똑똑해서가 아니다. 의도를 명확히 전달했기 때문이다. "에러를 구분해서 처리해"라는 의도가 AI에게 Result 타입 패턴과 세분화된 에러 처리를 만들게 했다. 시니어의 경험은 좋은 의도를 설계하는 능력으로 바뀐다.
"손으로 짜야 이해할 수 있다"는 믿음
이 믿음은 학습 단계에서는 상당 부분 맞다. 하지만 이미 10년을 손으로 짜 온 시니어에게 같은 논리를 들이대는 건 얘기가 다르다.
| 주장 | 학습자에게 | 숙련자에게 |
|---|---|---|
| "직접 짜봐야 이해된다" | 맞다. 기초 체력 형성에 필수 | 이미 체력이 있다. 매번 직접 짤 필요 없음 |
| "복사-붙여넣기는 안 좋다" | 맞다. 이해 없는 복사는 위험 | AI 생성 코드를 이해하며 검증하는 것은 다른 행위 |
| "디버깅하면서 배운다" | 맞다. 시행착오가 학습 | AI에게 디버깅 가설 검증을 시키는 것도 학습의 한 형태 |
숙련자가 "손으로 짜야 이해할 수 있다"고 말할 때, 그 밑에는 여러 겹의 심리가 함께 움직인다.
결국 "손으로 짜야 한다"는 주장은 단순히 맞거나 틀린 게 아니다. 합리적 근거와 감정적 근거, 그리고 검증되지 않은 전제가 뒤섞여 있다. 이 셋을 떼어내서 볼 수 있을 때, 각 상황에서 실제로 무엇이 최선인지가 더 또렷해진다.
위임의 기술: 의사결정 구조
모든 걸 AI에 맡기면 위험하고, 모든 걸 직접 짜면 비효율적이다. 핵심은 위임 경계를 의식적으로 긋는 것이다.
위임 판단의 구조
위임할지 직접 할지 결정할 때 실무에서 거듭 던지게 되는 질문들이 있다.
| 판단 질문 | 성격 | 시사점 |
|---|---|---|
| 이 작업의 정답이 하나인가? | 명확성 | 정답이 하나인 작업은 AI 위임이 효율적인 경향 |
| 도메인 판단이 필요한가? | 전문성 | 도메인 판단이 필요하면 직접 또는 협업이 적절한 경우가 많음 |
| 실수의 비용이 높은가? | 위험도 | 비용이 높을수록 검증 강도를 높이는 것이 일반적 |
| 반복적인 패턴 작업인가? | 효율성 | 반복 패턴은 AI 위임의 이점이 큰 영역 |
| 창의적 탐색이 필요한가? | 발산성 | AI에 여러 안을 생성시킨 후 선택하는 방식이 효과적인 경우가 많음 |
위임 영역 분류
이 매트릭스에서 눈여겨볼 곳은 좌하단이다. 반복적이고 실수 비용이 낮은 이 영역이 전체 개발 시간의 상당 부분을 차지한다. 여기만 AI에 넘겨도 시니어 개발자의 시간 구성이 크게 달라진다.
역할 전환 과정에서 관찰되는 시간 배분 변화
역할 전환이 진행되면 업무 시간의 구성도 자연스럽게 따라 바뀐다. 직접 코드 작성에 쓰던 시간이 줄고, 그만큼 의도 설계와 검증에 쓰는 시간이 늘어난다.
흥미로운 건, 이 변화가 "의식적으로 시간 배분을 바꿔야지" 하는 결심에서 오지 않는다는 점이다. 위임 경험이 쌓이다 보면 저절로 그렇게 흘러간다.
여기서 질문이 하나 생긴다. "직접 코드 작성 비율이 줄어든다"는 게 개발자 역량이 떨어진다는 뜻일까? 막상 보면, 직접 짜는 코드의 양은 줄지만 그 코드의 난이도와 중요도는 오히려 올라간다. AI가 손대지 못하는 영역, 즉 도메인 판단과 아키텍처 결정, 예외 상황 처리 같은 데 집중하게 되기 때문이다.
전환을 가로막는 두려움들
역할 전환을 시도하면 늘 따라붙는 두려움이 있다. 이 두려움들이 비합리적인 건 아니다. 저마다 나름의 근거가 있다.
| 두려움 | 실체 | 관찰되는 현실 |
|---|---|---|
| "AI 의존으로 실력 퇴화" | 도구 의존에 대한 합리적 우려 | 계산기가 수학적 사고력을 퇴화시키지 않듯, 핵심 역량은 보존되는 경향 |
| "AI 실수는 내 책임" | 사실이다. 그래서 검증이 더 중요해짐 | 검증 역량 자체가 새로운 전문성으로 부상하고 있음 |
| "프롬프트만 쓰면 주니어와 같다" | 표면적으로는 같아 보일 수 있음 | 시니어의 프롬프트에는 10년의 경험이 담기고, 같은 AI로 더 나은 결과가 나옴 |
| "유행이 지나면 손해" | 기술 트렌드에 대한 건전한 회의 | 의도 설계, 검증 능력은 도구 독립적인 메타 역량에 가까움 |
2단계의 불안 구간이 가장 위험하다. 대부분의 시니어가 바로 이 지점에서 예전 방식으로 돌아간다. 이 구간을 넘긴 사람들에게는 공통점이 하나 있다. 작은 성공 경험이 켜켜이 쌓여 있었다는 것이다. 거창한 프로젝트가 아니라 "이건 AI에 맡겼더니 의외로 잘 됐네" 싶은 경험이 하나씩 붙으면서 전환에 가속이 붙는다.
이 챕터의 핵심
기억할 한 문장
"내가 다 짜야 한다"를 내려놓는 건 능력을 포기하는 게 아니라 더 높은 수준의 능력으로 갈아타는 것이다. 코드 작성은 여전히 중요하다. 다만 그게 개발자 역할의 전부는 아니다.
다음 장 미리보기
다음 챕터에서는 이 역할 전환이 설계 방법론에 어떤 변화를 가져오는지, 과도한 사전 설계를 버리고 반복 설계로 전환하는 방법을 다룹니다.
참고 자료
참고 자료 안내
이 장의 관점과 프레임워크를 뒷받침하는 참고 자료입니다. 본문의 모든 주장이 아래 자료에서 직접 인용된 것은 아니며, 실무 경험과 커뮤니티 사례를 종합한 해석이 포함되어 있습니다.
- Peng, S. et al. (2023). "The Impact of AI on Developer Productivity: Evidence from GitHub Copilot." https://arxiv.org/abs/2302.06590
- Murali, V. et al. (2023). "CodeCompose: A Large-Scale Industrial Deployment of AI-Assisted Code Authoring." https://arxiv.org/abs/2305.12050
- Karpathy, A. (2026). "Manifests replace code." https://x.com/karpathy
- Osmani, A. (2026). "The 70/30 Rule: AI-Assisted Development." https://addyosmani.com/blog/the-70-30-rule/