피드로 돌아가기
Why I Built a Registry Instead of Just Buying One
Dev.toDev.to
Database

브리더가 스프레드시트 기반 등록 시스템의 한계를 극복하기 위해 PostgreSQL self-referential foreign key를 활용하여 계통 추적 레지스트리를 구축한 과정

Why I Built a Registry Instead of Just Buying One

Dusty Mumphrey2026년 3월 31일9intermediate

Context

기존 파충류 브리딩 커뮤니티는 Facebook 그룹 공유 스프레드시트, Obama 행정 시기 마지막 업데이트된 desktop app, Google Forms 등 비정형 도구로 운영됨. 기존 AKC 스타일 레지스트리도 수십 년 전 아키텍처 그대로 exotic 동물 커뮤니티에 부적합함. 단순 데이터 저장소가 아닌 검증 가능한 계통 사슬(chain of verified claims)을 구현해야 하는 필요성이 존재함.

Technical Solution

  • Gecko model → sire_id와 dam_id에 self-referential ForeignKey를 적용하여 database level에서 부모-자식 관계 강제
  • remote_side 인자로 ORM에게 동일 테이블 내 역방향 관계를 명확히 지시
  • backref를 통해 부모 기준 offspring enumeration 자동 생성
  • breeding_service.py에서 async 재귀 함수로 max_depth 제한 pedigree tree 동적 구성
  • selectinload로 N+1 query 문제 회피 및 부모 객체 eager loading 수행

Impact

COI coefficient of inbreeding 계산에 필요한 multi-generation pedigree traversal을 schema constraint 수준에서 보장함. 수동 검토나 policy 기반 검증이 아닌 database rejection으로 잘못된 계통 데이터의 진입 차단.

Key Takeaway

레지스트리 가치는 기능 목록이 아닌 data model 설계에서 결정됨. 계통 조회 가능 여부가 진짜 레지스트리와 데이터베이스 UI의 유일한 차이.


동물 브리딩 레지스트리 개발 시 self-referential foreign key를 schema에 정의하면 pedigree integrity enforcement가 database constraint로 동작하여 application code 없이도 데이터 무결성 보장 가능

원문 읽기