왜 ACF Relationship Fields가 규모가 커질수록 어려움을 겪는가 (그리고 대신 사용할 방법)
Source: Dev.to

소개
Advanced Custom Fields는 WordPress 생태계에서 가장 널리 사용되는 플러그인 중 하나이며—그럴 만한 이유가 있습니다.
하지만 관계 필드는 종종 설계된 용도를 훨씬 초과해서 사용됩니다. 바로 여기서 장기적인 문제가 시작됩니다.
개발자들이 ACF 관계를 좋아하는 이유
- 설정이 빠름
- 편집자가 이해하기 쉬움
- 작은 데이터셋에서는 잘 동작함
단순한 프로젝트라면 전혀 문제가 되지 않습니다.
문제가 발생하기 시작하는 지점
성능 문제
ACF는 관계 데이터를 포스트 메타에 저장합니다. 이는 다음을 의미합니다:
- 관계당 여러 행이 생성됨
- 인덱스가 된 조인 대신 메타 쿼리 사용
- 역방향 조회가 비용이 많이 듦
콘텐츠가 늘어나면 성능이 조용히 저하되다가 어느 순간 급격히 떨어집니다.
쿼리 복잡성
- 정방향 쿼리는 관리하기 쉬움.
- 역방향 쿼리는 종종 중첩 메타 쿼리, 커스텀 SQL, 혹은 템플릿 수준 해킹을 필요로 함.
이로 인해 테마를 이해하고 유지보수하기가 어려워집니다.
데이터 락인
관계 데이터가 ACF에 강하게 결합됩니다. 나중에 이를 제거하려면 보통:
- 마이그레이션 스크립트 작성
- 고아 데이터 정리
- 프로덕션 데이터에 대한 위험한 리팩터링
이라는 과정을 거쳐야 합니다. 일시적인 편리함이 영구적인 부채가 됩니다.
핵심 문제
ACF 관계 필드는 관계를 메타데이터로 저장합니다. 메타데이터는 유연하지만 관계형 데이터베이스가 아닙니다. 관계가 데이터 모델의 핵심이 될 때, 이 접근 방식은 확장되지 못합니다.
더 나은 패턴: 구조화된 관계
다음이 필요한 프로젝트에서는:
- 다대다 관계
- 방향성 의미
- 깔끔한 역방향 조회
- 장기적인 유지보수성
구조화된 관계 레이어가 더 적합합니다. 바로 Native Content Relationships가 채우기 위해 설계된 정확한 격차입니다.
적절한 관계 레이어를 도입하면 바뀌는 점
- 관계가 전용 인덱스 테이블에 저장됨
- 쿼리가 예측 가능하고 성능이 향상됨
- 역방향 조회가 일등급으로 제공됨
- 편집자는 여전히 깔끔한 UI를 사용함
- 데이터가 이식 가능하고 미래에도 안전함
가장 중요한 점: 콘텐츠 모델이 WordPress와 충돌하지 않게 됩니다.
ACF 관계에서 벗어나야 할 시점
- 대규모 데이터셋
- 고트래픽 사이트
- 다국어 WordPress 설정
- 헤드리스 WordPress 프로젝트
- 장기간 운영되며 진화가 예상되는 시스템
ACF 자체는 여전히 훌륭하지만, 모든 경우에 적합한 것은 아닙니다.
최종 정리
ACF 관계 필드는 편리하지만, 편리함에도 한계가 있습니다. 관계가 애플리케이션의 핵심이라면 일등급 처리가 필요합니다.
깨끗하고 네이티브한 접근 방식을 찾고 있다면, 여기에서 플러그인을 확인해 보세요: