Git diff를 함수 단위로 읽는 sem, 코드 변경 추적이 달라져요

Git diff는 정확하지만, 큰 리팩터링에서는 읽기 어려워져요. 함수가 다른 파일로 옮겨지거나 이름이 바뀌면 삭제와 추가가 길게 나타나기 때문이에요. 오픈소스 도구 sem은 변경된 줄 대신 함수·메서드·클래스 같은 코드 엔티티를 비교해 이 문제를 풀어요. 1
핵심 요약
| 구분 | 핵심 | 왜 볼 만한가요 |
| 변경 비교 | 함수·클래스 단위로 추가, 수정, 삭제, 이동, 이름 변경을 보여줘요 | 리팩터링의 의도를 줄 단위 diff보다 빠르게 파악할 수 있어요 |
| 영향 분석 | 의존 코드, 호출자, 영향받는 테스트를 엔티티 기준으로 찾아요 | 변경 전에 확인할 범위를 좁히는 데 쓸 수 있어요 |
| 개발 흐름 | Git 저장소에서 별도 설정 없이 시작하고 JSON·Markdown 출력도 지원해요 | 코드 리뷰, CI, 코딩 도구에 결과를 연결하기 쉬워요 |
1. 줄 번호 대신 함수의 변화를 보여줘요
sem은 tree-sitter로 소스 코드를 파싱한 뒤 함수, 클래스, 메서드 같은 엔티티를 추출해요. `sem diff`를 실행하면 작업 트리와 스테이징 영역, 특정 커밋, 커밋 범위를 엔티티 기준으로 비교할 수 있어요. Git 저장소 밖에서도 파일 2개를 직접 비교할 수 있고, 일반 텍스트와 JSON, Markdown 형식을 제공해요. 2
이름이 같으면 엔티티 ID로 연결하고, 이름이 달라졌다면 구조 해시와 토큰 유사도를 차례로 확인해요. 토큰이 80% 넘게 겹치면 이름 변경 가능성이 있는 엔티티로 판단해요. 그래서 함수가 이동하거나 이름만 바뀐 리팩터링을 단순 삭제·추가와 구분할 수 있어요. 다만 자동 판정인 만큼 큰 폭으로 다시 작성한 함수는 별도 변경으로 잡힐 수 있어요.
`sem impact`는 특정 함수가 바뀔 때 영향을 받을 의존 코드와 호출자, 테스트를 찾아줘요. `sem blame`은 파일의 함수·클래스별 마지막 수정자를 보여주고, `sem log`는 한 엔티티가 Git 기록에서 어떻게 달라졌는지 추적해요. 저장소에서 자주 바뀐 코드와 같은 커밋에서 함께 수정된 엔티티도 확인할 수 있어요.
GitHub Actions에 연결하면 Pull Request마다 바뀐 함수와 클래스를 댓글로 남길 수 있어요. 포맷이나 주석만 달라진 변경도 따로 표시해요. 빌드를 실패시키는 품질 게이트보다는 리뷰어가 변경 범위를 읽는 보조 화면에 가까워요.
현재 README 기준으로 TypeScript, Python, Go, Rust, Java, Swift, C/C++, SQL 등 32개 프로그래밍 언어를 파싱해요. JSON, YAML, TOML, CSV, Markdown 같은 구조화된 파일도 다뤄요. 엔티티 캐시는 저장소 밖의 운영체제 캐시 디렉터리에 SQLite로 보관해 작업 트리에 파일을 남기지 않아요.
왜 중요한가요
대규모 리팩터링에서 줄 단위 diff는 변경량을 보여주지만, 어떤 함수가 옮겨졌고 무엇과 연결되는지는 개발자가 다시 해석해야 해요. sem의 엔티티 diff와 영향 분석을 함께 쓰면 리뷰어가 확인할 함수와 테스트 후보를 먼저 좁힐 수 있어요. 특히 파일 이동과 이름 변경이 잦은 Pull Request에서 차이가 커요.
코딩 도구에도 맞는 출력 구조를 갖췄어요. `sem context`는 대상 엔티티와 의존 관계를 정해진 토큰 예산 안에 묶고, JSON 출력은 CI나 다른 개발 도구가 후속 처리를 하기 쉬워요. 그래도 파서가 만든 의존 그래프가 실제 런타임 동작과 항상 같다고 볼 수는 없어요. 동적 호출이나 코드 생성이 많은 프로젝트에서는 기존 테스트와 줄 단위 diff를 함께 확인하는 편이 안전해요.
도입 전에는 저장소의 주력 언어가 지원되는지, 리네임과 이동 감지가 팀의 실제 리팩터링에서 얼마나 정확한지 작은 Pull Request로 확인해 보는 게 좋아요. GNU Parallel에도 이름이 같은 `sem` 실행 파일이 있으므로 설치 뒤 `sem --version`으로 어떤 바이너리가 실행되는지도 확인해야 해요. 2
참고 자료
- sem - Git 위에 함수·클래스 단위 변경 추적을 추가하는 시맨틱 버전 관리 도구 — GeekNews
- Ataraxy-Labs/sem — GitHub
'IT & AI' 카테고리의 다른 글
| 초지능 경쟁을 2040년까지 늦추자는 Plan A의 설계 (0) | 2026.07.12 |
|---|---|
| 실적은 좋은데 개발 조직은 망가지는 이유 (0) | 2026.07.12 |
| AI로 법령을 읽고, 대한민국 제도 100개를 한 장에 담았어요 (0) | 2026.07.11 |
| AI가 코드를 써도 중복은 빚으로 남아요 (0) | 2026.07.11 |
| 애플이 OpenAI를 고소했어요, AI 기기 경쟁이 영업비밀 소송으로 번진 이유 (0) | 2026.07.11 |