일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 앤서블
- VPC
- AWS Certificate
- Compute Engine
- Google Cloud Platform
- Solution Architect Certificate
- AWS Solution Architect
- gcp
- ansible
- Cloud Datastore
- Google Cloud
- Reverse Proxy
- GKE
- 리버스 프록시
- Kubernetes Engine
- AWS 자격증
- AWS
- playbook
- Cloud Spanner
- Solution Architect
- Amazon Web Service
- Cloud SQL
- Google Cloud Platorm
- container
- Cloud Storage
- Google Cloud Platrofm
- kubernetes
- 아마존웹서비스
- AWS Database
- Cloud Bigtable
- Today
- Total
sungwony
[만들면서 배우는 클린 아키텍처] 01. 계층형 아키텍처의 문제는 무엇일까? 본문
계층 구조
Q. 계층형 아키텍처의 문제점은 무엇인가?
- 코드에 나쁜 습관이 스며들기 쉽다
- 시간이 지날수록 소프트웨어를 변경하기 어렵다
계층형 아키텍처는 데이터베이스 주도 설계를 유도한다
- 모든 것이 영속성 계층을 토대로 만들어진다
- 애플리케이션의 목적
- 비즈니스를 관장하는 규칙, 정책을 반영한 모델을 생성해 편의성을 높이는 것
- 상태(state)가 아니라 행동(behavior)을 중심으로 모델링한다
- 행동이 상태를 바꾸는 주체
그런데 왜? 도메인 로직이 아닌 데이터베이스를 토대로 아키텍처를 만드는가
우리는 도메인 로직을 먼저 만들어야 한다
그래야 우리가 만드는 로직을 제대로 이해했는지 확인할 수 있다
그리고 이를 기반으로 영속성 계층과 웹 계층을 만들어야 한다
ORM이 원인이다?
ORM에 의해 관리되는 엔티티들은 영속성 계층에 두고 도메인 계층에서는 이를 사용하기 마련 → 강한 결합이 발생
서비스에서 즉시로딩 / 지연로딩 / 데이터베이스 트랜잭션 / 캐시 플러시 등의 작업들을 하게됨
지름길을 택하기 쉬워진다
‘깨진 창문 이론’
상위 계층에 위치한 컴포넌트에 접근해야 할때 이를 내려버리는 우를 범한다
- Util, Helper 등은 점차 내려가게 되어있다
- ‘지름길 모드’를 끄고 싶다면 계층구조를 탈피해야 한다
테스트하기 어려워진다
웹 계층에서 바로 영속성 계층을 접근한다면?
- 도메인 로직을 웹 계층에 구현하게 되어 책임이 섞이고 도메인 로직이 파편화 된다
- 웹 계층 테스트시 영속성 계층도 모킹해야 한다
유스케이스를 숨긴다
- 도메인 로직이 여러 계층에 걸쳐 흩어지게 되면 새로운 기능을 추가할 적당한 위치를 찾기 어렵다
- 도메인 서비스의 폭이 아주 커질수도..
동시 작업이 어려워진다
계층형 아키텍처에서는 순서가 있다 → 특정 기능을 동시에 한 명의 개발자만 작업할 수 있다
코드에 넓은 서비스가 있다면 서로 다른 기능을 동시에 작업하는것도 어렵다.
같은 서비스를 건드려야 하기 때문이다
유지보수 가능한 소프트웨어를 만드는 데 어떻게 도움이 될까?
올바르게 구축하고 몇 가지 추가적인 규칙들을 적용하면 유지보수하기 쉽고 코드 변경도 용이하다
그러나 제대로 못하는 경우도 많지..
내 경험상 계층형 아키텍처도 상당히 유용한 부분이 많다
우선 단순하고, 정해진 원칙과 적절한 코드리뷰 들을 통해 의존성 관리, 서비스의 크기 등을 적절히 제한하면 오랜기간 잘 유지보수 되기도 한다
하지만 원칙과 적절하다는 것은 여지가 있다는 것을 의미하기도 한다. 깨진 창문이 발생한다면 앞에서 언급한 여러가지 문제가 발생할 수 있다.
다른 아키텍처들을 살펴보고 개발하려는 시스템의 규모와 특성에 맞게 적절한 아키텍처를 선택하도록 하자
'development > architecture' 카테고리의 다른 글
[만들면서 배우는 클린 아키텍처] 02. 의존성 역전하기 (0) | 2022.10.01 |
---|---|
[만들면서 배우는 클린 아키텍처] Intro (0) | 2022.10.01 |