기타

DSM을 이용하여 IntelliJ 에서 패키지 간 의존성 확인하기

v0o0v 2022. 3. 30. 17:52

DSM(Dependency Structure Matrix)

프로젝트를 진행 할 때 정적으로 아키텍처를 점검해야 하는 경우가 종종 있다. 이때 여러 툴을 사용하는데 DSM을 사용하면 모듈간의 의존성을 한눈에 확인할 수 있다.

DSM 이란?

DSM은 모듈간의 관계를 2차원 매트릭에 나타낸 테이블.

테이블을 통해서 모듈간의 의존관계 / 의존강도 / 순환사이클 등을 확인할 수 있다.

image

DSM 보는 방법

image

  • 위 모듈에서 왼쪽 모듈에 X번 의존한다
    • A는 C에 의존한다.
    • C는 A/B에 의존한다.
  • 열과 행을 포개었을때 둘 다 값이 있으면 순환의존이다
    • C -> A -> C
    • 포개었을 때 둘다 값이 있다는 뜻은 서로 간에 의존이 있다는 뜻이기 때문에 순환 의존관계이다.
  • 의존 숫자가 유독 높다면 의존이 너무 많이 몰려있다는 뜻이다

DSM 응용

  • Layer 아키텍처
    • image
    • 우측 상단에 값이 없고 왼쪽 하단에만 값이 있다면 레이어드 아키텍처. 위 레이어만 아래 레이어에 의존하기 때문에 이런식으로 표현된다
    • image
    • 만약 레이어 의존관계가 엄격하게 바로 아래 레이어에만 의존을 갖는다면 위와 같이 표현된다.
    • image
    • 만약 위와 같은 모양이 나온다면 해당 부분은 레이어드 아키텍처의 규칙을 위반했다고 판단하고 리팩토링을 진행해야 한다
    • image
    • 패키지 내부에서는 같은 레이어기 때문에 순환참조가 더 심하게 나타날 수 있다. Project에 모든 클래스가 의존하고 있고 Project는 다른 클래스에 모든 의존관계를 가지고 있는 매우 안좋은 케이스이다.
    • 또한 이런 상황에서 ProjectLoader는 Services 패키지에 의존하고 있어서 만약 Services에 변화가 생기면 ProjectLoader에 변화가 전파되고 이는 다시 Project에 전파되면서 모든 클래스에 영향을 주게된다.

IntelliJ의 DSM 활용

IntelliJ에서는 Ultimate 버전에 한해서 DSM 플러그인이 기본적으로 제공된다.

메뉴 Code -> Analyze Code -> Dependency Matrix

  • 자동으로 현재 프로젝트나 모듈의 DSM을 생성해준다
  • 순환 참조 관계를 표현해준다
    • image
  • 특정 컬럼을 찍으면 열과 행에 색을 주어서 의존 관계를 표시한다(녹색이 노란색에 의존)
    • image
  • 특정 컬럼에서 의존 관계에 있는 모든 사항을 정리해서 볼 수 있다
    • image
  • 특정 패키지에 있는 클래스만 따로 열어서 확인 할 수 있다. 아래 그림에서는 클래스 간에 3자 순환 참조가 나타난다. 따라서 컬럼에는 빨간색이 없지만 해당 영역에 큰 빨간 사각형이 나타나는 것을 볼 수 있다.
  • image

출처