만들면서 배우는 클린 아키텍처(12)
-
6장. 영속성 어댑터 구현하기
소개 만들면서 배우는 클린 아키텍처 책을 읽고 정리하며 소감을 적는 포스트입니다. 영속성 어댑터 구현하기 전통적인 계층형 아키텍처의 경우 영속성 계층에 의존하게 되어 데이터베이스 주도 설계가 된다고 이야기 했었다. 이번 포스트에서는 이러한 의존성을 역전시키기 위해 영속성 계층을 애플리케이션 계층의 플러그인으로 만드는 방법에 대해 살펴본다. 의존성 역전 코어의 서비스가 영속성 어댑터에 접근하기 위해 포트를 사용한다. 애플리케이션 서비스에서 영속성 기능을 사용하기 위해 포트 인터페이스를 호출한다. 그리고 실제 영속성 작업을 수행하고 데이터베이스와 통신할 책임을 가진 영속성 어댑터 클래스에 의해 구현된다. 포트는 사실상 애플리케이션 서비스와 영속성 코드 사이의 간접적인 계층이다. 영속성 문제에 신경 쓰지 않고..
2023.05.12 -
5장. 웹 어댑터 구현하기
소개 만들면서 배우는 클린 아키텍처 책을 읽고 정리하며 소감을 적는 포스트입니다. 웹 어댑터 구현하기 UI나 다른 시스템에서 애플리케이션을 호출하는 방식으로 상호작용하는 HTTP API가 웹 어댑터에 해당 됩니다. 의존성 역전 아래의 그림은 웹 어댑터와 관련된 아키텍처 요소(어댑터 자체와 애플리케이션 코어와 상호작용 하는 포트)에 조금 더 초점을 맞춘 그림이다. 인커밍 어댑터는 애플리케이션 서비스에 의해 구현된 인터페이스인 전용 포트를 통해 애플리케이션 계층과 통신한다. adapter.in.web은 주도하는 어댑터이다. 제어 흐름은 웹 어댑터에 있는 컨트롤러에서 애플리케이션 계층에 있는 서비스로 흐른다. 애플리케이션 계층은 웹 어댑터가 통신할 수 있는 특정 포트를 제공한다. 위 그림은 의존성 역전 원칙이..
2023.05.12 -
4장. 유스케이스 구현하기
소개 만들면서 배우는 클린 아키텍처 책을 읽고 정리하며 소감을 적는 포스트입니다. 유스케이스 구현하기 이전 포스트에서 만든 육각형 아키텍처에서 애플리케이션, 웹, 영속성 계층이 현재 아키텍처에서 아주 느슨하게 결합돼 있기 때문에 필요한 대로 도메인 코드를 자유롭게 모델링할 수 있다. DDD를 할 수 있고, 풍부하거나(rich), 빈약한(anemic) 도메인 모델을 구현할 수도 있다. 도메인 모델 구현하기 한 계좌에서 다른 계좌로 송금하는 유스케이스를 구현해 본다. 입금과 출금을 할 수 있는 Account 엔티티를 만들고 출금 계좌에서 돈을 출금해서 입금 계좌로 돈을 입금하는 것이다. package buckpal.account.domain; @AllArgsConstructor(access = AccessL..
2023.05.12 -
3장. 코드 구성하기
소개 만들면서 배우는 클린 아키텍처 책을 읽고 정리하며 소감을 적는 포스트입니다. 코드 구성하기 코드를 보는 것만으로도 아키텍처가 파악 된다면 굉장히 좋을 것입니다. 이번 포스트는 BuckPal 예제 코드를 구조화 하기 위해 육각형 아키텍처를 직접 레이아웃을 구성하도록 하겠습니다. 아래는 사용자가 본인의 계좌에서 다른 계좌로 돈을 송금할 수 있는 송금하기 유스케이스를 살펴보겠습니다. 계층으로 구성하기 코드를 구조화하는 첫 번째 접근법은 계층을 이용하는 것입니다. buckpal ├─────── domain │ ├──── Account │ ├──── Activity │ ├──── IAccountRepository │ └──── AccountService │ ├─────── persistence │ └────..
2023.04.28 -
2장. 의존성 역전하기
소개 만들면서 배우는 클린 아키텍처 책을 읽고 정리하며 소감을 적는 포스트입니다. 의존성 역전하기 단일 책임 원칙(SRP, Single Responsibility Principle) 우리가 잘 알고 있는 정의는 하나의 컴포넌트는 오로지 한 가지 일만 해야하고, 그것을 올바르게 수행해야 한다. 하지만 실제 정의는 컴포넌트를 변경하는 이유는 오직 하나뿐이어야 한다. 만약 컴포넌트를 변경할 이유가 한 가지라면 우리가 어떤 다른 이유로 소프트웨어를 변경하더라도 이 컴포넌트에 대해서는 전혀 신경 쓸 필요가 없다. 어떤 컴포넌트의 의존성 각각이 이 컴포넌트를 변경하는 이유 하나씩에 해당 된다. 위 그림에서 점선 화살표는 전이 의존성(transitive dependency)이다. E는 의존하는 것이 전혀 없지만 그에..
2023.04.27 -
1장. 계층형 아키텍처의 문제는 무엇일까?
소개 만들면서 배우는 클린 아키텍처 책을 읽고 정리하며 소감을 적는 포스트입니다. 계층형 아키텍처의 문제점 웹 계층, 도메인 계층, 영속성 계층으로 구성된 전통적인 웹 애플리케이션 구조 계층형 아키텍처는 맨 위의 웹 계층에서 요청을 받아 도메인 계층에 있는 서비스로 요청을 보낸다. 서비스에서는 필요한 비즈니스 로직을 수행하고, 도메인 엔티티의 현재 상태를 조회하거나 변경하기 위해 영속성 계층의 컴포넌트를 호출한다. 계층을 잘 이해하고 구성한다면 다른 계층에 영향을 주지 않고 독립적으로 관리가 가능하다. 하지만 계층형 아키텍처는 코드에 나쁜 습관들이 스며들기 쉽게 만들고 시간이 지날 수록 소프트웨어를 점점 더 변경하기 어렵게 만드는 수많은 허점들을 노출한다. 데이터베이스 주도 설계를 유도한다. 전통적인 계..
2023.04.27