깊은 중첩의 문제점: Rails는 기본적으로 자식 리소스의 모든 액션에 대해 완전하게 중첩된 경로를 생성하여 /albums/12/photos/42/edit
처럼 길고 복잡한 URL을 만듭니다. 이는 자식 리소스가 자체 ID로 식별 가능한 경우 RESTful 관점에서 비효율적입니다.
shallow: true
의 도입: shallow: true
옵션은 이 문제를 해결합니다. 이 옵션은 index
와 create
액션만 중첩된 상태를 유지하고, show
, edit
, update
, destroy
와 같은 다른 액션은 자식 리소스의 ID를 사용하여 최상위 경로로 생성됩니다. 예를 들어, resources :albums do; resources :photos, shallow: true; end
설정 시 /photos/:id
와 같은 간결한 경로가 생성되어 리소스 관계의 의미론적 명확성을 유지하면서 라우트 구조를 단순화합니다.
기술적 이점: shallow 라우팅은 URL을 개선하고, 컨트롤러 로직을 단순화하며, 확장성을 높이고, RESTful 원칙에 부합합니다.
shallow
라우트를 사용하지 않을 때: 자식 리소스가 부모 없이 독립적으로 존재할 수 없는 경우(예: 프로젝트와 작업의 컨텍스트가 필수적인 댓글)에는 완전한 중첩이 참조 무결성을 위해 더 적합할 수 있습니다.
깊은 계층 구조 적용: shallow: true
는 resources :projects do; resources :tasks, shallow: true do; resources :comments, shallow: true; end; end
와 같이 깊은 계층에서도 적용되어 하위 리소스의 불필요한 중첩을 피하고 간결한 URL을 유지합니다.