Skip to content

레이어드 아키텍처 -> 헥사고날 아키텍처로 구조로 리펙토링 ( User ) #9

@qkrwndnjs1075

Description

@qkrwndnjs1075

🔄 레이어드 아키텍처 → 헥사고날 아키텍처 리팩토링

📋 Issue Overview

현재 casper-user 서비스는 레이어드 아키텍처와 헥사고날 아키텍처가 혼재된 상태입니다. 일관성 있는 헥사고날 아키텍처로 전환하여 도메인 중심 설계와 외부 의존성 격리를 통한 테스트 용이성 및 유지보수성을 향상시키고자 합니다.

🎯 Goals

  • 도메인 중심 설계: 비즈니스 로직을 외부 기술에 독립적으로 구성
  • 의존성 역전: 도메인이 인프라에 의존하지 않도록 구조 개선
  • 테스트 용이성: 포트/어댑터 패턴을 통한 Mock 테스트 환경 구축
  • 확장성: 새로운 어댑터 추가 시 도메인 코드 변경 없이 확장 가능

📊 Current Architecture Analysis

Current State

domain/
├── admin/ (레이어드: presentation → service → domain)
├── auth/ (레이어드: presentation → service → domain)
├── user/ (헥사고날: adapter + application + domain)
└── refreshtoken/ (레이어드: domain만 존재)

Problems

  1. 일관성 부족: 도메인별로 다른 아키텍처 패턴 적용
  2. 의존성 방향: service가 presentation과 domain에 동시 의존
  3. 테스트 어려움: 외부 의존성과 비즈니스 로직이 강결합
  4. 확장성 제한: 새로운 인터페이스 추가 시 기존 코드 수정 필요

🏗️ Target Architecture

domain/
├── admin/
│ ├── application/
│ │ ├── port/
│ │ │ ├── in/ # Use Cases (인바운드 포트)
│ │ │ └── out/ # Repository, External API (아웃바운드 포트)
│ │ └── service/ # Use Case 구현체
│ ├── adapter/
│ │ ├── in/
│ │ │ └── web/ # REST Controllers
│ │ └── out/
│ │ ├── persistence/ # JPA Repository 구현
│ │ └── external/ # 외부 API 호출
│ └── domain/ # 엔티티, 도메인 서비스, 비즈니스 규칙
├── auth/ (동일한 구조)
├── user/ (현재 구조 개선)
└── refreshtoken/ (동일한 구조)

Metadata

Metadata

Assignees

Labels

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions