[소프트웨어 설계] 소프트웨어 설계에서 말하는 거버넌스란 무엇인가?

소프트웨어 거버넌스

소프트웨어 설계에서 말하는 거버넌스는 단순한 규칙 모음이 아니다.

“소프트웨어가 일관된 원칙과 구조 아래에서 설계, 확장, 변경되도록 통제하는 설계 상위 체계”

즉, 정리하면 설계 의사결정의 기준, 권한, 책임을 명확히 하여 시스템이 장기적으로 유지, 확장 가능하도록 만드는 구조적 통계 체계 라고 볼 수 있다.

1. 소프트웨어 설계 거버넌스가 필요한 이유

  • 개발자마다 설계 스타일이 다르다(제각각)
  • 시간이 지날수도록 기능은 늘어나는데 구조는 복잡해짐
  • 공통 로직이 복붙 코드로 확산됨
  • 신규 요구사항이 올 때마다 기존 코드 붕괴
  • “이건 왜 이렇게 만들었지?” 아무도 모름

2. 소프트웨어 설계 거버넌스 핵심 구성 요소 5가지

(1) 설계 원칙

  • 도메인 로직은 UI/DB에 의존하지 않는다.
  • 조건/룰은 하드코딩하지 않는다.
  • 확장 포인트는 인터페이스로 노출한다.
  • 데이터 구조 변경이 비즈니스 로직을 깨지 않는다.

(2) 책임과 경계
모듈/도메인/레이어의 책임 정의
어디까지가 누구 책임인가?

  • Controller : 요청/응답만
  • Application Service : 유스케이스조합
  • Domain : 비즈니스 규칙
  • Infrastructure : 기술구현

(3) 아키텍처 규칙

  • 계층간 의존성 방향
  • 허용/금지 규칙
  • Domain -> Infrastructure 참조금지
  • Batch와 Online 도메인 분리
  • 외부 시스템 접근은 Adapter만 허용

(4) 확장 방식에 대한 규칙

  • if-else 추가 X
  • 전략 패턴/룰 테이블/메타데이터 기반 O
  • 신규 타입 추가시 기존 코드 수정 최소화

(5) 설계 검증 프로세스

  • 설계 리뷰
  • ADR(Architecture Decision Record)
  • 아키텍처 위원회 또는 책임자 승인

관련 글 보기