소프트웨어의 계층은 책임을 명확히 분리하고 구성 요소 간의 종속성을 관리하기 위해 도입됩니다.
상위 계층은 하위 계층의 서비스를 사용할 수 있지만, 하위 계층은 상위 계층을 호출할 수 없는 단방향 의존성을 강제합니다. 이를 통해 특정 계층의 수정이 다른 계층에 미치는 파급 효과를 최소화하고 시스템의 복원력을 높입니다.
물리적 분리와 확장성(Scalability)
논리적 계층을 별도의 서버(Tier)로 물리적으로 분리하면, 트래픽이 몰리는 특정 계층의 성능만 독립적으로 확장(Scale-out)할 수 있습니다.
3 Tier는 장비가 물리적으로 구분되어 별도의 컴퓨터에서 실행되는 구조이며, 3 Layer는 애플리케이션 내부에서 Controller, Service, DAO로 역할을 나눈 논리적 구조입니다.
각 계층은 직접 호출이나 메시지 큐를 통한 비동기 통신을 사용하며, 요구사항에 따라 두 가지 통신 모델을 결합하여 설계할 수 있습니다.
폐쇄형(엄격한 모델) vs 개방형(완화된 모델)
폐쇄형은 인접 계층을 반드시 하나씩 통과해야 해 오버헤드가 큽니다. 반면 개방형은 중간 계층을 건너뛸 수 있으나 결합도가 높아져 변경이 어려워집니다.