See Also)
- 이동욱님 - 계층형 아키텍처


3티어 계층형 아키텍쳐
계층형 아키텍처의 장점
- 관심 범위 축소(관심사 분리)
- 웹 계층이나 영속성 계층에 독립적으로 도메인 로직을 작성할 수 있다.
- 계층간의 격리성 → 관심 범위 축소(관심사 분리)
- 모듈 교체의 용이성
- 변화하는 요구사항과 외부요인에 빠르게 적응할 수 있게 해준다.
- 도메인 로직에 영향을 주지 않고 웹 계층과 영속성 계층에 사용된 기술을 변경할 수 있다.
- 용이한 테스트
- 계층화는 자연스럼게 테스트를 위한 좋은 인터페이스를 제공한다.
계층형 아키텍처의 단점
- 데이터베이스 주도 설계를 유도한다.
- 웹 → 도메인 → 영속성 → 데이터베이스 ???
- 모든 것이 영속성 계층을 토대로 만들어진다.
- 데이터베이스 중심적인 아키텍처가 만들어지는 가장 큰 원인은 ORM 프레임워크를 사용하기 때문
- ORM 프레임워크를 계층형 아키텍처와 결합하면 비즈니스 규칙을 영속성 관점과 섞고 싶은 유혹을 쉽게 받는다.
- 아래와 같은 패키지 구조에서는 영속성 계층과 도메인 계층 사이 강한 결합이 생긴다.
- 순수해야 하는 도메인 계층에서는 영속성 계층을 위한 작업인
- eager/lazy loading, db transaction, cache flush 등의 작업이 발생하게 된다.

- 지름길을 택하기 쉬워진다.
- 이는 너무 약한 규약이다.
- 점점 아키텍쳐는 개판이되고 최하단 계층(영속성 계층)은 비대해 질것이다.
전통적인 계층형 아키텍처에서 전체적으로 적용되는 유일한 규칙은 특정한 계층에서는 같은 계층에 있는 컴포넌트나 아래에 있는 계층에만 접근 가능하다는 것
- 테스트하기 어려워진다. (계층을 건너 뛰는 경우)
- 유스케이스를 숨긴다.
- 새로운 기능을 추가하거나 변경할 적절한 위치를 찾는 일이 어렵다.
- 도메인 서비스의
너비
에 대한 규칙을 강제하지 않는다. - 마침 본인이 계층형 아키텍처로 프로젝트를 진행하다 겪은 고민은 아래와 같다.




가장 좋은 선택지는 뭘까???
- 동시 작업이 어려워 진다.
- 모든 것이 영속성 계층 위에 만들어 지기 때문에 개발 순서가 고정된다.
- 코드에 넓은 서비스가 있다면 머지 컨플릭트가 발생하는 상황이 발생한다.