서론

지난 3일간 2-Tier, 3-Tier 아키텍처와 Layer 및 Tier 개념을 비교하며 정리했습니다. 이
번에는 소프트웨어 개발에서 자주 사용되는 Layered Architecture에 대해 정리하겠습니다.

Layered Architecture

레이어드 아키텍처는 소프트웨어 개발에서 가장 널리 사용되는 아키텍처 패턴 중 하나입니다.
레이어드 아키텍처는 여러 개의 수평적 레이어로 구성되며, 각 레이어는 애플리케이션에서 특정한 역할을 수행합니다.
구성되는 레이어의 개수에 따라 N-Tier 아키텍처라고도 합니다.

레이어의 개수와 유형은 고정되어 있지 않지만, 일반적으로 3개에서 5개 사이로 구성됩니다.

관심사의 분리

레이어드 아키텍처에서는 각 레이어가 특정한 역할과 책임을 가지며, 이를 통해 관심사를 분리합니다.
이는 응집도를 높이고 결합도를 낮춰 재사용성과 유지보수성을 향상시키기 위한 전략입니다.

관심사를 분리하는 이유

관심사가 분리되면 각 구성 요소가 자신의 역할과 책임에만 집중할 수 있으며, 다른 요소에 미치는 영향이 줄어듭니다.
이를 통해 테스트가 용이해지고, 코드의 변경이 다른 부분에 영향을 미칠 가능성을 줄일 수 있습니다.

따라서 레이어드 아키텍처에서는 관심사에 따라 계층을 분리합니다.

주요 특징

  • 단방향 의존성: 하위 계층은 상위 계층을 알지 못해야 하며, 상위 계층이 하위 계층을 호출하는 방식으로 동작합니다.
  • 추상화된 인터페이스 사용: 각 레이어는 하위 레이어와 인터페이스를 통해 통신합니다.
  • 계층 이동의 수직 구조: 요청이 상위 계층에서 하위 계층으로 이동하며, 응답은 다시 상위 계층으로 전달됩니다.

대표적인 예시: 4-Tier 레이어드 아키텍처

대표적인 레이어드 아키텍처는 4-Tier 구조로 구성됩니다.
1. Presentation Layer: 사용자 입력을 처리하고 UI를 담당합니다.
2. Business Layer: 핵심 비즈니스 로직을 수행합니다.
3. Persistence Layer: 데이터를 저장하고 불러오는 역할을 합니다.
4. Database Layer: 실제 데이터베이스를 관리하는 계층입니다.

왜 이러한 구조를 사용할까?

Persistence Layer를 거치지 않고 Database Layer에서 직접 데이터를 가져와도 될 것처럼 보이지만,
이는 데이터베이스 변경 시 Presentation Layer까지 영향을 미칠 수 있습니다.
하지만 계층 간 수직 이동만 허용한다면, Persistence Layer까지만 수정하면 되므로 유지보수성이 향상됩니다.

Closed vs. Open Layered Architecture

Closed Layered Architecture

모든 계층이 인접한 계층을 반드시 통과하도록 강제하는 방식입니다.
즉, 상위 계층은 반드시 바로 아래 계층을 통해서만 하위 계층으로 이동할 수 있습니다.

Open Layered Architecture

일부 계층이 건너뛰는 것을 허용하는 방식입니다.
예를 들어, Business Layer를 거치지 않고 Presentation Layer에서 Persistence Layer로 바로 접근할 수도 있습니다.
하지만 이는 의존성을 증가시킬 수 있으므로 문서화하고 신중하게 사용해야 합니다.

싱크홀 안티패턴 (Sinkhole Anti-Pattern)

싱크홀 안티패턴은 데이터가 각 계층을 지나면서 별도의 로직 없이 그대로 전달되는 경우를 의미합니다.
이는 불필요한 오버헤드를 초래할 수 있으며,
필요할 경우 특정 계층을 Open으로 설정하여 건너뛰는 방식도 고려할 수 있습니다.
보통 80-20 규칙을 적용하여, 20% 이하의 단순 통과 처리만 허용하는 것이 좋습니다

레이어드 아키텍처의 장점

  • 구조가 명확하고 이해하기 쉽다: 관심사가 분리되어 있어 설계가 직관적입니다.
  • 변경에 대한 영향도가 낮다: 특정 계층의 변경이 다른 계층에 미치는 영향을 최소화할 수 있습니다.
  • 테스트가 용이하다: 계층별로 독립적인 테스트가 가능하여 단위 테스트가 쉬워집니다.
  • 리팩토링이 유연하다: 특정 계층을 교체하거나 수정하기 쉽습니다.

레이어드 아키텍처의 단점

  • 계층 간 의존성이 존재: 인접한 상위 레이어에 대한 의존성을 제거하기 어렵습니다.
  • 확장성이 낮다: 모놀리식 구조로 결합되어 있기 때문에 확장성이 제한적입니다.
  • 계층 간 이동 비용 발생: 각 계층을 거치면서 추가적인 호출과 오버헤드가 발생합니다.

결론

  • 레이어드 아키텍처는 소프트웨어 설계에서 가장 널리 사용되는 구조로, 관심사에 따라 분립합니다
  • 관심사에 따라 분리하는 이유는 특정 계층의 수정이 전체 계층에 미치는 영향을 최소화하기 위함입니다
  • 레이어드 아키텍처는 단방향 의존성을 가지며, 인접한 계층으로 수직이동합니다.
    요청은 하위 계층으로만 이동하며, 응답은 다시 상위 계층으로만 이동합니다
  • 반드시 인접한 계층으로 이동하는 계층을 Closed, 건너뛸 수 있는 계층을 open이라고합니다
  • 싱크홀 안티패턴은 데이터가 인접한 계층을 지나면서 별도의 로직없이 그대로 이동하는 경우를 말합니다
  • 싱크홀 안티패턴은 오버헤드를 일으키는 단점이 있어, 80-20 규칙에 의해 20% 이하의 비율로 관리해야합니다
  • 레이어드 아키텍처의 장점은 테스트와 리팩토링이 용이하고 유연합니다
  • 레이어드 아키텍처의 단점은 계층간 이동 비용과 모놀리식 구조로 결합되어 있어 확장성이 낮습니다

참고

profile
Software Developer

0개의 댓글