Git의 핵심 요소로 만든, 데이터베이스 없는 이슈 트래커

by DD
2주 전
조회수 14

Git의 4가지 핵심 객체(Blob, Tree, Commit, Tag)를 활용하여 데이터베이스 없이 이슈 트래커를 구현

이슈를 Git 객체로 저장(Store Issues as Git Objects)하여 Git의 버전 관리, 병합, 동기화 기능을 활용

GitHub, GitLab 등 플랫폼 종속성(Platform Dependency)에서 벗어나 이슈의 이식성(Portability)을 확보

세분화된 권한 관리 부재(Lack of Fine-grained Permissions)와 웹 UI 부재는 극복해야 할 과제로 지적됨

Git 객체 모델을 활용한 이슈 트래킹

저자는 Git의 4가지 객체(Object), 즉 Blob, Tree, Commit, Tag를 기반으로 이슈 트래커를 구축했다. 특히, 이슈를 Git의 Commit으로 표현하여 이슈의 히스토리(History)를 관리하고, Ref를 사용하여 이슈의 ID를 부여했다. 또한, Push/Fetch 명령어를 통해 이슈를 동기화하고, Merge 기능을 활용하여 동시 수정(Concurrent Edit)을 처리한다. 이러한 접근 방식은 별도의 데이터베이스 없이 Git의 기능을 활용하여 이슈 트래킹 시스템을 구축할 수 있게 한다.

데이터 미저장 정책(Zero-Retention Policy) 기반의 아키텍처

이 시스템은 데이터 격리 아키텍처(Data Isolation Architecture)를 채택하여, 이슈 데이터를 Git 저장소 내에 저장한다. 이슈 생성, 댓글, 상태 변경 등의 이벤트는 Git Commit으로 기록되며, 각 Commit은 이전 상태를 참조하여 이슈의 전체 히스토리(Full History)를 구성한다. 이러한 방식은 별도의 데이터베이스 없이 Git의 버전 관리 기능을 활용하여 이슈의 변경 이력을 추적하고, 데이터의 무결성을 보장한다.

Git Plumbing 명령어를 활용한 구현

git-native-issue는 Git의 Plumbing 명령어(Plumbing Commands)를 직접 사용하여 구현되었다. 이슈 생성은 `git hash-object`, `git commit-tree`, `git update-ref` 세 가지 명령어로 이루어진다. 이슈 상태 확인은 `git log` 명령어를 통해, 모든 이슈 목록은 `git for-each-ref` 명령어를 통해 얻을 수 있다. 이러한 접근 방식은 Git의 내부 동작 방식을 이해하고, Git의 핵심 기능(Core Functionality)을 활용하여 시스템을 구축하는 데 기여한다.

권한 관리 및 웹 UI 부재에 대한 고찰

커뮤니티에서는 Git의 세분화된 권한 관리(Fine-grained Permissions) 부재와 웹 UI 부재를 단점으로 지적한다. Git은 코드에 대한 권한 관리는 지원하지만, 이슈 트래킹에 필요한 세밀한 권한 설정은 제공하지 않는다. 또한, 웹 UI가 없기 때문에 별도의 애플리케이션을 통해 이슈를 확인해야 한다. 이러한 단점은 Git의 단순성(Simplicity)을 유지하기 위한 의도적인 선택으로, 시스템의 복잡성을 줄이는 대신 기능적 제약을 발생시킨다.

Building on Git's Primitives

댓글 0

첫 번째 댓글을 남겨보세요!