Programming/Clean Architecture 4

Clean Architecture - 헥사고날 아키텍처에서 테스트 작성하기!

테스트 피라미드일반적으로 테스트의 기본 전제는 만드는 비용이 적고, 유지보수하기 쉽고, 빨리 실행되고, 안정적인 작은 크기의 테스트들에 대해 높은 커버리지를 유지하는 것이다.하나의 단위(일반적으로 하나의 클래스)가 제대로 동작하는 지 확인할 수 있는 테스트는 단위 테스트이며, 여러 개의 단위를 넘는 경계나 아키텍처, 시스템을 결합하는 테스트는 비용이 더 비싸지고, 실행이 더 느려지며, 깨지기 쉬워진다.단위 테스트는 의존하는 다른 클래스들은 인스턴스화 하지 않고 테스트하는동안 필요한 작업들을 흉내(mock)만 내도록 대체한다.통합 테스트는 하나의 기능에 필요한 여러 유닛을 인스턴스화하고 데이터를 보낸 후 전체적인 기능을 테스트한다.시스템 테스트의 경우 애플리케이션을 구성하는 모든 객체 네트워크를 가동시켜 ..

헥사고날 아키텍처 - 영속성을 구현하는 방법!

클린 아키텍처에서는 전통적인 계층형 아키텍처에서 모든 것이 영속성 계층에 의존하게 되는 점을 역전시켜, 영속성 계층을 애플리케이션 계층의 플러그인처러 만든다. 아키텍처 헥사고날 아키텍처에서는 코어의 서비스가 영속성 어댑터에 접근하기 위해 포트를 사용하는 구조를 가진다. 코어의 서비스는 포트 인터페이스를 통해 의존성을 역전시킨다. 더이상 DB를 교체하거나 JPA에서 JDBC로 기술을 바꾸는 등의 변경이 도메인 코드에 전파되지 않는다. 영속성 어댑터의 책임 영속성 어댑터의 책임은 아래와 같다. 포트의 입력 모델을 DB 포맷으로 매핑한다. DB에 쿼리 요청을 보낸다. DB 출력을 포트의 출력 모델로 매핑한다. 결과를 반환한다. 포트 인터페이스 포트 인터페이스의 크기는 어떻게 하는 것이 적당할까? 일반적으로 아..

헥사고날 아키텍처 - 웹 어댑터(컨트롤러) 구현하기!

헥사고날 아키텍처에서 Controller의 역할은 외부 세계로 보고 어댑터를 통해 이루어진다. 이를 어떻게 구현하는 지 알아보자. 의존성 아래 그림은 웹 어댑터와 애플리케이션 코어가 어떻게 상호작용하는 지 나타낸다. 웹 어댑터(인커밍 어댑터)는 애플리케이션에 의해 구현된 인터페이스인 전용 포트를 통해 애플리케이션 계층과 통신하고, 외부로부터 요청을 받아 애플리케이션 코어를 호출하는 역할을 수행한다. 해당 그림에서 만약 웹 어댑터에 능동적으로 알림을 줘야 한다면 서비스를 거쳐 아웃고잉 포트를 통과하도록 구현하면 된다. 역할 웹 어댑터는 일반적으로 다음의 처리를 한다. (시간 순으로 기술) HTTP 요청을 자바 객체로 매핑 권한 검사 입력 유효성 검증 입력을 유스케이스의 입력 모델로 매핑 유스케이스 호출 유..

헥사고날(Hexagonal) 아키텍처란 무엇인가?!

헥사고날 아키텍처는 전통적인 계층형 아키텍처의 단점을 보완하기 위해 생겼다. 도메인 중심 아키텍처의 일종으로 클린 아키텍처를 일반화한 구조 중 하나이다. (포트와 어댑터(Ports and Adaters) 아키텍처라고도 말한다.) 계층형 아키텍처의 문제 1. 데이터베이스(+ 영속성)에 대한 의존이 퍼지게 된다. 전통적인 계층형 아키텍처의 도메인 계층은 영속성에 의존한다. 즉, 도메인 계층이 자연스레 데이터 베이스에 의존하게 되어서 데이터 베이스에 변화가 일어난다면 도메인 계층도 변화가 생긴다. 추가로 아래와 같이 서비스 계층에서도 영속성 모델을 도메인 모델 처럼 사용하게 된다. 결과적으로 해당 도메인 모델을 사용하는 서비스 계층에서도 즉시 로딩, 지연 로딩, 트랜잭션, 플러시 등을 고려해야 하고, 영속성에..