아키텍처 구조 및 서비스 계층 분리

  • 기본 구조: 클라이언트(React, Web Browser)가 서버(Next, NodeJS)에 요청을 보내면, 서버는 Raw data API를 통해 데이터베이스(DB)와 통신하는 구조를 가집니다.
     
  • 계층 분리: 좋은 아키텍처를 위해 사용자 입/출력, 업무 처리, 데이터 처리 계층을 분리해야 합니다. 이는 업무 로직을 분리하여 객체로 만들고 역할을 나누는 것을 의미합니다.
     
  • DTO (Data Transfer Object): 계층 간에 데이터를 전달하는 객체로, 서비스 계층에서 생성될 수 있습니다.
     
  • 서비스와 리포지토리: DfMenuService는 사용자 요청을 처리하고, Repository는 DB와의 상호작용을 담당하는 저장소 역할을 합니다.
     
  • Use Case: 서비스 계층을 더 작게 나눈 단위로, 특정 사용자 요청 하나에 해당합니다.
     
  • API route와 레이아웃: route는 API를 목적으로 사용하는 파일이며, layout은 페이지를 만들기 위한 파일입니다.

클린 아키텍처 (Clean Architecture)
기본 철학: UI와 업무 로직을 분리하는 것입니다. 이는 UI, 데이터베이스, 프레임워크, 외부 라이브러리 등으로부터 독립적인 시스템을 만드는 것을 목표로 합니다.

의존성 규칙 (Dependency Rule): 모든 코드 의존성은 반드시 외부 계층에서 내부 계층으로만 향해야 합니다. 내부 계층은 외부 계층에 의존할 수 없습니다. 예를 들어, Use Case는 자신을 호출하는 UI를 몰라야 하며, 특정 데이터베이스(Supabase, MongoDB 등) 구현 방식도 알아서는 안 됩니다.

Domain 계층: 외부 기술의 영향을 받지 않는 순수 비즈니스 규칙을 처리합니다.

 

Application 계층 (Use Case): UI가 필요로 하는 방식으로 비즈니스 로직과 데이터를 처리합니다.

 

Interface Adapters 계층: 외부와 내부를 연결하고 데이터를 변환하거나 요청을 중계합니다.

 

Infrastructure 계층: 데이터베이스나 외부 API 같은 구체적인 기술 구현을 담당합니다.


관심사의 분리 (Separation of Concerns)
: 각 계층은 특정 역할에만 집중해야 합니다
.


제어의 역전(IoC)과 의존성 주입(DI)

제어의 역전 (IoC): 객체 생성 방식에 대한 제어권이 역전되는 것으로, 객체 간의 결합도를 낮추는 데 중요합니다.
의존성 주입 (DI): IoC 원칙을 구현하는 대표적인 방법입니다. 어떤 객체가 필요로 하는 다른 객체(의존성)를 내부에서 직접 생성하지 않고 외부에서 넣어주는(주입하는) 방식입니다.

728x90