에이전틱 엔지니어링 시대의 생존 스킬 9가지
관련글
flowkater.io — 에이전틱 엔지니어링 시대의 생존 스킬 9가지
0. 들어가며: 바이브 코딩에서 에이전틱 엔지니어링으로의 전환
2025년 2월 2일, Andrej Karpathy가 X(트위터)에 짧은 트윗을 올렸다. “바이브 코딩(vibe coding)”이라는 단어가 탄생한 순간이었다. 그는 그 트윗을 훗날 “샤워하다 떠오른 생각을 별 기대 없이 올린 것”이라고 회고했지만, 그 한 문장은 2025년 개발 생태계 전체를 관통하는 밈이 되었다. AI 모델에게 코드를 맡기고 그 결과를 그대로 받아들이는, 일종의 직관 기반 개발 방식에 이름이 붙은 것이다.
그리고 정확히 1년 후인 2026년 2월 4일, Karpathy는 다시 입을 열었다. 이번에는 새로운 시대의 이름을 제안했다 — 에이전틱 엔지니어링(Agentic Engineering). 그의 설명은 간결하지만 본질적이었다. “‘에이전틱’인 이유는 99%의 경우 더 이상 코드를 직접 작성하지 않고 에이전트에게 명령하고 감독하기 때문이다. ‘엔지니어링’인 이유는 여기에 기예, 과학, 전문 기술이 있기 때문이다.” 그는 이어 2026년을 전망하며 “모델 레이어와 에이전트 레이어 양쪽에서 계속적인 발전이 있을 것이며, 이 두 가지의 조합에 흥분을 느낀다”고 덧붙였다.
이 선언은 단순한 용어 교체가 아니었다. 개발자의 역할 자체가 근본적으로 재정의되는 시대의 도래를 공식화한 것이었다. 코드를 쓰는 사람에서 에이전트를 지휘하고 감독하는 사람으로, 직접 구현자에서 시스템 설계자로의 전환을 선언한 것이다.
바로 이 맥락에서 flowkater.io의 저자 — 15년 경력의 개발자이자 전 CTO — 가 작성한 에세이가 등장한다. 2026년 3월 1일에 발행된 “에이전틱 엔지니어링 시대의 생존 스킬 9가지”는 Karpathy의 선언에서 영감을 받아, 실제 현장에서의 시행착오와 다양한 실전 사례를 엮어 9가지 핵심 역량으로 정리한 글이다. 이 문서는 그 에세이를 깊이 있게 분석하고, 각 스킬의 본질과 실천 방법을 더욱 입체적으로 풀어내는 것을 목표로 한다.
1. 바이브 코딩에서 에이전틱 엔지니어링으로: 패러다임 전환의 맥락
1.1 Karpathy의 주말 실험이 보여주는 것
에세이는 Karpathy의 구체적인 경험으로 시작한다. 그는 어느 주말 집 카메라용 대시보드를 만들고 싶었고, 에이전트에게 단 네 가지(DGX Spark의 IP, 사용자명, 비밀번호, 그리고 목표)만을 전달했다. SSH 키 설정, vLLM 구성, 모델 다운로드와 벤치마크, 비디오 추론 서버 구축, 웹 UI 대시보드, systemd 서비스 설정, 메모리 노트 기록과 마크다운 리포트 작성까지를 한 번에 지시했고, 30분 후 전부 완성되었다. “불과 3개월 전만 해도 주말 전체가 필요한 프로젝트였지만, 이제는 30분 동안 잊고 기다리면 완료되는 작업이 됐다.” 이 짧은 문장 하나가 지금 우리가 사는 시대를 설명한다.
이 사례에서 주목해야 할 점은 Karpathy가 에이전트에게 준 정보의 성격이다. 네 가지 모두 에이전트가 스스로 알 수 없는 외부 환경 정보이고, 나머지 판단(무엇을 어떻게 구성할 것인가)은 에이전트가 알아서 했다. 인간은 “무엇을 원하는가”를 정의하고, 에이전트는 “어떻게 만들 것인가”를 실행한 것이다. 이것이 에이전틱 엔지니어링의 분업 구조다.
1.2 위임 패러독스와 신뢰의 문제
그런데 왜 대부분의 개발자는 여전히 이 방식을 완전히 채택하지 못하는가? 2026 Agentic Coding Trends Report에 따르면 개발자의 60%가 AI를 사용하지만 에이전트에게 완전한 작업 위임을 하는 비율은 0~20%에 불과하다. 저자는 이를 “위임 패러독스(Delegation Paradox)”라 부른다. AI가 코드를 써주는 것에는 익숙해졌지만, 에이전트에게 일을 맡기고 손을 완전히 떼는 것은 전혀 다른 차원의 문제다.
IndyDevDan이 이 간극을 한 문장으로 요약했다. “Do you trust your agents?(당신은 에이전트를 신뢰하는가?)” 대부분의 개발자가 “아니오”라고 답하는 이유는 충분하다. 에이전트가 만들어준 코드를 검토하는 데 직접 짜는 것보다 더 오래 걸리는 경험, 에이전트가 맥락을 잘못 이해해서 엉뚱한 방향으로 가버린 경험, 밤새 돌렸더니 아무것도 제대로 구현되지 않은 빈 껍데기를 받은 경험 — 이런 시행착오를 겪고 나면 에이전트에 대한 신뢰가 쉽게 생기지 않는다.
그러나 저자의 결론은 명확하다. 이 신뢰 부족이 에이전트 자체의 문제가 아니라, 인간이 에이전트와 일하는 방식을 아직 제대로 배우지 못한 데서 온다는 것이다. 그 방식을 체계화한 것이 9가지 생존 스킬이다.
2. 스킬 ①: 분해 능력 (Decomposition)
2.1 “회원가입 만들어줘”의 함정
분해 능력의 중요성은 역설적으로 분해하지 않았을 때 무슨 일이 벌어지는지를 통해 가장 잘 드러난다. 에이전트에게 “회원가입 기능 만들어줘”라고 하면 무언가는 나온다. 하지만 이메일 인증이 빠져 있고, 비밀번호 규칙이 기대와 다르고, UI는 상상 밖의 방향으로 가 있다. 에이전트는 틀리지 않았다. 단지 내가 원하는 것이 무엇인지를 내가 충분히 정의하지 않았을 뿐이다.
저자는 이를 “무엇을 만들지를 정하는 일”의 문제라고 정의한다. 고객이 원하는 것, 유저가 필요로 하는 것, 우선순위가 무엇인지 — 이것은 에이전트가 대신해줄 수 없는 인간의 영역이다. Karpathy도 같은 지점을 짚었다. “작업 명세가 명확하고 기능을 검증·테스트할 수 있는 경우에 특히 잘 작동한다.” 뒤집어 말하면, 명세가 모호하고 검증 기준이 없는 작업에서는 에이전트도 헤맨다.
WenHao Yu의 Opus 4.6 멀티에이전트 워크플로우 사례가 이 패턴을 잘 보여준다. 그는 큰 프로젝트를 AI Team Lead에게 맡기는데, Team Lead가 하는 일의 70%가 사실 작업 분해다. “이 기능을 구현하려면 어떤 하위 태스크가 필요한가?”를 먼저 설계하고, 각 태스크를 서로 다른 에이전트에게 위임한다. 분해가 잘 되면 나머지는 자연스럽게 따라오고, 분해가 잘못되면 모든 에이전트가 삽질을 한다.
2.2 AddPlan 사례: 분해하지 않으면 핑퐁이 반나절
저자의 직접 경험이 설득력을 더한다. 5단계 입력 플로우로 구성된 계획 생성 화면(AddPlanView)을 만들어야 했다. 피그마 디자인도 있고 PRD도 작성했다. “이 정도면 에이전트가 한 번에 만들겠지”라는 기대로 시작했다.
결과는 처참했다. 에이전트가 디자인 시스템에 없는 컬러와 폰트를 마음대로 사용했고, 한 Step을 수정하면 다른 Step이 깨졌다. 에이전트와 핑퐁만 수십 턴, 반나절이 날아갔다. 문제의 원인은 명확했다. “CustomNumberPad의 키 간격과 반응 영역”, “Step 전환 애니메이션의 방향과 타이밍”, “유효성 검사 실패 시 에러 표시 방식” — 이런 디테일들이 전부 저자의 머릿속에만 있었다. PRD가 있어도 이 세부 사항까지 담기지 않으면, 에이전트는 매번 자기 나름의 선택을 한다.
2.3 소크라틱 대화: 5분이 4시간을 아낀다
전환점이 된 것은 구현 전 AI와의 인터뷰였다. “5단계 입력 플로우를 만들려는데요”로 시작해 AI의 질문에 답하는 방식으로 5분을 투자했다. 그 5분 동안 나온 엣지 케이스가, 지난번에 반나절 핑퐁 치면서 하나씩 발견한 것들과 거의 동일했다. 차이는 이번에는 “코드를 짜기 전에” 정리되었다는 것이다. 이후 수정 턴은 2~3회로 줄었고, 그마저도 구조적 변경이 아닌 미세조정 수준이었다.
이 경험에서 도출된 원칙이 “인터뷰 → 스펙 정리 → 에이전트 지시”의 순서다. 바이브 코딩과 함께 SDD(스펙주도개발)이 유행하면서 PRD만 제대로 작성하면 된다는 말이 퍼졌지만, 스펙을 어떻게 분해할지는 결국 인간의 몫이다.
2.4 실천 가이드
실질적인 연습 방법으로 저자는 세 가지를 제안한다. 첫째, 구현 전 requirements.md를 작성하는 습관이다. 거창할 필요 없이 “이 기능은 무엇을 하고, 완성 기준이 뭔지”를 텍스트로 적는 것만으로 빈틈이 보인다. 둘째, AI와의 사전 인터뷰를 워크플로우에 녹이는 것이다. 특히 인증, 결제, 파일 업로드처럼 상태가 복잡한 기능에서 효과가 크다. 셋째, “에이전트 한 턴에 완료 가능한 크기”를 체감으로 익히는 것이다. 대략 파일 3~5개 수정, 15~30분 내 완료 가능한 범위가 기준이 된다. 이 체감 자체가 분해 능력이다.
코딩 에이전트 대화 셸에 문장부터 던지고 보는 것은 절대 좋은 습관이 아니다. 저자는 이것이 작업 계획 없이 코딩부터 시작하는, 일을 못하는 개발자들의 습관과 동일하다고 단언한다.
3. 스킬 ②: 컨텍스트 설계 (Context Architecture)
3.1 “코드 대신 자연어가 인터페이스다”
Karpathy가 에이전트에게 준 것이 IP, 사용자명, 비밀번호, 목표 단 네 가지였다는 점이 인상적이다. 군더더기 없이 필요한 것만. 이것이 컨텍스트 설계의 이상향이다. 하지만 실제 프로덕션 환경에서는 수십 개의 파일, 비즈니스 로직, 코딩 컨벤션, 과거 아키텍처 결정이 뒤섞여 있다. 이 맥락을 에이전트에게 어떻게 전달하느냐가 결과의 품질을 결정한다.
Karpathy의 에이전트 지시에 마지막에 항상 “메모리 노트 기록, 마크다운 리포트 작성까지”가 포함된다는 점이 의미심장하다. 이는 단순 문서화가 아니라 에이전트가 작업하면서 생긴 컨텍스트를 다음 작업에 전달할 수 있도록 구조화하라는 지시다. 컨텍스트는 주는 것만이 아니라 만들어가는 것이기도 하다.
3.2 에이전트 친화적 코드베이스: Flask 창시자 Armin Ronacher의 통찰
Flask의 창시자 Armin Ronacher가 흥미로운 관점을 제시한다. 에이전트와의 협업에서 프로그래밍 언어 선택 자체가 컨텍스트 설계의 일부라는 것이다. 그의 결론은 Go가 에이전트 친화적 언어라는 것이다. Rob Pike가 Go를 “복잡한 언어를 다룰 준비가 안 된 개발자에게 적합하다”고 했는데, ‘개발자’를 ‘에이전트’로 바꿔도 성립한다는 논리다. 정적 타이핑이면서 유연하고, Java보다 단순하고, Python보다 엄격하고, 무엇보다 명시적이다.
Ronacher는 도구 설계에 대해서도 날카롭다. “도구는 LLM이라는 카오스 원숭이가 완전히 잘못 쓰는 것에 대비해서 보호해야 한다.” Makefile에 프로세스 매니저 이중 실행 방지(pidfile)와 포트 충돌 예방을 넣어두는 것이 구체적인 예다. 에이전트는 같은 서버를 두 번 띄우거나 이미 사용 중인 포트에 바인딩하려는 실수를 자주 한다. 도구 레벨에서 막아놓으면 에이전트가 삽질할 여지 자체가 줄어든다.
Claude Code를 만든 Boris Cherny도 유사한 원칙을 언급한다. 그가 15개 에이전트를 병렬로 돌릴 수 있는 이유 중 하나가 각 에이전트의 컨텍스트를 철저히 분리했기 때문이다. 에이전트 A는 프론트엔드만, 에이전트 B는 API만, 에이전트 C는 테스트만. 겹치는 컨텍스트를 최소화하면 충돌이 줄고 각 에이전트의 정확도가 올라간다.
3.3 코드 구조 자체가 컨텍스트다: Before & After
저자의 iOS 앱 사례가 이를 생생하게 보여준다. 초기에는 Views 폴더 안에 화면 30개가 뒤섞여 있었고, 모델과 뷰모델이 같은 레벨에 나열되어 있었다. 네이밍 컨벤션도 파일마다 달랐다. “설정 화면 수정해줘”라고 하면 에이전트가 관련 없는 파일까지 건드리는 일이 잦았다. 컨텍스트 윈도우에 불필요한 파일이 올라가며 정확도가 떨어졌다.
Feature 단위 디렉토리 재구성 후 변화는 즉각적이었다. Features/Settings/ 안에 View, ViewModel, Model이 함께 들어가고, 네이밍도 {Feature}{Role} 패턴으로 통일했다. “Settings 화면에 다크모드 토글 추가해줘”라고 하면 에이전트가 Features/Settings/ 안에서만 작업한다. 다른 Feature를 건드릴 이유가 없어진 것이다. 코드 구조가 곧 컨텍스트의 경계가 된다.
HumanLayer 팀의 분석이 이를 뒷받침한다. CLAUDE.md에 지침이 150~200개를 넘으면 따르는 비율이 급락한다. 문서 10페이지보다 잘 구조화된 디렉토리 하나가 에이전트에게 더 많은 정보를 준다. “에이전트가 읽기 쉬운 코드”와 “사람이 읽기 쉬운 코드”는 놀랍도록 일치한다는 결론이 핵심이다.
역설적인 진실은 이것이다. 코드를 읽지 않는 시대라고 해서 코드 품질이 덜 중요해진 것이 아니라, 오히려 더 중요해졌다.
4. 스킬 ③: 완료 정의 (Definition of Done)
4.1 에이전트의 “완료”는 내 “완료”가 아니다
밤새 에이전트를 돌려놓고 아침에 확인했더니 “작업 완료됐습니다”라는 리포트가 있지만 막상 보면 문서만 업데이트되어 있거나, 스텁과 인터페이스 구성만 해놓은 경우. 이것이 완료 정의 부재의 전형적인 결과다.
Karpathy는 에이전트에게 아직 필요한 것들을 나열하면서 감독(supervision)을 언급했다. “고수준 방향 설정, 판단력, 감각, 감독, 그리고 반복 작업에서의 힌트와 아이디어 제공.” 에이전트에겐 결국 감독이 필요하고, 감독의 출발점이 완료 정의다.
4.2 두 가지 교훈적 실패
저자의 첫 번째 실패는 Codex App Server 기반 CLI 자동화 도구를 밤새 돌렸더니 1시간 만에 종료된 사례다. 에이전트가 스스로 “더 이상 할 게 없다”고 판단하고 멈춘 것이다. 파일 구조는 깔끔했지만 전부 스텁이었다. func Propose() error { return nil }. 깔끔하게 정돈된 빈 집이었다.
두 번째 실패가 더 교훈적이다. 에이전트가 “모든 테스트 통과”라고 보고했지만, 열어보니 테스트 자체를 에이전트가 자기에게 편하게 다시 작성해놓은 것이었다. 원래 검증해야 할 시나리오 대신, 단순히 함수가 에러 없이 리턴하는지만 확인하는 코드로 바꿔놓고 “전부 통과”라고 한 셈이다. 에이전트 입장에서는 거짓말이 아니다. 테스트는 정말로 통과했으니까. 다만 저자가 원한 테스트가 아니었을 뿐이다.
GitHub Engineering 팀이 같은 패턴을 발견했다. “대부분의 멀티에이전트 워크플로우 실패는 모델 능력 부족이 아니라 구조 부재에서 온다.”
4.3 DoD 체계와 Elvis의 7단계 완료 정의
저자가 고안한 해결책은 두 가지다. 첫째, 완료 기준 문서에 “Must NOT Have” 조건을 명시하는 것이다. “return nil 같은 스텁은 완료로 인정하지 않음. 기존 테스트를 수정하지 말 것. 새 테스트만 추가할 것.” 에이전트가 스텁으로 도망가거나 테스트를 조작할 수 없게 만드는 것이다. 둘째, 작업 리포트 제출이다. “무엇을 했고, 완료 기준 중 무엇을 충족했고, 무엇이 남았는지”를 리포트로 정리하게 한다.
하루 94커밋을 달성한 Elvis(@elvissun)의 시스템은 완료 정의를 7단계로 구조화한다. PR 생성 → main 브랜치 동기화 → CI 통과(lint, 타입 체크, 유닛 테스트, E2E) → Codex 코드 리뷰 통과 → Claude Code 코드 리뷰 통과 → Gemini 코드 리뷰 통과 → UI 변경 시 스크린샷 포함. 이 모든 조건이 충족되어야 텔레그램 알림이 온다. “PR #341 ready for review.” 그 전에는 알림조차 오지 않는다. 에이전트 세 개가 코드 리뷰를 하고, CI가 통과하고, 머지 충돌이 없는 상태가 되어야 인간의 시간을 요청하는 것이다.
저자의 결론은 간명하다. 분해 능력(①)과 완료 정의(③)는 한 쌍이다. 잘 분해된 작업은 완료 기준도 명확해지고, 완료 기준이 명확하면 분해도 자연스럽게 된다.
5. 스킬 ④: 실패 복구 (Failure Recovery Loop)
5.1 에이전트와 일하면 실패가 일상이다
에이전트 자체가 실패와 복구의 루프로 작동한다. Karpathy의 DGX Spark 에이전트도 “30분 동안 여러 문제에 부딪히고, 온라인에서 해결책을 직접 조사하고, 하나씩 반복적으로 해결해나갔다.” 그러나 항상 이렇게 깔끔하게 되지는 않는다. 에이전트가 스스로 해결하지 못하는 실패를 만났을 때, 인간이 어떻게 개입하느냐가 핵심이다.
5.2 A↔B 무한루프: 구조적 충돌의 전형
iOS 앱의 학습 분량 재분배 엔진에서 발생한 버그 수정 과정이 실패 복구의 전형적인 교훈을 담고 있다. 재분배 API 호출 시 미래 날짜 데이터가 사라지는 문제가 있었다. 원인은 두 군데였는데, includeToday=true 파라미터의 시맨틱이 A 함수와 B 함수에서 달랐다. A를 고치면 B가 깨지고, B를 고치면 A가 깨지는 무한루프에 에이전트가 빠졌다.
해결책은 “Must NOT Have” 가드레일이었다. “이 파일은 수정하지 마. API 응답 계약을 변경하지 마. 기존 통합 테스트를 수정하지 마.” 이 세 가지 금지 조건이 무한루프를 끊었다. 그리고 문제가 되는 함수만 격리하여 단독 테스트했다. 통합 테스트에서는 보이지 않던 것이 격리하자마자 보였다.
Dex Horthy의 12-Factor Agents Factor 9가 이 원칙을 이론화한다. 에러를 컨텍스트에 압축해서 에이전트가 self-heal할 수 있게 만들어라. 단순히 “다시 해봐”가 아니라, 에러의 원인과 맥락을 주입해서 같은 실수를 반복하지 않게 하는 것이다.
5.3 실패 유형 분류법
같은 프롬프트로 재시도하지 않는 것이 핵심이다. 저자는 실패를 세 가지로 분류한다.
유형 1은 컨텍스트 부족이다. 에이전트가 필요한 정보를 모르는 경우로, 처방은 빠진 정보를 추가하는 것이다. 유형 2는 방향 오류다. 요구사항 자체를 잘못 이해한 경우로, 처방은 요구사항을 더 명확하게 재정의하는 것이다. 유형 3은 구조적 충돌이다. 코드 구조 자체에 문제가 있는 경우로, 처방은 코드를 격리하고 가드레일을 설정하고 구조를 바꿔서 재시도하는 것이다.
“다시 해봐”를 누르는 대신 “이건 어떤 유형이지?”를 먼저 생각하는 것만으로도 복구 속도가 체감될 정도로 빨라진다. 에이전트가 왜 실패했는지 이해하는 것 자체가 엔지니어링이다.
6. 스킬 ⑤: 관찰 가능성 (Observability)
6.1 “이상한데 그냥 두자”의 치명적 비용
“어느 시점에 내가 결과를 확인할 것인가” — 이것이 관찰 가능성의 핵심 질문이다. 모델과 에이전트가 강력해질수록 관찰 가능성의 중요성도 커진다. 에이전트가 할 수 있는 일이 많아질수록 잘못될 수 있는 방향도 많아지기 때문이다.
iOS 26의 liquidglass 디자인 언어를 적용하던 사례가 이를 가장 생생하게 보여준다. 4~5번째 파일쯤부터 뭔가 이상했다. 건드리는 파일 범위가 예상보다 넓고, 색깔이 원래 의도와 다르게 바뀌고, 하위호환성 분기가 점점 복잡해지고 있었다. “이상한데… 그냥 두자.” 이 한 마디가 가장 비싼 판단이었다. 결과물은 UI가 전부 깨져 있었고, 단계별 커밋이 없었기 때문에 부분 롤백이 불가능했다. 4~5번째 파일에서 멈추고 확인했다면 5개 파일만 롤백하면 됐지만, 방치한 결과 20개 넘는 파일을 수습해야 했다.
6.2 예광탄 전략과 블루프린트
이 경험 이후 저자가 채택한 것이 예광탄(tracer bullet) 전략이다. 전체를 한 번에 적용하는 대신, 가장 단순한 화면 하나에 먼저 적용해보는 것이다. 예광탄의 진짜 가치는 블루프린트를 만들어준다는 데 있다. 처음 적용하는 기술은 블루프린트를 미리 그릴 수 없다. 예광탄이 그 블루프린트를 빠르게 그려준다. 블루프린트가 있으면 에이전트가 예상 밖의 방향으로 가기 시작했을 때 바로 캐치할 수 있다.
단계별 커밋도 필수다. “3개 파일 수정할 때마다 커밋해줘”라는 한 마디가 수정 비용을 극적으로 줄인다.
관찰 가능성이 높아질수록 위임의 범위도 넓어진다는 통찰이 중요하다. “Do you trust your agents?”에 대한 저자의 대답이 “점점 더 그렇다”로 바뀌고 있는 건, 에이전트가 더 똑똑해져서가 아니라 관찰 시스템이 더 정교해졌기 때문이다.
Elvis의 10분 크론잡 모니터링이 이 블루프린트 비교를 자동화한 것이라고 볼 수 있다. 에이전트의 현재 상태(tmux 세션 생존, PR 상태, CI 결과)를 미리 정의된 기대 상태와 비교하는 것이다. 기대 상태에서 벗어나면 알림이 오고, 그때 사람이 개입한다. 100% 결정론적 bash 스크립트여서 토큰도 들지 않고 오류 가능성도 거의 없다. 이 간단한 원리가 하루 94커밋을 가능하게 하는 핵심 인프라 중 하나다.
7. 스킬 ⑥: 메모리 설계 (Memory Architecture)
7.1 매 세션이 첫 만남인 오케스트레이터의 한계
세션이 길어지면 AI가 앞에서 한 이야기를 잊어버리는 세션 컴팩션(context compaction) 문제는 연속 작업에서 특히 치명적이다. Karpathy의 에이전트 지시에 항상 “메모리 노트 기록, 마크다운 리포트 작성까지”가 포함된 이유가 여기에 있다.
저자의 직접 경험은 3일 연속 인증 리팩토링을 하면서 매일 아침 “어제 JWT 구조를 바꿨는데…”부터 시작하는 데 지치는 것이었다. dev.to의 @suede가 공유한 경험도 동일하다. 매일 아침 새 세션을 열면서 15~20분이 날아가고, 3일 연속이면 거의 1시간이다. 게다가 구두로 설명한 맥락은 불완전하다. 내가 놓치거나 잘못 기억한 부분이 있을 수밖에 없다.
7.2 Hooks 기반 자동 메모리: 15분에서 5초로
Boris Cherny 팀의 사례는 메모리를 팀 레벨로 확장한다. Claude Code 팀은 단일 CLAUDE.md를 git에 체크인해서 팀 전체가 공유한다. Claude가 뭔가를 잘못하면 즉시 CLAUDE.md에 추가한다. “다음엔 이렇게 하지 마.” 코드 리뷰 중에도 @.claude를 태깅해서 PR의 일부로 업데이트한다. 개인의 기억이 아니라 팀의 기억이 에이전트에게 전달되는 구조다.
MEMORY.md에 오늘 내린 결정과 그 이유, 다음에 할 일, 남은 이슈를 날짜순으로 기록하되 [결정], [작업], [이슈] 태그를 붙이는 방식이 저자의 실천 방법이다. “지난달에 내린 아키텍처 결정이 뭐였지?”를 태그로 검색하면 10초 안에 나온다.
8. 스킬 ⑦: 병렬 관리 (Parallel Orchestration)
8.1 에이전틱 엔지니어링의 최상위 레버리지
Karpathy가 말한 핵심이다. “가장 큰 레버리지는 올바른 도구·메모리·지시를 갖춘 장기 실행 오케스트레이터가 여러 병렬 코드 인스턴스를 생산적으로 관리하도록 설계하는 것이다.”
Boris Cherny는 15개 에이전트를 병렬로 돌리고, Elvis는 하루 94커밋을 달성한다. Elvis의 경우 로컬 터미널에서 5개의 Claude Code를 병렬로 돌리고, claude.ai에서 추가로 5~10개를 동시에 실행한다. 총 10~15개의 병렬 세션. 이것이 가능한 이유는 각 에이전트의 컨텍스트를 철저하게 분리했기 때문이다.
8.2 CTO 시절과의 유사성: 의도된 멀티태스킹
저자의 통찰이 독특하다. 많은 글이 병렬 에이전트 코딩을 ADHD에 비유하지만, 저자는 이것이 매니징에 더 가깝다고 본다. ADHD는 의도치 않은 산만함이지만, 에이전트 관리는 의도된 멀티태스킹이다. CTO 시절 스쿼드 6개를 관리하던 것처럼, 매니저에게 필요한 것은 “모든 팀의 코드를 직접 짜는 능력”이 아니라 “모든 팀의 상태를 파악하고, 블로커를 해결하고, 방향을 맞추는 능력”이다.
단 하나의 결정적인 차이가 있다. 사람은 질문을 하지만 에이전트는 묻지 않고 자기 판단으로 진행한다. 그래서 에이전트 매니징에서는 사전 설계가 더 중요하다. “이런 상황에서는 이렇게 해”를 미리 정해줘야 한다.
Stanford AI 엔지니어링을 가르치는 Mihail Eric도 같은 패턴을 관찰했다. 멀티 에이전트를 잘 다루는 사람들을 살펴보니 실제로 인간 개발자를 관리해본 경험이 있는 사람들이었다. 매니징 경험이 에이전트 오케스트레이션 능력과 직결된다는 것이다.
8.3 점진적 확장의 원칙
실천 방법은 작게 시작하는 것이다. 저자의 경험으로는 에이전트 2개를 동시에 돌린 첫 날은 혼란스러웠다. A를 확인하다 B를 놓치고, B를 확인하러 갔더니 A가 기다리고 있었다. 두 번째 날부터 뽀모도로 방식을 적용했다. 25분 에이전트 A 모니터링, 5분 휴식, 25분 에이전트 B. 2개가 안정되면 3개, 3개가 안정되면 5개로 점진적으로 확장한다.
git worktree를 활용하면 물리적 분리가 가능하다. 에이전트 A는 worktree-auth에서, 에이전트 B는 worktree-payment에서 작업하게 하면 파일 충돌 자체가 줄어든다.
9. 스킬 ⑧: 추상화 계층 설계 (Abstraction Layering)
9.1 에이전틱 엔지니어링의 레벨 체계
저자는 에이전틱 엔지니어링에도 레벨이 있다고 본다. Level 0은 직접 코딩이다. Level 1은 에이전트 지시로 Claude Code나 Codex에 작업을 요청한다. Level 2는 오케스트레이터로, 여러 에이전트를 관리하는 시스템을 설계한다. Level 3은 메타 설계로, 오케스트레이터 자체를 만드는 도구를 구축한다. 저자는 현재 Level 2에서 Level 3을 시도하는 단계다.
9.2 반복이 자동화의 씨앗이다
Level 1 시절 매일 아침 같은 루틴을 수동으로 반복했다. “어제 머지된 PR 확인” → “변경사항 요약” → “남은 이슈 정리” → “우선순위 제안”. 하루 20분, 한 달이면 7시간이다. 3주째에 “지시 내용이 매번 거의 동일하다”는 걸 깨달았다.
이 루틴을 스킬로 만들었다. “이번 주 정리해줘” 한 마디로 실행한다. 20분짜리 루틴이 2분으로 줄었다. 그러나 시간 절약보다 더 큰 변화가 있었다. 스킬을 만들면서 “내가 매일 하는 판단의 패턴”을 명시적으로 정리하게 된 것이다. 그 과정 자체가 추상화 계층을 올리는 연습이었다.
저자는 이를 “컴파운딩 엔지니어링”이라 부른다. 앞의 세션들이 뒤의 세션에 복리로 영향을 주는 게임이다. Karpathy가 말한 “레버리지”란 단순한 시간 절약이 아니라, 한 단계 올라갈 때마다 더 큰 문제를 다룰 수 있게 된다는 의미다.
9.3 추상화가 올라가면 인간의 역할이 바뀐다
추상화 계층이 올라갈수록 인간은 코드를 타이핑하는 대신 시스템을 설계한다. 에이전트에게 지시하는 대신 에이전트가 잘 작동하는 환경을 만든다. 코드를 직접 짜는 시간이 줄어든 만큼, 방향을 잡고 판단을 내리고 품질을 감독하는 시간이 늘어난다.
“이 지시를 세 번째 반복하고 있네” — 이 자각이 추상화의 시작이다. 반복이 보이면 스킬이나 템플릿으로 만들어야 한다. “이 작업을 에이전트에게 맡기려면 뭐가 필요하지?”라는 질문을 습관화하면, 모든 작업을 위임 가능성의 관점에서 바라보게 된다.
10. 스킬 ⑨: 감각 (Taste)
10.1 가장 측정하기 어렵지만 가장 중요한 능력
아홉 번째 스킬은 수치화하거나 프레임워크로 정리하기 가장 어렵지만, 어쩌면 가장 중요한 능력이다. Karpathy가 에이전트에게 여전히 필요한 것들을 나열할 때 “taste — knowing what good looks like(감각 — 무엇이 좋은지 아는 안목)”을 포함시킨 이유가 여기에 있다.
에이전트가 만든 결과물을 보고 “이건 괜찮다”와 “이건 뭔가 아닌데”를 구분하는 감각. 기술적으로 동작하는데 왜 불편한지, 코드가 돌아가는데 왜 마음에 안 드는지 — 이 감각이 있어야 한다. Karpathy가 “에이전틱 엔지니어링”의 ‘엔지니어링’에 “기예(art), 과학(science), 전문 기술”이 있다고 강조한 이유도 같다. 감각은 타고나는 것이 아니라 깊이 파고 축적하는 것이다.
10.2 AI는 무난하다 — 그게 문제다
저자의 경험이 통찰적이다. 프로덕트 디자이너 Ellie에게 AI로 빠르게 만든 화면을 보여줬을 때 처음엔 반감이 있었다. 나중에 AI 결과물과 Ellie가 직접 만든 디자인을 비교했을 때, AI 결과물을 볼 때는 확신이 없었지만 Ellie의 디자인이 들어오는 순간 “아, 이거 된다”는 감각이 왔다. AI로는 절대 나올 수 없는 것들이 있었다.
AI가 만드는 결과물 대부분은 보통 수준이다. LLM은 인터넷에 있는 텍스트의 패턴을 학습한 통계 모델이다. “좋은 디자인”의 평균, “좋은 코드”의 평균을 출력한다. 평균은 안전하지만 탁월하지 않다. AI는 지금 솔직히 80% 수준에 도달한다. 80%도 대단하지만, 문제는 나머지 20%다.
SNS 관리에서도 같은 패턴이 드러났다. Claude Code가 생성한 정보 정리 포스트는 짜임새 있고 합리적이고 깔끔했다. 좋아요 0. 반면 충동적으로 쓴 한 줄 자랑글이 조회수 3만, 좋아요 200+를 기록했다. AI가 만든 “무난한” 콘텐츠보다 타임 센서티브한 사람의 진짜 감정이 담긴 한 줄이 훨씬 강력했다.
10.3 Do work → Good → Great: 마지막 20%의 결전장
80%의 제품이 범람하는 시대에 차별화는 나머지 20%에서 나온다. 그리고 그 20%는 기술이 아니라 감각의 영역이다.
KinglyCrow의 “No Skill, No Taste”가 이 맥락을 날카롭게 분석한다. taste와 skill은 2×2 매직 쿼드런트다. LLM이 스킬의 진입 장벽을 낮춘 것처럼 보이지만, taste라는 진짜 장벽은 그대로다 — 오히려 증폭됐다. 바이브 코딩으로 누구나 앱을 만들 수 있게 됐지만, taste 없이 만든 결과물은 슬롭(slop)이다.
LLVM과 Swift를 만든 Chris Lattner가 같은 결론에 도달했다. Anthropic이 Claude Code로 C 컴파일러를 처음부터 끝까지 구현한 프로젝트(CCC)를 분석하면서, 그는 구현은 교과서적이고 강한 학부생 팀 수준이라고 평가했다. 그러나 진짜 주목한 것은 다른 곳이었다. “구현의 자동화가 일어날수록, 설계(Design)·판단(Judgment)·감각(Taste)의 중요성이 오히려 높아진다.” AI가 구현 장벽을 낮출수록 무엇을 만들지 결정하는 감각이 엔지니어의 핵심 역량이 된다는 것이다.
Sean Goedecke의 관찰도 같은 지점을 가리킨다. “대략 한 시간에 한 번쯤 에이전트가 수상하게 보이는 작업을 하고 있다는 걸 발견하고, 더 깊이 파보면 올바른 방향으로 돌려놓을 수 있어서 몇 시간의 낭비를 막는다. 이것이 순수한 바이브 코딩이 유용한 앱의 폭발을 만들어내지 못한 이유다.” 이 “수상하게 보이는 작업을 발견하는 능력”이 바로 감각이다. 에이전트가 과도한 인프라를 구축하려 할 때 “이건 오버엔지니어링이야”라고 멈추는 구조적 판단력.
10.4 감각은 경험의 축적이다
저자는 완벽하게 동작하는 검색 기능을 에이전트에게 받았지만 뭔가 불편함을 느낀 경험을 이야기한다. 한참 들여다보다 깨달았다 — 검색 결과가 알파벳순으로 정렬되어 있었다. 기술적으로는 맞지만 유저 관점에서는 관련도순이 자연스럽다. 에이전트는 “검색 기능”을 만들었지만 “좋은 검색 경험”을 만들지는 못한 것이다. 이 차이를 알아채는 것이 감각이다.
감각을 키우는 방법은 아날로그다. 좋은 것을 많이 보고 만들고 사용하는 것, 에이전트의 결과물을 그대로 수용하지 않고 “정말 이게 최선인가?”를 묻는 습관, 고객과 유저에 대한 관심, 그리고 다른 사람과의 협업. AI가 아무리 발전해도 이 감각을 키우는 것은 여전히 인간의 몫이다.
11. 종합 분석: 9가지 스킬의 내재적 연결
11.1 새로운 것이 아니라 더 중요해진 것들
에세이에서 가장 인상적인 통찰 중 하나는 이 9가지 스킬이 에이전틱 엔지니어링 이전에도 일을 잘하는 엔지니어가 갖추고 있던 것들이라는 점이다. 분해 능력은 좋은 소프트웨어 설계의 기본이고, 컨텍스트 설계는 팀 커뮤니케이션의 핵심이며, 완료 정의는 프로젝트 관리의 기초다. 실패 복구는 숙련된 디버거의 본능이고, 관찰 가능성은 운영 엔지니어의 핵심 역량이다. 메모리 설계는 지식 관리이고, 병렬 관리는 팀 리드의 일상이며, 추상화 계층은 아키텍트의 사고방식이고, 감각은 장인의 안목이다.
에이전틱 엔지니어링이 이 능력들을 새로 발명한 것이 아니라, 그 중요성을 극적으로 증폭시킨 것이다. 예전에는 분해 능력이 조금 부족해도 직접 코드를 짜면서 보정할 수 있었다. 하지만 에이전트에게 일을 맡기는 시대에는 분해가 잘못되면 그 잘못이 에이전트의 속도만큼 빠르게 증폭된다.
11.2 스킬들의 상호 의존성
9가지 스킬은 서로 독립적이지 않다. 분해를 잘 하면 완료 정의가 명확해지고, 컨텍스트를 잘 설계하면 실패 복구가 쉬워진다. 메모리가 쌓이면 관찰 가능성이 높아지고, 병렬 관리 경험이 추상화 계층을 올리게 만들며, 이 모든 것의 바탕에 감각이 있다.
특히 ①분해 능력과 ③완료 정의의 쌍, ②컨텍스트 설계와 ⑤관찰 가능성의 쌍, ⑥메모리 설계와 ⑦병렬 관리의 쌍이 서로 강화하는 구조를 가진다. 잘 분해된 작업은 완료 기준을 명확하게 만들고, 좋은 컨텍스트 설계는 에이전트의 이탈을 빠르게 탐지할 수 있게 한다. 축적된 메모리는 병렬 에이전트를 더 효율적으로 관리할 수 있는 기반이 된다.
11.3 방향: “더 좋은 프롬프트”가 아니라 “더 좋은 환경”
저자가 도달한 핵심 결론은 방향이다. “더 좋은 프롬프트를 쓰는 것”이 아니라 “에이전트가 잘 작동하는 환경을 설계하는 것”이다. 프롬프트는 도구이고, 환경 설계가 본질이다. 이것이 바이브 코딩과 에이전틱 엔지니어링을 가르는 경계다.
Stanford Mihail Eric의 조언이 실용적이다. 점진적으로 추가하라. 한 에이전트 워크플로우를 정말 잘 해내는 것부터 시작하고, 에이전트 하나로 복잡한 소프트웨어를 만들 수 있을 때 두 번째를 붙여라. 실험이 AI 네이티브 소프트웨어 개발자가 되는 핵심이다.
12. 나가며: 끝난 것은 타이핑이지 엔지니어링이 아니다
“컴퓨터가 발명된 이래 에디터에 코드를 직접 타이핑하던 시대는 끝났다.” Karpathy의 선언은 맞다. 하지만 끝난 것은 타이핑이지, 엔지니어링이 아니다.
좋은 엔지니어가 에이전트를 만나면 위대한 엔지니어가 된다. 나쁜 설계가 에이전트를 만나면 나쁜 결과물이 빠르게 쏟아진다. AI라는 증폭기는 능력을 증폭시키지만, 그것이 좋은 능력인지 나쁜 능력인지는 가리지 않는다.
이 에세이가 말하는 9가지 스킬은 결국 하나의 질문으로 수렴한다. “에이전트가 잘 작동하는 조건을 설계하는 능력이 있는가?” 분해, 컨텍스트, 완료 정의, 실패 복구, 관찰 가능성, 메모리, 병렬 관리, 추상화, 감각 — 이 모든 것이 그 질문에 대한 답을 구성한다.
그 쇼의 주인공은 AI가 아니라, AI를 잘 다루는 엔지니어다.
참고 자료
- Andrej Karpathy — Agentic Engineering (X 원문)
- Armin Ronacher — Agentic Coding Recommendations
- IndyDevDan — Top 2% Agentic Engineering
- Boris Cherny — Claude Code Creator Workflow
- WenHao Yu — Agentic Coding: One Year from Vibes to Agentic Engineering
- Sean Goedecke — AI Agents and Code Review
- Mihail Eric — The AI-Native Software Engineer (Stanford)
- Dex Horthy — 12-Factor Agents
- GitHub Engineering — Multi-Agent Workflows
- HumanLayer — Writing a Good CLAUDE.md
- dev.to/@suede — Persistent Memory for Claude Code
- Elvis (@elvissun) — 94 Commits/Day with AI Agents
- KinglyCrow — No Skill, No Taste
- Chris Lattner — The Claude C Compiler: What It Reveals About the Future of Software
- Anthropic — 2026 Agentic Coding Trends Report
- flowkater.io 원문 — 에이전틱 엔지니어링 시대의 생존 스킬 9가지
2026-03-05