sem - Git 위에 함수/클래스 단위 변경 추적을 추가하는 시맨틱 버전 관리 도구
요약
sem은 Git 레포지토리에서 함수, 클래스 등 코드 엔티티 단위의 변경 사항을 추적하는 시맨틱 버전 관리 도구입니다. tree-sitter와 AST 구조 해시를 이용해 리네임이나 이동까지 감지하며, `diff`, `impact`, `blame` 등 다양한 명령어를 제공합니다. 특히 코딩 에이전트가 필요한 주변 코드만 효율적으로 가져오도록 돕는 기능과 GitHub Action 지원이 강력한 개발 워크플로우 개선을 예고합니다.
핵심 포인트
- 코드 엔티티 단위로 변경 사항 추적 (함수/클래스)
- tree-sitter와 AST 해시를 이용해 리네임 및 이동 감지
- 개발자가 필요한 코드만 가져오는 `sem context` 기능 제공
- PR마다 변경된 함수 목록을 고정 댓글로 자동 업데이트
줄이 아니라 코드 엔티티를 비교해 어떤 함수/메서드/클래스가 추가/수정/삭제/이동/이름 변경됐는지 보여줌
- "line x~y가 변경됨" → "
**함수 **blah
가 변경됨"
- 아무 Git 레포에서
설정없이 동작하며, Git 외부에서도 임의의 파일 비교가 가능 - SQLite에 저장되는 엔티티 캐시는 저장소 바깥의 OS 캐시 디렉터리에 보관돼
작업 트리를 오염시키지 않음 - tree-sitter로 코드를 파싱하고,
엔티티 ID → AST 구조 해시 → 80% 초과 토큰 유사도 순서로 변경 전후 코드를 연결해 리네임과 이동을 감지
지원 명령들
sem diff
: 작업 트리/스테이징/커밋/커밋 범위/임의의 두 파일을 비교하며, 일반 텍스트/Markdown/JSON 출력을 지원
sem impact
: 특정 함수 변경 시 영향을 받는 의존 코드/호출자/테스트를 찾음
sem blame
: 함수/클래스/메소드의 엔티티 레벨 마지막 수정자를 보여줌
sem log
: git history를 통해서 엔티티 하나가 어떻게 변화했는지를 추적해줌
- 엔티티 지정 안하면 저장소의
hotspot(많이 변경된 것)/co-change pairs(반복적으로 동시 변경된 쌍들) 을 분석함 ("하나 건드리면, 이것도 잊지말아요")
sem entities
: 현재 폴더 아래의 모든 엔티티 표시
sem context
: 에이전트에 필요한 주변 코드만 토큰 예산에 맞춰 구성해줌
sem setup
: 실행하면 기존 git diff
가 엔티티 단위 출력으로 바뀌고, staged 변경의 영향 범위를 보여주는 pre-commit 훅도 설치됨
- macOS와 Linux에서는 Claude Code에
상주 의존 그래프와 프롬프트 시작 시 컨텍스트 훅을 연결해 매번 저장소를 다시 분석하거나 코드를 찾아다니는 비용을 줄임
sem mcp
: diff
, impact
, context
, entities
, blame
, log
를 MCP 도구로 제공해 코딩 에이전트가 전체 파일 대신 필요한 함수와 의존 관계만 조회하도록 함
GitHub Action을 추가하면 PR마다 변경된 함수/클래스/메서드를 하나의 고정 댓글로 갱신하며, 포맷/주석만 바뀐 PR도 구분함
- TypeScript, Python, Go, Rust, Java, Swift, SQL, C/C++ 등을 포함한 32개 언어와 JSON/YAML/TOML/CSV/Markdown을 지원
라이선스: MIT OR Apache-2.0
댓글과 토론
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기