🐱 작자에 관하여

CodeGarden
JavaScript/TypeScript Code Visualizer
소개
CodeGarden은 JavaScript/TypeScript 소스 구조를 "별과 선"의 비주얼로 조망·분석하는 데스크톱 애플리케이션입니다. 함수나 블록을 노드로 그리며, 계층이나 호출 관계를 엣지로 표현합니다. 여러 표시 패턴과 비주얼 스타일을 전환하면서, 설계나 리팩터의 감각을 빠르게 찾을 수 있습니다.
빠른 시작
- 앱을 실행하고, 좌상단의 Open File을 클릭하거나 JavaScript/TypeScript 파일을 드래그&드롭합니다.
- 필요에 따라 Analyzer(Basic / CallGraph / MetricsExt / MultiLang / Category-Aware)와 Render Pattern을 선택합니다.
- 캔버스에서 드래그(이동)、휠(확대축소)、더블클릭(선택&코드 표시)을 사용해 탐색합니다.
화면 구성
사이드바
- Controls: Open File / Save JSON / Reset View / Analyzer / Render Pattern / Visual Style
- Summary: 파일 경로, 행 수, 함수 수, 최대 깊이
- Selection Summary: 선택 노드 그룹의 통계(행 수, cc, nest, score 합계, 최대 깊이 등)
- Documents: 각종 문서(XML 사양/표시 패턴 가이드)
- Language: 영어 / 일본어 / 중국어 / 독일어 / 힌디어 / 한국어 전환
- Layout Insights: 패턴이나 분석기를 바꿀 때 현재 상태(패턴/분석기/밀도)를 즉시 표시합니다.
- Layout Presets: Overview / CallGraph / Category 프리셋이 분석기·패턴·스타일·밀도를 한 번에 적용하며, 파일이 열려 있으면 자동으로 재분석합니다.
- Extended Metrics: 기술 부채와 코드 스멜 요약 카드 및 상세 목록이 Quality Report와 동일하게 싱크되어 문제 지점을 빠르게 파악할 수 있습니다.
- Call Graph 패널: CallGraph 데이터가 존재하면 최대 20개의 호출 관계(함수, 호출자, 행 번호)를 표 형식으로 제공합니다.
캔버스
- 흰색 별하늘 배경에 노드와 엣지가 그려집니다.
- 선택 중에는 라벨과 메타 정보(cc/nest/lines/score)가 표시됩니다.
- 선택 서브트리는 연하게 하이라이트되어 전체가 따라가기 쉬워집니다.
조작과 컨트롤
파일 조작
- Open File: 분석 대상 JS/TS 파일을 엽니다.
- Drag & Drop: 좌측 패널에 드래그&드롭해도 됩니다.
- Save JSON: 현재 분석 결과를 JSON으로 저장합니다.
뷰 조작
- Reset View: 카메라를 중앙·등배율로 리셋합니다.
- Esc: 선택 해제.더블클릭: 서브트리 선택&코드 표시.
분석과 그리기
- Analyzer:
- Basic: 기본 구조와 복잡도(cc/nest 등)
- CallGraph: 함수의 호출 관계와 의존성
- MetricsExt: 문, 분기, 루프 등의 상세 메트릭스
- MultiLang: 다언어 대응의 언어 고유 기능 검출
- Category-Aware: 카테고리를 의식한 스마트 분석
- Render Pattern: v1..v10의 배열 방법(후술).
- Visual Style: v1..v4의 색·형태·선의 표현(후술).
- Layout Insights: 패턴이나 분석기를 바꿀 때 현재 상태(패턴/분석기/밀도)를 즉시 표시합니다.
- Layout Presets: Overview / CallGraph / Category 프리셋이 분석기·패턴·스타일·밀도를 한 번에 적용하며, 파일이 열려 있으면 자동으로 재분석합니다.
- Extended Metrics: 기술 부채와 코드 스멜 요약 카드 및 상세 목록이 Quality Report와 동일하게 싱크되어 문제 지점을 빠르게 파악할 수 있습니다.
- Call Graph 패널: CallGraph 데이터가 존재하면 최대 20개의 호출 관계(함수, 호출자, 행 번호)를 표 형식으로 제공합니다.
표시 패턴 (v1..v13)
아래는 요점의 발췌입니다. 상세는 앱 내의 「Render Pattern Spec」을 참조하세요.
기본 패턴
고도 패턴
고도한 패턴
비주얼 스타일 (v1..v4)
개요
- v1: 베이스(냉색계).
- v2: Warm Sunset(난색+헤일로/선버스트).
- v3: High Contrast(노드 선명/엣지는 모노크롬의 네온 파선).
- v4: Pastel(수채화풍의 부드러운 표현).
범례
요약/선택 요약
요약 패널
- File: 분석 파일의 경로
- Lines: 총 행 수
- Functions: 함수 수
- Max depth: 트리의 최대 깊이
- Language: 검출된 프로그래밍 언어(JavaScript, TypeScript, Java, C++, Go, Rust, Python 등)
- Categories: 주요 카테고리의 통계 정보(상위 3 카테고리를 표시)
선택 요약
- Nodes / Blocks / Functions
- Total lines와 중복을 제외한 유니크 행 수
- Avg cc(사이클로매틱 복잡도의 평균), Avg nest(네스팅 깊이의 평균)
- Score sum(가시성을 위한 합성 지표), Max depth(최대 깊이)
- Category breakdown(카테고리별의 상세 통계)
- 중복 제거 알고리즘: 연속하는 행 범위를 통합하여 정확한 유니크 행 수를 계산
분석 데이터 XML(요약)
앱 내부에서는 분석 결과를 통일 포맷(XML v2)으로 변환하고 그리기 시에 재구성합니다.
summary
totalLines
,filePath
,functionCount
,maxDepth
,deadCodeCount
node
- 속성:
id
,kind
,category
,name
- loc:
start
,end
,lines
- complexity:
cyclomatic
,nestingDepth
- layout:
depth
,angle
,radius
- metrics(확장): 문 수, 분기 수, 루프 수, 호출 수, return 문 수, 예외 처리 수, switch 문 수 등
- language: 검출된 프로그래밍 언어
- category: 함수, 클래스, 인터페이스, 트레이트, 구조체, 열거형, 블록, 제어 플로우, 데이터 구조, 매크로, 템플릿, 데코레이터, 람다, 코루틴, 테스트 등
edge
- 속성:
id
,kind
(hierarchy
/call
),from
,to
상세는 앱 내의 「XML Spec (XML_FORMAT.md)」에서 확인할 수 있습니다.
데이터 형식과 내부 처리
내부 데이터 형식
- XML 포맷: 앱 내부에서 분석 결과를 통일 포맷(XML v2)으로 관리하고 있습니다.
- 분석 결과의 저장: 현재의 앱에서는, 분석 결과는 세션 중에만 유지됩니다.
- 외부 내보내기: 장래적인 기능 확장으로서, 분석 결과의 외부 저장이 검토되고 있습니다.
기술 사양
- AST 분석: 각 언어의 구문 분석 나무를 기반으로 한 구조화 데이터
- 메트릭스 계산: 복잡도, 네스팅 깊이, 행 수 등의 통계 정보
- 레이아웃 정보: 표시 패턴에 응답한 좌표·각도·반지름 데이터
추천 레이아웃

