본문 바로가기

인공지능

Git 함수 단위 변경 추적을 지원하는 시맨틱 버전 관리 도구 sem 완벽 정리

728x90
반응형
728x170

Git Diff를 함수와 클래스 단위로 분석하는 시맨틱 버전 관리 도구

Git은 소스코드 변경 이력을 관리하는 대표적인 버전 관리 시스템입니다. 하지만 일반적인 git diff는 변경된 라인(Line) 중심으로 비교하기 때문에 실제 개발자가 궁금해하는 "어떤 기능이 변경되었는가?"를 한눈에 파악하기는 어렵습니다.

이러한 한계를 해결하기 위해 등장한 도구가 sem입니다.

sem은 Git 위에서 동작하는 시맨틱(Semantic) 버전 관리 도구로, 코드의 줄(Line)이 아닌 함수(Function), 메서드(Method), 클래스(Class) 와 같은 코드 엔티티(Entity) 단위로 변경 사항을 분석합니다.

이번 글에서는 sem이 제공하는 주요 기능과 동작 방식, 그리고 개발 생산성을 높여주는 이유를 살펴보겠습니다.

반응형

sem이란?

sem은 기존 Git 저장소를 그대로 활용하면서 코드 변경을 구조적인 관점에서 분석하는 도구입니다.

기존 Git이

"몇 번째 줄이 변경되었는가"

를 보여준다면,

sem은

"어떤 함수가 수정되었는가"

를 알려줍니다.

예를 들어 기존 Git Diff는 다음과 같이 표시됩니다.

Line 35~52 modified

반면 sem은 다음과 같이 의미 있는 단위로 표현합니다.

Function: calculatePrice modified

즉, 코드 변경의 의미(Semantics)를 이해할 수 있도록 정보를 제공합니다.


sem의 핵심 특징

1. 함수·클래스 단위 변경 추적

sem의 가장 큰 특징은 코드 엔티티 단위로 변경을 분석한다는 점입니다.

다음과 같은 변경을 모두 식별할 수 있습니다.

  • 함수 추가
  • 함수 삭제
  • 함수 수정
  • 함수 이동
  • 함수 이름 변경
  • 클래스 변경
  • 메서드 변경

단순히 변경된 줄 수가 아니라 실제 어떤 기능이 변경되었는지를 빠르게 파악할 수 있습니다.


2. 별도 설정 없이 Git 저장소에서 바로 사용

sem은 대부분의 Git 저장소에서 별도의 설정 없이 사용할 수 있습니다.

또한 Git 저장소가 아니더라도 두 개의 파일을 비교하는 용도로 사용할 수 있어 다양한 환경에서 활용 가능합니다.


3. 작업 트리를 오염시키지 않는 캐시 관리

분석 과정에서 생성되는 엔티티 캐시는 SQLite 기반으로 저장됩니다.

이 캐시는 Git 저장소 내부가 아닌 운영체제(OS)의 캐시 디렉터리에 저장되므로 프로젝트 내부에 불필요한 파일이 생성되지 않습니다.

따라서 기존 저장소 구조를 그대로 유지하면서 사용할 수 있습니다.


sem은 어떻게 변경을 추적할까?

sem은 코드의 의미를 이해하기 위해 tree-sitter 기반으로 소스코드를 파싱합니다.

변경된 코드를 연결하는 과정은 다음 순서로 진행됩니다.

  1. 엔티티 ID 비교
  2. AST(Abstract Syntax Tree) 구조 해시 비교
  3. 80% 이상의 토큰 유사도 비교

이 과정을 통해 단순한 코드 수정뿐 아니라 다음과 같은 상황도 감지할 수 있습니다.

  • 함수 이름 변경(Rename)
  • 다른 파일로 이동(Move)
  • 리팩터링 이후의 동일 코드 추적

즉, 파일 위치가 변경되어도 동일한 코드임을 인식할 수 있는 것이 특징입니다.


sem에서 제공하는 주요 명령어

sem diff

가장 기본적인 변경 비교 기능입니다.

다음과 같은 비교를 지원합니다.

  • 작업 트리
  • Staging 영역
  • 특정 Commit
  • Commit 범위
  • 두 개의 임의 파일

출력 형식도 다양합니다.

  • 일반 텍스트
  • Markdown
  • JSON

이를 통해 자동화나 CI 환경에서도 활용할 수 있습니다.


sem impact

특정 함수를 수정했을 때 영향을 받는 코드를 분석합니다.

예를 들어 다음과 같은 정보를 확인할 수 있습니다.

  • 호출하는 함수(Caller)
  • 의존 코드
  • 관련 테스트 코드

변경 영향도를 빠르게 파악할 수 있어 리팩터링이나 대규모 수정 시 유용합니다.


sem blame

Git의 git blame을 함수 수준으로 확장한 기능입니다.

파일 전체가 아닌 함수나 클래스 단위에서 마지막 수정자를 확인할 수 있습니다.

이를 통해 특정 기능의 변경 이력을 더욱 쉽게 추적할 수 있습니다.


sem log

Git 히스토리를 기반으로 하나의 엔티티가 어떻게 변경되어 왔는지를 추적합니다.

