Skip to content

[docs] 팔로우(Follow) 도메인 PRD 역설계 (specs/002-follow-domain)#355

Open
buzz0331 wants to merge 1 commit into
chore/spec-kit-setupfrom
002-follow-domain
Open

[docs] 팔로우(Follow) 도메인 PRD 역설계 (specs/002-follow-domain)#355
buzz0331 wants to merge 1 commit into
chore/spec-kit-setupfrom
002-follow-domain

Conversation

@buzz0331
Copy link
Copy Markdown
Contributor

Summary

운영 중인 팔로우 도메인을 사용자 관점에서 역설계해 PRD로 정형화한 두 번째 산출물.
신규 기능 정의가 아닌 기존 구현을 "이래야 한다"로 문서화하는 작업.

Depends on #353 (Spec Kit 셋업 + 헌법 v1.0.0 비준). #353 머지 후 base를 develop으로 retarget 예정.
피드 PRD(#354)와는 독립적으로 리뷰·머지 가능.

무엇이 추가되는가

파일 내용
specs/002-follow-domain/spec.md 팔로우 도메인 PRD (한국어, 212 줄)
specs/002-follow-domain/checklists/requirements.md 사양 품질 체크리스트 (15/15 통과)
.specify/feature.json 현재 작업 중인 feature 디렉토리 포인터

PRD 구성

  • User Stories 5건 (우선순위)
    • P1: 팔로우/언팔로우 토글 (자기 자신·중복 거부, 카운트 정합)
    • P1: 팔로우 관계 둘러보기 (팔로워/팔로잉/is-following 단일 호출)
    • P2: 팔로잉의 최근 공개 피드 (피드 도메인 공개 정책에 위임)
    • P2: 팔로우 시 알림 트리거 발화 (1건당 1회, 언팔로우는 미발화)
    • P3: 동시 토글·일시적 장애 상황의 일관된 사용자 경험
  • Functional Requirements 16건 — 토글/카운트·동시성/조회/알림 연동/라이프사이클로 분류
  • Success Criteria 7건 — 기술 비종속, 사용자 관찰 가능 측정치
  • Edge Cases 8건 — 자기 자신·중복·존재하지 않는 관계·동시 토글·재시도 후 실패·삭제 사용자 등

핵심 결정

카운트 정합성 (FR-004 ~ FR-008)

본 PRD는 사용자가 관찰 가능한 일관성 조건만 정의:

  • 유일성: (요청자, 대상) 쌍에 대해 활성 팔로잉 관계가 절대 중복 존재하지 않음
  • 카운트: 팔로워 수가 항상 활성 팔로잉 관계 수와 일치
  • 음수 금지: 어떤 경우에도 팔로워 수가 음수가 되지 않음
  • 부분 상태 금지: 관계는 생성됐는데 카운트는 안 올라간 상태 등은 발생 불가

구체 메커니즘(락 전략·재시도 정책·DB 제약)은 구현 영역으로 의도적 배제. `#335` follow count 이슈와 `V251120` unique constraint 마이그레이션이 본 결정의 배경.

재시도 한계 초과 시 사용자 경험 (FR-008, User Story 5)

자동 재시도가 모두 실패해도:

  • 사용자에게는 "잠시 후 다시 시도해주세요" 일반 안내만 노출
  • 자원 경합 같은 시스템 내부 원인은 사용자에게 비노출
  • 운영자/개발자는 내부 오류 코드·로그로 원인 식별

알림 연동 (FR-013 ~ FR-015)

  • 팔로우 성공 = 알림 트리거 정확히 1회 발화
  • 언팔로우 = 알림 트리거 발화 X
  • 알림 메시지·채널·수신자 설정은 본 PRD 범위 외

범위 외 (의도적)

  • 차단(Block)·비공개 계정(Private Account) — 현재 THIP에 미구현. 향후 도입 시 본 PRD 개정 트리거
  • 알림 도메인 — 트리거 발화 사실만 보증, 메시지·채널·수신자 우선순위는 알림 PRD
  • 사용자 라이프사이클 — 탈퇴·삭제 사용자에 대한 노출 정책은 별도 PRD
  • 피드 노출 규칙 — "팔로잉 최근 피드" 화면의 공개 정책은 피드 PRD([docs] 피드(Feed) 도메인 PRD 역설계 (specs/001-feed-features) #354)를 따름
  • 목록 페이지네이션 세부 — 다른 목록 도메인과의 일관성 유지(피드와 같은 커서 방식)

후속

  • 본 PR 머지 후, post / book / room 등 핵심 도메인 역설계 PRD 순차 진행
  • PRD가 현재 구현을 충족하지 못하는 부분(gap)이 발견되면 별도 fix/feature PR로 분리

Test plan

  • PRD 본문이 비즈니스 어휘로 읽히는지 (구현 디테일 누출 점검)
  • 카운트 정합성 요구 (FR-004~FR-008)가 현재 구현 + 마이그레이션과 일치하는지
  • 재시도 한계 초과 시 UX 정책(일반 안내·비노출)이 클라이언트와 합의 가능한 수준인지
  • 알림 발화 보증(1회 + 언팔로우 미발화)이 현재 알림 도메인 구현과 일치하는지
  • 차단·비공개 계정 미존재 상태가 명시적으로 범위 외 처리되는 것에 대한 팀 합의
  • 누락된 시나리오(예: 맞팔 인지 화면, 추천 사용자, 팔로우 요청 승인 등)가 있는지 검토

- 운영 중인 팔로우 도메인을 사용자 관점으로 정형화 (신규 기능 정의 아님)
- User Story 5건 (P1: 토글·관계 둘러보기, P2: 팔로잉 최근 피드·알림 트리거,
  P3: 동시성·재시도 일관성)
- Functional Requirements 16건 (FR-001 ~ FR-016)
- 측정 가능한 Success Criteria 7건, Edge Cases 8건, Assumptions 8건
- 재시도 한계 초과 시 사용자 경험 명문화: 자원 경합 비노출, 일반 안내만
  (운영자/개발자는 내부 코드·로그로 식별)
- 알림 트리거 발화 보증(팔로우 1회당 1건, 언팔로우는 미발화)
- 차단/비공개 계정/알림 도메인/사용자 라이프사이클은 명시적 범위 외
- 헌법 v1.0.0의 "API 계약 안정성"·"성능 가드" 원칙 반영
  (#335 follow count 이슈, #336 중복 에러코드 컨텍스트)
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 17, 2026

Warning

Rate limit exceeded

@buzz0331 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 47 minutes and 47 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 4db577f6-de4c-4dca-a1de-8bcc3532ac78

📥 Commits

Reviewing files that changed from the base of the PR and between 2277cb3 and 908f550.

📒 Files selected for processing (3)
  • .specify/feature.json
  • specs/002-follow-domain/checklists/requirements.md
  • specs/002-follow-domain/spec.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 002-follow-domain

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant