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
'심화 > MSA' 카테고리의 다른 글
| [대규모 스트림 처리] 수백만 명의 사용자가 동시에 접속하는 시스템을 어떻게 만들지? (0) | 2025.11.18 |
|---|---|
| [Zipkin] 분산 추적 시스템 (업데이트 중..) (0) | 2025.11.12 |
| [MSA] Spring Boot 개별 인스턴스 yml 설정 (0) | 2025.11.05 |
| [MSA] Spring Cloud Config (0) | 2025.11.04 |
| [MSA] 멀티 모듈 환경에서 Github Actions를 활용한 CI 구축 (0) | 2025.11.03 |