AI 챗봇에 불만 아홉 줄을 쏟았더니 정작 당사자에게 말할 문장은 하나도 안 남았다

말을 더 잘하고 싶었다. 같이 일하는 사람 한 명에 대해 몇 년치가 쌓여 있었고, 언젠가는 말해야 한다고 생각했다. 그래서 말하기 전에 정리부터 하기로 했다. AI 창을 열고 순서 없이 적어 내려갔다. 아홉 줄이 나왔다. 정리는 완벽했다. 흩어져 있던 게 항목이 됐고, 뭉쳐 있던 감정이 문장 단위로 쪼개졌고, 다 적고 나니 화도 가라앉았다. 목표한 그대로였다. 그 아홉 줄을 지금까지 그 사람에게 한 줄도 말하지 않았다. 한참 뒤에 그 목록을 다시 열어보고 나서야 이유를 알았다. 아홉 줄 전부, 주어가 그 사람이었다. 아홉 줄 여기에 아홉 줄을 그대로 옮길까 하다가 안 옮기기로 했다. 이유는 이 글 뒤쪽에서 저절로 나오는데, 먼저 말해두는 게 나을 것 같다. 저 아홉 줄은 당사자에게 못 할 말이었다. 못 할 말을 당사자 대신 블로그에 적으면 채널만 바뀌고 하는 짓은 똑같다. 그래놓고 뒤에서 "판단은 전달하는 게 아니라 갖고 있는 것"이라고 쓰면 그건 글이 아니라 알리바이다. 그리고 이 글에서 실제로 일하는 건 무슨 일이 있었느냐가 아니다. 그 문장들이 어떤 모양이었느냐다. 그래서 모양만 적는다. 아홉 줄에는 이런 공통점이 있었다. 전부 "~한 점"으로 끝났다 아홉 개 전부 주어가 그 사람이었다 날짜가 하나도 없었다. 언제 있었던 일인지 적힌 줄이 없다 요청이 하나도 없었다. 뭘 해달라는 문장이 아홉 개 중 0개다 내용은 크게 세 덩어리였다. 일을 처리하는 방식에 대한 것이 몇 줄, 태도로 보이는 것에 대한 것이 몇 줄, 그리고 앞으로도 이럴 것 같다는 내 예측이 한 줄. 굳이 하나만 예로 들면, 몇 년 전에 내가 제안해서 진행된 일이 나중에 그 사람 아이디어로 소개된 적이 있다. 목록에는 이게 "내가 제안한 걸 자기 생각이었다고 말한 점"으로 적혀 있었다. 아홉 줄이 전부 저 어미로 끝난다고 보면 된다. 이건 누구에게 전달하려고 쓴 문장이 아니다. 판결문에 가깝다. 아홉 줄 중에 상...

회사가 사주는 AI를 쓰다가 내 돈으로 또 샀다

