지난 3일간 2-Tier, 3-Tier 아키텍처와 Layer 및 Tier 개념을 비교하며 정리했습니다. 이
번에는 소프트웨어 개발에서 자주 사용되는 Layered Architecture에 대해 정리하겠습니다.
레이어드 아키텍처는 소프트웨어 개발에서 가장 널리 사용되는 아키텍처 패턴 중 하나입니다.
레이어드 아키텍처는 여러 개의 수평적 레이어로 구성되며, 각 레이어는 애플리케이션에서 특정한 역할을 수행합니다.
구성되는 레이어의 개수에 따라 N-Tier 아키텍처라고도 합니다.
레이어의 개수와 유형은 고정되어 있지 않지만, 일반적으로 3개에서 5개 사이로 구성됩니다.
레이어드 아키텍처에서는 각 레이어가 특정한 역할과 책임을 가지며, 이를 통해 관심사를 분리합니다.
이는 응집도를 높이고 결합도를 낮춰 재사용성과 유지보수성을 향상시키기 위한 전략입니다.
관심사가 분리되면 각 구성 요소가 자신의 역할과 책임에만 집중할 수 있으며, 다른 요소에 미치는 영향이 줄어듭니다.
이를 통해 테스트가 용이해지고, 코드의 변경이 다른 부분에 영향을 미칠 가능성을 줄일 수 있습니다.
따라서 레이어드 아키텍처에서는 관심사에 따라 계층을 분리합니다.
대표적인 레이어드 아키텍처는 4-Tier 구조로 구성됩니다.
1. Presentation Layer: 사용자 입력을 처리하고 UI를 담당합니다.
2. Business Layer: 핵심 비즈니스 로직을 수행합니다.
3. Persistence Layer: 데이터를 저장하고 불러오는 역할을 합니다.
4. Database Layer: 실제 데이터베이스를 관리하는 계층입니다.
Persistence Layer를 거치지 않고 Database Layer에서 직접 데이터를 가져와도 될 것처럼 보이지만,
이는 데이터베이스 변경 시 Presentation Layer까지 영향을 미칠 수 있습니다.
하지만 계층 간 수직 이동만 허용한다면, Persistence Layer까지만 수정하면 되므로 유지보수성이 향상됩니다.
모든 계층이 인접한 계층을 반드시 통과하도록 강제하는 방식입니다.
즉, 상위 계층은 반드시 바로 아래 계층을 통해서만 하위 계층으로 이동할 수 있습니다.
일부 계층이 건너뛰는 것을 허용하는 방식입니다.
예를 들어, Business Layer를 거치지 않고 Presentation Layer에서 Persistence Layer로 바로 접근할 수도 있습니다.
하지만 이는 의존성을 증가시킬 수 있으므로 문서화하고 신중하게 사용해야 합니다.
싱크홀 안티패턴은 데이터가 각 계층을 지나면서 별도의 로직 없이 그대로 전달되는 경우를 의미합니다.
이는 불필요한 오버헤드를 초래할 수 있으며,
필요할 경우 특정 계층을 Open으로 설정하여 건너뛰는 방식도 고려할 수 있습니다.
보통 80-20 규칙을 적용하여, 20% 이하의 단순 통과 처리만 허용하는 것이 좋습니다