계층형 아키텍처(Layered Architecture)
- 웹 계층 → 도메인(또는 비즈니스 계층에 있는 서비스) 계층 → 영속성 계층의 구조
- 간단한 구조
- 계층을 잘 이해하고 구성한다면 웹 계층이나 영속성 계층에 독립적으로 도메인 로직을 작성할 수 있음
- 도메인 로직에 영향을 주지 않고 웹 계층과 영속성 계층에 사용된 기술을 변경할 수도 있음
계층형 아키텍처의 문제
- 계층형 아키텍처 코드에 나쁜 습관이 스며들기 쉬움
- 시간이 지날수록 소프트웨어를 변경하기 어렵게 만드는 허점을 노출
계층형 아키텍처는 데이터베이스 주도 설계를 유도
- 도메인 계층이 영속성 계층에 의존하기 때문에 영속성 계층의 데이터베이스에 의존하게 됨
- 일반적인 애플리케이션 모델링은 “상태(state)"가 아닌 “행동(behavior)”을 중심으로 모델링
- 데이터베이스 주도 설계를 하게 되면 데이터베이스 구조를 먼저 생각하고, 이를 기반으로 도메인 로직을 구현
- 비즈니스 관점에서는 이는 이상함 → 가장 주요 관심사인 비즈니스 로직을 먼저 만들고 그에 기반한 데이터베이스를 만드는 것이 합리적
데이터베이스 중심 아키텍처가 만들어지는 가장 큰 원인은 ORM 프레임워크를 사용하기 때문
- 주로 도메인 계층에서 데이터베이스 엔티티를 사용하기 때문
- 이렇게 되면 도메인 계층과 영속성 계층 간에 강결합이 생김
- 즉시로딩, 지연로딩, 데이터베이스 트랜잭션, 캐시 플러시 등과 같은 작업을 영속성 계층에서 작업해야 함
지름길을 택하기 쉬워짐
- 계층형 아키텍처는 같이 계층이나 그 아래 계층의 컴포넌트에 접근이 가능
- 따라서 시간이 지남에 따라 대부분의 컴포넌트를 영속성 계층에 둘 가능성이 큼
테스트하기 어려워짐
- 계층을 건너뛰는 경우(웹→영속성)가 발생하면, 웹 계층에서 도메인 로직이 점점 비대해지고 많은 도메인 로직이 애플리케이션 전반에 걸쳐 책임이 섞이고 핵심 도메인 로직이 퍼져나갈 확률이 높음
- 웹 계층 테스트 시, 도메인 계층 뿐만 아니라 영속성 계층도 모킹을 해야 함
유스케이스를 숨김
- 도메인 로직이 여러 군데에 분산되기 쉽기 때문에 새로운 기능을 추가할 적당한 위치를 찾기가 어려워짐
- 또한 여러 유스케이스를 하나의 거대한 서비스에서 담당하고 있다면 해당 코드를 파악하고 적절한 코드를 찾는 것도 어려워짐
동시작업이 어려워짐
- 계층형 아키텍처에서는 모든 것이 영속성 계층을 먼저 개발해야 함
- 특정 기능은 동시에 한 명의 개발자만 작업할 수 있음
'Architecture(아키텍처)' 카테고리의 다른 글
| [만들면서 배우는 클린 아키텍처] 06. 영속성 어댑터 구현하기 (0) | 2024.07.20 |
|---|---|
| [만들면서 배우는 클린 아키텍처] 05. 웹 어댑터 구현하기 (0) | 2024.07.20 |
| [만들면서 배우는 클린 아키텍처] 04. 유스케이스 구현하기 (0) | 2024.07.20 |
| [만들면서 배우는 클린 아키텍처] 03. 코드 구성하기 (0) | 2024.07.20 |
| [만들면서 배우는 클린 아키텍처] 02. 의존성 역전하기 (0) | 2024.07.20 |