1. Recordings와 Recordables의 구조
-
Recordings (Primary Table): 메타데이터(생성자 ID, 타임스탬프 등)만을 포함하는 가벼운 테이블입니다.
-
Recordables (Concrete Types): 메시지, 문서, 업로드 등 실제 데이터가 저장되는 개별 테이블들입니다.
-
Delegated Type: Rails에서 제공하는 이 패턴은 STI(Single Table Inheritance)의 비대함과 다형성 관계의 복잡함을 해결하는 강력한 대안입니다.
2. 주요 아키텍처적 이점
-
효율적인 복사 및 이동: 실제 콘텐츠를 물리적으로 복사하지 않고 새로운 Recording 레코드가 기존 Recordable을 가리키도록 하여 저장 공간과 속도를 최적화합니다.
-
통합 페이지네이션: 여러 콘텐츠 타입이 하나의 Recordings 테이블을 공유하므로, 단일 쿼리로 타임라인이나 검색 결과를 쉽게 구현할 수 있습니다.
-
불변성(Immutability)과 변경 이력: Recordable을 불변으로 처리하고 Event 시스템과 결합하여 문서의 버전 관리 및 변경 로그를 완벽하게 추적합니다.
3. 유연한 확장성
-
새로운 기능(예: Hill Charts, Card Table)을 추가할 때 기존의 Recordings 테이블을 마이그레이션할 필요 없이 새로운 Recordable 타입만 정의하면 됩니다.
-
공통 동작(댓글 가능 여부, 공유 가능 여부 등)을 인터페이스화하여 레고 블록처럼 유연하게 조립할 수 있습니다.