피드로 돌아가기
Code That Lasts: Mastering Software Design Principles (with Golang)
Dev.toDev.to
Backend

SOLID 원칙 기반 Golang 결제 시스템의 Loosely Coupled 아키텍처 설계

Code That Lasts: Mastering Software Design Principles (with Golang)

ROBERTO CARLOS HUAMAN RIVERA2026년 5월 3일8intermediate

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) 의존성을 인터페이스로 추상화하여 비즈니스 로직의 독립성 확보 여부 점검 - 인터페이스 설계 시 최대한 작게 유지하여 클라이언트가 필요한 기능만 의존하는지 확인

원문 읽기