github code : https://github.com/BaekGeunYoung/clean-architecture-practice

Application Structure


image.png

Clean Architecture


clean.png

말 그대로 '깨끗한' 코드. 유지보수 및 테스트 하기 용이한 코드를 작성하기 위해 고안된 아키텍쳐이다. 클린 아키텍쳐는 크게 아래와 같은 4개의 layer로 구성된다.

  • Infra (Framework & Drivers)
  • Interface (Interface Adapters)
  • App (Application Business Rules)
  • Domain (Enterprise Business Rules)

Infra

Clean architecture의 가장 바깥쪽 레이어로, 공통적으로 쓰이는 서비스나 외부 인터페이스 등을 관리하는 곳이다. 보안/인증 설정이나 DB 설정 등의 내용이 들어가면 좋을 것 같다. 의존성의 주입은 바깥쪽에서 안쪽으로만 이루어져야하는데, interface 단에서 repository를 주입받아야하므로 repository도 infra layer에 들어가는게 적절할 것 같다.

Interface

바깥과 통신하는 request/response와 내부 데이터 접근 layer 사이에 위치하는 layer이다. 흔히 MVC 구조에서
Controller가 이 layer에 위치하며, interface layer는 business logic만을 관장하고 실제 데이터에 접근하고 조작하는 작업에 대한 권한은 application layer에 위임한다.

App

필요한 데이터와 repository를 interface로부터 주입받아 데이터를 조작하고 처리하는 layer이다. 하지만 직접적인 data로의 접근에 대한 권한은 repository에게 넘긴다.

Domain

Domain layer는 실제 DB에 담기는 데이터의 model과 1대1로 mapping되는 entity 객체를 담는 곳이다. repository를 통해서만 entity 객체에 접근하게 된다.