2025/03/28 3

[클린 아키텍처] 애플리케이션 조립하기 & 아키텍처 경계 강제하기

왜 조립까지 신경 써야 할까?모든 의존성은 안쪽, 도메인 방향으로 향해야 한다도메인 코드가 바깥으로부터 안전해진다.한 클래스가 필요로 하는 모든 객체를 생성자로 전달할 수 있다면 실제 객체 대신 목으로 전달할 수 있고, 이렇게 되면 격리된 단위 테스트를 생성하기 쉬워진다.설정 컴포넌트는 우리가 제공한 조각들로 애플리케이션을 조립하는 것을 책임진다. 이 컴포넌트는 다음과 같은 역할을 수행해야 한다.웹 어댑터 인스턴스 생성HTTP 요청이 실제로 웹 어댑터로 전달되도록 보장유스케이스 인스턴스 생성웹 어댑터에 유스케이스 인스턴스 생성유스케이스에 영속성 어댑터 인스턴스 제공영속성 어댑터가 실제로 데이터베이스에 접근할 수 있도록 보장스프링의 클래스패스 스캐닝으로 조립하기@Component 애노테이션이 붙은 클래스를..

아키텍처 2025.03.28

[클린 아키텍처] 아키텍처 요소 테스트 전략 & 경계 간 매핑하기

육각형 아키텍처에서 사용하는 전략도메인 엔티티를 구현할 때는 단위 테스트로 커버하자유스케이스를 구현할 때는 단위 테스트로 커버하자어댑터를 구현할 때는 통합 테스트로 커버하자사용자가 취할 수 있는 중요 애플리케이션 경로는 시스템 테스트로 커버하자경계 간 매핑하기각 계층의 모델을 매핑하는 것에 대해매핑에 찬성하는 개발자두 계층 간에 매핑을 하지 않으면 양 계층에서 같은 모델을 사용해야 하는데 이렇게 하면 두 계층이 강하게 결합됩니다.매핑에 반대하는 개발자하지만 두 계층 간에 매핑을 하게 되면 보일러플레이트 코드를 너무 많이 만들게 돼요. 유스케이스들이 오직 CRUD만 수행하고 계층에 걸쳐 같은 모델을 사용하게 되기 때문에 계층 사이의 매핑은 과합니다.매핑하지 않기 전략 ..

아키텍처 2025.03.28

[클린 아키텍처] 웹 어댑터 구현하기 & 영속성 어댑터 구현하기

의존성 역전adapter.in.web || application.port.in || application.service컨트롤러 → 포트 ← 서비스컨트롤러 → 포트 ← 서비스웹 어댑터는 ‘주도하는’ 혹은 ‘인커밍’ 어댑터다. 외부로부터 요청을 받아 애플리케이션 코어를 호출하고 무슨 일을 해야 할지 알려준다. 이때 제어 흐름은 웹 어댑터에 있는 컨트롤러에서 애플리케이션 계층에 있는 서비스로 흐른다.애플리케이션 계층은 웹 어댑터가 통신할 수 있는 특정 포트를 제공한다. 서비스는 이 포트를 구현하고, 웹 어댑터는 이 포트를 호출할 수 있다.왜 어댑터와 유스케이스 사이에 또 다른 간접 계층을 넣어야할까? 애플리케이션 코어가 외부 세계와 통신할 수 있는 곳에 대한 명세가 포트이기 때문이다. 포트를 적절한 곳에 위치..

아키텍처 2025.03.28