본문으로 건너뛰기

Layered-Architecture

1 Layered Architecture

  • 계층을 이용하는 사고 방식은 컴퓨터 과학 수업을 통해 우리에게 주입돼 왔다
  • Layered Architecture는 웹, 도메인, 영속성 계층으로 구성된 전통적인 웹 애플리케이션의 구조다

1.1 규칙

  • Layered Architecture의 규칙은 특정한 계층에서는 같은 계층에 있는 컴포넌트나 하위 계층에 있는 컴포넌트만 접근이 가능하다는 것이다
  • 이러한 규칙 때문에 상위 계층에 위치한 컴포넌트를 사용하기 위해 해당 컴포넌트를 하위 계층으로 내리는 일이 반복되며 하위 계층이 비대해지는 문제가 발생한다

2 Layered Architecture의 흐름

  • 웹 계층에서 요청을 받아 도메인 혹은 비즈니스 계층에 있는 서비스로 요청을 보낸다.
  • 서비스에서는 필요한 비즈니스 로직을 수행하고 도메인 엔티티의 현재 상태를 조회하거나 변경하기 위해 영속성 계층의 컴포넌트를 호출한다

3 장점

  • 잘 만들어진 Layered Architecture는 선택의 폭을 넓히고 변화하는 요구사항과 외부 요인에 빠르게 적응할 수 있다
  • 웹 계층이나 영속성 계층에 독립적으로 도메인 로직을 작성할 수 있기 때문
  • 원한다면 도메인 로직의 영향을 미치지 않고 웹 계층과 영속성 계층에 사용된 기술을 변경할 수 있다

4 단점

4.1 데이터베이스 주도 설계

  • 계층형 아키텍처는 데이터베이스 주도 설계를 유도한다
  • 웹 계층은 도메인 계층에 의존하고 도메인 계층은 영속성 계층에 의존하기 때문에 자연히 데이터베이스에 의존하게 된다
  • 데이터베이스 중심적인 아키텍쳐가 만들어지는 가장 큰 원인은 ORM이다
    • ORM에 의해 관리되는 엔티티들은 일반적으로 영속성 계층에 둔다
    • 이러한 엔티티에 비즈니스 로직이 들어가게 되면
    • 이렇게 되면 영속성 계층과 도메인 계층 사이에 강한 결합이 생긴다
    • 영속성 모델을 비즈니스 모델처럼 사용하게 된다
    • 도메인 로직뿐만 아니라 즉시로딩, 지연로딩, 트랜잭션, 캐시 플러시 등 영속성 계층과 관련된 작업들을 해야만 한다

4.2 테스트가 어렵다