[소프트웨어 아키텍처] 레이어드 아키텍처란 무엇인가?

레이어드 아키텍처란?

레이어드 아키텍처는 가장 흔한 아키텍처 스타일 중 하나 입니다. 단순하고 대중적이면서 비용도 적게 들어 모든 애플리케이션의 사실상의 표준 아키텍처라고 볼 수 있습니다. UI, 백엔드, 데이터베이스를 계층화 하여 프로그램을 구현하는 방식이라고 볼 수 있습니다.

토폴로지

레이어드 아키텍처의 내부 컴포넌트는 논리적으로 수평한 레이어들로 구성되며, 각 레이어는 애플리케이션 주어진 역할을 수행 합니다. 레이어의 개수와 유형은 특별한 제한이 없지만 일반적으로 프리젠테이션, 비즈니스, 퍼시스턴스, 데이터베이스 4개의 표준 레이어로 구성 됩니다.

레이어드 아키텍처

1️⃣ 프리젠테이션 레이어 (Presentation Layer)

  • 사용자와 직접 상호작용
  • 화면(UI), 컨트롤러, API 엔드포인트
  • 요청/응답 처리

2️⃣ 비즈니스 레이어 (Business Layer)

  • 핵심 비즈니스 로직
  • 정책, 규칙, 유스케이스 처리
  • 트랜잭션 단위의 처리 흐름 담당

3️⃣ 퍼시스턴스 레이어 (Persistence Layer)

  • 데이터 접근 책임
  • Repository, DAO, ORM
  • 비즈니스 로직과 DB 사이의 완충 계층

4️⃣ 데이터베이스 레이어 (Database Layer)

  • 실제 데이터 저장소
  • RDBMS / NoSQL
  • 테이블, 인덱스, 스키마

레이어 격리

레이어드 아키텍처의 각 레이어는 폐쇄 또는 개방된 상태 입니다. 폐쇄 레이어란? 요청이 상위 레이어에서 하위 레이어로 이동하므로 중간의 어떤 레이어도 건너뛸 수 없고 현재 레이어를 거처야 바로 그 다음 레이어로 나아갈 수 있다는 뜻 입니다. 예를 들어, 프리젠테이션 레이어에서 시작된 요청은 일단 비즈니스레이어로 들어간 후 퍼시스턴스 레이를 거쳐 제일 마지막에 데이터베이스 레이어에 도달합니다. 그러나 단순한 조회 요청이라면 굳이 불필요한 레이어를 모두 탈 필요가 있을지 고민이 필요 합니다. 바로 프리젠테이션 레이어에서 데이터베이스 레이어로 가면 어떨까요? 이런것을 레이어의 개방이라고 합니다. 그러나 이런 레이어 개방으로 인해 퍼시스턴스 레이어의 변경이 일어나면 새롭게 개방된 프리젠테이션 레이어 뿐만 아니라 상위인 비즈니스 레이어까지 2가지 레이어에서 영향이 미치기 때문에 오랜시간 개발이 진행되면 진흙잡탕의 코드로 변화할 수 있습니다.

레이어 추가

비즈니스 레이어서 프리젠테이션 레이어를 위해서 공유 해야할 객체를 만든 공유 컴포넌트 기능을 만들었다고 가정해 봅시다. 공유 컴포넌트 레이어를 개방해 놓지 않고 폐쇄를 해놨다면 비즈니스 레이어는 무조건 공유 컴퓨넌트 레이어를 거처야 합니다. 그러나 효율성을 위해 해당 레이어는 개방형으로 만들어 비즈니스 레이어는 필요시에만 해당 레이어를 거치게 할 수 있습니다.

레이어드 아키텍처 주의사항

레이어드 아키텍처는 아키텍처 싱크홀 안티패턴을 조심해야 합니다. 싱크홀 안티패턴은 요청한 레이어에서 다른 레이어로 이동할때 각 레이어가 아무 비즈니스 로직도 처리하지 않고 그냥 통과 시키는 안티패턴을 말합니다. 단순한 조회의 그런 이런 싱크홀 안티패턴이 발생할 위험이 높습니다. 이런 패턴으로 인해 불필요한 메모리 사용 및 성능에도 부정적인 영향을 미칠 수 있습니다. 하지만 이런 안티패턴이 발생하지 않을수는 없습니다. 그래서 보통 전체 요청의 20% 정도가 싱크홀이면 괜찮다고 볼 수 있게 판단을 하지만 80%정도가 싱크홀이라면 해당 아키텍처가 문제가 있다고 볼 수 있습니다.

관련 글 보기