AI에 쓰는 돈을 줄여보려고 했다. 회사가 ChatGPT를 지원하기 시작했을 때 제일 먼저 한 게 개인 구독 해지였다. 6개월 동안 매달 빠져나가던 20달러가 사라졌고, 카드 명세서에서 한 줄이 지워졌다. 계획대로였다. 오늘 그 줄이 돌아왔다. 옆에 한 줄이 더 붙은 채로. 14일이 6개월이 되던 과정 내가 AI를 처음 제대로 만진 건 ChatGPT였다. 무료 체험 14일로 시작했다. 그때는 이게 얼마짜리인지 감이 없어서, 체험 기간이라니까 그냥 눌렀다. 써보니까 너무 좋았다. 이건 좀 부끄러운 표현인데 달리 쓸 말이 없다. 그냥 좋았다. 14일이 끝나고 무료 플랜으로 하루를 버텼다. 딱 하루였다. 응답이 느려지고, 모델이 조용히 아래 등급으로 내려가고, 하루 질문 수 상한에 걸리는 걸 연달아 겪고 나니, 내가 지난 2주 동안 쓴 게 무료 플랜이 아니었다는 게 그제서야 몸으로 이해됐다. 다음 날 결제했다. 여기서 하나 짚고 갈 게 있다. 무료 체험은 제품이 얼마나 좋은지를 보여주려고 있는 게 아니다. 무료 플랜이 얼마나 불편한지를 보여주려고 있다. 이 구조가 꽤 정교하다. 만약 처음부터 무료 플랜만 줬다면 나는 "AI는 이 정도구나" 하고 판단을 끝냈을 거다. 비교 대상이 없으니 불편한 줄도 몰랐을 거다. 그런데 14일 동안 위쪽을 먼저 보여주고 나서 아래로 내리면, 같은 무료 플랜이 완전히 다른 물건이 된다. 없던 걸 파는 게 아니라 있던 걸 뺏는 방식 이다. 사람은 안 가진 걸 얻는 것보다 가진 걸 잃는 데 훨씬 민감하게 반응한다. 나는 그 설계에 정확히 걸렸고, 걸린 걸 알면서도 결제했다. 설계를 알아본다고 해서 안 걸리는 게 아니었다. 그게 잘 만든 제품이라는 뜻이기도 하다. 실제로 그 14일 동안 내 작업 방식이 바뀌어 있었고, 바뀐 방식을 되돌리는 게 20달러보다 비쌌다. 그렇게 6개월을 썼다. 회사가 사주기 시작하자 지운 줄 6개월쯤 지났을 때 회사에서 ChatGPT를 지원하기 시작했다. 업무 계정이 생겼고, ...

침해를 알아챈 뒤 공개까지, 한쪽은 7일이고 한쪽은 40개월이었다

오늘 뉴스타파 기사를 읽다가 2022년 10월 15일로 끌려갔다. 그날 오후 판교 SK C&C 데이터센터 지하 배터리실에서 불이 났다. 그때 나는 카카오 엔터로 이적한 후였고, 카카오는 한창 신규 사옥을 만들던 중이었다. 그 화재가 무엇을 세웠는지는 그 주에 한국에서 스마트폰을 쓴 사람이면 다 안다. 그런데 같은 화재가 다른 것도 하나 들췄다는 걸 그 기사에서 알았다. 그 데이터센터에는 SK이노베이션 E&S의 서버도 있었고 같이 탔다. 복구하려고 서버를 점검하던 중에, 그 회사는 자기네 사내망이 이미 털려 있었다는 사실을 발견한다. 해킹 시점은 9월 30일이었고 발견은 11월 4일이었다. 화재가 없었으면 언제 알았을지 모르는 침해였다. 여기까지는 그냥 운 나쁜 사고다. 내가 며칠 붙잡고 있었던 건 그 다음이다. 발견한 날부터 정부에 신고한 날까지 40개월이 걸렸다. 같은 기간에 나는 다른 침해 공개를 하나 읽고 있었다. 7월 30일에 Anthropic이 자사 모델이 실제 기업 세 곳의 프로덕션 인프라에 무단 접근했다고 발표했다. 사고 성격은 전혀 다르지만 세어야 하는 숫자는 같다. 언제 알았고, 언제 말했나. 그쪽은 7일이었다. 두 시간표를 같은 축에 올려놓고 보니 차이가 선명했다. 여기까지는 예상한 결론이었다. 예상 못 한 건 그 다음이었다. 같은 잣대를 내 레포에 대봤더니, 나는 애초에 시계를 시작할 수조차 없는 상태였다. 40개월이라는 숫자가 만들어진 과정 먼저 SK이노베이션 E&S 쪽 시간표를 날짜로 편다. 이 사건이 지금 문제가 되는 건 유출 규모 때문이 아니라 이 날짜들 때문이다. 시점 일어난 일 2022-09-30 1차 침해. 노후 서버의 보안 업데이트가 안 된 상태로 취약점이 방치돼 있었다 2022-10-15 SK C&C 판교 데이터센터 화재. 해당 서버도 소실 2022-11-03 사내 구성원이 네트워크 이상을 제보 2022-11-04 자체 보안점검으로 침해 인지....

