본문 바로가기
Architecture

[Clean Architecture 정리] 14장. 컴포넌트 결합 (1)

by 테리는당근을좋아해 2022. 7. 27.

컴포넌트 결합

 

의존성 비순환 원칙 (ADP, Acyclic Dependency Principle)

 

"컴포넌트 의존성 그래프에 순환(cycle)이 발생하면 안 된다."

 

개발팀에서 프로젝트를 진행하다보면, 오늘 정상적으로 실행되던 내 코드가 다음날 갑자기 오류가 발생하는 경우가 있다.

 

여러가지 이유가 있지만, 그 중 하나는 내 코드가 의존하는 어떤 것에 변경이 발생했기 때문이다.

 

책에서는 이를 '숙취 증후군(the morning after syndrome)' 이라 표현했는데,

아마도 변경에 대한 후유증으로 해석하면 될 것 같다.

 

이러한 문제의 해결책으로 두 가지를 제시한다.

 

첫번째는 '주 단위 빌드(Weekly Build)'로 독립된 환경해서 개발을 진행하다가 일주일에 한 번 통합하는 과정을 거친다는 것이다. 하지만 이는 임시방편일 뿐, 근본적인 문제해결을 하지 못한다.

 

두번째는 '순환 의존성을 제거하는 것'으로 이는 '숙취 증후군'을 근본적으로 해결할 수 있는 해결책이 된다.

 

 

 

순환 의존성 제거하기

개발 환경을 릴리스 가능한 컴포넌트 단위로 분리해 단일 개발팀에서 컴포넌트를 책임질 수 있도록 하면,

특정 컴포넌트가 변경되더라도 다른 팀에 즉각적인 영향을 주지 않는다.

 

각 팀은 특정 컴포넌트의 새 릴리스 버전이 출시되면 자신의 컴포넌트를 해당 컴포넌트에 맞게 수정할 시기를 선택할 수 있고, 통합은 작고 점진적으로 이루어지게 된다.

 

이러한 방식에서 중요한 점은 컴포넌트 사이의 의존성 구조이다.

의존성 구조에서 순환이 발생해서는 안 된다.

 

 

DAG, Directed Graph

DAG, Directed Acyclic Graph

위 컴포넌트 다이어그램은 순환 의존이 발생하지 않는 사례이다.

 

Presenters 컴포넌트 개발팀에 새로운 릴리스 버전을 출시하면 해당 컴포넌트를 의존하는 Main, View 컴포넌트 개발팀은 단지 언제 새 릴리스 버전을 적용할지 결정하기만 하면 된다.

 

Main 컴포넌트의 새 릴리스 버전이 나오게 되더라도 어떤 컴포넌트도 영향을 받지 않는다.

 

시스템 전체를 릴리스해야한다면 릴리스 절차는 상향식 방식으로 진행된다.

구성요소 간 의존성을 파악하면 시스템을 빌드하는 방법을 알 수 있다.

 

 

순환 의존 발생 사례

순환 의존(dependency cycle) 발생

순환 의존이 발생한 사례이다.

 

Entities, Interactors, Authorizer 컴포넌트는 서로 의존하고 있어 순환이 발생했다.

해당 컴포넌트를 개발하는 개발팀은 앞에서 말했던 '숙취 증후군(the morning after syndrome)'을 겪을 가능성이 높다.

 

순환 의존으로 묶인 컴포넌트는 마치 하나의 거대한 컴포넌트로 동작하며, 각 개발 팀은 항상 정확하게 동일한 릴리스를 사용해야 한다.

 

순환 의존이 발생하면 하나의 컴포넌트를 테스트하기 위해 순환하는 나머지 컴포넌트 또한 빌드해야하며, 컴포넌트 분리가 어렵고, 빌드 관련 이슈들이 많이 발생하게 된다.

 

또한, 컴포넌트를 어떤 순서로 빌드해야할지도 파악하기 힘들다.

 

 

순환 끊기

컴포넌트 사이의 순환을 끊기 위한 두 가지 메커니즘 '의존성 역전 원칙(DIP) 적용하기', '순환하는 컴포넌트들이 의존하는 새로운 컴포넌트 만들기'가 있다.

 

 

의존성 역전 원칙(DIP) 적용

Entities 컴포넌트 안에 Permissions 인터페이스를 두어 Authorizer 컴포넌트가 Entities 컴포넌트를 의존하도록 역전시켰다.

 

 

순환하는 컴포넌트들이 의존하는 새로운 컴포넌트 만들기

Entities 컴포넌트와 Authorizer 컴포넌트가 의존하는 Permissions 컴포넌트를 만들어 의존성을 끊어버렸다.

 

 

흐트러짐(Jitters)

요구 사항이 변경되면 의존성 구조도 변경될 수 있다.

의존성 구조는 흐트러지면서 다시 성장한다.

의존성 구조를 계속해서 관찰하며 순환 의존이 발생하면 끊어줘야 한다.

 

 

서적 : http://www.yes24.com/Product/Goods/77283734

 

클린 아키텍처 - YES24

살아있는 전설이 들려주는 실용적인 소프트웨어 아키텍처 원칙『클린 코드』와 『클린 코더』의 저자이자 전설적인 소프트웨어 장인인 로버트 C. 마틴은 이 책 『클린 아키텍처』에서 이러한

www.yes24.com

 

댓글