Skip to content

토큰을 줄여 가는 과정을 상징하는 이미지

"파일이 너무 커서 AI가 읽지 못해요"는 Repomix 사용자가 가장 흔히 겪는 문제입니다. 토큰을 줄이는 방법은 다양하지만, 무작정 옵션을 켜는 것은 위험합니다. 잘못하면 AI가 분석에 꼭 필요한 핵심 로직까지 지워버릴 수 있기 때문입니다.

가장 효율적인 전략은 "가장 비용이 적고 영향이 적은 방법부터 적용하는 것"입니다.

먼저 진단: 어디서 토큰이 새는가 ​

무작정 옵션을 적용하기 전에, 먼저 데이터의 분포를 확인하세요.

bash
repomix --token-count-tree
repomix --token-count-tree 1000   # 1000토큰 이상의 폴더만 표시

--token-count-tree를 실행하면 어떤 디렉터리나 파일이 토큰을 가장 많이 잡아먹고 있는지 한눈에 보입니다. 이 진단 결과가 있어야 --include로 좁힐지, --compress로 압축할지, 아니면 --split-output으로 나눌지 결정할 수 있습니다.

1단계 좁히기: 포함과 무시 필터 ​

가장 확실하고 부작용이 없는 방법입니다. 질문과 전혀 상관없는 파일은 애초에 제외하세요.

bash
# 1. 핵심 소스와 문서만 포함
repomix --include "src/**/*.ts,docs/**/*.md"

# 2. 테스트, 빌드 결과물, 커버리지 등 불필요한 파일 제거
repomix --ignore "**/*.test.ts,dist/**,coverage/**"

# 3. 스타일 시트와 로그까지 완전히 제거
repomix --ignore "**/*.css,**/*.test.ts,dist/**,coverage/**,*.log"

만약 전체 구조는 유지하되 내용만 빼고 싶다면 --no-files 옵션을 사용하여 요약과 트리 구조만 생성할 수 있습니다.

주의: 설정 파일 편에서 언급했듯, --include는 후보군을 좁히는 필터일 뿐입니다. 이미 무시 규칙(ignore)에 걸린 파일은 --include를 써도 제외됩니다. 강제로 넣고 싶다면 --no-gitignore나 --no-default-patterns를 함께 사용하세요.

2단계 덜어내기: 주석 제거 ​

--remove-comments 옵션은 지원하는 언어의 주석을 제거하여 순수 코드만 남깁니다.

bash
repomix --remove-comments
언어제거 대상
JS / TS / Java / C / C++//, /* */
Python#, """, '''
HTML<!-- -->
CSS/* */

판단 기준:

  • 제거 권장: 단순한 설명, 오래된 TODO, 중복된 주석이 너무 많아 토큰을 낭비할 때.
  • 유지 권장: API 계약, 복잡한 비즈니스 로직의 구현 근거, 중요한 경고 메시지가 담긴 주석일 때. 이를 지우면 AI가 "왜 이렇게 짰는지"를 이해하지 못해 잘못된 제안을 할 수 있습니다.

3단계 압축: Tree-sitter 코드 압축 ​

--compress 옵션은 Tree-sitter 파서를 사용하여 코드의 구조(시그니처)는 남기고 세부 구현부는 지웁니다.

남는 부분 (보존)사라지는 부분 (삭제)
함수 및 메서드 이름, 파라미터, 리턴 타입함수 내부의 구체적인 로직 구현부
인터페이스, 클래스 정의 및 프로퍼티루프, 조건문 내부의 세부 코드
import / export 문내부 변수 선언 및 계산 로직

결과 예시: 함수 몸체가 ⋮----와 같은 마커로 대체되어, 전체적인 API 구조와 인터페이스는 유지하면서 토큰 사용량을 약 70%까지 획기적으로 줄일 수 있습니다.

⚠️ 언제 사용하는가?

  • 적합한 경우: 전체적인 아키텍처 분석, 인터페이스 설계 공유, 상위 수준의 문서화, 패턴 파악.
  • 부적합한 경우: 라인 단위의 정밀한 버그 수정, 로직 최적화. 구현부가 사라지면 AI가 실제로 고쳐야 할 코드를 볼 수 없기 때문입니다.

4단계 차등 적용: 파일별 포함 수준 ​

전체 압축이 너무 과하다면, output.patterns 설정을 통해 파일마다 포함 수준을 다르게 지정하세요. (설정 파일 전용 옵션)

json5
{
  "output": {
    "compress": false, // 기본은 전체 내용 포함
    "patterns": [
      { "pattern": "docs/**/*", "compress": true }, // 문서는 압축
      { "pattern": "website/**/*", "directoryStructureOnly": true } // 웹사이트 폴더는 구조만 표시
    ]
  }
}

이 설정을 통해 "핵심 로직은 상세히, 주변부는 압축하거나 구조만" 보여주는 효율적인 컨텍스트 구성이 가능합니다.

5단계 정리: 빈 줄과 base64 처리 ​

마지막으로 세세한 부분에서 토큰을 쥐어짜는 단계입니다.

옵션효과비고
--remove-empty-lines불필요한 빈 줄 제거가독성은 약간 떨어지지만 토큰을 아낍니다.
--truncate-base64긴 base64 문자열을 절단이미지 데이터 등이 포함된 파일에서 매우 효과적입니다.
output.parsableStyle특수문자 이스케이프 처리주의: 이 옵션은 오히려 토큰 사용량을 증가시킵니다. 파싱 안정성을 위한 선택입니다.

최후의 수단: 분할과 예산 설정 ​

모든 최적화를 적용해도 모델의 컨텍스트 창을 넘는다면, 이제는 나누는 전략을 써야 합니다.

1. 출력 분할 (--split-output)

bash
repomix --split-output 1mb

결과물을 repomix-output.1.xml, repomix-output.2.xml 등으로 나눕니다. 이때 최상위 디렉터리 단위로 묶어서 분할하므로, 하나의 파일이 두 개로 찢어지는 일 없이 깔끔하게 나뉩니다. AI 서비스의 파일당 용량 제한을 극복하는 가장 좋은 방법입니다.

2. 토큰 예산 설정 (--token-budget)

bash
repomix --token-budget 80000

출력물이 지정한 토큰 수를 넘으면 실행을 실패(exit code)로 처리합니다. CI/CD 파이프라인에서 컨텍스트 오버플로로 인해 AI 응답이 잘리는 사고를 미리 방지하는 안전장치로 활용하세요.

상황별 최적 전략 선택표 ​

분석 목표추천 전략 순서비고
전체 아키텍처 분석진단 $\rightarrow$ --compress $\rightarrow$ 분할구조 파악이 우선이므로 압축이 매우 효율적
특정 버그 수정진단 $\rightarrow$ --include (범위 좁히기) $\rightarrow$ 주석 제거구현부의 정밀한 분석이 필요하므로 압축 금지
신규 멤버 온보딩진단 $\rightarrow$ output.patterns (핵심은 상세히, 나머지는 구조만)중요도에 따른 차등 제공이 효과적
CI/CD 자동화--token-budget $\rightarrow$ --token-count-tree안정적인 토큰 범위 유지 및 회귀 감시

이제 토큰 최적화까지 마스터하셨습니다. 다음 편에서는 가장 민감한 문제인 "보안 검사와 프라이버시"에 대해 알아보겠습니다.

오픈소스를 한국어로 읽고 배웁니다.