My company packaged 12 years of my experience into an AI Skill, then laid me off. When it crashed, the CTO called at 5x my salary.
A story about knowledge extraction, Kafka consumer rebalance, and what happens when a company...
지식 추출, Kafka 컨슈머 리밸런스, 그리고 회사가 AI 스킬이 과거는 알지만 현재는 모른다는 사실을 깨달았을 때 벌어지는 일에 관한 이야기. 커뮤니티 멤버의 제보를 바탕으로 작성되었습니다. 비슷한 경험이 있거나 털어놓고 싶은 이야기가 있다면 연락하세요. 다음 주인공이 될 수 있습니다.
당신의 회사가 당신의 경험을 시스템으로 추출한 뒤, 시스템만으로도 충분하다고 판단한 적이 있는가?
AI 스킬이 312개 시나리오를 정확히 처리하는 것을 지켜보며, 313번째가 나타났을 때 자신이 여전히 그 자리에 있을지 의문을 품은 적이 있는가?
이것은 그 이야기다.
1막 · 지식 추출 #
회의실에는 창문이 없었다. 세 달.
매주 월요일부터 목요일까지 나는 그 플라스틱 의자에 앉았다 — 탁자 위에는 녹음기, 노트북, 머그컵. 맞은편에는 Caleb이라는 엔지니어가 앉아 있었다. 그의 임무는 나에게 질문하는 것이었다.
"MongoDB 대신 PostgreSQL을 선택한 이유는?"
"재시도 간격이 왜 450밀리초인가?"
"알림 임계값을 어떻게 계산했나?"
나는 대답했다. 그는 받아 적었다. 녹음기의 빨간 불은 계속 켜져 있었다.
그들은 그것을 **"지식 이전 이니셔티브(Knowledge Transfer Initiative)"**라고 불렀다. CTO의 전사 이메일은 세련되게 포장되어 있었다: 우리는 수십 년의 조직 지식을 다음 세대 엔지니어들을 위해 보존하고 있습니다.
평범하게 말하면: 당신의 경험은 너무 비싸다. 우리는 그것을 스킬로 패키징할 것이다.
처음에는 진지하게 받아들이지 않았다. 모든 회사에는 지식 관리가 있다. 그러다 세 번째 달이 됐다. Caleb은 질문을 멈추고 검증을 시작했다.
그는 내가 전년도에 디버깅했던 인시던트 — 프로덕션 장애 — 를 꺼냈다. 나에게 진단 과정을 재현해보라고 했다. 그런 다음 시스템이 같은 것을 하도록 했다.
시스템이 말했다: 메시지 브로커 지연 스파이크 감지됨. 450ms 간격의 재시도 로직이 큐 백프레셔 하에서 증폭될 수 있습니다. 어댑티브 백오프를 권장합니다.
세 번을 읽었다. 맞았다. 내 추론 과정이었는데 — 나보다 빠르게 말하고 있었다.
CTO가 옆에 서서 웃고 있었다. 실리콘밸리에서 그 미소를 너무 많이 봐왔다. 행복이 아니다. 그것은 서명이다.
2막 · "96.8% 정확도" #
뭔가 잘못됐다는 것을 알아챈 순간은 검증 보고서가 나온 날이었다.
테이블 맞은편에 한 줄로 사람들이 앉아 있었다 — CTO, HRBP, 엔지니어링 VP, 컨설팅 회사 로고가 새겨진 재킷을 입은 낯선 여성.
프로젝터에는 숫자 하나가 표시되어 있었다: 지식 보존율: 96.8%
Caleb이 결과를 발표했다. "세 차례의 검증을 거쳐 AI 스킬은 312개의 과거 장애 시나리오에서 96.8%의 진단 정확도를 달성했습니다. 나머지 3.2%의 편차는 불충분한 컨텍스트로 인한 최적화되지 않은 권장 사항으로, 가이던스를 통해 수정 가능합니다."
박수가 터졌다. CEO가 나를 돌아보며 내가 결코 잊지 못할 말을 했다.
"Mark, 당신이 당신 자신의 대체물을 만들었군요."
모두가 웃었다. 나도 웃었다. 달리 무엇을 할 수 있었겠는가?
회의 후 나는 주차장에 한참 앉아 있었다. 커피는 식어 있었다. 창밖으로는 늘 그래왔던 캘리포니아의 파란 하늘. 전화가 진동했다. 아내의 문자: 언제 집에 와?
나는 "곧"이라고 입력했다. 그러고는 삭제했다.
나는 그녀에게 어떻게 말해야 할지 몰랐다. 내가 세 달을 보내며 나 자신을 매뉴얼로 만들었다는 것을. 그리고 매뉴얼을 쓰고 나면, 원본은 필요 없어진다.
3막 · 퇴직금 #
다음 주 월요일, CTO가 1:1을 위해 문을 닫았다.
"Mark, 돌려 말하지 않겠습니다. 구조조정의 일환으로 당신의 직책이 없어졌습니다."
그는 봉투를 테이블 너머로 밀었다.
N+3. 3개월치 퇴직금. 실리콘밸리식 우리가 당신을 자르는 게 아니라 전환을 돕는 것 처우.
멈추지 않고 서명했다. 신경 쓰지 않아서가 아니라 — 문을 열고 들어오기 전에 이미 이 결말을 다 그려봤기 때문이다.
마지막 날은 금요일이었다. 책상을 정리하는 데 40분도 채 걸리지 않았다. 백팩 하나. 모니터 스탠드 하나. 펜 뚜껑 세 개 — 서랍에 왜 펜 뚜껑이 세 개나 있었는지 아직도 모르겠다.
차에 앉아 전화기로 세 가지를 검색했다:
- LLC 등록 (캘리포니아, 단독 회원, $70, 15분)
- 직업 배상 책임 보험 (컨설턴트 업계 표준, 연 약 $1,200)
- 시니어 인프라 컨설턴트 요율 벤치마킹 (중간값: 시간당 $215)
그날 밤 회사를 등록했다. Mark Johnson Consulting LLC. 사무실도, 직원도, VC 피치덱도 없었다. 한 가지 조항만 명확하게 적었다: 프로젝트 기반만. 납품 체인에 AI 없음.
4막 · AI 스킬 가동 #
첫 번째 전체 분기는 쇼케이스였다.
AI 스킬이 티어-2 운영 티켓의 70%를 흡수했다. 신입 엔지니어들은 생산성을 갖추는 데 6개월에서 3주로 단축됐다. CEO는 전사 회의에서 세련된 슬라이드를 사용했다:
이전: Mark의 12년 경험이 그의 머릿속에 잠겨 있었습니다. 이후: Mark의 12년 경험이 프롬프트로 이용 가능합니다.
Mark 본인은 아무도 언급하지 않았다. 그럴 필요가 없었다. 그는 이미 패키징되어 있었다.
Photo by Kampus Production on Pexels
아내는 내가 알아채기 전에 먼저 눈치챘다. 내가 떠난 다음 주말, 그녀는 부엌에서 나를 바라보며 내가 예상하지 못했던 말을 했다.
"당신 달라 보여."
"어떻게 달라?"
"컴퓨터 앞에 앉아 말하지 않을 때 — 그 긴장감이 없어. 예전엔 뭔가 터지길 기다리고 있었잖아. 이제는 클라이언트를 기다리고 있어."
맞는 말이었다. 나는 기다리고 있었다.
링크드인에서 그들이 새 플랫폼 리드를 채용했다는 걸 봤다. 그가 처음 한 일은 모니터링 스택을 재구축하는 것이었다. 스킬은? Kafka로 마이그레이션한 후 아무도 검증을 다시 돌리지 않았다. 왜 하겠는가? 만든 사람은 이미 없었으니까.
5막 · 충돌 #
그것은 수요일 새벽 3시 47분에 일어났다.
분산 추적 시스템에 불이 들어왔다. 핵심 결제 체인의 P99 레이턴시가 80밀리초에서 12초로 치솟았다. 3분 후 첫 번째 트랜잭션이 타임아웃되어 롤백됐다. 10분 후 결제 큐가 쌓이기 시작했다. 23분 후 롤백이 캐스케이드를 유발했다 — 두 개의 다운스트림 서비스가 요청을 거부하기 시작했다.
온콜 엔지니어가 AI 스킬을 열었다. 스킬이 로그를 스캔하고 패턴을 파악해 진단을 반환했다.
메시지 브로커 지연 감지됨. 알려진 완화 조치 적용: 450ms 백오프로 재시도 큐 활성화.
그 진단은 과거 312개 시나리오 전부에서 정확했다.
이것은 313번째였다.
450ms 재시도 창은 내가 5년 전 RabbitMQ를 위해 작성한 호환성 심(shim, 두 시스템 간 동작 차이를 메우는 얇은 호환 레이어)이었다. 그 숫자는 임의로 정한 게 아니었다 — RabbitMQ 클러스터에서 2주 동안 부하 테스트를 돌려서 Erlang VM GC 사이클을 통과시키는 정확한 간격을 찾아낸 것이었다.
그런데 RabbitMQ는 3년 전에 퇴역했다. 그들은 이미 Kafka를 쓰고 있었다.
Kafka의 컨슈머 그룹은 폴 기반 프로토콜을 쓴다 — 모든 컨슈머는 설정된 간격으로 코디네이터에 폴링을 유지해야 하며, 그렇지 않으면 코디네이터가 죽은 것으로 판단하고 리밸런스를 트리거한다. 내 재시도 워커는 동기식이었다 — 메시지 하나를 처리하고 다음을 당겨왔다. 라운드당 450ms씩, 수십 개의 메시지 큐가 폴 타임아웃을 몇 배로 늘렸다.
# 스킬이 한 것 (450ms 재시도 창)
def handle_queue():
while queue_not_empty():
msg = fetch_one_message() # 한 번에 하나씩
retry_with_backoff(450ms) # ⏱ 메시지당 450ms
process(msg)
poll_consumer() # "살아있나?" → 부채 누적
# 60개 메시지 큐가 있을 때 발생한 일
poll_timeout = 5000 # 5초 후 코디네이터가 죽은 것으로 표시
time_per_round = 60 * 450 # 60개 메시지 × 450ms = 27,000ms
# 27,000ms > 5,000ms → 폴 타임아웃 초과 → 리밸런스 트리거됨리밸런스가 시작되자 전체 그룹이 진동하기 시작했다. 새 컨슈머들이 파티션을 가져갔다. 이전 메시지들이 재전달됐다. 레이턴시가 다시 치솟았다. 고착 문제가 눈덩이로 불어났다.
AI는 이전 아키텍처에서 100% 정확했던 전략을 실행했다. 현재 아키텍처에서 그것은 불에 기름을 붓고 있었다.
AI가 실패한 것은 틀려서가 아니었다. 어제에 대해 옳았기 때문에 실패한 것이다 — 그리고 어제는 더 이상 돌아가고 있지 않았다.
6막 · 전화 #
새벽 4시 12분, 전화가 울렸다.
몇 달간 연락하지 않았던 이름 — 전 CTO.
그의 목소리는 차분했다. 너무 차분했다. 엔지니어가 새벽 4시에 전화해서 그렇게 안정된 목소리라면, 어딘가 불이 난 것이다.
"Mark. 물어볼 게 있어."
"물어봐."
그는 세 문장으로 인시던트를 요약했다. 나는 그가 롤백 전략을 물을 거라고 생각했다. 피해 최소화. 그렇지 않았다.
"RabbitMQ 마이그레이션 문서에 메모를 남겼잖아. 당시에는 아무도 이해하지 못했어. 오래된 설정 주석이라고 생각했는데. 이제 이해될 것 같아."
나는 침대 헤드보드에 등을 기댔다. 방 안의 유일한 빛은 전화 화면이었다. 아내가 옆에서 뒤척였다. 깨지는 않았다.
그 메모에는 이렇게 쓰여 있었다: 450ms는 RabbitMQ GC 창과 일치함. 이 컨텍스트 외에서는 재사용하지 말 것.
전화 너머로 침묵이 흘렀다. 약 4초.
"알아," 그가 말했다. "시간이 없어, Mark. 돌아와."
"돌아올 거냐고 묻는 게 아니야." 그의 목소리가 바뀌었다. "돌아오라고 부탁하는 거야. 이번 달 남은 기간 모든 것을 잠시 멈출게. 당신이 결정해. 원하는 가격 말해."
7막 · 가격 #
"이전 연봉의 5배."
그의 숨이 멈추는 소리가 들렸다.
"… 알겠어. 하지만 2주 동안 현장에 있어야 해. 계약직으로. 장비는 직접 가져와. 납품 체인에 AI는 없어."
"좋아. 계약서를 내 변호사에게 보내."
변호사는 없었다. 내가 의미한 것은: 이것은 내 속도로 진행된다.
전화를 끊은 뒤, 거의 1년 동안 연락하지 않은 이름을 스크롤했다 — Mike, 대학 룸메이트, 법대 졸업생. 메시지 하나를 보냈다.
계약서 생겼어. 잠깐 볼 수 있어?
그는 답장하지 않았다. 새벽 4시에 깨어 있는 건 IT 종사자들뿐이니까.
기다리다가 다섯 단어를 더 입력했다. 그에게 보냈지만, 사실 나 자신에게 하는 말이었다.
이번에는 내가 가격을 정했다.
당신도 이런 경험을 한 적이 있는가? 당신의 지식이 추출되고, 스킬로 패키징되고, 당신이 더 이상 필요 없는 이유가 됐다. 그리고 스킬이 이해하지 못하는 것과 맞닥뜨리자 그들이 다시 돌아왔다. "아니오"보다 더 나은 대답이 있는가?
스킬은 모든 과거 시나리오를 알고 있었다. 단지 인프라가 바뀌었다는 것을 볼 수 없었을 뿐이다.
회사는 인건비로 6자리 숫자를 절약했다. 그저 검증이 그것을 작성한 사람이 여전히 재실행할 수 있을 때만 작동한다는 것을 잊었을 뿐이다.
시스템이 다운됐을 때 — 그들은 누구에게 전화했는가?
이 글은 위 출처의 내용을 바탕으로 작성된 초안입니다. 원문의 의견과 정보를 그대로 전달하며, 별도의 견해를 포함하지 않습니다.

