sem: 엔터티 수준에서 코드 변경을 추적하는 의미론적 버전 관리 도구
sem: 엔터티 수준에서 코드 변경을 추적하는 의미론적 버전 관리 도구
해결하고자 하는 문제
전통적인 Git과 같은 버전 관리 시스템은 텍스트 라인 단위로 변경을 추적합니다. 이는 실제 로직 변경을 가리는 경우가 많습니다. sem은 라인이 아닌 엔터티 수준(함수, 클래스, 메서드)에서 변경을 추적함으로써 코드에서 실제로 무엇이 바뀌었는지 이해하기 쉽게 합니다.
작동 방식
sem은 Git 위에 레이어로 동작합니다. tree-sitter를 사용해 32개의 프로그래밍 언어와 구조화된 데이터 포맷을 파싱하고, 엔터티를 별개의 객체로 추출합니다. 정확한 ID 매치, 구조 해시(공백 및 주석 무시), 퍼지 유사도라는 세 단계 매칭 과정을 통해 단순 추가·삭제가 아니라 로직의 이름 변경 및 이동을 감지합니다.
대상 사용자
- 개발자: 보다 의미 있는 diff와 변경 영향 분석을 원하는 사람.
- AI 코딩 에이전트: 전체 파일을 읽지 않고도 의존성을 파악하고 코드를 리팩터링할 수 있도록 토큰 효율적인 컨텍스트가 필요한 경우 (Model Context Protocol 활용).
- CI/CD 파이프라인: 자동화된 코드 분석을 위해 구조화된 JSON 출력을 필요로 하는 경우.
주요 특징
- 엔터티 수준 Diff: 어떤 함수나 클래스가 수정, 이름 변경, 이동되었는지 정확히 확인.
- 영향 분석: 특정 엔터티가 변경될 때 깨질 수 있는 부분을 식별하는 파일 간 의존성 그래프.
- LLM 컨텍스트 최적화: AI 에이전트를 위해 엔터티와 그 의존성을 토큰 예산에 맞춰 제공하는
context명령. - MCP 서버: Model Context Protocol을 기본 지원하여 AI 에이전트가
sem도구를 네이티브 스킬처럼 사용할 수 있음. - 광범위한 언어 지원: TypeScript, Python, Rust, Go, Java 등을 포함한 32개 언어에 대한 완전한 엔터티 추출.
- Git 통합:
sem setup을 통해 기본git diff출력으로 설정 가능.
Sources
- undefinedAtaraxy-Labs/sem