한국 시간 9월 11일 새벽 1시, 클로드를 개발한 앤트로픽(Anthropic)에서 공식적인 웨비나를 진행했습니다. 이메일로 웨비나 초대가 와있길래 신청해두었다가 보았는데, 대략적으로 알고 있던 내용들을 상세하게 설명으로 들을 수 있어서 좋았어요.
전체적으로 ’토큰’에 대해 이야기한 세션이었습니다. 우리가 돈을 내고 사용하는 토큰이 어디에 사용되고있고, 내가 통제할 수 있는 건 뭔지, 어떤 것들을 제한해야하는지 이런 내용이 포함되어있었는데, 들으면서 정리한 내용을 기록으로 남겨봅니다.
우선, 발표를 시작하는 방식에 웨비나의 핵심이 담겨있었습니다. 클로드를 ’사용하는 방식’은 새로운 기능이 업데이트되면 낡아버리기 때문에 근본적인 구조를 이용해야 각자의 환경에 적용 가능한 해답을 찾을 수 있다는 것. 구독제든 API든, 작업 자체에 값을 치르는 구조로 되어있기 때문에 토큰을 얼마나 효율적으로 쓰는지가 엔지니어, 사용자들이 집중해야할 기술이라고 강조했어요
프롬프트와 함께 ’입력’되는 것
우리가 프롬프트를 쓰고 엔터를 누를 때, 그 메세지만 모델로 전송되는게 아닙니다. 세션을 시작할 때 기본적으로 올라가는 것들이 프롬프트와 함께 묶여서 전송되는거에요. 클로드가 기본적으로 설정해둔 지시문, 시스템 프롬프트, 내장도구가 설정해둔 정의, 디렉토리 정보, 깃 상태 등이 함께 들어가는 거죠. 여기에 CLAUDE.md와 등록해둔 스킬, MCP 서버의 이름과 설명 등이 더해집니다. 코덱스를 사용한다면 AGENT.md가 CLAUDE.md 대신 들어갈 테고요.
클로드는 우리에게 답을 주기 전에, 파일을 읽고 도구 호출을 반환하기도 하고 파일을 읽고 전체를 통째로 다시 돌려보내기도 합니다. 이런 과정이 우리가 답을 요청할 때마다 반복되는데, 점점 반환되는 메세지의 양이 커지는거죠.
여기서 우리가 사용하는 토큰이 셋으로 나뉘지는데, 입력은 우리가 입력한 것을 포함해 클로드 코드가 자동으로 넣는 전부를 의미합니다. 출력은 최종적으로 클로드가 만들어낸 것들 전부를 의미하고요. 단순히 우리가 화면에서 보는 답변, 요약 뿐만 아니라 도구를 호출하거나 클로드가 사고하는 과정 모두가 출력입니다. 입력은 여러가지로 나뉘져 있더라도 한 번에 묶어서 처리할 수 있기 때문에 토큰 가격이 비교적 싸게 설정되어져 있습니다. 그런데 출력은 하나의 토큰을 만들어 낼 때마다 앞 내용 전체를 다시 훑어본 다음 작성하기 때문에 가장 비싸게 되어있어요.
입력과 출력 외에 캐시라는 개념이 등장하는데, 요청의 앞 부분이 세션에서 이미 입력된 내용과 동일하면 서버가 계산해 둔 상태를 그대로 다시 쓰기 때문에 값이 저렴하게 설정되어 있습니다.
이 세 가지 종류의 토큰 사용량은 클로드 코드 화면(앱이나 터미널)에서 /usage를 입력하면 확인할 수 있어요. 프롬프트 캐시 항목이 ‘입력’ 중 캐시에서 사용된 몫을 보여주고, 정상적으로 잘 진행되는 세션이라면 캐시값이 높게 나타납니다.
내가 줄일 수 있는 네 가지
- 모델을 분리해서 사용하기
지금 나온 Fable, Opus, Sonnet, Haiku는 각각 제공하는 결과물의 수준이 다르게 되어있습니다. 아주 간단한 작업을 하는데 굳이 Fable을 사용할 필요가 없다는 말이죠. 단순히 영어문장을 작문해달라고 하거나 내가 쓴 영어 문장을 첨삭해달라고 할 때, 간단한 엑셀 파일을 정리할 때 등 실생활에서 가볍게 사용하는 경우가 많이 있을텐데요. 여러 파일들에서 정보를 뽑아내 조합하고 새로운 수식을 만들어 내야할 때, 전체적인 코드 검수나 새로운 코딩 작업을 할 때가 아니면 굳이 최상위 모델을 사용할 필요가 없습니다.
발표자는 이 차이를 사람에 빗대서 설명했는데, Sonnet은 아주 좋은 제너럴리스트, Opus는 전문가, Fable은 다른 누구도 본 적 없는 문제까지 다뤄본 스페셜리스트, Haiku는 빠른 조수라고 했어요. 원인을 짐작하기 어려운 미묘한 버그이거나 처음 보는 영역이라면 토큰 값을 조금 더 치르더라도 Opus를 쓰는 편이 결과적으로 낫다는 거죠.
모델은 입력이든 출력이든 모든 토큰에 적용되기 때문에, 아래에서 이야기할 나머지 항목 전부에 그대로 곱해집니다. 그래서 네 가지 중에서 이게 가장 효과가 큽니다.
- 맥락을 제대로 주기
프롬프트에 파일 이름만 적어두면 클로드가 그 파일을 읽기 위해 도구를 호출하는 왕복이 한 번 더 생기는데, 파일 자체를 프롬프트에 붙여서 보내면 그 왕복이 아예 없어집니다. 파일 하나만 놓고 보면 작은 차이지만, 긴 세션에서는 이런 왕복이 쌓이는 거죠.
새 세션에서 /context를 입력하면 지금 무엇이 얼마나 올라가 있는지 항목별 토큰 수까지 그대로 보입니다. 본격적으로 작업을 시작하기 전에 한 번 확인해보면 불필요하게 들어가 있는 것이 있는지 알 수 있어요.
CLAUDE.md에는 모든 작업에 공통으로 해당하는 것만 남겨두시면 됩니다. 특정 작업에서만 쓰는 지시는 스킬로 옮기는 편이 나은데, 스킬은 이름과 설명만 기본으로 실려 있다가 클로드가 필요하다고 판단할 때만 본문이 올라오기 때문입니다.
모델이 좋아지면서 몇 달 전에는 꼭 적어야 했던 지시가 지금은 필요 없어진 경우도 많다고 합니다. 이런 지시문을 훑어서 지울 것과 다듬을 것을 제안해주는 점검용 스킬도 따로 있다고 했어요.
MCP 서버도 그냥 놀고 있다고 해서 공짜는 아니기 때문에, 이번 세션에서 쓰지 않는 것은 꺼두시면 됩니다.
명령을 실행한 결과도 파일과 똑같이 대화에 쌓입니다. 아주 큰 출력은 클로드 코드가 알아서 파일로 빼주는데, 문제는 그 기준에 못 미치는 것들이에요. 통과한 테스트 400개를 한 줄씩 찍는 출력이 딱 그런 경우라서, 그 400줄이 이후의 모든 요청에 계속 따라다닙니다. 매일 쓰는 명령을 조용한 옵션까지 붙여서 CLAUDE.md에 적어두면 이런 일을 미리 막을 수 있습니다.
- effort를 기본값으로 두기
effort는 클로드에게 작업을 끝났다고 판단하기 전까지 얼마나 철저해야 하는지를 알려주는 값입니다.
신경 쓰이는 작업일수록 최고 수준으로 올리고 싶어지지만 늘 필요하지는 않아요. effort가 높으면 출력이 늘어나고, 늘어난 출력이 다음 요청에서는 입력이 되기 때문에 양쪽이 같이 불어납니다.
큰 모델에서는 중간 수준으로도 충분한 경우가 많고, 낮은 수준이 이전 세대 모델의 높은 수준만큼 나오기도 한다고 합니다.
결과가 마음에 들지 않을 때 스스로에게 물어볼 것은 하나예요. 몰라서 틀린 건지, 덜 해서 틀린 건지. 몰라서 틀렸다면 모델을 올리고, 파일을 건너뛰거나 테스트를 돌리지 않아서 틀렸다면 effort를 올리시면 됩니다.
- 세션을 짧게 끊어 쓰기
클로드는 맥락에 더하기만 하고 빼지는 않기 때문에, 긴 세션에서는 지금까지 쌓인 전부가 매 요청마다 따라다닙니다.
발표에서 보여준 비교가 분명했는데, 작업 사이마다 대화를 비운 쪽은 매번 작게 시작한 반면 한 세션으로 계속 이어간 쪽은 첫 작업을 끝까지 안고 가면서 토큰을 두 배로 썼습니다.
새 작업을 시작할 때는 /clear로 대화를 비우고, 같은 작업이라도 앞부분이 끝났으면 /compact로 요약해서 줄이시면 됩니다. 요약할 때 무엇을 남길지 알려줄 수도 있고, 최근 몇 턴만 잘라내는 /rewind도 있어요.
캐시를 깨지 않는 법
서버는 요청의 맨 첫 토큰부터 지난번과 똑같이 이어지는 구간까지만 다시 씁니다. 중간에 한 토큰이라도 달라지면 그 뒤는 전부 새로운 것으로 보고 정가로 계산하는 거죠.
그 앞부분에 들어 있는 것이 도구 정의와 시스템 프롬프트, CLAUDE.md, 그리고 지금까지 쌓인 대화입니다.
모델을 도중에 바꾸면 캐시가 모델마다 따로 잡혀 있기 때문에 새 모델 입장에서는 다시 쓸 것이 하나도 없습니다. effort도 대부분의 모델에서 마찬가지인데, Fable 5.1만 예외라고 해요. 캐시가 아직 살아 있을 때 이 둘을 바꾸려고 하면 클로드 코드가 먼저 확인을 묻습니다.
반대로 도중에 바꿔도 괜찮은 것들이 있습니다. 파일을 고치거나 권한 모드를 바꾸는 일은 요청 자체를 건드리지 않기 때문이에요. CLAUDE.md는 세션을 시작할 때 한 번만 읽어들이기 때문에, 도중에 고쳐도 그 세션에는 반영되지 않고 다음 세션부터 적용됩니다.
캐시는 영원히 남아있지 않고, 요청을 보낼 때마다 타이머가 다시 시작됩니다. 현재 기준으로 플랜 사용량 안에서 쓸 때는 약 한 시간, 개발자용 키나 클라우드 제공사를 거칠 때는 약 오분이에요. 서브에이전트는 어느 쪽이든 오분이 기본값이고, 둘 다 설정으로 바꿀 수 있습니다.
다만 긴 창이 공짜는 아닙니다. 한 시간짜리 캐시에 토큰을 써 넣는 값이 오분짜리보다 비싸게 설정되어 있기 때문이에요. 그래서 자리를 뜨지 않고 꾸준히 이어서 작업하는 편이라면 짧은 창이 오히려 쌉니다.
실무에서 새겨둘 것은 세 가지였습니다. 모델과 effort는 세션을 시작할 때나 대화를 비운 직후에 정해둘 것. 도중에 모델을 바꿔야 한다면 요약을 먼저 해서 새 모델이 짧은 요약만 읽게 할 것. 그리고 그 요약은 캐시가 아직 따뜻할 때 미리 해둘 것.
자리를 뜨고 나서 돌아와 요약하면 대화 전체를 다시 정가로 읽게 됩니다. 어제 하던 세션을 오늘 다시 여는 경우도 마찬가지라서, 첫 메세지 한 번은 전부가 정가 입력으로 계산되는 거죠.
맥락을 지키는 또 하나의 수단이 서브에이전트입니다. 긴 로그나 저장소 전체를 뒤지는 일을 다른 맥락에서 하게 하고 결론만 돌려받는 방식인데, 그 작업 하나만 놓고 보면 총합이 더 나올 수도 있어요. 대신 메인 대화가 작게 유지되기 때문에 그 뒤의 모든 턴이 싸집니다.
발표자는 세션 마지막에 세 가지를 강조했습니다. 모델과 effort와 MCP를 세션 시작에 정하고 건드리지 말 것, 대화에 무엇을 넣을지 의식할 것, 세션을 한 작업에 붙들어 둘 것. 효율이란 토큰을 적게 쓰는 것이 아니라 쓰는 토큰이 내가 시킨 일로 가게 만드는 것이라는 말로 마무리했어요.