더북(TheBook)

계층화 아키텍처 스타일

소프트웨어 엘리먼트를 계층별로 구성하는 계층화 아키텍처(layered architecture)는 전형적인 아키텍처 스타일입니다. 계층마다 명확히 정의된 역할을 분담하며, 계층 간 디펜던시는 아키텍처로 제한합니다. 따라서 어떤 계층은 바로 하위에 있는 계층에만 의존하거나(계층화를 엄격히 할 경우), 하위에 위치한 어느 한 계층에 의존합니다.

계층화 아키텍처는 앞서 배운 4뷰 모두 적용할 수 있습니다. 여러분도 잘 아는 3계층 아키텍처가 바로 계층화 아키텍처를 논리 뷰에 적용한 사례로, 애플리케이션 클래스를 다음 세 계층으로 구성한 아키텍처입니다.

표현(프레젠테이션) 계층(presentation layer): 사용자 인터페이스 또는 외부 API가 구현된 계층

비즈니스 로직 계층(business logic layer): 비즈니스 로직이 구현된 계층

영속화(퍼시스턴스) 계층(persistence layer): DB 상호 작용 로직이 구현된 계층

 

하지만 계층화 아키텍처는 몇 가지 중요한 흠이 있습니다.

표현 계층이 하나뿐이다: 애플리케이션을 호출하는 시스템이 하나밖에 없을까?

영속화 계층이 하나뿐이다: 애플리케이션이 상호 작용하는 DB가 정말 하나뿐일까?

비즈니스 로직 계층을 영속화 계층에 의존하는 형태로 정의한다: 이론적으로 이런 디펜던시 때문에 DB 없이 비즈니스 로직을 테스트하는 것은 불가능합니다.

 

또 계층화 아키텍처는 잘 설계된 애플리케이션에서 디펜던시를 잘못 나타내는 문제도 있습니다. 일반적으로 비즈니스 로직 계층은 인터페이스나 데이터 접근 메서드가 정의된 인터페이스 리포지터리를 정의하고, 영속화 계층은 리포지터리 인터페이스를 구현한 DAO 클래스를 정의합니다. 결국 실제 디펜던시가 계층화 아키텍처에 기술된 것과는 정반대입니다.

육각형 아키텍처는 이런 문제점을 해결하고자 고안되었습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.