
전통적인 웹 애플리케이션 구조(웹, 도메인, 영속성 계층으로 구성됨)
정의에 따르면 전통적인 계층형 아키텍처의 토대는 데이터베이스다.
웹 계층은 도메인 계층에 의존하고, 도메인 계층은 영속성 계층에 의존하기 때문에 자연스럽게 데이터베이스에 의존하게 된다.
이런 방식은 다양한 문제를 초래한다.
만들어지는 대부분의 애플리케이션의 목적을 생각했을 때, 보통 비즈니스 규칙이나 정책을 반영한 모델을 만들어 사용자가 규칙과 정책을 더욱 편리하게 활용할 수 있게 한다.
이때 상태(state)가 아니라 행동(behavio)을 중심으로 모델링한다. 상태가 중요한 요소이긴 하지만, 행동이 상태를 바꾸는 주체이기 때문에 행동이 비즈니스를 이끌어간다.
우리는 왜 도메인 로직이 아닌 데이터베이스를 토대로 만드는 걸까?
그동안 만든 애플리케이션의 유스케이스를 생각해보면, 아마 데이터베이스의 구조를 먼저 생각하고, 이를 토대로 도메인 로직을 구현했을 것이다. 이는 전통적인 계층형 아키텍처에서는 합리적인 방법이다.(의존성 방향에 따라 자연스럽게 구현했기 때문) 하지만 비즈니스 관점에서는 전혀 맞지 않는 방법이다.
무엇보다 도메인 로직을 먼저 만들어야 한다. 그래야 로직을 제대로 이해했는지 확인할 수 있다. 그릐고 도메인 로직이 맞다는 것을 확인한 후 이를 기반으로 영속성 계층과 웹 계층을 만들어야 한다.
데이터베이스 중심적인 아키텍처가 만들어지는 가장 큰 원인은 ORM 프레임워크를 사용하기 때문이다. ORM 프레임워크를 계층형 아키텍처와 결합하면 비즈니스 규칙을 영속성 관점과 섞고 싶은 유혹을 쉽게 받는다.

도메인 계층에서 데이터베이스 엔티티를 사용하는 것은 영속성 계층과의 강한 결합을 유발한다.