내 죽은 코드에 가격을 매겨보니 $775 청구서가 나왔다
요약
개발자가 작성한 '죽은 코드'의 비용을 산정하는 도구 GhostCode를 소개합니다. 이 도구는 단순 텍스트 분석 대신 AST(Abstract Syntax Tree)를 활용하여 실제로 사용되지 않는 코드를 식별하고, 이를 연간 비용으로 환산해 개발자에게 경각심을 줍니다. GhostCode는 tree-sitter와 '들어오는 연결 없음(Zero incoming edges)' 원칙을 기반으로 하며, 코드 정리의 필요성을 감정적 판단이 아닌 재무적 결정으로 전환하는 방법을 제시합니다.
핵심 포인트
- 죽은 코드는 단순한 분위기가 아니라 연간 비용을 발생시키는 손익계산서 항목이다.
- AST(Abstract Syntax Tree)를 사용하여 정규 표현식보다 정확하게 미사용 코드를 식별해야 한다.
- 코드의 사용 여부는 '들어오는 연결 없음(Zero incoming edges)' 원칙으로 반증 가능하게 정의하는 것이 좋다.
- 초기에는 대략적인 비용을 산정하여 코드 정리의 필요성을 재무적 결정으로 전환할 수 있다.
내 죽은 코드에 가격을 매겨보니 $775 청구서가 나왔다
모든 개발자에게는 무덤 같은 코드가 있다. 나의 경우 35개의 파일과 2,317줄이었고, 그중 절반이 무엇을 하는지 나조차 말할 수 없었다. 그래서 나는 GhostCode라는 죽은 코드 분석기를 만들었는데, 이 도구는 텍스트에서 추측하는 대신 AST(Abstract Syntax Tree)를 읽어낸다. 그리고 내가 가장 먼저 테스트한 저장소는 바로 나 자신의 것이었다.
내가 무엇을 만들었는지, 어떻게 작동하는지, 그리고 숫자들이 뭐라고 말했는지 여기에 적는다.
죽은 코드는 분위기가 아니라 손익계산서(P&L) 항목이다
죽은 코드는 그저 거기에 놓여 있는 것이 아니다. 누군가 온보딩 과정에서 그것을 읽고, 디버깅하며 주변을 돌아다니고, CI(Continuous Integration)를 통과시키는 데 사용한다. 이것이 바로 시간이라는 실제 비용이다. 그래서 나는 숫자를 원했다: 이 코드가 나에게 연간 얼마의 비용을 발생시키는가?
내가 처음 시작한 투박한 버전은 다음과 같다: 죽은 코드 한 줄당 $0.50이며, 복잡도에 따라 조정된다. 의도적으로 투박하게 만든 것이다. 정확하지만 틀린 숫자는 투박하지만 방향성을 제시하는 숫자보다 더 나쁘다.
작동 방식: 네 가지 레이어
1. 수집(Ingestion). tree-sitter가 Python과 JS/TS를 실제 AST로 구문 분석한다. 정규 표현식으로 추측하거나
그중 일부는 쓰라렸다. 내가 '나중에 필요할까 봐 보관해 두었던' 헬퍼 모듈이 처음부터 들어오는 연결(incoming edges)이 전혀 없다는 사실을 알게 되었다. 그것은 한 번도 사용된 적이 없었다. 이것을 삭제하는 것은 하나의 PR만으로 가능했고, 테스트는 여전히 녹색(green) 상태를 유지했다. 91개 중 91개가 통과했다.
직접 구축하기 전에 알려주고 싶은 것들
정규 표현식(regex) 대신 tree-sitter로 시작하세요. 정규 표현식 기반의 '미사용 코드' 도구는 동적 임포트(dynamic import)가 나타나는 순간 당신에게 거짓말을 합니다.
들어오는 연결이 없다(Zero incoming edges)는 것이 올바른 정의입니다. 이는 반증 가능합니다: 호출자 하나를 보여주거나, 아니면 죽은 코드입니다.
초기에 대략적인 가격을 매기세요. $0.50이라는 숫자는 틀렸지만, 그것은 '이걸 정리해야 할까?'라는 느낌을 '이 파일 유지하는 데 연간 120달러가 드네'라는 결정으로 바꿨습니다. 이것은 감정이 아니라 결정입니다.
내 리포지토리는 이제 파일이 10개 줄었습니다. 분석기가 CI에서 실행되므로, 무덤(graveyard)이 다시 커지지 않습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기