피드로 돌아가기
Dev.toBackend
원문 읽기
Hierarchy를 배제한 Composition 기반 설계로 Microservices 유지보수성 극대화
Composition over Inheritance in Go: The Design Choice That Makes Microservices Boring in the Best Way
AI 요약
Context
전통적인 OOP의 Inheritance 구조는 클래스 계층 심화에 따른 강한 결합(Tight Coupling)을 유발함. 특히 비즈니스 요구사항 변경 시 상위 클래스의 수정이 하위 모든 타입에 영향을 주는 Side Effect와 불필요한 기능 상속 문제가 병목으로 작용함.
Technical Solution
- Taxonomy 기반의 계층 구조 대신 객체가 수행해야 할 행위 중심의 Capability 모델링 채택
- Struct Embedding을 통한 데이터와 메서드의 명시적 조합으로 Inheritance의 코드 재사용성 확보
- Implicit Contract 기반의 Interface 설계를 통해 타입 간 의존성을 최소화하고 결합도 분리
- Dependency Injection 패턴을 활용하여 Logger, Repository 등 필요한 구성 요소를 외부에서 주입하는 구조 설계
- context.Context 전파를 통한 Concurrency 및 Cancellation 제어를 아키텍처 레벨에서 표준화
- 작은 단위의 Capability 인터페이스를 연결하여 복잡한 Saga Workflow 및 Outbox 패턴을 유연하게 구현
실천 포인트
- 상속 계층을 설계하기 전, 해당 기능이 여러 타입에서 공통적으로 필요한 'Capability'인지 검토 - Interface를 정의할 때 메서드 개수를 최소화하여 구현체의 부담을 줄이고 재사용성 향상 - 클래스 계층 구조가 복잡해지는 시점에 Composition으로 전환하여 의존성 그래프를 단순화 - 명시적인 주입(Injection)을 통해 객체 간의 관계를 가시화하고 테스트 가능성 확보