keyv 웜은 npm install을 기다리지 않았다. 내 레포 6곳 훅 29개를 세어봤다

8월 4일 keyv가 털렸다는 글을 아침에 읽고, 내 일은 아니라고 판단했다. 이 블로그 레포는 파이썬 스크립트와 마크다운뿐이라 package.json 이 없다. 확인차 사이드 프로젝트 폴더 두 개를 훑어 lockfile을 찾았고 결과는 0개였다. keyv 도 flat-cache 도 file-entry-cache 도 설치돼 있지 않았다. 깨끗하다고 결론을 내리고 탭을 닫으려던 참에 문단 하나가 눈에 걸렸다… 같은 공격자가 keyv 레포에 커밋한 파일이 setup.mjs 하나가 아니었다. .claude/settings.json 과 .vscode/tasks.json 도 같이 들어갔다. 그 두 개는 npm install 을 안 해도 실행된다. 레포를 클론해서 에디터로 열거나 Claude Code 세션을 켜면 그때 돈다. 그러니까 lockfile을 뒤진 내 확인은 대상을 잘못 고른 확인이었다. 진짜 봐야 할 건 내가 이미 갖고 있는 훅이었고, 그건 세어보니 여섯 개 레포에 스물아홉 개였다. 30분 만에 열두 조직으로 번진 경로 먼저 사고 자체를 시간 순으로 본다. 숫자가 이 사건의 성격을 거의 다 설명한다. 2026년 8월 4일 09시 02분 37초(UTC), jaredwray 계정으로 keyv 저장소에 서명 없는 커밋이 하나 올라간다. setup.mjs 와 Math_Symbol.js 두 파일이 추가된다. 2분 뒤 09시 04분 30초에 두 번째 커밋이 올라가는데 이건 GitHub에서 verified 배지가 붙어 있다. 작성자가 github-actions[bot] 으로 스푸핑돼 있었다. 이 커밋이 앞서 말한 에디터 훅 파일들을 심는다. 09시 23분 50초에는 preinstall.test.ts 가 삭제된다. preinstall 동작을 검증하던 테스트를 먼저 치웠다. 그리고 09시 35분에 keyv@6.0.0 이 npm에 올라간다. 여기부터가 이 사고의 특이한 부분이다. 이 릴리스에는 유효한 SLSA provenance와 OIDC 증명이 붙어 있었다. ...

AI 거품이 터지면 내 개발 환경은 7배 느려진다. 내 커밋 92%가 거기 얹혀 있었다

빅테크가 데이터센터를 빚으로 짓는다는 얘기를 올해 초부터 계속 봤는데, 볼 때마다 내 일과 무슨 상관인지가 잘 안 붙었다. 주식 얘기로 읽히니까 넘겼다. 그런데 어제 숫자 하나를 보고 생각이 바뀌어서, 내가 쓰는 추론 비용과 그 부채가 어디서 만나는지 종이에 그려봤다. 만나는 자리가 네 개 나왔고 넷 다 내 워크플로우 안이었다. 여기까진 예상한 결론이었다… 같이 나온 게 내 의존도였다. 회사 레포에서 내 커밋을 월별로 세보니 3월에 49%였던 게 5월부터 92%에서 안 내려오고 있었다. 그 숫자를 나는 모르고 있었다. 장부 밖에 얼마가 서 있나 숫자부터 본다. 니케이가 7월 23일에 알파벳과 마이크로소프트, 아마존, 메타, 오라클 다섯 곳의 장부 밖 부채를 1조 6,500억 달러로 집계했다 . 4년 만에 여덟 배다. 이 숫자가 의미를 갖는 건 비교 대상이 있을 때다. 같은 다섯 회사가 장부에 올려둔 부채는 약 1조 3,500억 달러다. 장부 밖이 장부 안보다 크다. 메타 한 곳이 4,200억 달러를 장부 밖에 두고 있다. 어떻게 장부 밖에 두나. 데이터센터를 직접 짓지 않고 특수목적법인을 세운다. 그 법인이 채권을 발행하거나 사모 대출을 받아 돈을 빌리고, 빅테크는 그 법인과 장기 임대 계약을 맺어 컴퓨팅 용량만 받는다. 빌린 돈은 그 법인 장부에 잡히고 빅테크 장부에는 임대료만 남는다. 자본적 지출이 아니라 임차료로 기록되니까 감가상각 흐름도 달라진다. 메타가 텍사스에 짓는 1기가와트급 데이터센터가 이 방식이다. 125억 달러가 들어가는데 그 시설을 소유한 회사를 따로 세우고 사모 신용 펀드가 지분 대부분을 가져간다. 위험이 사라진 게 아니라 이동한다. 그 법인에 돈을 댄 채권 투자자와 보험사, 연기금이 위험을 든다. 빅테크는 계약상 일정 대가를 치르고 그 구조에서 빠져나올 선택권을 갖는 경우가 많다. 구조가 2008년 이전의 부채담보부증권과 겉모습이 닮았다는 지적이 여기서 나온다. 완전히 같지는 않다. 기초자산이 주택담보대출이 아니라 실제로 가...

