피드로 돌아가기
Dev.toBackend
원문 읽기
SOLID 원칙 기반 Golang 결제 시스템의 Loosely Coupled 아키텍처 설계
Code That Lasts: Mastering Software Design Principles (with Golang)
AI 요약
Context
단일 함수 내에 결제 수단별 로직과 DB 저장 로직이 혼재된 Spaghetti Code 구조의 한계 분석. 신규 결제 수단 추가 시 기존 코드 수정이 불가피하여 OCP 및 SRP를 위반하며 유지보수 리스크가 증대되는 상황.
Technical Solution
- Payer Interface 정의를 통한 결제 수단 추상화로 신규 결제 방식 추가 시 기존 로직 수정 없이 확장 가능한 OCP 구조 구현
- 결제 처리와 데이터 저장을 분리한 SRP 적용으로 각 모듈의 변경 이유를 단일화한 설계
- CheckoutService가 구체적인 구현체가 아닌 Interface에 의존하게 하는 DIP 적용으로 고수준 모듈과 저수준 모듈 간 결합도 해제
- 1~3개의 메서드로 구성된 Small Interface 설계를 통한 ISP 준수로 클라이언트의 불필요한 의존성 제거
- Interface 기반의 Mocking 도입을 통한 인프라 의존성 제거 및 Unit Test 실행 속도 최적화
실천 포인트
- 함수 내 조건문(if/else)으로 비즈니스 로직이 분기된다면 Interface를 통한 다형성 교체 검토 - 구조체 설계 시 하나의 책임만 가지는지 확인하고, 다중 책임 발견 시 패키지 및 파일 단위 분리 수행 - 저수준 인프라(DB, API) 의존성을 인터페이스로 추상화하여 비즈니스 로직의 독립성 확보 여부 점검 - 인터페이스 설계 시 최대한 작게 유지하여 클라이언트가 필요한 기능만 의존하는지 확인