가장 흔한 아키텍처 스타일. 모놀리식 아키텍처 중 하나이다.
단순하고 대중적이면서 비용도 적게 들어 사실상 표준 아키텍처이다.
레이어 분리
- 내부 컴포넌트는 논리적으로 수평한 레이어들로 구성된다.
- 각 레이어는 애플리케이션에서 프레젠테이션 로직, 비즈니스 로직 등의 주어진 역할을 수행한다.
- 일반적으로 프레젠테이션, 비즈니스, 퍼시스턴스, 데이터베이스의 4개 표준 레이어로 구성한다.
- 물론 규모에 따라 병합하기도 하며, 그 이상의 레이어로 구성하기도 한다.
관심사 분리
- 중요한 특징은 관심사의 분리이다.
- 예를 들어 비즈니스 레이어는 데이터를 어떻게 받야아 하는지, 화면에는 어떻게 보여줄지 전혀 관여하지 않는다.
- 따라서 기술적인 부분에 집중할 수 있지만, 변화에 반응하는 능력(민첩성)은 떨어진다는 단점이 있다.
도메인 변경의 어려움
- 도메인 분할 아키텍처와 반대로 기술 역할에 따라 묶는다.
- 반대로 이야기 하면 어떤 도메인은 모든 레이어에 분산되게 된다. 따라서 이 도메인을 변경하는것은 쉽지 않다.
- 예를 들어 '고객' 도메인을 변경하려면 프레젠테이션, 비즈니스, 서비스, 데이터베이스 등을 모두 변경해야 한다.
- 이런 이유로 레이어드 아키텍처 스타일은 도메인 주도 설계 방식과 잘 안 맞는다.
레이어 격리
- 각 레이어는 폐쇄(closed) 또는 개방(open) 상태이다.
- 폐쇄 레이어란 요청이 상위 레이어에서 하위 레이어로 이동하므로 중간에 어떤 레이어도 건너뛸 수 없다.
- 예를 들어 프레젠테이션이 퍼시스턴스 레이어에 직접 액세스한다 하자. 퍼시스턴스 레이어에서 변경이 발생하는 경우 비즈니스 레이어, 프레젠테이션 레이어 둘 다 영향을 받게 되고, 결국 컴포넌트간의 상호 의존도가 높아진다.
- 따라서 가능한 폐쇄 레이어로 설계하는게 유지 보수에 유리하다.
싱크홀 안티 패턴(architecture sinkhole)
- 아키텍처 싱크홀 안티 패턴을 조심해야 한다.
- 요청이 한 레이어에서 다른 레이어로 이동할 때 각 레이어가 아무 비즈니스 로직도 처리하지 않고 그냥 통과하는 것을 말한다.
- 이런 흐름은 불필요한 객체 초기화 및 처리를 빈번하게 유발하고 쓸데없이 메모리를 소모하며 성능에도 부정적인 영향을 준다.
- 물론 싱크홀 안티패턴이 없을 순 없다. 전체 요청의 20%가 싱크홀인 정도면 그런대로 괜찮은 수준이다.
왜 이 아키텍처 스타일을 사용하는가
- 작고 단순한 앱이나 웹사이트에 알맞는 아키텍처이다. 특히 처음 구축을 할 때, 출발점으로 괜찮은 아키텍처 선택이다.
- 그리 복잡하지 않으며 어쩌면 비용도 가장 저렴한 아키텍처 스타일이므로 소규모 애플리케이션을 간편하게 개발할 수 있다.
- 물론 규모가 커질 수록 유지 보수성, 민첩성, 시험성, 배포성 같은 특성이 점점 나빠진다.
Reference
소프트웨어 아키텍처 101 (마크 리처즈, 닐포드, 한빛미디어)
이미지: https://cat-minzzi.tistory.com/74