키오스크 도입 후 고용은 11% 줄고 주당 근로시간은 2시간 늘었다. AI 에이전트도 같은 자리에서 깨진다

어제 마트 계산 줄에 서서 앞사람 손을 보고 있었다. 예순쯤 되어 보이는 분이었는데 폰을 단말기에 툭 대고 삼성페이로 결제하는 데 3초도 안 걸렸다. 나는 거기서부터 머릿속으로 세대 이야기를 만들기 시작했다. 이분들이 인터넷 보급기를 통과한 세대니까 디지털 전환이 상대적으로 수월했던 거라고. 60대와 70대가 리니지 오토를 돌리는 것도 같은 맥락이라고. 꽤 그럴듯하게 조립됐다. 그리고 그날 저녁 나는 통신사 ARS에서 상담원을 못 찾아 같은 메뉴를 세 바퀴 돌았고, 그 가설은 필요가 없어졌다… 세대로 설명하려던 문제가 세대와 무관한 자리에서 나를 붙잡은 거다. 내가 헤맨 건 학습 부족이 아니었다. 그 시스템에는 내가 가려는 곳으로 가는 길이 아예 없었다. 세대는 변수가 아니었다 먼저 내가 틀린 부분을 정확히 해두자. 2026년 기준 X세대는 1965년에서 1980년 사이에 태어난 46세부터 61세까지다. 마트에서 본 예순 남짓한 분은 X세대 끝단이 아니라 베이비붐 세대에 더 가깝다. 리니지 오토를 돌리는 60대와 70대도 대부분 붐 세대다. 이 구분을 뭉개면 아무 얘기도 못 한다. 그런데 구분을 정확히 해도 설명이 안 되는 게 남는다. 젊은 사람도 키오스크에서 막힌다. 나는 하루의 절반을 터미널에서 보내는 사람인데, 처음 보는 무인 주문기 앞에서 뒷사람 눈치를 본 적이 여러 번 있다. 화면 어디를 눌러야 다음으로 가는지 몰라서다. 세대가 진짜 원인이라면 이런 일은 안 생겨야 한다. 그래서 시니어 얘기를 원인 자리에서 빼기로 했다. 시니어는 이 시스템의 결함이 가장 먼저, 가장 크게 드러나는 자리다. 증상이 제일 선명한 곳이 원인은 아니다. 번호가 매번 바뀌는 ARS 유튜브에 돌아다니는 ARS 풍자 영상 의 대본을 하나 읽었다. 가상의 에어컨 회사 고객센터에 전화해서 상담원을 찾아가는 코미디 스케치인데, 웃다가 중간에 등이 서늘해졌다. 과장은 됐지만 과장의 방향이 정확했다. 대본에서 벌어지는 일을 설계 결함으로 옮기면 이렇게 된다. 메뉴 번호가 ...