계층형 아키텍쳐와, 클린 아키텍쳐의 차이가 무엇인가?
Go ahead
계층형(Layer) 아키텍쳐
웹, 도메인, 영속성 계층으로 구성된 전통적인 웹 어플리케이션 구조 (유사 관심사를 기준으로 레이어로 묶어 수평적으로 완성)
- 프레젠테이션 계층 : UI / 웹, 클라이언트와 접점
- 비즈니스 계층 : 서비스 / 도메인 계층
- 데이터 접근 계층(영속성) : 데이터베이스 접근
계층형 아키텍쳐 단점
계층형 아키텍쳐는 데이터베이스 주도 설계를 유도함
엔티티는 보통 영속성 계층형 위치한다. 따라서 도메인 계층에서 엔티티에 접근이 가능함 -> 이는 결합을 유발
클린 아키텍쳐
코어는 Use-Case 와 도메인 엔티티이다. 아래 사진처럼 모든 의존성은 안쪽으로 향한다.
핵심은 Entity, Controller는 외부와 소통한다.
효과적으로 표현하는 패키지 구조
- 기능이나 특성을 구분 짓는 패키지 경계 존재
- Use-case 파악 가능
- 새로운 기능이 추가될 때마다 패키지 만들기 가능
의존성은 다 안쪽으로 향한다.
클린 아키텍쳐 장점
각 계층이 명확하게 분리되어있기 때문에 테스트와 유지보수가 용이
계층형 아키텍쳐의 데이터베이스 의존성이 없어지기 때문에 데이터베이스가 정해지지 않아도 다른 부분을 개발 가능
내가 구성한 클린 아키텍쳐
- 프로젝트
- 메인 모듈 : microservice-trade
- 하위 모듈 : apps, libs, protocol
- apps (외부와의 통신을 위한 "컨트롤러" 존재) , libs (핵심 로직 + 영속성인 Impl 존재), protocal (공통으로 사용하는것)
- app-api (컨트롤러 모듈) , app-batch (배치잡 모듈)
- adapter-http (외부와의 호출을 담당하는 모듈), adapter-persistence : DB 관련 모듈
Appendix
DI : 직접 객체를 생성하는게 아니라 외부에서 생성한 후 주입을 시켜주는것
Entity 가 뭔지 :
Impl 이 뭔지 :
DTO가 없는 것들이 내부 DB와 연결
DTO는 외부와 연결 (컨트롤러를 위해 사용)
Controller는 apps 에 app-api안에 들어간다.
libs는 외부와의 통신되는 코드들이 들어간다.
Controller 와 RestController 차이 : "컨트롤러는 Model 객체를 만들고 View에 담아 반환"
"Rest컨트롤러는 단순 객체 반환 (JSON or XML 통해서)
'Back_end > Spring' 카테고리의 다른 글
SPRING [#1] 메인페이지, 로그인페이지, 회원가입페이지 (0) | 2022.11.17 |
---|---|
SPRING [#0] 프로젝트 생성 및 환경설정 (0) | 2022.11.14 |
SPRING[4] 스프링 Unit Test (0) | 2022.11.11 |
SPRING[3] 스프링 JPA + 배치 (0) | 2022.11.10 |
SPRING[1] DI, IOC (0) | 2022.10.17 |
댓글