레거시 Java 코드의 호출 흐름을 자동으로 분석하고 문서화하는 도구
SI 프로젝트에서 레거시 코드를 파악하는 것은 매우 시간이 많이 걸리는 작업입니다.
- API 하나의 흐름을 따라가려면 여러 파일을 오가며 수동으로 추적해야 합니다
- 분기가 많은 코드에서는 흐름이 헷갈립니다
- 인수인계 시 문서화된 자료가 부족합니다
Code Flow Tracer는 이 과정을 자동화합니다:
[요청 URL: /api/user/list]
↓
[UserController.getList()]
↓
[UserService.findAll()]
↓
[UserDAO.selectUserList]
↓
[SQL: SELECT * FROM TB_USER WHERE USE_YN = 'Y']
Controller → Service → DAO → SQL까지 호출 흐름을 트리 형태로 시각화합니다. 각 계층(Controller, Service, DAO)은 색상으로 구분되어 한눈에 파악할 수 있습니다.
출력 스타일 옵션 보기
| 스타일 | 설명 | 예시 |
|---|---|---|
normal |
기본 트리 구조 | └── [Controller] UserController.selectUserList() |
compact |
간결한 표시 | UserController → UserService → UserDAO |
detailed |
URL, HTTP 메서드 포함 | [GET] /user/list.do → UserController... |
# 스타일 지정
java -jar code-flow-tracer.jar -p /path/to/project -s detailedFlatLaf Darcula 다크 테마를 적용한 Desktop GUI입니다. CLI 없이 마우스로 프로젝트를 분석하고 결과를 확인할 수 있습니다.
GUI 주요 기능 보기
| 기능 | 설명 |
|---|---|
| 프로젝트 선택 | 폴더 브라우저로 분석할 프로젝트 선택 |
| 세션 복원 | 앱 재시작 시 마지막 분석 결과 자동 복원 |
| 최근 경로 기억 | 최근 사용한 프로젝트 경로 10개 저장 |
| URL 필터 | 특정 URL 패턴만 분석 (예: /api/user/*) |
| 출력 스타일 | Compact, Normal, Detailed 선택 |
| 결과 보기 | 콘솔 스타일 트리 출력, 텍스트 드래그 선택 가능 |
| 엑셀 저장 | 분석 결과를 엑셀 파일로 저장 |
| 폰트 크기 조절 | Ctrl + 마우스 휠로 9px~24px 조절 |
| 패널 리사이즈 | 좌측 설정 패널 드래그로 크기 조절 |
분석 결과를 엑셀 파일로 내보내 문서화하거나 인수인계 자료로 활용할 수 있습니다. 호출 흐름 시트와 SQL 목록 시트로 구성됩니다.
| 기능 | 설명 | 상태 |
|---|---|---|
| 호출 흐름 추적 | Controller → Service → DAO → SQL | ✅ 완료 |
| iBatis/MyBatis 파싱 | XML SQL 매퍼에서 쿼리 추출 | ✅ 완료 |
| 콘솔 출력 | 트리 형태 + ANSI 색상 지원 | ✅ 완료 |
| 엑셀 출력 | 호출 흐름 + SQL 목록 시트 | ✅ 완료 |
| Desktop GUI | Swing 기반, FlatLaf 다크 테마 | ✅ 완료 |
| 세션 영속성 | 앱 재시작 시 마지막 분석 결과 복원 | ✅ 완료 |
| Windows 설치 파일 | JRE 번들 포함, Java 설치 불필요 | ✅ 완료 |
| 전자정부프레임워크 | 레거시 SI 환경 특화 지원 | ✅ 지원 |
Windows 사용자는 설치 파일을 다운로드하여 실행하면 됩니다. Java 설치가 필요 없습니다.
CFT-1.0.0.exe (약 77MB, JRE 17 번들 포함)
설치 후 바탕화면 또는 시작 메뉴에서 CFT 실행
- Java 17 이상
./gradlew shadowJar# 전체 프로젝트 분석 (콘솔 출력)
java -jar build/libs/code-flow-tracer.jar -p /path/to/project
# 특정 URL만 분석
java -jar build/libs/code-flow-tracer.jar -p /path/to/project -u "/api/user/*"
# 출력 스타일 지정
java -jar build/libs/code-flow-tracer.jar -p /path/to/project -s detailed
# 엑셀로 출력
java -jar build/libs/code-flow-tracer.jar -p /path/to/project --excel -o result.xlsxCLI 옵션 전체 보기
| 옵션 | 설명 |
|---|---|
-p, --path |
분석할 프로젝트 경로 (필수) |
-u, --url |
URL 패턴 필터 (예: /api/user/*) |
-s, --style |
출력 스타일: compact, normal, detailed (기본: normal) |
-o, --output |
결과 파일 저장 경로 (예: result.xlsx) |
-d, --output-dir |
엑셀 저장 디렉토리 (기본: output) |
--excel |
엑셀 파일로 출력 |
--no-color |
색상 출력 비활성화 |
# GUI 실행 (콘솔 창 없이, 권장)
javaw -jar build/libs/code-flow-tracer.jar --gui
# 또는 scripts/run.bat 더블클릭| 구분 | 기술 | 용도 |
|---|---|---|
| Language | Java 17+ | 모던 Java 문법 활용 |
| Build | Gradle 8.5 | 의존성 관리, Shadow JAR |
| 파싱 | JavaParser | Java 소스 AST 분석 |
| XML | JDOM2 | iBatis/MyBatis XML 파싱 |
| Excel | Apache POI | 엑셀 출력 |
| JSON | Gson | 세션 영속성 (JSON 직렬화) |
| CLI | Picocli | 명령줄 인터페이스 |
| GUI | Swing + FlatLaf | Desktop GUI (다크 테마) |
자세한 내용은 DESIGN.md 참고
code-flow-tracer/
├── CLAUDE.md # 프로젝트 규칙 (AI 어시스턴트용)
├── README.md # 이 문서
├── VERSION.md # 버전 히스토리
├── build.gradle
├── installer-resources/ # jpackage 커스텀 리소스
├── docs/ # 문서
│ ├── PROJECT_PLAN.md # 프로젝트 기획 (러너스하이)
│ ├── DESIGN.md # 전체 설계
│ ├── USAGE.md # 사용법
│ ├── TODO.md # 할 일 목록
│ ├── DEV_LOG.md # 개발 일지
│ └── ISSUES.md # 문제 해결 기록
├── scripts/ # 실행 스크립트
│ ├── run.bat # GUI 모드 실행
│ └── analyze.bat # CLI 모드 실행
├── src/
│ ├── main/java/com/codeflow/
│ │ ├── Main.java # CLI 엔트리포인트
│ │ ├── parser/ # 소스 코드 파싱 ✅
│ │ ├── analyzer/ # 흐름 분석 ✅
│ │ ├── output/ # 출력 (콘솔 ✅, 엑셀 ✅)
│ │ ├── session/ # 세션 영속성 ✅
│ │ └── ui/ # Swing GUI ✅
│ └── test/java/
└── samples/ # 테스트용 샘플 코드
| 문서 | 설명 |
|---|---|
| PROJECT_PLAN.md | 프로젝트 기획, 러너스하이 계획 |
| DESIGN.md | 전체 설계, 기술 선택 근거 |
| USAGE.md | 상세 사용법 |
| TODO.md | 할 일 목록 |
| DEV_LOG.md | 개발 일지 |
| ISSUES.md | 문제 해결 기록 |
이 프로젝트는 토스 러너스하이 2기 참여를 위해 개발되었습니다.
4년간의 공공 SI/SM 경험에서 느낀 Pain Point:
- 레거시 코드 흐름 파악의 어려움
- 분기가 많으면 헷갈림
- API 호출부터 관련 소스 찾기가 번거로움
- 인수인계 문서화의 어려움
이 도구는 다음 프로젝트에 투입될 때 바로 사용할 수 있도록 만들었습니다.
"IntelliJ에 이미 Call Hierarchy 기능이 있지 않나요?" → 맞습니다. 하지만 목적이 다릅니다.
| 구분 | IntelliJ Call Hierarchy | Code Flow Tracer |
|---|---|---|
| 탐색 방식 | 메서드 하나씩 수동 클릭 | URL 패턴으로 전체 흐름 자동 |
| 인터페이스→구현체 | Ctrl+Alt+B로 수동 이동 | 자동 매핑 |
| URL→Controller | 직접 연결 안 됨 | /api/user/* → Controller 자동 |
| DAO→SQL | XML 파일 수동 검색 | iBatis/MyBatis 자동 연결 |
| 결과 출력 | 화면에서만 확인 | 엑셀 문서화 |
| 일괄 분석 | ❌ 하나씩만 | ✅ 프로젝트 전체 |
| 폐쇄망 | IDE 설치 필요 | JAR 하나로 실행 |
핵심 차이:
- IntelliJ = 개발 중 탐색 도구 (한 메서드씩 수동)
- Code Flow Tracer = 분석/문서화 자동화 (전체 API 일괄)
| 도구 | 특징 | Code Flow Tracer와 차이 |
|---|---|---|
| java-callgraph | 정적 콜그래프 생성 | 범용 콜그래프, 웹 계층 흐름 없음 |
| Sourcetrail | 코드 시각화 (2021 중단) | 범용 시각화, SQL 연동 없음 |
| JArchitect | 코드 품질 분석 (상용) | 메트릭 중심, 흐름 추적 아님 |
| SonarQube | 코드 품질/보안 | 품질 분석, 호출 흐름 없음 |
| Understand | 정적 분석 (상용) | 범용 분석, 웹 계층 특화 아님 |
| Eclipse CallGraph | Eclipse 플러그인 | Eclipse 전용, 문서화 없음 |
Code Flow Tracer만의 특징:
- ✅ 웹 애플리케이션 특화: URL → Controller → Service → DAO → SQL 전체 흐름
- ✅ iBatis/MyBatis 연동: DAO에서 SQL 쿼리까지 추적
- ✅ 문서화 출력: 엑셀로 인수인계 자료 생성
- ✅ 전자정부프레임워크 최적화: 국내 SI 환경 특화
- ✅ 폐쇄망 지원: 단일 JAR, 외부 의존성 없음
- 전자정부프레임워크
- Spring MVC / Spring Boot
- 일반 Java 프로젝트
Java 1.4 ~ 21 모두 지원 (도구 실행은 Java 17+ 필요)
- iBatis (sqlMap XML)
- MyBatis (mapper XML)


