[만들면서 배우는 클린 아키텍처] 1.계층형 아키텍처의 문제는 무엇일까?

wally·2022년 9월 19일
0

독서시리즈

목록 보기
6/10

1. 계층형 아키텍처이란

계층형 아키텍처 : 웹 -> 도메인 -> 영속성
웹 : 요청을 받는다
도메인 : 비지니스 계층에 있는 서비스로 필요한 로직을 수행한다.
영속성 : 도메인 엔티티의 상태를 조회하거나 변경하는 부분

특징

  • 견고한 아키텍처 패턴
  • 웹 계층이나 영속성 계층에 독립적으로 도메인 로직 작성 가능
  • 가능하다면 도메인 로직에 영향없이 웹 계층과 영속성에 사용된 기술 변경 가능
  • 기존 기능에 영향을 주지 않고 새로운 기능 추가도 가능
  • 선택의 폭을 넗히고, 변화하는 요구사항과 외부 요인에 빠르게 적응할 수 있게 해준다.

2. 계층형 아키텍처의 문제

1. 데이터베이스 주도 설계를 유도

  • 웹 -> 도메인 -> 영속성 으로의 의존성 방향은 자연스럽게 데이터베이스에 의존하게 된다.
  • 즉 모든것이 영속성 계층을 토대로 만들어진다.
  • ORM 프레임워크(JPA, Hibernate)의 사용은 비즈니스 규칙을 영속성 관점과 섞고 싶게 만든다.
  • 상태가아닌 행동을 중심으로 모델링 해야 하지만 도메인 로직이 아닌 데이터베이스 토대로 아키텍처를 만들게 된다.

  • 계층형 아키텍처의 의존성 방향으로 도메인 계층에서 엔티티에 접근해야 한다.
  • 영속성 계층과 도메인 계층 사이에 강한 결합이 생긴다.
  • 서비스는 영속성 모델을 비즈니스 모델처럼 사용하게 되면서 즉시로딩/지연로딩, 트랜잭션, 캐시 플러시 등 영속성 계층과 관련된 작업을 하게 된다.
  • 영속성 코드가 도메인 코드에 녹아들어가면서 둘중 1개만 바꾸는 것이 어려워진다.
  • 유연하고 선택의 폭을 넓혀준다는 계층형 아키텍처 목표와 반대가 되는 상황

2. 깨진 유리창

계층형 아키텍처의 유일한 규칙은 특정한 계층에서는 같은 계층에 있는 컴포넌트나 아래에 있는 계층에만 접근 가능하다이다.

  • 만약 상위 계층에 위치한 컴포넌트에 접근해야 한다면 컴포넌트를 계층아래로 내여버리면 된다.
  • 누군가 지금길을 택하게 되면 깨진 창문 이론으로 인해 점점 더 유지보수가 어려운 코드로 바뀌게 된다.

3. 테스트하기 어려워진다.

  • 누군가 웹(컨트롤러) 에서 도메인계층을 넘겨 영속성(레포지토리)를 사용할 수 있다.
    • 이로 웹 전반의 책임 이 섞이게 된다.
    • 웹 계층 테스트에서 도메인 계층뿐만 아니라 영속성 계층도 모킹을 해야 되 단위 테스트의 복잡도가 올라간다.
  • 깨진 유리창 법칙문제이다.

4. 유스케이스를 숨긴다.

  • 도메인 로직이 여러 계층에 흩어지게 되면 유지보수가 어려워진다(한번 원칙이 깨지면 돌이키기 어렵다)
  • 서비스의 너비를 강제하지 않으므로 여러 유스케이스를 담당하는 아주 넓은 서비스가 만들어질 수 있다.
    • 서비스 계층의 책임 분리가 굉장히 중요해진다.
    • 실제 여러 서비스들이 서로 참조하게 되면 설계에 대한 고민이 많아지게된다 - 예)퍼사드 패턴 적용

5. 동시 작업이 어려워진다.

  • 모든 것이 영속성 계층위에 만들어지기 때문에 영속성 계층을 먼저 개발해야 한다.
  • 그 후 도메인 계층 그 후 웹 계층을 만들어야 한다.
  • 특정 기능은 동시에 한명의 개발자만 작업하게 된다.
  • 데이터베이스 주도 설계를 하지 않을 때 개발자들이 각자 먼저 인터페이스를 정의하고 실제 구현을 기다릴 필요 없이 인터페이스로만 작업이 가능하다.(데이터베이스 주도 설계는 영속성 로직이 도메인 로직과 너무 뒤섞여 개별적 작업이 불가능하다)
profile
클린코드 지향

0개의 댓글

관련 채용 정보