[Book] 만들면서 배우는 클린 아키텍처 - 1

2024. 11. 27. 05:34·Book
반응형
  • 톰 홈버그 저/박소은 역 | 위키북스 | 2021년 11월 26일
  • 144 페이지로 편히 읽기 좋은 책
  • 예전에 도서관에서 이 책을 빌렸는데 막상 읽으려니 눈에 안들어와서 미뤘다가 이번에 다시 빌려서 읽고 있다.
  • 목차를 보면 각 장마다 유지보수 가능한 소프트웨어를 만드는 데 어떻게 도우밍 될까?라는 절이 있다. 어떤 부분이 더 개선이 되었는가를 설명해줘서 맥락을 따라가는데 도움이 될 것 같다.

1. 계층형 아키텍처의 문제는 무엇일까?

개발을 하면서 가장 익숙하고 많이 사용하는 아키텍처가 계층형 아키텍처(Layered Architecture)같다. 특히 스프링으로 개발할 땐 @Controller, @Service, @Repository를 사용하면 자연스럽게 계층형 아키텍처를 만들게 되는 느낌이다.

계층형 아키텍처 의존성

  • 웹 계층의 요청을 받아 도메인(혹은 비즈니스) 계층에 있는 서비스로 요청
  • 서비스 계층에서 비즈니스 로직 수행 후 도메인 엔티티 상태를 조회하거나 변경하기 위해서 영속성 계층의 컴포넌트 호출
  • 견고한 아키텍처 패턴으로 웹계층이나 영속성 계층에 독립적으로 도메인 로직 작성가능 잘 만들면 선택의 폭을넓히고 변화하는 요구사항과 외부 요인에 빠르게 적응할 수 있게 해준다

패키지 구조나 아키텍처를 찾아보면 클린 아키텍처, 헥사고날 아키텍처 등의 개념을 찾아볼 수 있는데 기존의 계층형 아키텍처보다 무엇을 개선한걸까?

책의 저자는 계층형 아키텍처는 코드에 나쁜 습관들이 스며들기 쉽게 만들고, 시간이 지날수록 소프트웨어를 점점 더 변경하기 어렵게 만드는 수많은 허점들을 노출한다고 설명한다.

  • 계층형 아키텍처는 데이터베이스 주도 설계를 유도한다
    • 계층형 아키텍처에서는 웹 계층이 도메인 계층을, 도메인 계층이 영속성 계층을 바라보는 의존성 방향으로 인해 자연스럽게 데이터베이스 중심의 사고방식이 발생할 수 있다.
    • 도메인 로직이 데이터베이스 스키마에 종속
    • 영속성 코드와 도메인 코드 사이에 강한 결합이 생겨 독립적인 변경이 어려워지고, 즉시 로딩/지연 로딩, 트랜잭션 등 데이터베이스 관련 개념들이 비즈니스 로직에 침투
    • 시간이 지날수록 비즈니스 요구사항 변화에 유연하게 대응하기 어려운 구조가 형성
  • 지름길을 택하기 쉬워진다
    • 웹 계층에서 영속성 계층으로 직접 접근하거나, 비즈니스 로직을 서비스가 아닌 컨트롤러나 리포지토리에 구현하는 경우가 발생
    • 장기적으로는 코드의 품질과 유지보수성을 크게 저하시키는 기술 부채로 누적
  • 테스트하기 어려워진다
    • 도메인 로직이 영속성 계층과 강하게 결합되어 있어 단위 테스트 작성이 복잡해 진다.
  • 유스케이스를 숨긴다
  • 동시 작업이 어려워진다
    • 넓은 서비스 클래스와 공유 도메인 모델로 인해 여러 개발자가 동시에 작업할 때 코드 충돌이 자주 발생
    • 여러 유스케이스가 하나의 서비스 클래스에 구현되어 있다면, 서로 다른 기능을 개발하는 개발자들이 같은 파일을 수정하게 되어 병합 충돌 가능성이 높아진다.

올바르게 구축하기 위한 몇 가지 추가적인 규칙들을 적용하면 계층형 아키텍처는 유지보수하기 쉽고 쉽게 변경하거나 추가할 수 있다. 하지만 잘못된 방향으로 흘러갈 수 있는 여지를 남기는데 이런 함정을 염두해두면 유지보수하기 더 쉬운 솔루션을 만드는데 도움이 될 것이다.

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'Book' 카테고리의 다른 글
  • [Book] 만들면서 배우는 클린 아키텍처 - 2
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • Spring Framework (10)
        • Spring (5)
        • JPA (3)
        • Spring Security (0)
      • Language (52)
        • Java (12)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (3)
      • 프로젝트 (3)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    C++
    select
    프로그래머스
    Python
    클래스
    JavaScript
    게임
    map
    Unreal
    Unreal Engine
    pytorch
    memcached
    딥러닝
    게임 개발
    redis
    언리얼엔진4
    자바
    JS
    웹
    mscoco
    CPP
    파이썬
    C
    FPS
    블루프린트
    PS
    NUXT
    MySQL
    php
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[Book] 만들면서 배우는 클린 아키텍처 - 1
상단으로

티스토리툴바