소프트웨어 아키텍처 - 레이어드 아키텍처(Layered architecture)

SeungTaek·2022년 2월 4일
1
post-thumbnail

가장 흔한 아키텍처 스타일. 모놀리식 아키텍처 중 하나이다.
단순하고 대중적이면서 비용도 적게 들어 사실상 표준 아키텍처이다.

레이어 분리

  • 내부 컴포넌트는 논리적으로 수평한 레이어들로 구성된다.
  • 각 레이어는 애플리케이션에서 프레젠테이션 로직, 비즈니스 로직 등의 주어진 역할을 수행한다.
  • 일반적으로 프레젠테이션, 비즈니스, 퍼시스턴스, 데이터베이스의 4개 표준 레이어로 구성한다.
  • 물론 규모에 따라 병합하기도 하며, 그 이상의 레이어로 구성하기도 한다.

관심사 분리

  • 중요한 특징은 관심사의 분리이다.
  • 예를 들어 비즈니스 레이어는 데이터를 어떻게 받야아 하는지, 화면에는 어떻게 보여줄지 전혀 관여하지 않는다.
  • 따라서 기술적인 부분에 집중할 수 있지만, 변화에 반응하는 능력(민첩성)은 떨어진다는 단점이 있다.

도메인 변경의 어려움

  • 도메인 분할 아키텍처와 반대로 기술 역할에 따라 묶는다.
  • 반대로 이야기 하면 어떤 도메인은 모든 레이어에 분산되게 된다. 따라서 이 도메인을 변경하는것은 쉽지 않다.
  • 예를 들어 '고객' 도메인을 변경하려면 프레젠테이션, 비즈니스, 서비스, 데이터베이스 등을 모두 변경해야 한다.
  • 이런 이유로 레이어드 아키텍처 스타일은 도메인 주도 설계 방식과 잘 안 맞는다.

레이어 격리

  • 각 레이어는 폐쇄(closed) 또는 개방(open) 상태이다.
  • 폐쇄 레이어란 요청이 상위 레이어에서 하위 레이어로 이동하므로 중간에 어떤 레이어도 건너뛸 수 없다.
  • 예를 들어 프레젠테이션이 퍼시스턴스 레이어에 직접 액세스한다 하자. 퍼시스턴스 레이어에서 변경이 발생하는 경우 비즈니스 레이어, 프레젠테이션 레이어 둘 다 영향을 받게 되고, 결국 컴포넌트간의 상호 의존도가 높아진다.
  • 따라서 가능한 폐쇄 레이어로 설계하는게 유지 보수에 유리하다.

싱크홀 안티 패턴(architecture sinkhole)

  • 아키텍처 싱크홀 안티 패턴을 조심해야 한다.
  • 요청이 한 레이어에서 다른 레이어로 이동할 때 각 레이어가 아무 비즈니스 로직도 처리하지 않고 그냥 통과하는 것을 말한다.
  • 이런 흐름은 불필요한 객체 초기화 및 처리를 빈번하게 유발하고 쓸데없이 메모리를 소모하며 성능에도 부정적인 영향을 준다.
  • 물론 싱크홀 안티패턴이 없을 순 없다. 전체 요청의 20%가 싱크홀인 정도면 그런대로 괜찮은 수준이다.

왜 이 아키텍처 스타일을 사용하는가

  • 작고 단순한 앱이나 웹사이트에 알맞는 아키텍처이다. 특히 처음 구축을 할 때, 출발점으로 괜찮은 아키텍처 선택이다.
  • 그리 복잡하지 않으며 어쩌면 비용도 가장 저렴한 아키텍처 스타일이므로 소규모 애플리케이션을 간편하게 개발할 수 있다.
  • 물론 규모가 커질 수록 유지 보수성, 민첩성, 시험성, 배포성 같은 특성이 점점 나빠진다.

Reference

소프트웨어 아키텍처 101 (마크 리처즈, 닐포드, 한빛미디어)
이미지: https://cat-minzzi.tistory.com/74

profile
I Think So!

0개의 댓글