LinkedIn

Clean Architecture와 Spring MVC - 2. Spring MVC

2020. 11. 1. 12:05 | 자바 개발자되기

참고

  • 이 글의 목적은 Python을 사용하던 개발자가 Java/Spring을 공부하며 느낀 구조적 차이점을 기록
  • Java/Spring 부분에서 부족하거나 틀린 부분이 있을 수 있으므로 그런 부분은 지적 부탁드리겠습니다.

Spring MVC

  • Model, View, Controller 패턴으로 스프링 개발 시 많이 사용

Request(View) → Dispatcher Servlet → Handler Mapping → Handler Adapter → Controller → Service → Entity → Repository

  1. 요청(Request)이 들어오면 Tomcat과 같은 Servlet Container가 적합한 Dispatcher Servlet(APP) 호출
  2. Dispatcher Servlet은 요청을 처리하는 Handler들을 Handler Mapping에 보관. 적합한 Handler 선택
  3. 선택 된 Handler 실행을 Handler Adapter에게 위임
  4. Handler Adapter에 의해 Some Controller 실행
  5. 컨트롤러는 비지니스 로직 처리를 위해 Domain Layer인 Some Service 호출
  6. 서비스는 각각의 객체(Entity - Domain Layer)가 능동적으로 처리하게끔 요청
  7. 객체가 실제 Data Source와 커뮤니케이션을 위하여 Repository Interface 사용

Clean Architecture와 Spring MVC 패턴의 차이

Use Case VS Service

  • 둘 다 Domain Layer로 요청에 대한 비지니스 로직을 처리하는 것은 다름이 없음
  • 다만 현재 사용 중인 Use Case는 객체에 대한 처리를 위해 해당 객체와 직접 통신하는 것이 아닌 Repository(Persistence Layer)를 통하여 처리
    • 실제 Database Table과 Mapping되어 있는 Model(ORM)의 존재는 Use Case에서는 모르고, Repository에서 참조
      • ex) UserModel ∈ UserRepository ↔ CreateUserUseCase
  • Spring MVC에서 Service는 객체에 대한 처리를 객체에 직접 요청
    • 객체가 능동적으로 처리하며 Data source와 커뮤니케이션이 필요하다면 내부적으로 Repository 호출

Clean Architecture Use Case에서도 Spring MVC Service와 같이 처리 요청을 Entity에게 직접 요청 할 수 있지만 서비스 특징에 맞게끔 변형 한 설계 차이