피드로 돌아가기
Dev.toBackend
원문 읽기
거대 Repository가 만드는 기술 부채, 소비자 중심 인터페이스로 해결
Why Your Repository Pattern Creates Tech Debt (And How to Fix It in Python)
AI 요약
Context
비즈니스 로직과 데이터 계층 분리를 위해 Repository Pattern을 도입함. 테이블당 하나의 거대한 인터페이스를 정의하는 Producer-defined 방식 사용. 서비스 규모 확장 시 인터페이스 비대화와 강한 결합도 문제 발생.
Technical Solution
- Python의 typing.Protocol을 활용한 structural subtyping 기반 인터페이스 설계
- 데이터 계층의 구현체인 Store 클래스가 인터페이스를 명시적으로 상속받지 않는 구조
- 인터페이스 정의 주체를 공급자가 아닌 소비자로 전환하는 Consumer-defined Interface 전략
- 각 서비스 기능에 필요한 최소한의 메서드만 포함하는 소규모 전용 인터페이스 분리
- 범용 CRUD 메서드 대신 비즈니스 케이스에 특화된 전용 쿼리 메서드 구현
- 변경 빈도가 유사한 컴포넌트끼리 묶는 고밀도 결합(High-affinity coupling) 배치 방식
Key Takeaway
추상화 자체보다 추상화의 방향성이 중요하며, 인터페이스는 제공 가능한 기능의 나열이 아닌 소비자가 필요로 하는 계약의 정의여야 함.
실천 포인트
Repository 인터페이스에 메서드가 과도하게 추가될 경우, 기능별로 인터페이스를 쪼개어 각 서비스가 필요한 메서드만 정의한 Protocol을 사용하게 할 것