🎯 도메인 개요

📌 주요 기능

🛠️ 기술 스택

분야 기술
Framework Spring Boot 3.5.3
ORM Spring Data JPA + QueryDSL
Security BCrypt (비밀번호 암호화)
Messaging RabbitMQ + Spring Event
HTTP Client WebClient
Database MySQL 8.0

🏗️ 아키텍처 설계

🎨 설계 철학

💡 DDD (Domain Driven Design)

User 애그리거트를 중심으로 비즈니스 로직을 캡슐화하고, 도메인 서비스 인터페이스로 핵심 비즈니스 규칙을 정의합니다.

🔄 의존성 역전 원칙 (DIP)

📡 이벤트 기반 아키텍처


📦 패키지 구조

📁 com.example.momo.domain.user
├── 📁 application/          # 애플리케이션 서비스 레이어
│   ├── 📄 UserServiceImpl.java      # 서비스 구현체
│   ├── 📄 UserOutboxServiceImpl.java # 아웃박스 서비스 구현체
│   └── 📁 dto/                      # 입출력 DTO
│       ├── 📄 RegisterRequestDto.java
│       ├── 📄 WithdrawRequestDto.java
│       ├── 📄 UserResponseDto.java
│       ├── 📄 UserAuthResponseDto.java
│       ├── 📄 UserFollowListResponseDto.java
│       ├── 📄 UserLocationUpdateRequestDto.java
│       ├── 📄 UserNicknameUpdateRequestDto.java
│       ├── 📄 UserPasswordUpdateRequestDto.java
│       └── 📄 UserRatingCreateRequestDto.java
├── 📁 domain/              # 도메인 엔티티 및 인터페이스
│   ├── 📄 User.java                 # 사용자 애그리거트 루트
│   ├── 📄 UserFollow.java           # 팔로우 관계 엔티티
│   ├── 📄 UserRating.java           # 사용자 평가 엔티티
│   ├── 📄 UserCategory.java         # 사용자-카테고리 매핑
│   ├── 📄 UserOutboxEvent.java      # 아웃박스 이벤트 엔티티
│   ├── 📄 UserService.java          # 도메인 서비스 인터페이스
│   ├── 📄 UserRepository.java       # 레포지토리 인터페이스
│   └── 📄 UserOutboxService.java    # 아웃박스 서비스 인터페이스
├── 📁 infra/               # 인프라스트럭처 구현체
│   ├── 📄 UserRepositoryImpl.java
│   ├── 📄 UserJpaRepository.java
│   └── 📄 UserQueryRepository.java
├── 📁 presentation/        # 프레젠테이션 레이어
│   └── 📄 UserController.java
├── 📁 event/              # 이벤트 처리
│   ├── 📁 springEvent/
│   │   ├── 📄 UserEvents.java
│   │   └── 📄 UserEventHandler.java
│   └── 📁 rabbitmq/
│       ├── 📁 producer/
│       │   └── 📄 UserEventProducer.java
│       └── 📁 consumer/
│           └── 📄 UserEventConsumer.java
└── 📁 exception/          # 예외 처리
    ├── 📄 UserException.java
    └── 📄 UserErrorCode.java

📋 레이어별 역할

레이어 역할 주요 클래스
Presentation HTTP 요청/응답, 입력 검증 UserController
Application 비즈니스 플로우 조율, 트랜잭션 UserServiceImpl
Domain 핵심 비즈니스 로직, 도메인 규칙, 인터페이스 정의 User, UserFollow, UserService
Infrastructure 외부 시스템 연동, 데이터 영속성 UserRepositoryImpl
Event 이벤트 발행/구독, 도메인 간 통신 UserEventHandler