본문 바로가기
Back_end/Spring

SPRING[2] 클린 아키텍쳐

by 8Antony 2022. 10. 26.

계층형 아키텍쳐와, 클린 아키텍쳐의 차이가 무엇인가?

 

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 통해서)

 

 

댓글