Skip to content

계층형 구조 → 도메인 중심 구조”로 변경 (2025-12-16) #2

@creepereye1204

Description

@creepereye1204

1. 변경 배경

기존 프로젝트는 controller / service / repository 중심의 계층형(Layered) 아키텍처를 사용하고 있었으며, 개인 학습 단계에서는 무리가 없었으나 프로젝트가 확장될수록 다음과 같은 문제점이 드러남:

  • 도메인별 코드가 여러 패키지에 흩어져 구조 파악이 어려움
  • 서비스/컨트롤러가 비대해지며 책임이 모호해짐
  • 기능 추가/삭제 시 영향 범위가 넓어 유지보수 부담 증가
  • 팀 단위 개발 시 충돌 가능성 증가
  • 전반적인 유지보수 난이도 상승

이러한 문제를 해결하기 위해 **도메인 중심 아키텍처(Domain-Oriented Architecture)**로 구조를 개편함.


2. 변경된 아키텍처 구조

com.creepereye.ecommerce
 ├── global
 │     ├── config
 │     ├── exception
 │     │     ├── handler
 │     │     ├── custom
 │     │     └── error
 │     ├── security
 │     │     ├── filter
 │     │     ├── handler
 │     │     ├── provider
 │     │     └── util
 │     └── redis
 └── domain
       ├── auth
       │     ├── controller
       │     ├── service
       │     ├── dto
       │     ├── entity
       │     ├── repository
       │     └── jwt (선택)
       ├── user
       │     ├── controller
       │     ├── service
       │     ├── dto
       │     ├── entity
       │     └── repository
       ├── product
       ├── order
       └── cart

3. 변경 내용 요약

✅ 3-1. 비즈니스 로직을 도메인 단위로 재구성

  • auth, user, product, order, cart
  • 각 도메인 내부에 controller/service/repository/entity/dto를 배치하여 응집도 강화

✅ 3-2. 공통 기능을 global 영역으로 이동

  • Security(JWT, 필터, 핸들러)
  • Exception(GlobalExceptionHandler, ErrorCode)
  • Config(Spring 설정)
  • Redis 인프라

✅ 3-3. JWT/Redis 로직을 서비스에서 분리

  • 인증/인가 로직은 global/security
  • 캐시/토큰 저장은 global/redis
  • 서비스는 오직 비즈니스 로직만 담당하도록 역할 명확화

4. 장점

✅ 4-1. 유지보수성 향상

  • 도메인별 코드가 모여 있어 구조 파악이 쉬움
  • 기능 추가/삭제 시 영향 범위 최소화

✅ 4-2. 확장성 증가

  • 도메인 단위로 모듈화 가능
  • MSA 전환 시에도 유리

✅ 4-3. 팀 개발에 최적화

  • 도메인 단위로 작업 분리 가능
  • 충돌 및 의존성 문제 감소

✅ 4-4. 코드 가독성 상승

  • “이 기능은 어디에 있어야 하는가?”가 명확해짐
  • 보안/예외/설정은 global
  • 비즈니스 로직은 domain

✅ 4-5. 테스트 용이

  • 도메인 단위로 테스트 가능
  • 보안/인프라 로직과 분리되어 단위 테스트가 간단해짐

5. 단점

❌ 5-1. 초기 설계 비용 증가

  • 계층형보다 구조 설계에 시간이 더 필요함

❌ 5-2. 작은 프로젝트에서는 과할 수 있음

  • 도메인 수가 적으면 구조가 복잡해 보일 수 있음

❌ 5-3. 팀원 간 컨벤션 필요

  • 도메인 기준을 어떻게 나눌지 합의가 필요

6. 결론

이번 아키텍처 개편을 통해
✅ 유지보수성
✅ 확장성
✅ 가독성
✅ 테스트 용이성
모두 크게 향상되었으며, 앞으로 기능을 추가할 때도 도메인 중심으로 확장해 나갈 예정임.


Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions