Skip to content

Repomix의 처리 흐름을 상징하는 이미지

Repomix의 결과물은 단순한 텍스트 뭉치가 아닙니다. AI가 저장소를 읽을 때 "무엇을 먼저 보고, 어떻게 판단하는가"라는 흐름을 고려해 설계된 구조물입니다. 이 구조를 이해하면 어떤 옵션을 사용해야 토큰을 아끼고 정확도를 높일 수 있는지 알 수 있습니다.

처리 파이프라인 다섯 단계 ​

Repomix가 실행되면 다음과 같은 순서로 파일을 처리합니다.

순서단계주요 결정 사항
1파일 검색include 패턴과 ignore 규칙(.gitignore, .repomixignore 등)을 적용해 대상 파일을 선별합니다.
2내용 수집파일 본문과 크기를 읽습니다. 설정된 최대 파일 크기(input.maxFileSize, 기본 50MB)를 넘는 파일은 제외됩니다.
3전처리외부 명령(input.processors)을 통한 변환, 주석 및 빈 줄 제거, Tree-sitter 기반 코드 압축을 적용합니다.
4보안 검사Secretlint를 사용해 API 키, 토큰, 비밀번호 같은 민감 정보가 포함된 파일을 찾아냅니다.
5토큰 계산 및 출력인코더로 토큰 수를 세고, 선택한 포맷(XML, JSON 등)에 맞춰 네 가지 블록으로 조립해 저장합니다.

여기서 중요한 점은 전처리(3단계)가 보안 검사(4단계)보다 먼저 일어난다는 것입니다. 즉, 주석을 제거하거나 코드를 압축한 뒤의 최종 내용을 바탕으로 보안 검사를 수행하므로, 전처리 과정에서 의도치 않게 생성된 민감 정보까지 잡아낼 수 있습니다.

출력 파일을 이루는 네 블록 ​

가장 권장되는 XML 포맷을 기준으로, 결과 파일은 크게 네 개의 블록으로 구성됩니다.

xml
<!-- 파일 상단: AI를 위한 기본 안내문 -->

<file_summary>
(전체 규모 및 메타데이터)
</file_summary>

<directory_structure>
src/
  index.ts
  utils/
    helper.ts
</directory_structure>

<files>
<file path="src/index.ts">
// 실제 파일 내용
</file>
</files>

<git_logs>
2025-08-20 00:47:19 +0900|feat(cli): Add --include-logs option for git commit history
README.md
src/cli/cliRun.ts
</git_logs>

각 블록은 옵션을 통해 켜고 끌 수 있습니다. (--no-file-summary, --no-directory-structure, --no-files 등) 또한 사용자 정의 헤더(output.headerText)나 별도의 지침 파일(output.instructionFilePath)을 통해 AI에게 특별한 가이드라인을 제공하는 <instruction> 블록을 추가할 수 있습니다.

파일 요약 블록: 규모를 먼저 파악한다 ​

<file_summary> 블록에는 총 파일 개수, 전체 문자 수, 토큰 수, 그리고 가장 큰 파일 목록이 담깁니다. 이는 AI에게 "지금부터 읽을 데이터의 규모와 복잡도"를 먼저 알려주어, AI가 더 효율적인 추론 전략을 세우도록 돕는 역할을 합니다.

토큰 계산은 기본적으로 o200k_base(GPT-4o 계열) 인코더를 사용하며, 필요에 따라 cl100k_base 등으로 변경할 수 있습니다. 이 수치는 절대적인 값이라기보다, 사용 중인 AI 모델의 컨텍스트 한도 내에 들어오는지를 가늠하는 척도로 활용하세요.

디렉터리 구조 블록과 바이너리 파일 ​

<directory_structure>는 프로젝트의 전체 트리를 보여줍니다. 이때 바이너리 파일의 처리 방식에 주목해야 합니다.

  • 본문 제외: 이미지, PDF, 컴파일된 바이너리, 압축 파일 등은 텍스트 기반 출력을 유지하고 AI 처리 효율을 높이기 위해 내용을 포함하지 않습니다.
  • 경로 유지: 본문은 제외되지만, 파일의 존재 여부(경로)는 트리 목록에 표시됩니다. AI는 logo.png나 app.jar가 프로젝트에 존재한다는 사실은 알 수 있지만, 그 내부 바이트 데이터는 읽지 못합니다.

또한, --include 옵션으로 특정 파일만 좁게 선택했더라도 output.includeFullDirectoryStructure 옵션을 켜면 전체 디렉터리 구조를 그대로 보여줄 수 있습니다. 이는 AI가 선택된 파일들이 전체 구조 속에서 어디에 위치하는지 파악하게 하여 분석 정확도를 높여줍니다.

파일 내용 블록과 경로 표기 ​

<files> 블록은 실제 파일 경로와 본문이 쌍을 이루어 나열되는 핵심 구간입니다.

설정 항목설명
filePathStyle경로 표기 방식 결정. target-relative(기본)는 지정한 루트 기준, cwd-relative는 현재 작업 디렉터리 기준으로 표기합니다.
showLineNumbers각 줄에 번호를 부여합니다. AI가 "N행의 코드를 수정하라"고 구체적으로 지칭하게 만들 때 매우 유용합니다.
parsableStyle특수문자를 이스케이프 처리하여 포맷 파손을 막습니다. 안정성은 높아지지만 토큰 사용량이 약간 늘어납니다.
토큰 절감 옵션removeComments(주석 제거), removeEmptyLines(빈 줄 제거) 등을 통해 컨텍스트 비용을 줄일 수 있습니다.

깃 정보: 정렬, diff, 커밋 로그 ​

Repomix는 단순히 파일을 합치는 것을 넘어 Git의 맥락을 이해하는 도구입니다.

  • 변경 기반 정렬 (sortByChanges): 변경 횟수가 많은 파일일수록 아래쪽에 배치하여, AI가 가장 최근까지 활발하게 수정된 코드를 나중에(더 가깝게) 읽도록 유도합니다.
  • 변경 사항 포함 (includeDiffs): 현재 작업 트리와 스테이징 영역의 변경 내용을 별도 블록으로 추가합니다. "지금 무엇을 수정 중인가"를 AI에게 알리는 가장 확실한 방법입니다.
  • 커밋 로그 포함 (includeLogs): 최근 커밋 메시지와 변경 파일 목록을 추가하여, 개발의 흐름과 현재의 초점을 전달합니다.

이런 정보들이 결합되면 AI는 단순한 코드 분석을 넘어, "이 개발자가 최근에 어떤 고민을 하며 코드를 고쳐왔는가"라는 동적인 컨텍스트까지 파악할 수 있게 됩니다.

내용 없이 구조만 미리 보는 방법 ​

저장소가 너무 커서 무엇을 포함할지 결정하기 어렵다면, 본문을 제외하고 구조만 먼저 확인해 보세요.

bash
# 파일 내용 없이 요약과 트리만 출력
repomix --no-files

# 디렉터리별 토큰 사용량 분포 확인
repomix --token-count-tree
repomix --token-count-tree 1000   # 1000토큰 이상의 폴더만 표시

--token-count-tree를 통해 토큰이 집중된 지점을 찾고 $\rightarrow$ --include와 --ignore로 대상을 좁히며 $\rightarrow$ 필요 시 압축이나 분할 옵션을 적용하는 것이 가장 효율적인 워크플로입니다.

이제 동작 원리를 이해했으니, 다음 편에서는 실제로 설치해서 첫 결과물을 만들어 보겠습니다.

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