엔티티를 지정하지 않으면 저장소 전체를 분석하여 다음 정보를 제공합니다.

  • Hotspot(자주 변경되는 코드)
  • Co-change Pairs(항상 함께 수정되는 코드)

이를 통해

"이 부분을 수정하면 함께 수정해야 하는 코드"

를 미리 파악할 수 있습니다.


sem entities

현재 프로젝트에 존재하는 모든 코드 엔티티를 출력합니다.

프로젝트의 함수와 클래스 구조를 빠르게 확인할 때 활용할 수 있습니다.


sem context

AI 코딩 에이전트를 위한 기능입니다.

필요한 함수와 주변 코드만 선택하여 토큰 예산에 맞게 구성해 제공합니다.

전체 프로젝트를 전달하지 않고 필요한 정보만 제공할 수 있어 AI 활용 효율을 높일 수 있습니다.


sem setup

한 번 실행하면 개발 환경 구성이 자동으로 이루어집니다.

설치되는 기능은 다음과 같습니다.

  • 기존 git diff를 엔티티 단위 출력으로 변경
  • Staged 변경의 영향 범위를 보여주는 pre-commit Hook 설치

macOS와 Linux에서는 Claude Code와 연동하여

  • 상주 의존성 그래프
  • 프롬프트 시작 시 컨텍스트 제공

기능도 함께 지원합니다.

이를 통해 프로젝트를 반복적으로 분석하는 비용을 줄일 수 있습니다.


sem mcp

MCP(Model Context Protocol) 도구 형태로 다음 기능을 제공합니다.

  • diff
  • impact
  • context
  • entities
  • blame
  • log

코딩 에이전트는 전체 프로젝트를 읽지 않고 필요한 함수와 의존성만 조회할 수 있어 효율적인 코드 분석이 가능합니다.


GitHub Action 연동

sem은 GitHub Action과도 연동됩니다.

PR(Pull Request)이 생성되면 변경된

  • 함수
  • 클래스
  • 메서드

목록을 하나의 고정 댓글로 자동 갱신합니다.

또한 코드 포맷팅이나 주석만 변경된 PR과 실제 로직 변경도 구분하여 보여주므로 코드 리뷰 효율을 높일 수 있습니다.


지원 언어

sem은 다양한 프로그래밍 언어를 지원합니다.

대표적으로 다음 언어들을 지원합니다.

  • TypeScript
  • Python
  • Go
  • Rust
  • Java
  • Swift
  • SQL
  • C
  • C++
  • JSON
  • YAML
  • TOML
  • CSV
  • Markdown

32개 언어를 지원하며, 지원하지 않는 파일은 청크 단위 Diff 방식으로 처리합니다.


간단한 사용 예시

프로젝트의 변경된 함수를 확인하려면 다음과 같이 사용할 수 있습니다.

sem diff

특정 함수의 영향 범위를 확인하려면

sem impact

프로젝트의 모든 함수와 클래스를 확인하려면

sem entities

Git 이력을 함수 단위로 추적하려면

sem log

기본 개발 환경을 구성하려면

sem setup

처럼 사용할 수 있습니다.


sem이 주는 장점

기존 Git은 파일과 라인 중심의 변경 이력을 제공하는 반면, sem은 코드의 의미를 이해하는 엔티티 중심의 변경 분석을 제공합니다.

특히 다음과 같은 환경에서 큰 효과를 기대할 수 있습니다.

  • 대규모 프로젝트 코드 리뷰
  • 리팩터링 영향 분석
  • 함수 단위 변경 추적
  • AI 코딩 에이전트와의 연동
  • GitHub PR 리뷰 자동화
  • 복잡한 코드베이스의 변경 이력 관리

라인 번호 대신 실제 기능 단위의 변경 사항을 확인할 수 있어 개발자와 리뷰어 모두 변경 내용을 더욱 직관적으로 이해할 수 있습니다.


728x90

sem은 기존 Git의 버전 관리 기능을 유지하면서 함수, 메서드, 클래스와 같은 코드 엔티티 단위의 변경 추적을 제공하는 시맨틱 버전 관리 도구입니다.

특히 diff, impact, blame, log와 같은 기능을 통해 단순한 코드 비교를 넘어 변경의 의미와 영향 범위까지 분석할 수 있으며, GitHub Action 및 MCP를 통한 AI 코딩 환경 지원도 제공합니다.

프로젝트 규모가 커질수록 단순한 라인 기반 비교만으로는 변경 사항을 이해하기 어려워집니다. 이러한 환경에서 sem은 코드 변경을 보다 구조적으로 분석하고, 리뷰와 유지보수, AI 기반 개발까지 효율적으로 지원하는 도구로 활용될 수 있습니다.

300x250

https://github.com/Ataraxy-Labs/sem

 

GitHub - Ataraxy-Labs/sem: Semantic version control => entity-level diffs, blame, and impact analysis on top of git. 28 language

Semantic version control => entity-level diffs, blame, and impact analysis on top of git. 28 languages via tree-sitter. Built for coding agents. - Ataraxy-Labs/sem

github.com

728x90
반응형
그리드형