개발끄적

계층형 아키텍처와 도메인형 아키텍처: 패키지 구조의 비교

누구세연 2024. 6. 24. 21:57

소프트웨어 아키텍처는 코드의 유지보수성과 확장성을 결정짓는 중요한 요소입니다.

특히 패키지 구조는 코드의 가독성과 관리에 큰 영향을 미친다고 생각합니다.

이번 글에서는 계층형 아키텍처와 도메인형 아키텍처의 패키지 구조에 대해 살펴보고, 각 아키텍처의 장단점과 예시를 살펴보겠습니다.

 

계층형 아키텍처

계층형 아키텍처는 애플케이션을 여러 층으로 나누어 관리합니다.

  1. 프레젠테이션 계층
    사용자 인터페이스와 관련된 코드가 있는 곳입니다.
  2. 서비스 계층
    비즈니스 로직을 처리하는 코드가 있는 곳입니다.
  3. 리포지토리 계층
    데이터베이스에 접근하는 코드가 있는 곳입니다.
  4. 도메인 계층
    핵심 비즈니스 객체와 로직이 있는 곳입니다.

 

패키지 구조 예시

com.example.application
├── controller (프레젠테이션 계층)
├── service (서비스 계층)
├── repository (리포지토리 계층)
└── model (도메인 계층)

 

 

장점

  • 명확한 역할 분리: 각 계층이 명확한 역할을 가지므로, 코드를 이해하기 쉽습니다.
  • 테스트 용이: 각 계층별로 독립적으로 테스트할 수 있어 편리합니다.
  • 익숙한 패턴: 많은 개발자들이 이미 알고 있는 패턴입니다.

단점

  • 계층 간 의존성: 한 계층의 변경이 다른 계층에 영향을 미칠 수 있습니다.
  • 복잡성 증가: 큰 프로젝트에서는 계층의 수가 늘어나 복잡해질 수 있습니다.
  • 비즈니스 로직의 분산: 비즈니스 로직이 여러 계층에 나뉘어 있을 수 있습니다.

 

도메인형 아키텍처

도메인형 아키텍처는 비즈니스 로직에 중점을 둔 아키텍처입니다.

도메인(비즈니스 기능) 중심으로 코드를 작성합니다.

 

패키지 구조 예시

com.example.application
├── user (사용자 도메인)
│   ├── UserController
│   ├── UserService
│   ├── UserRepository
│   └── User
├── order (주문 도메인)
│   ├── OrderController
│   ├── OrderService
│   ├── OrderRepository
│   └── Order
└── product (상품 도메인)
    ├── ProductController
    ├── ProductService
    ├── ProductRepository
    └── Product

 

장점

  • 비즈니스 중심: 비즈니스 로직이 명확하게 드러나 이해하기 쉽습니다.
  • 유연성: 새로운 기능 추가 시 독립적으로 추가할 수 있습니다.
  • 변경에 강함: 한 도메인의 변경이 다른 도메인에 영향을 미치지 않습니다.

단점

  • 초기 학습 곡선: 익숙하지 않은 개발자에게는 배우기 어려울 수 있습니다.
  • 작은 프로젝트에 부적합: 작은 프로젝트에서는 불필요하게 복잡해 보일 수 있습니다.
  • 도메인 간 협력 어려움: 여러 도메인이 협력해야 할 때 구조가 복잡해질 수 있습니다.

 

 

계층형 아키텍처와 도메인형 아키텍처는 각각의 장단점이 있습니다.

계층형 아키텍처: 전통적이고 익숙한 방식으로, 역할 분리가 명확하지만, 계층 간 의존성이 있을 수 있습니다.
도메인형 아키텍처: 비즈니스 중심으로 유연하지만, 배우기 어려울 수 있습니다.

프로젝트 규모와 팀의 경험에 따라 적합한 아키텍처를 선택하는 것이 중요합니다.
각각의 장점을 활용하여 유지보수성과 확장성을 높이는 것이 목표입니다.