Overview – 복잡도·확장 메트릭스 강조

CallGraph – 호출 관계 강조

Category – 카테고리 띠·그룹핑
확장 메트릭스

기술 부채·코드 스멜 개요

문제 상세 리스트 (심각도 포함)
문서

사이드바 문서 영역

매뉴얼 언어 선택 (6개)
Selection Summary

Nodes/Functions/Lines, 평균 cc/nest, Score 합계, 최대 깊이 표시
성능과 팁
- 노드 수가 매우 많은 경우에는 v6(그리드)나 v9(카테고리 띠)로 조망→신경 쓰는 영역을 확대.
- 스타일 v2~v4는 장식을 포함합니다. 줌이나 노드 수에 따라 자동으로 경량화됩니다(가시성은 유지).
- 호출선이 많은 경우에는 v10 이외로 전환하면 보기 쉬워집니다.
- TypeScript 파일의 경우는 v11(TypeScript 대응)이나 v13(확장 황금각)이 최적입니다. TypeScript 고유의 최적화가 적용됩니다.
트러블슈트
- 아무것도 표시되지 않음: 소스에 구조가 적음/파싱에 실패. 다른 파일로 확인하세요.
- 무거움: 전체 표시 시에는 장식이 경량화됩니다. v6이나 v9로 전환하고 확대해서 상세를 확인하세요.
- 중심이 어긋남(v6): 최신판에서는 그리드 전체를 원점 중심에 배치하도록 수정 완료.
- TypeScript 파일에서 분석이 불완전: MultiLang이나 Category-Aware 애널라이저를 시도해 보세요. TypeScript 고유의 구문 요소가 적절하게 인식됩니다.
- 렌더링이 늦음: v1이나 v6 등의 경량 패턴으로 전환해 주세요. v11-v13은 TypeScript 대응이므로 약간 무거워지는 경우가 있습니다.
FAQ
Q. 스코어(score)란?
행 수·복잡도 등을 통합한 가시성 지표입니다. 클수록 눈에 띄는 노드로 그려지고 주목 후보가 됩니다.
Q. XML/JSON 중 어느 쪽을 사용해야 하나?
앱 외에서 분석을 재이용하는 경우에는 JSON이 간편합니다. XML은 내부의 표준 형식으로 사양의 확인에 적합합니다.
Q. 어떤 패턴을 선택하면 좋을까?
처음에는 v1/v9로 조망 → 밀도나 관계가 신경 쓰이면 v10 → 상세 비교는 v2/v6 → TypeScript 대응은 v11/v13,의 흐름이 스무스합니다. TypeScript 고유의 최적화가 필요한 경우는 v11/v13을 우선해 주세요.
사용하고 있는 OSS와 라이선스
분석 패턴의 상세 설명
Basic 애널라이저
기본적인 AST 분석을 수행하고, 함수, 클래스, 블록의 계층 구조와 복잡도(사이클로매틱 복잡도, 네스팅 깊이)를 계산합니다. 가장 경량이고 고속한 분석이 가능합니다. 언어 검출과 카테고리 결정도 포함합니다.
CallGraph 애널라이저
함수 간의 호출 관계를 분석하고, 의존성 그래프를 구축합니다. 함수의 진입 차수·진출 차수, 팬인·팬아웃 등의 지표를 제공합니다. 계층 엣지와 콜 엣지의 양쪽을 생성합니다.
MetricsExt 애널라이저
상세한 메트릭스를 계산합니다. 문 수, 분기 수, 루프 수, return 문 수, 예외 처리 수, switch 문 수 등, 코드의 품질 지표를 수치화합니다. 언어 고유의 구문 요소도 검출합니다.
MultiLang 애널라이저
TypeScript 대응의 분석을 수행하고, TypeScript 고유의 구문 요소(인터페이스, 제네릭스, 데코레이터, 열거형, 타입 앨리어스 등)를 적절하게 인식합니다. JavaScript와 TypeScript의 언어 특성에 대응합니다.
Category-Aware 애널라이저
카테고리를 의식한 스마트 분석을 수행하고, 노드의 중요도나 관련성을 고려한 분석 결과를 제공합니다. 카테고리 통계의 자동 계산과, JavaScript/TypeScript 고유의 카테고리 매핑을 포함합니다.
언어 대응
완전 지원 언어
JavaScript (ES6+)
- 기본 구문: 함수, 클래스, 객체, 배열
- ES6+ 기능: 화살표 함수, 클래스, 모듈, 템플릿 리터럴
- JSX 대응: React 등의 JSX 구문을 완전 지원
- 고도의 기능: 비동기 처리(async/await), 데코레이터, 동적 임포트
TypeScript
- 타입 시스템: 인터페이스, 열거형, 제네릭스, 타입 앨리어스
- 고도의 구문: 데코레이터, 네임스페이스, 모듈 확장
- JavaScript 호환: 모든 JavaScript 기능을 계승
- 타입 안전성: 컴파일 시의 타입 체크와 에러 검출
현재 지원되고 있는 언어 고유의 특징
- JavaScript: ES6+ 기능, 동적 타입 지정, 프로토타입 기반 계승, 비동기 처리, 화살표 함수, 스프레드/레스트 연산자, 분할 대입
- TypeScript: 정적 타입 지정, 고도의 타입 시스템, 인터페이스, 제네릭스, 데코레이터, 비동기 처리, TS 고유 구문, 타입 주석
품질 점수 시스템
기술 부채
복잡성, 중첩 깊이, 함수 길이, 매개변수 수를 기반으로 기술 부채를 계산합니다. 총량은 코드베이스와 함께 증가하며, 우선순위를 안내하기 위해 info / minor / major / critical 대역으로 자동 분류됩니다:
- info: 0.00–1.99 — 관찰 단계
- minor: 2.00–4.99 — 중간 우선순위 개선
- major: 5.00–9.99 — 곧 해결해야 함
- critical: ≥10.00 — 즉시 조치 필요
코드 스멜
다음 코드 스멜이 자동으로 감지됩니다:
- 긴 함수: 50+ 줄 (S138)
- 복잡한 함수: 순환 복잡도 10+ (S1541)
- 깊은 중첩: 중첩 깊이 5+ (S134)
- 너무 많은 매개변수: 5+ 개 (S107)
- 매직 넘버: 하드코딩된 숫자 (S109)
- 사용하지 않는 변수: 정의되었지만 사용되지 않음 (S1481)
유지보수성 지수
Halstead Volume, 복잡성, 함수 길이, 함수 수, 카테고리 다양성을 기반으로 한 0-100 유지보수성 지수. 더 높은 값은 더 나은 유지보수성을 나타냅니다.
기타 메트릭
- 코드 중복률: 함수명과 줄 기반 중복 감지
- 결합도: 모듈 간 의존성의 강도
- 응집도: 모듈 내 관계의 강도
- 보안 점수: 위험한 함수명과 패턴 감지
실제 품질 리포트 화면

