반응형
데이터베이스 중심 아키텍처의 문제점
- 관심사의 분리 원칙이나, 비즈니스 로직을 표현하는 객체 모델보다 데이터 질의 구문인 SQL문에 들어있는 경우가 대부분
- 비즈니스 로직을 처리하는 자바 코드는 10줄 미만인데, 100~1000줄이 넘는 SQL문 또는 프로시저로 가득 차 있음
- 시간이 지날수록 코드의 가독성보다 쿼리 성능을 위한 SQL 문의 최적화에 우선순위를 두어서 작성한 사람 이외에는 소스코드를 이해할 수 없는 수준이 됨
애플리케이션의 유지보수성
애플리케이션의 유지보수성이 높다는 의미는 특정 개인에 의존하기 보다 어느 누구라도 손쉽게 애플리케이션을 이해하고 유지보수할 수 있음을 의미
레이어드 아키텍처 vs 헥사고날 아키텍처 vs 클린 아키텍처
레이어드 아키텍처 (Layered Architecture)
- 시스템을
| 프레젠테이션 계층 | (화면 표현),
| 비즈니스 로직 계층 | (비즈니스 개념, 규칙, 흐름제어),
| 데이터 엑세스 계층 | (데이터 처리)
으로 나눔
- 응집성을 높이고 의존도를 낮추기 위한 규칙
- 상위 계층이 하위 계층을 호출하는 단방향성 유지
- 상위 계층은 하위의 여러 계층을 모두 알 필요 없이 바로 밑의 근접 계층만 활용
- 상위 계층이 하위 계층에 영향을 받지 않게 구성
- 계층 간의 호출은 인터페이스를 통해 호출
- 제어 흐름이 상위 계층에서 하위 계층으로 흐르게 되어 하위의 인터페이스가 상위 계층의 기능에 관여하게 됨
- 이는 DIP는 만족할 수 있지만(계층의 인터페이스로 인해), OCP는 만족하지 않음
헥사고날 아키텍처(Hexagonal Architecture)
- 애플리케이션은 비즈니스 로직이 핵심 영역
- 레이어드 아키텍처는 비즈니스로직이 데이터 엑세스 계층에 의존
- 데이터 엑세스 계층역시 비즈니스 로직에 의존하도록 구조를 변경 (데이터 엑세스 계층의 인터페이스를 비즈니스 로직에서 정의하게 함)
- + 현대 백엔드 애플리케이션은 클라이언트 API, MQ(Message Queue), CMD(서비스 및 시스템간 통신)등 다양한 인터페이스가 필요하기 때문에, 이러한 역할을 할 수 있도록 구조를 정의
- 헥사고날 아키텍처 = 포트 앤드 어뎁터 아키텍처 (Port and adapters architecture)
- 영역의 구분
- 내부 영역 순수한 비즈니스 로직을 표현하는 독립적인 영역
- 외부 영역 인바운드 어댑터(외부 요청 처리), 아웃바운드 어댑터(외부와 연계)로 구성됨
클린 아키텍처 (Clean Architecture)
소프트웨어는 행위 가치와 구조 가치의 두 종류의 가치를 가지고, 구조 가치가 더 중요하다. 소프트웨어를 부드럽게 만드는 것이 구조 가치이기 때문이다.
- 로버트 C. 마틴
클린 아키텍처의 구조
- 업무 규칙 : 사업적으로 수익을 얻거나 비용을 줄일 수 있는 규칙 또는 절차
- 업무 규칙은 시스템으로 자동화 가능
- 예1) 쇼핑몰의 물건을 사고 파는 규칙
- 예2) 은행의 이자 계산 규칙
- 예3) 도서대출 시스템의 대출/반납 규칙
- 엔티티 : 핵심 업무 규칙은 보통 데이터를 요구하기 때문에 핵심 규칙과 데이터는 본질적으로 결합되어 있음. 그렇기 때문에 쉽게 객체로 만들 수 있음
- 유스케이스 : 자동화된 시스템을 사용하는 처리 절차 (애플리케이션 업무 규칙)
- 명확한 결합의 분리는 테스트 용이성, 개발 독립성, 배포 독립성을 강화 할 수 있음
반응형
'MSA 설계 & 도메인주도 설계' 카테고리의 다른 글
[DDD] 도메인 계층의 Structure (0) | 2022.02.08 |
---|---|
[DDD] 인터페이스 계층과 응용 계층의 구현 (0) | 2022.02.07 |
[DDD] 애그리거트란? (0) | 2022.02.06 |
[DDD] 도메인 주도 설계의 계층 분리에 관하여 (0) | 2022.02.03 |
[MSA] MSA 기반 프로젝트 입문 후기 (Devlos feat. @Todo) (1) | 2022.02.02 |