본문 바로가기
기타

[MSA] 내용 결합, 공통 결합이란? 그리고 차이점

by Nhahan 2025. 4. 17.

내용 결합과 공통 결합은 MSA에서 피해야할 높은 수준의 결합도를 나타낸다. 두 가지 모두 서비스 간의 독립성을 해치게 된다.

 

1. 내용 결합(Content Coupling)

정의

한 서비스가 다른 서비스의 내부 구현 세부 정보에 직접 접근하거나 수정하는 경우. 매우 높은 수준의 결합이며, 가장 피해야할 유형.

 

마이크로서비스에서의 예시

  • A서비스가 B서비스의 내부 DB에 직접 쿼리를 실행
  • A서비스가 B서비스의 내부 코드나 private 함수를 직접 호출
  • A서비스가 B서비스의 내부 파일 시스템에 직접 접근

문제점

  • 캡슐화 위반
  • 독립적 배포 불가
  • 변경의 어려움

마이크로서비스의 핵심 원칙힌 서비스 자율성(Autonomy)와 경계 컨텍스트(Bounded Context)를 정면으로 위반하므로 절대적으로 피해야한다.

 

2. 공통 결합(Common Coupling)

정의

여러 서비스가 공유된 전역 데이터 저장소나 상태에 함께 접근하고 이를 통해 상호작용하는 경우. 이 공유 자원을 통해 서비스들이 간접적으로 결합된다.

 

마이크로서비스에서의 예시

  • A, B, C서비스가 동일한 데이터베이스의 특정 테이블들을 공유하며 읽고 쓰는 경우(Database per service 패턴 위반).
  • 여러 서비스가 공유 캐시를 단순 캐시가 아닌 사실상의 데이터 원천(source of truth)로 사용하는 경우.
  • 여러 서비스가 공유 파일 시스템의 특정 디렉토리에 파일을 읽고 쓰며 데이터를 교환하는 경우.

문제점

  • 숨겨진 의존성
  • 변경 영향 범위 예측 불가
  • 독립적 진화 방해
  • 경합 발생

내용 결합보다는 덜 직접적이지만, 여전히 서비스 자율성을 심각하게 저해하는 높은 수준의 결합. 각 마이크로서비스가 자신만의 데이터베이스를 소유하는 Database per service 패턴을 강력히 권장.

댓글