품질 리포트 화면 - 상세한 코드 품질 분석 및 개선 제안 제공
품질 보증과 테스트 결과
📊 테스트 결과의 개요
✅ 테스트의 결과
- 테스트 스위트: 28개 모두 성공
- 테스트 케이스: 825개 모두 성공
- 실행 시간: 5.858초
- 스냅샷: 0개
📈 테스트 커버리지
- 스테이트먼트: 66.74%
- 브랜치: 61.81%
- 함수: 72.98%
- 행: 70.44%
🔧 테스트 환경과 라이브러리
🧪 테스트 프레임워크
- Jest: 메인 테스트 프레임워크(v30.0.5)
- Babel Jest: ES6+ 구문의 테스트 대응
- Jest Environment JSDOM: 브라우저 환경의 시뮬레이션
- @types/jest: TypeScript 타입 정의 지원
⚙️ 개발·테스트 환경
- Node.js: JavaScript 실행 환경
- Electron: 데스크톱 앱 프레임워크(v38.1.2)
- Cross-env: 환경 변수의 크로스 플랫폼 대응
- Playwright: E2E 테스트용 브라우저 자동화(v1.54.2)
🔍 테스트의 종류와 내용
🧪 테스트의 종류
- 유닛 테스트: 개별의 기능을 하나씩 확인
- 통합 테스트: 복수의 기능이 연동해서 움직이는지 확인
- E2E 테스트: 앱 전체가 올바르게 움직이는지 확인
- 커버리지 테스트: 어느 정도의 코드가 테스트되고 있는지 확인
📋 주요한 테스트 내용
- 구문 분석: JavaScript/TypeScript의 구문 분석과 AST 구축
- 메트릭스 계산: 복잡도, 행 수, 네스팅 깊이의 계산
- 그리기 엔진: 도형 그리기, 색 관리, 텍스트 렌더링
- 인터랙션: 마우스 조작, 선택 기능, 줌 기능
📊 테스트 결과의 상세
📋 최신 테스트 실행 결과
🧪 E2E 테스트의 상세
🚀 Electron 통합 테스트(9테스트)
- 애플리케이션 기동: 메인 프로세스·렌더러 프로세스의 정상 기동 확인
- IPC 통신 테스트: 프로세스 간 통신의 동작 확인과 에러 핸들링
- 윈도우 관리: 메인 윈도우의 표시·비표시·리사이즈
- 파일 시스템: 파일 읽기·저장의 동작 확인
- 메뉴 조작: 애플리케이션 메뉴의 동작 확인
🔧 기능 통합 테스트(32테스트)
- 파일 분석 파이프라인: 파일 읽기→분석→표시의 일련의 흐름
- 애널라이저 전환: Basic/CallGraph/MetricsExt/MultiLang의 동작 확인
- 렌더 패턴: v1~v13의 표시 패턴의 동작 확인
- 비주얼 스타일: v1~v4의 스타일 적용의 동작 확인
- 설정 관리: 사용자 설정의 저장·읽기·적용
🎨 렌더러 상세 테스트(14테스트)
- 그리기 엔진: 캔버스 그리기·도형 그리기·텍스트 렌더링
- 인터랙션: 마우스 조작·키보드 조작·터치 조작
- 레이아웃 계산: 노드 배치·엣지 그리기·줌·팬
- 상태 관리: 선택 상태·뷰 상태·애니메이션 상태
- 퍼포먼스: 대량 노드 그리기·메모리 사용량·그리기 속도
📊 데이터 처리 테스트(16테스트)
- XML 내보내기: 분석 결과의 XML 형식 출력·데이터 통합성 확인
- 메트릭스 계산: 복잡도·행 수·네스팅 깊이의 정확성
- 카테고리 분류: 함수·클래스·제어 플로우의 자동 식별
- 의존 관계 분석: 함수 호출·계승 관계·모듈 의존
- 에러 핸들링: 무효한 입력·예외 처리·리커버리
🔄 품질 향상에의 도전
📋 품질 관리의 메커니즘
- 포괄적 테스트: 신기능 추가 시에도 기존 기능의 동작 확인
- 자동화 테스트: 정기적인 동작 확인에 의한 품질 유지
- 사용자 피드백: 실제의 사용 상황에 기반한 개선
- 지속적 개선: 안정성과 신뢰성의 향상을 지속
🎯 품질 향상의 목표
- 신뢰성의 향상: 주요 기능의 안정 동작의 지속적인 보장
- 유저빌리티: 사용하기 쉽고 조작성의 향상
- 퍼포먼스: 처리 속도와 응답성의 최적화
- 호환성: 다양한 환경에서의 동작 보장
⚠️ 품질 보증의 한계에 관하여
🔍 완벽성의 보장에 관하여
중요한 포인트: 커버리지율이나 테스트 결과는 품질의 지표의 하나이지만, 이하의 이유로 완벽성을 보장하는 것은 아닙니다:
- 테스트의 한계: 모든 실행 패스나 에지 케이스를 완전하게 커버하는 것은 현실적으로 곤란
- 환경 의존성: 다른 OS, 브라우저, 디바이스에서의 동작의 완전 보장은 곤란
- 사용자 조작의 다양성: 예상하지 못한 사용자 조작 패턴의 완전 예측은 곤란
- 외부 의존 관계: 서드파티 라이브러리나 시스템 환경의 변화에의 완전 대응은 곤란
✅ 할 수 있는 한의 테스트 실시에 관하여
품질 향상에의 도전: 완벽성은 보장할 수 없지만, 이하의 방법으로 할 수 있는 한의 포괄적인 테스트를 실시하고 있습니다:
- 다층 테스트 전략: 유닛·통합·E2E 테스트의 조합에 의한 포괄적 검증
- 주요 기능의 중점 테스트: 코어 기능(분석·그리기·내보내기)의 고 커버리지 보장
- 에지 케이스의 고려: 이상 입력·에러 상태·경계 조건의 테스트
- 지속적 개선: 테스트 결과의 분석에 기반한 지속적인 테스트 강화
- 실용성 중시: 실제의 사용 장면에서 발생할 수 있는 문제의 중점적 테스트
🔮 품질 보증에의 지속적인 도전
이 애플리케이션은, 사용자 여러분에게 신뢰성 높은 서비스를 제공하기 위해, 지속적인 품질 보증에 도전하고 있습니다. 825개의 테스트 케이스에 의한 포괄적인 검증, 주요 기능의 고품질 보장, 그리고 실제의 사용 장면에서의 안정성을 중시하고 있습니다.
품질 스코어 시스템
기술적 부채 (Technical Debt)
복잡성, 네스팅 깊이, 함수 길이, 파라미터 수 등을 종합해 기술적 부채를 계산합니다. 총합은 코드베이스와 함께 증가하며, info / minor / major / critical 네 단계로 자동 분류되어 우선순위를 잡는 데 도움을 줍니다:
- info: 0.00–1.99 — 관찰 단계, 상황 파악 위주
- minor: 2.00–4.99 — 중간 수준의 개선 항목
- major: 5.00–9.99 — 빠르게 해결 권장
- critical: ≥10.00 — 즉각적인 조치 필요