You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**직렬화 지원**: Kafka 전송을 위해 관련 엔티티/값 객체(Post, PostContent, PostMetaData, Tag)는 모두 `Serializable`을 구현
254
255
255
256
## 댓글(Comment) 애그리거트
256
257
@@ -368,37 +369,30 @@ classDiagram
368
369
### 포스트 관련 이벤트
369
370
370
371
```mermaid
371
-
graph TB
372
-
subgraph "Post Events"
373
-
PC[PostCreated]
374
-
PU[PostUpdated]
375
-
PPub[PostPublished]
376
-
PH[PostHidden]
377
-
PD[PostDeleted]
378
-
PV[PostViewed]
379
-
PL[PostLiked]
380
-
PUL[PostUnliked]
381
-
end
382
-
383
-
subgraph "Comment Events"
384
-
CC[CommentCreated]
385
-
CU[CommentUpdated]
386
-
CH[CommentHidden]
387
-
CD[CommentDeleted]
388
-
end
389
-
390
-
subgraph "Event Handlers"
391
-
PSE[PostStatsEventHandler]
392
-
end
393
-
394
-
PC --> PSE
395
-
PV --> PSE
396
-
PL --> PSE
397
-
PUL --> PSE
398
-
CC --> PSE
399
-
CD --> PSE
372
+
graph LR
373
+
PostAggregate((Post Aggregate))
374
+
Handler[PostEventHandler]
375
+
Publisher[PostEventPublisher]
376
+
Producer[PostEventProducer]
377
+
Kafka[(Kafka Broker)]
378
+
Consumer[PostEventConsumer]
379
+
Processor[PostEventProcessor]
380
+
Indexer[PostSearchIndexer → Elasticsearch]
381
+
Direct[DirectPostEventPublisher]
382
+
Stats[PostStatsEventHandler]
383
+
384
+
PostAggregate --> Handler
385
+
Handler --> Publisher
386
+
Publisher --> Producer
387
+
Producer --> |PostEventMessage| Kafka
388
+
Kafka --> Consumer --> Processor --> Indexer
389
+
Publisher --> Direct --> Processor
390
+
Processor --> Indexer
391
+
PostAggregate --> Stats
400
392
```
401
393
394
+
도메인 이벤트는 Post 애그리거트에서 발행되며 `PostEventHandler`가 애플리케이션 이벤트로 수신합니다. 기본적으로 Kafka를 거쳐 `PostEventProcessor`가 Elasticsearch 색인을 갱신하고, 통계 관련 이벤트는 `PostStatsEventHandler`가 별도로 처리합니다. Kafka를 사용할 수 없는 경우 `DirectPostEventPublisher`가 동일한 프로세서를 직접 호출합니다.
395
+
402
396
### 이벤트 처리 규칙
403
397
404
398
#### 통계 업데이트
@@ -564,27 +558,88 @@ public class Post extends AbstractAggregateRoot {
0 commit comments