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의 4가지 객체(Object), 즉 Blob, Tree, Commit, Tag를 기반으로 이슈 트래커를 구축했다. 특히, 이슈를 Git의 Commit으로 표현하여 이슈의 히스토리(History)를 관리하고, Ref를 사용하여 이슈의 ID를 부여했다. 또한, Push/Fetch 명령어를 통해 이슈를 동기화하고, Merge 기능을 활용하여 동시 수정(Concurrent Edit)을 처리한다. 이러한 접근 방식은 별도의 데이터베이스 없이 Git의 기능을 활용하여 이슈 트래킹 시스템을 구축할 수 있게 한다.
이 시스템은 데이터 격리 아키텍처(Data Isolation Architecture)를 채택하여, 이슈 데이터를 Git 저장소 내에 저장한다. 이슈 생성, 댓글, 상태 변경 등의 이벤트는 Git Commit으로 기록되며, 각 Commit은 이전 상태를 참조하여 이슈의 전체 히스토리(Full History)를 구성한다. 이러한 방식은 별도의 데이터베이스 없이 Git의 버전 관리 기능을 활용하여 이슈의 변경 이력을 추적하고, 데이터의 무결성을 보장한다.
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)을 활용하여 시스템을 구축하는 데 기여한다.
커뮤니티에서는 Git의 세분화된 권한 관리(Fine-grained Permissions) 부재와 웹 UI 부재를 단점으로 지적한다. Git은 코드에 대한 권한 관리는 지원하지만, 이슈 트래킹에 필요한 세밀한 권한 설정은 제공하지 않는다. 또한, 웹 UI가 없기 때문에 별도의 애플리케이션을 통해 이슈를 확인해야 한다. 이러한 단점은 Git의 단순성(Simplicity)을 유지하기 위한 의도적인 선택으로, 시스템의 복잡성을 줄이는 대신 기능적 제약을 발생시킨다.