1. 소프트웨어 모듈화의 설계 원칙과 결합도의 개요
정의: 두 모듈 간의 상호 의존도 또는 연관 관계의 복잡성을 측정하는 척도.
설계 원칙: 모듈의 독립성을 높이기 위해 **"강한 응집도(Strong Cohesion)와 약한 결합도(Loose Coupling)"**를 지향함.
영향도: 결합도가 높을수록 오류의 전파(Ripple Effect) 가능성이 커지고 재사용성 및 유지보수성이 저하됨.
2. 소프트웨어 결합도의 종류 (약함 → 강함 순)
결합도는 데이터 전달 방식과 공유되는 자원의 범위에 따라 6가지 단계로 분류됩니다.
| 결합도 유형 | 특징 및 상세 내용 | 독립성 수준 |
| 자료 (Data) | 모듈 간 **매개변수(Parameter)**를 통해서만 데이터를 주고받는 경우 | 최상 (가장 바람직) |
| 스탬프 (Stamp) | 배열이나 객체(Structure) 등 데이터 구조가 매개변수로 전달되는 경우 | 양호 |
| 제어 (Control) | 어떻게 동작해야 하는지 지시하는 **제어 요소(Flag, Switch)**를 전달하는 경우 | 보통 |
| 외부 (External) | 모듈이 외부의 선언된 변수나 프로토콜, 디바이스를 공유하는 경우 | 미흡 |
| 공통 (Common) | 여러 모듈이 하나의 **전역 변수(Global Variable)**를 참조하는 경우 | 취약 |
| 내용 (Content) | 한 모듈이 다른 모듈의 내부 자료나 제어 흐름을 직접 참조/수정하는 경우 | 최악 (지양해야 함) |
3. 결합도 유형별 메커니즘 상세 분석
자료 결합도 (Data Coupling): * 단순한 스칼라 타입의 인수만 전달. 모듈 간 간섭이 최소화되어 가장 이상적인 형태.
스탬프 결합도 (Stamp Coupling): * 구조체 변경 시 이를 참조하는 모든 모듈에 영향이 감. 불필요한 데이터까지 노출될 우려가 있음.
제어 결합도 (Control Coupling): * 하위 모듈의 로직이 상위 모듈의 제어 신호에 종속됨. 권한 전도 현상이 발생할 수 있음.
공통 결합도 (Common Coupling): * 전역 변수 변경 시 이를 사용하는 모든 모듈을 다시 테스트해야 함. 부수 효과(Side Effect)의 주원인.
내용 결합도 (Content Coupling): * 타 모듈의 로직 일부를 공유하거나 직접 분기(Jump)하는 경우. 모듈 분할의 의미가 상실된 상태.
4. 결합도를 낮추기 위한 설계 전략 (Loose Coupling)
인터페이스 활용: 구체적인 구현 클래스가 아닌 추상화된 인터페이스에 의존하도록 설계 (Dependency Inversion).
의존성 주입 (DI): 객체 생성을 외부에서 주입받아 모듈 간 직접적인 결합을 제거.
메시지 큐 활용: 모듈 간 통신을 비동기 메시지 기반으로 처리하여 시간적/공간적 결합 해제.
캡슐화 강화: 내부 자료 구조를 은닉하고 정해진 메서드(Getter/Setter)를 통해서만 접근 허용.
5. 기술사적 제언: 마이크로서비스(MSA)에서의 서비스 결합도 관리
서비스 간 결합도: 모놀리식 구조의 코드 결합도가 MSA에서는 네트워크 기반의 서비스 결합도로 전이됨.
Shared Kernel 지양: 데이터베이스 공유(Shared DB)는 강한 공통 결합도를 유발하므로, 'Database per Service' 원칙을 통해 데이터 수준의 결합도를 격리해야 함.
결언: 결합도는 단순한 수치가 아닌 시스템의 **유연성(Agility)**과 직결됨. 기술사는 설계 단계부터 결합도를 지속적으로 측정(Static Analysis 등)하고 리팩토링하여 변화에 강한 아키텍처를 유지해야 함.
댓글 없음:
댓글 쓰기