발표자는 동물원 데이터 모델을 기반으로 한 API 요구사항을 제시하며, 특히 중첩된 리소스 경로(예: /sections/:section_id/cages/:cage_id/animals
)에서 발생하는 문제점을 강조합니다. 이러한 경로에서 species
나 animals
와 같은 하위 리소스가 여러 부모를 가질 수 있어 컨트롤러 로직이 비대해지고 중복될 위험이 있음을 지적합니다. 이를 해결하기 위해 Rails의 라우트에서 parents
변수를 활용하여 현재 요청의 계층적 깊이를 파악하는 방법을 소개합니다. 이를 통해 컨트롤러에서 부모 컨텍스트에 따라 동적으로 로직을 조정할 수 있게 됩니다.
데이터 직렬화(Serialization) 단계에서는 시리얼라이저(Active Model Serializers와 유사한 방식)를 사용하여 API 응답을 구성하는 방법을 설명합니다. 특히, 다른 모델에서 데이터를 가져오는 ‘파생 속성(Derived Attributes)’과 집계 함수(예: 우리의 수용률 계산)를 적용하는 ‘집계 속성(Aggregated Attributes)’ 개념을 도입합니다. 이러한 속성들은 내부적으로 필요한 조인(JOIN)을 자동으로 처리하여 N+1 쿼리 문제를 방지하고, 시리얼라이저가 필요한 데이터를 스스로 ‘요청’하여 필요한 필드만 선택적으로 가져오도록 합니다. 이는 복잡한 데이터 의존성 관계를 단순화하는 효과를 가져옵니다.
또한, ID 대신 ‘슬러그(slug)’를 사용하여 리소스를 조회하는 커스텀 인덱스 기능, Bonded 통합을 통한 인증/인가(RBAC) 처리, 계층적 무결성 검사, 검색/정렬/페이지네이션과 같은 일반적인 API 기능의 통일된 구현 방식도 설명합니다. 특히, scope.reflect_on_association
과 같은 Rails의 내부 기능을 활용하여 동적으로 조인을 수행하는 기술적 깊이를 보여줍니다. 이 모든 기능들이 통합되어 컨트롤러는 매우 간결한 형태를 유지하며, 통일된 API 구조 덕분에 테스트 자동화가 용이해지는 장점을 강조합니다. 실제 이 프로젝트는 Red Hat에서 보안 컴플라이언스 정책 및 프로파일을 저장하는 내부 애플리케이션의 Rails API로 활용되고 있음을 밝힙니다.