심화/MSA

[IntelliJ] DSM(Dependency Structure Matrix)

annovation 2025. 11. 6. 16:19

DSM(Dependency Structure Matrix)

 

💡DSM 이란?

  • 인텔리제이의 DSM(Dependency Structure Matrix)은 프로젝트 내 모듈이나 패키지 간의 의존성 관계를 매트릭스(행렬) 형태로 시각화하여 보여주는 분석 도구이다.

💡역할

  • 의존성 시각화 : 어떤 클래스가 다른 클래스를 얼마나 참조하고, 참조되는지 한눈에 파악할 수 있다.
  • 순환 의존성 탐지 : 코드의 결합도를 높여 유지보수를 어렵게 만드는 순환 의존성(A → B, B → A)을 붉은색으로 명확하게 표시해준다.
  • 아키텍처 규칙 검증 : "Controller는 Service에만 의존해야 한다"와 같은 설계 원칙이 잘 지켜지고 있는지 시각적으로 검증할 수 있다.
  • 리팩토링 방향 제시 : 특정 모듈에 과도하게 집중된 의존성이나 불필요한 관계를 찾아내어 코드 개선의 방향을 설정하는 데 유용하다.

DSM 분석 창(Tool Window) 보는 법

DSM 분석 창은 Code > Analyze Code > Dependency Matrix를 통해 열 수 있다.

  • 행(Row)과 열(Column)
    • 행과 열은 모두 프로젝트의 구조(모듈, 패키지, 클래스)를 나타낸다.
    • 가장 많이 사용되는(의존되는) 클래스일수록 아래쪽에 배치되어, 이상적인 구조에서는 매트릭스 좌하단에 삼각형 모양이 만들어진다.
  • 의존성 흐름 : Green → Yellow
    • 특정 행을 선택하면, 해당 행에 대한 의존성 정보가 색상으로 표시된다.
      • 초록색(Green) : 내가 의존하는 대상 (내가 화살표를 보내는 쪽)
      • 노란색(Yellow) : 나를 의존하는 대상 (나에게 화살표가 오는 쪽)
    • 공식 문서에서는 이를 "의존성은 항상 초록색에서 노란색으로 흐른다(flow from Green to Yellow)"고 설명한다.
  • 셀(Cell)의 의미
    • 각 셀에 표시된 숫자는 의존성의 개수를 의미하며, 숫자가 클수록 셀의 색상이 진해진다.
    • A행 B열의 숫자가 16이라면, 이는 "A가 B에 16번 의존한다"는 뜻이다.
  • 순환 의존성(Cycles)
    • 상호 의존 관계, 즉 순환 의존성은 붉은색으로 표시되어 즉시 식별할 수 있다.

MSA 환경에서의 DSM 활용

 

💡MSA 환경에서의 DSM 활용

 

1) 서비스 독립성과 자율성 보장

  • MSA에서는 각 서비스가 독립적인 코드와 데이터, 개발 및 배포 주기를 갖기 때문에 서비스 간 결합이 약해져야 하고, 각 서비스의 변경이 전체 시스템에 미치는 영향을 최소화해야 한다.
  • 이런 목적을 달성하려면 서비스 구조가 올바르게 설계되어 있는지, 불필요한 의존 관계나 순환 참조가 없는지 지속적으로 점검해야 한다.

2) 복잡성 증가와 아키텍처 구조 관리

  • MSA는 서비스가 분리되면서 소스 구조와 의존성 관리가 훨씬 복잡해진다.
  • 여러 팀이 각기 다른 기술 스택이나 배포 주기를 가질 수 있어 모듈 간 의존성, 서비스 계층 구조가 꼬이기 쉽다.
  • DSM(Dependency Structure Matrix) 분석 도구는 서비스, 모듈, 패키지 간의 참조 관계를 한눈에 파악할 수 있게 해준다.

출처

1) DSM docs

http://jetbrains.com/help/idea/dsm-analysis.html#dsm-explore-dependencies

 

Dependency Structure Matrix | IntelliJ IDEA

 

www.jetbrains.com

2) https://teamsparta.notion.site/251024-DDD-2992dc3ef5148043a6e6d4d5976bd598

 

[251024] DDD 세션 | Notion

Hosted by Notion Sites — The easiest way to get a website up and running.

teamsparta.notion.site