-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
├── ServerApplication.java
├── domain
│ ├── auth
│ │ ├── model
│ │ ├── repository
│ │ └── event
│ ├── club
│ │ ├── model
│ │ ├── repository
│ │ └── event
│ ├── member
│ │ ├── model
│ │ ├── repository
│ │ └── event
│ └── topication
│ ├── model
│ │ ├── Topication.java
│ │ ├── Category.java
│ │ ├── Region.java
│ │ └── Review.java
│ ├── repository
│ │ └── TopicationRepository.java
│ └── event
│ └── TopicationCreatedEvent.java
├── application
│ ├── auth
│ │ ├── AuthService.java
│ │ └── AuthEventListener.java
│ ├── club
│ │ ├── ClubService.java
│ │ └── ClubEventListener.java
│ ├── member
│ │ ├── MemberService.java
│ │ └── MemberEventListener.java
│ └── topication
│ ├── TopicationCommandService.java //command랑 Query랑 분리하셨길래
│ ├── TopicationQueryService.java
│ ├── CategoryService.java
│ ├── RegionService.java
│ ├── ReviewService.java
│ └── TopicationEventListener.java
├── infrastructure
│ ├── config
│ │ ├── JpaConfig.java
│ │ └── SecurityConfig.java
│ ├── persistence
│ │ ├── auth
│ │ ├── club
│ │ ├── member
│ │ └── topication
│ │ ├── jpa
│ │ │ ├── entity
│ │ │ │ └── TopicationEntity.java
│ │ │ └── repository
│ │ │ ├── TopicationJpaRepository.java
│ │ │ └── TopicationRepositoryImpl.java
│ │ └── elasticsearch
│ │ └── TopicationEsAdaptor.java
│ └── kafka
│ ├── KafkaSender.java
│ ├── RetryFailListener.java
│ └── model
│ └── RetryFailMessage.java
├── interfaces
│ ├── api
│ │ ├── auth
│ │ ├── club
│ │ ├── member
│ │ └── topication
│ │ ├── TopicationController.java
│ │ ├── CategoryController.java
│ │ ├── RegionController.java
│ │ └── ReviewController.java
│ ├── dto
│ │ ├── auth
│ │ ├── club
│ │ ├── member
│ │ └── topication
│ │ └── CreateTopicationRequest.java
│ └── mapper
│ ├── auth
│ ├── club
│ ├── member
│ └── topication
│ └── TopicationMapper.java
└── common
├── exception
├── constants
└── util
└── BaseEntity.java
개요
- 도메인 중심: 각 도메인이 명확히 구분되어 있어 관련 코드를 쉽게 찾을 수 있습니다.
- 레이어 구분: 각 레이어(domain, application, infrastructure, interfaces)를 구분하여 관심사를 분리했습니다
- 의존성 방향: 외부(인프라스트럭처) → 인터페이스 → 애플리케이션 → 도메인으로 의존성이 흐릅니다.
특징
- 도메인 레이어는 순수한 Java 코드로만 구성하고, Spring 관련 어노테이션 등을 사용하지 않도록 합니다.
- 애플리케이션 레이어의 서비스들은 도메인 모델과 리포지토리 인터페이스에 의존합니다.
- 인프라스트럭처 레이어에서는 도메인 레이어의 인터페이스를 구현합니다.
- 인터페이스 레이어의 컨트롤러들은 애플리케이션 서비스를 호출하고, DTO와 도메인 모델 간의 변환을 담당하도록 합니다.
- 관심사 분리 및 디커플링에 사용되는 ApplicationEventPublisher 사용시 ~EventClass는 domain레이어에 위치하고, 각 Event의 Listener 는 application 레이어에 위치합니다
레이어간 역할
- Domain Layer:
- 비즈니스 개념과 규칙 정의
- 핵심 비즈니스 로직 구현
- 도메인 이벤트 정의
- 리포지토리 인터페이스 정의
- Application Layer:
- 트랜잭션 관리
- 여러 도메인 객체 간 조율
- 보안, 로깅 등 크로스 커팅 관심사 처리
- 도메인 이벤트 발행 및 처리
- Infrastructure Layer:
- 데이터베이스 연동 (리포지토리 구현)
- 외부 API 통합
- 메시징 시스템 구현 (예: Kafka)
- 보안 메커니즘 구현
- 캐싱 구현
- Common (Shared Kernel):
- 공통 유틸리티 클래스
- 전역 예외 정의
- 공통 상수 및 열거형
- 크로스 커팅 관심사를 위한 어노테이션
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels