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

Jeongyeon Kim·2024년 12월 21일
0
post-thumbnail

1. 계층형 아키텍처(Layered Architecture)란?

소프트웨어 설계 패턴 중 하나로, 시스템을 여러 개의 계층으로 분리하여 각 계층이 특정 역할을 수행하도록 하는 방식

특정한 계층에서는 같은 계층에 있는 컴포넌트나 아래에 있는 계층에만 접근 가능

Presentation Layer

사용자의 응답 및 요청 처리하는 계층

Application Layer

비즈니스 로직을 수행하는 계층

Domain Layer

데이터베이스에 요청을 전달(접근)하는 계층.

Database Layer

데이터베이스가 운영되는 계층

2. 계층형 아키텍처의 장점

계층별로 낮은 결합도를 가지고 계층 내에서 높은 응집도를 가지면 유지보수 용이 및 확장성 향상

3. 계층형 아키텍처의 단점

데이터베이스 주도 설계 유도

ORM(Object-Relational Mapping)이 계층형 아키텍처와 결합하면 데이터베이스 주도 설계를 할 가능성이 높아짐.
ORM에 의해 관리되는 엔티티는 영속성 계층에 있고 도메인 계층에서 엔티티에 접근하면서 강한 결합이 생김.
이로 인해 도메인 계층에서 도메인 로직 뿐만 아니라 영속성 로직(즉시로딩/지연로딩, 트랜잭셔느 캐시 플러시 등)까지 수행하게 됨.

지름길을 택하기 쉬워짐

마감 기한에 쫓기거나 누군가 한번 지름길을 택하게 되면 이후에는 지름길을 택하는 경우가 많아짐.
(지름길: 상위 계층 컴포넌트에 접근해야 하는 경우 해당 컴포넌트를 하위 계층으로 내려버리는 행위 등)

테스트하기 어려워짐

웹 계층에서 도메인 계층을 거치지 않고 바로 영속성 계층에 접근하는 경우 테스트하기 어려워짐.
1. 필드 하나를 조작하더라도 도메인 로직이 웹 계층에 구현되게 되어 책임이 섞이고 핵심 도메인 로직이 퍼져나할 확률이 높아짐.
2. 웹 계층 테스트에서 도메인 계층과 영속성 계층을 모두 mocking 해야하는 문제 발생.

유스케이스를 숨김

도메인 로직이 퍼져나가게 되고, 서비스가 넓어지게 되는 문제가 발생하면 추가 유스케이스가 들어갈 위치를 찾기 어려워짐.

동시 작업이 어려워짐

모든 것이 영속성 계층 위에서 만들어지기 때문에 여러 개발자가 동시에 작업하기 어려움.
서비스가 넓으면 같은 서비스를 여러명이 동시에 작업하면서 병합 충돌(merge conflict) 발생 가능성 높음.

profile
Backend Developer👩🏻‍💻

0개의 댓글