Skip to content

[docs/#357] DDD 도입을 위한 설계 문서 작성#358

Merged
Dimo-2562 merged 7 commits intodevelopfrom
docs/#357
Apr 21, 2026
Merged

[docs/#357] DDD 도입을 위한 설계 문서 작성#358
Dimo-2562 merged 7 commits intodevelopfrom
docs/#357

Conversation

@Dimo-2562
Copy link
Copy Markdown
Contributor

@Dimo-2562 Dimo-2562 commented Apr 16, 2026

❤️ 기능 설명

DDD 도입을 위한 설계 문서 전 범위를 작성합니다.

유비쿼터스 언어 사전부터 도메인 전략, 전술 설계, 테스트 갭 분석, DDD 전환 로드맵까지 포함합니다.


📄 작성된 문서

유비쿼터스 언어 (docs/ubiquitous-language/)

바운디드 컨텍스트별로 표준 용어를 정의합니다.

문서 내용
ubiquitous-language.md 호환용 진입 인덱스
README.md 컨텍스트 문서 맵, 교차 컨텍스트 표준 용어(검색어/핵심 키워드/게시글 키워드 구분, 계정 프로필/개인화 프로필 구분), 문서-코드 동기화 상태
source-ingestion.md 기술 블로그, RSS 피드, 피드 아이템, 크롤링 잡
post-content.md 기술 게시글, 요약, 짧은 요약, 게시글 키워드, 콘텐츠 청크, 검색 문서
user-account.md 사용자, 회원 상태, 관심 카테고리, 관심 키워드, 계정 프로필
personalization-profile.md 개인화 프로필, 프로필 벡터, 핵심 키워드, 활동 데이터
activity.md 읽은 게시글, 북마크, 검색 기록 (ScrabPost → Bookmark 통일 결정 포함)
search.md 검색어, BM25/시맨틱/하이브리드 검색, RRF, 개인화 리랭킹
recommendation.md 추천 후보군, 추천 게시글, 추천 이력, MMR, RecommendationSet 표준 용어 확정
auth-security.md 소셜 로그인, 액세스/리프레시 토큰, 사용자 주체
notification.md 알림 토큰, 활성 토큰
admin-ops.md 관리자 배치 실행, 수동 크롤링, Webhook 알림

주요 용어 결정사항:

  • ScrabPost / scrap_posts / Bookmark북마크 / Bookmark로 통일
  • searchWord / query검색어 / SearchQuery로 통일
  • "프로필" 단독 표현 지양 → 계정 프로필 / 개인화 프로필 구분
  • keyKeywords핵심 키워드 / KeyKeyword
  • RecommendationSet 표준 용어 확정 (현재 RecommendedPost 단건 구조는 리팩터링 대상)

전략 설계 (docs/domain-strategy.md)

  • 비즈니스 도메인 정의 및 핵심/지원/일반 하위 도메인 분류
  • 바운디드 컨텍스트 후보 10개 (Source/Ingestion, Post/Content, User Account, Personalization Profile, Activity, Search, Recommendation, Auth/Security, Notification, Admin/Ops)
  • User Account / Personalization Profile 개념 분리 결정 (현재 패키지는 domain/user 유지, 패키지 분리는 이벤트 정착 후 검토)
  • Context Map: 컨텍스트 쌍별 seam 단위 As-Is 관계 / To-Be 목표 / 통신 패턴 / 현재 구현 명시
  • 컨텍스트 간 핵심 흐름 정리

전술 설계 (docs/tactical-design.md)

  • 애그리거트 루트 식별 표: 10개 컨텍스트별 내부 엔티티/Projection, 불변식, 현재 코드 평가
  • 값 객체(VO) 후보 목록: SocialIdentity, AccountProfile, RankOrder, EmbeddingVector, PostSummary
  • 누락된 도메인 메서드 식별: TechBlog.markCrawled(), User.replaceInterests(), Post.markAsEmbedded()
  • Post.incrementViewCount() 동시성 정책 결정 (SQL atomic UPDATE 방식 채택)
  • 도메인 이벤트 후보 P0~P3 우선순위 표 (영문 클래스명 포함, 20개)
  • Cross-Aggregate 참조 정책: 모놀리스 JPA 직접 참조 유지, 서비스 레이어 타 Aggregate 상태 변경 금지
  • Domain Event 발행/구독 기술 규약: @TransactionalEventListener(AFTER_COMMIT) + @Async, Batch Step 완료 후 발행
  • Elasticsearch Projection 일관성 정책

테스트 갭 분석 (docs/test-gap-analysis.md)

  • 현재 테스트 인벤토리: tracked 기준 주요 영역별 파일 수 및 @Test
  • 컨텍스트별 현재 보호 수준 평가 및 남은 갭 분석
  • DDD 애그리거트 기준 테스트 갭 표
  • 가장 큰 갭 5개: SearchServiceImpl 회귀 테스트 부재 / LlmRecommendationService·MmrService 테스트 부재 / UserProfileService 일반 테스트 부재 / Post 애그리거트 단위 테스트 부재 / Post embedding pipeline 테스트 부재
  • P0~P3 우선순위별 테스트 백로그

DDD 전환 + 테스트 개선 로드맵 (docs/ddd-test-refactoring-roadmap.md)

핵심 전략:

"테스트를 전부 완성한 뒤 DDD로 전환하지 않는다. 리팩터링할 슬라이스마다 현재 동작 보호 테스트를 먼저 작성하고, 그 범위 안에서 DDD 리팩터링을 진행한다."

  • Phase 0~6 단계 계획
  • Phase 4 컨텍스트별 리팩터링 순서: Activity → Post/Content → User Account → Personalization Profile → Recommendation → Search → Source/Ingestion
  • Phase 6 이벤트/ACL/포트 기반 분리 진입 조건 체크리스트 포함
  • 1차 이벤트 도입 후보: UserInterestsChanged, PersonalizedProfileGenerated, TechnicalPostIndexed
  • 작업 단위 예시 8개 (북마크 용어 통일 → Post embedding 보호 → 검색 회귀 테스트 → 1차 이벤트 도입)

연결된 issue

close #357


✅ 체크리스트

  • PR 제목 규칙 잘 지켰는가?
  • 추가/수정사항을 설명하였는가?
  • 테스트 결과 사진을 넣었는가? (문서 작업으로 해당 없음)
  • 이슈넘버를 적었는가?

@Dimo-2562 Dimo-2562 self-assigned this Apr 16, 2026
@Dimo-2562 Dimo-2562 added the 📜 DOCS 문서 작업 label Apr 16, 2026
@Dimo-2562 Dimo-2562 merged commit b8ba67a into develop Apr 21, 2026
1 check passed
@Dimo-2562 Dimo-2562 deleted the docs/#357 branch April 21, 2026 12:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📜 DOCS 문서 작업

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[DOCS] DDD 도입을 위한 설계 문서 작성

1 participant