🔄 레이어드 아키텍처 → 헥사고날 아키텍처 리팩토링
📋 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
- 일관성 부족: 도메인별로 다른 아키텍처 패턴 적용
- 의존성 방향: service가 presentation과 domain에 동시 의존
- 테스트 어려움: 외부 의존성과 비즈니스 로직이 강결합
- 확장성 제한: 새로운 인터페이스 추가 시 기존 코드 수정 필요
🏗️ 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/ (동일한 구조)
🔄 레이어드 아키텍처 → 헥사고날 아키텍처 리팩토링
📋 Issue Overview
현재 casper-user 서비스는 레이어드 아키텍처와 헥사고날 아키텍처가 혼재된 상태입니다. 일관성 있는 헥사고날 아키텍처로 전환하여 도메인 중심 설계와 외부 의존성 격리를 통한 테스트 용이성 및 유지보수성을 향상시키고자 합니다.
🎯 Goals
📊 Current Architecture Analysis
Current State
domain/
├── admin/ (레이어드: presentation → service → domain)
├── auth/ (레이어드: presentation → service → domain)
├── user/ (헥사고날: adapter + application + domain)
└── refreshtoken/ (레이어드: domain만 존재)
Problems
🏗️ 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/ (동일한 구조)