분야 | 기술 |
---|---|
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)
- Domain: 핵심 비즈니스 로직과 인터페이스 정의
- Application: Domain 인터페이스를 구현하여 유스케이스 처리
- Infrastructure: Domain 인터페이스를 구현하여 기술적 세부사항 처리
📡 이벤트 기반 아키텍처
- 도메인 내부: Spring Event (동기적)
- 도메인 간: RabbitMQ + Outbox (비동기적)
📁 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 |