컨텍스트가 무엇인가
먼저 용어를 풀어야 합니다. 프롬프트는 지금 내가 친 한 줄입니다. 컨텍스트는 그 한 줄이 모델에 도착할 때 함께 실려 가는 전부입니다.
여기에는 시스템 프롬프트, CLAUDE.md 같은 지침 파일, 스킬, 지금까지 주고받은 대화 전체, 그리고 툴이 돌려준 결과가 다 들어갑니다. 내가 친 프롬프트는 그 묶음의 맨 마지막 줄일 뿐입니다.
그래서 대화가 길어질수록 컨텍스트는 자랍니다. 한 번 들어간 것은 대화가 끝날 때까지 계속 따라다닙니다. 로그 500줄을 붙여 넣었다면 그 500줄이 다음 질문에도, 그다음 질문에도 함께 실려 갑니다.
요즘 모델들이 100만 토큰 창을 내세우면서 이걸 신경 안 써도 된다는 인상이 생겼습니다. 이 안티패턴이 겨냥하는 게 정확히 그 인상입니다.
왜 아껴야 하나 — 이유가 둘인데 두 번째가 더 중요하다
첫 번째 이유는 단순합니다. 컨텍스트는 토큰이고 토큰은 돈입니다. 대화가 길어질수록 매 요청마다 같은 내용을 다시 실어 보내니 비용이 누적됩니다.
두 번째 이유가 더 중요합니다. 컨텍스트가 많을수록 모델이 헷갈려서 답이 부정확해집니다.
이건 직관과 반대로 들립니다. 정보를 더 주면 더 잘 답할 것 같으니까요. 그런데 실제로는 관련 없는 정보가 관련 있는 정보의 상대적 무게를 깎습니다. 앞에서 CLAUDE.md를 한 파일에 몰면 안 되는 이유와 같은 자리입니다.
그래서 결론이 이렇게 됩니다. 100만 토큰 창이 열렸으니 다 넣어도 되겠다고 생각하기 쉬운데, 반대입니다. 넣을 것을 제한해야 정확해집니다.
처방 하나 — 긴 출력은 별도 컨텍스트로 떼어낸다
출력이 많은 작업이 있습니다. 로그를 전부 뒤져 오류를 찾는 일, 큰 파일을 훑어 특정 패턴을 세는 일 같은 것들입니다.
이런 일을 메인 대화에서 하면 로그 수천 줄이 그대로 컨텍스트에 쌓입니다. 정작 필요한 건 「오류가 세 종류 있고 각각 이런 내용이다」는 요약 다섯 줄인데 말입니다.
그래서 이 작업을 별도 컨텍스트로 떼어냅니다. 발표에서는 포크(fork)라고 불렀습니다. 별도의 갈래에서 에이전트가 로그를 다 읽고 생각하고 정리한 다음, 메인으로는 요약만 돌려보냅니다. 장황한 출력은 그 갈래 안에만 남고 사라집니다.
Claude Code에서는 이걸 서브에이전트로 합니다. 앞 편에서 에이전트를 쪼개라고 한 것과 같은 도구인데, 이번에는 툴 개수가 아니라 출력량이 이유입니다.
코드를 안 쓰는 사람에게도 같은 방법이 있습니다. 자료를 잔뜩 붙여 넣어야 하는 작업은 지금 대화에서 하지 말고 새 대화를 열어서 하십시오. 거기서 요약을 받아 원래 대화로 가져옵니다.
처방 둘 — 커지면 압축한다
떼어내도 대화 자체는 계속 자랍니다. 그래서 두 번째 처방이 압축입니다.
발표 코드는 매 루프마다 토큰 수를 세다가 기준선을 넘으면 압축을 겁니다. 거기 적힌 기준선이 15만 토큰이었습니다. 압축은 지금까지의 대화를 요약으로 갈아 끼우는 일입니다. 세부는 버리고 결정과 상태만 남깁니다.
Claude Code에는 이게 /compact 명령으로 들어 있습니다. 자동으로도 걸리지만, 대화가 헤매기 시작한다고 느끼면 직접 쳐도 됩니다.
코드를 안 쓴다면 같은 일을 손으로 합니다. 「지금까지 정한 것을 다섯 줄로 요약해 줘」라고 한 다음, 그 다섯 줄을 새 대화 첫머리에 붙입니다. 붙잡고 있느라 힘을 쓰지 말고 적어서 넘기는 것입니다.
덧붙는 것 — CI에서는 대화형으로 부르지 않는다
마지막 시나리오가 파이프라인 안에서 돌릴 때입니다. 여기 안티패턴이 좀 웃깁니다.
에이전트를 대화용으로 부르면 「이걸 해도 될까요?」 하고 권한을 묻는 자리에서 멈춰 섭니다. 그런데 파이프라인에는 대답할 사람이 없습니다. 아무도 대답하지 않을 답을 기다리며 서 있게 됩니다.
그래서 비대화식 옵션으로 돌리고, 출력을 JSON으로 받아야 파이프라인이 읽을 수 있습니다. Claude Code라면 `claude -p`가 그 자리입니다.
여기에 하나 더 붙는 것이 Batch API입니다. 프롬프트와 작업을 배치로 묶어 넘기면 토큰 비용이 절반이고, 결과는 24시간 안에 옵니다. 지금 당장 답이 필요하지 않은 일이라면 그쪽이 맞습니다. 밤에 넘겨 두고 아침에 받는 식입니다.
다섯 편을 관통한 것 하나
여기까지가 Anthropic 인증 시험이 꼽은 다섯 개의 안티패턴이었습니다.
응답을 바로 쓰지 말고 왜 멈췄는지부터 본다. 규칙을 한 파일에 몰지 말고 적용되는 자리에 둔다. 툴을 다 붙이지 말고 에이전트를 쪼갠다. 긴 출력은 따로 떼어내고 커지면 압축한다. CI에서는 대화형으로 부르지 않는다.
다섯을 관통하는 것이 하나입니다. 전부 덜 주는 쪽입니다. 툴도, 컨텍스트도, 정보도요.
에이전트를 잘 다룬다는 게 더 많이 붙이는 능력처럼 이야기되는데, 이 시험이 정답으로 고른 건 반대쪽이었습니다. 무엇을 안 줄지 아는 쪽입니다.
오늘 해 볼 것 하나
지금 열려 있는 AI 대화 중 가장 긴 것을 떠올려 보십시오. 답이 처음보다 흐려졌다면 컨텍스트가 이미 방해가 되고 있는 것입니다.
그 대화에 「지금까지 정한 것을 다섯 줄로 요약해 줘」라고 쳐 보십시오. 그 다섯 줄을 복사해 새 대화 첫머리에 붙이고 거기서 이어 갑니다. 처방 둘을 손으로 하는 것입니다.
그리고 다음에 로그나 긴 자료를 붙여 넣어야 할 일이 생기면, 지금 대화 말고 새 창을 여십시오. 그게 처방 하나입니다.
