Files

7.2 KiB

PRD: 크리에이터 채널 홈 커뮤니티 응답 확장

문서 정보

항목 내용
문서 상태 구현 기준 확정
작성일 2026-08-10
최종 수정일 2026-08-10
대상 제품 크리에이터 채널 홈 API
작성자·결정권자 사용자
관련 API Contract 별도 문서 없음, 이 문서의 7. API 계약을 기준으로 함
관련 구현 계획 docs/20260810_크리에이터_채널_홈_커뮤니티_응답_확장/plan-task.md
관련 review 없음

1. Overview

크리에이터 채널 홈 API의 noticescommunities 게시글 응답에 고정 여부와 댓글 가능 여부를 각각 isPinned, isCommentAvailable로 제공한다. 기존 조회 결과가 이미 보유한 값을 응답에 그대로 반영해 클라이언트가 별도 추론 없이 게시글 상태를 표시할 수 있게 한다.

2. Problem Statement

  • 현재 GET /api/v2/creator-channels/{creatorId}/home의 게시글 도메인 모델에는 고정 여부와 댓글 가능 여부가 있지만 홈 응답 DTO에는 두 값이 없다.
  • 클라이언트는 홈의 게시글이 고정 글인지, 댓글 작성이 가능한지 응답만으로 일관되게 판단할 수 없다.
  • noticescommunities가 같은 CreatorChannelCommunityPostResponse를 사용하므로 두 배열의 계약을 함께 확장해야 한다.

문제를 해결했다는 판단은 두 배열의 각 게시글에 실제 도메인 값과 일치하는 non-null Boolean 필드가 직렬화되는지로 한다.

3. Goals

  • 홈 응답의 notices[*]communities[*]isPinned를 제공한다.
  • 홈 응답의 notices[*]communities[*]isCommentAvailable을 제공한다.
  • 기존 커뮤니티 조회 결과의 값을 변형하거나 재계산하지 않고 그대로 사용한다.
  • 기존 홈 API의 endpoint, 인증 정책과 기존 응답 필드를 유지한다.

4. Non-Goals

  • 커뮤니티 조회 조건, 고정 정렬, 최대 노출 개수는 변경하지 않는다.
  • 댓글 작성·수정·삭제 정책과 API는 변경하지 않는다.
  • 커뮤니티 탭 및 게시글 상세 API 계약은 변경하지 않는다.
  • DB schema, entity, domain model과 repository query는 변경하지 않는다.
  • noticescommunities 전용 응답 DTO를 새로 분리하지 않는다.
  • 관련 없는 홈 응답 필드나 패키지 구조는 리팩터링하지 않는다.

5. Target Users and Permissions

  • 대상 사용자: 인증 후 크리에이터 채널 홈을 조회하는 앱 사용자
  • 인증 및 권한: 기존 홈 API 정책을 그대로 사용한다.
  • 차단, 성인 콘텐츠와 구매 여부 정책: 기존 홈 API 조회 결과를 그대로 사용한다.

6. 기능 요구사항

ID 상태 요구사항 수용 기준 계약/Goal 연결
CCHC-001 확정 notices[*]communities[*]isPinned를 제공한다. JSON 필드명이 정확히 isPinned이고 값은 CreatorChannelCommunityPost.isPinned와 일치한다. 7. API 계약, P1-T1
CCHC-002 확정 notices[*]communities[*]isCommentAvailable을 제공한다. JSON 필드명이 정확히 isCommentAvailable이고 값은 CreatorChannelCommunityPost.isCommentAvailable과 일치한다. 7. API 계약, P1-T1
CCHC-003 확정 두 필드는 non-null Boolean으로 응답한다. 게시글이 존재하면 두 필드가 누락되거나 null이 되지 않는다. P1-T1, P1-GATE
CCHC-004 확정 기존 홈 API 계약과 조회 정책을 보존한다. endpoint, 인증 정책, 기존 응답 필드와 게시글 선택·정렬 결과가 변경되지 않는다. P1-GATE

상태별 기대값

배열 isPinned isCommentAvailable
notices 해당 게시글의 실제 값. 현재 홈 조회 조건상 true 해당 게시글의 댓글 허용 설정값
communities 해당 게시글의 실제 값. 현재 홈 조회 조건상 false 해당 게시글의 댓글 허용 설정값
  • 댓글 수가 0이어도 isCommentAvailable을 별도로 계산하지 않는다.
  • notices 또는 communities는 기존처럼 빈 배열로 응답한다.

7. API 계약

7.1 Endpoint

  • Method: GET
  • Path: /api/v2/creator-channels/{creatorId}/home
  • 요청과 인증 정책: 변경 없음

7.2 응답 확장

data.notices[*]data.communities[*]에 다음 필드를 추가한다.

필드 타입 nullable 의미
isPinned Boolean 아니요 해당 커뮤니티 게시글의 고정 여부
isCommentAvailable Boolean 아니요 해당 커뮤니티 게시글의 댓글 작성 허용 여부

예시:

{
  "data": {
    "notices": [
      {
        "postId": 301,
        "isPinned": true,
        "isCommentAvailable": true
      }
    ],
    "communities": [
      {
        "postId": 302,
        "isPinned": false,
        "isCommentAvailable": false
      }
    ]
  }
}

예시는 추가 필드와 배열별 의미만 나타내며 기존 게시글 응답 필드는 그대로 유지한다.

8. 기술적 제약

  • Kotlin + Java 17, Spring Boot 2.7.14와 기존 Jackson 직렬화 방식을 유지한다.
  • 기존 공유 CreatorChannelCommunityPostResponsefrom 변환을 재사용한다.
  • is* JSON 이름이 변경되지 않도록 기존 Boolean 응답 필드의 @JsonProperty 관례를 따른다.
  • 신규 dependency와 별도 abstraction을 추가하지 않는다.
  • 구현은 응답 DTO와 직접 영향받는 테스트로 제한한다.

9. 성공 기준

  • notices[*].isPinnednotices[*].isCommentAvailable이 실제 값으로 응답된다. (CCHC-001~003)
  • communities[*].isPinnedcommunities[*].isCommentAvailable이 실제 값으로 응답된다. (CCHC-001~003)
  • 기존 홈 API 응답 및 조회 흐름 회귀 테스트가 통과한다. (CCHC-004)
  • ktlintCheck가 통과한다.
  • 전체 회귀 테스트를 생략하면 작은 응답 DTO 변경이라는 근거와 대신 실행한 focused·영향 범위 테스트를 검증 기록에 남긴다.

10. Open Questions

없음.

11. 요구사항 추적표

요구사항 범위 계획 Phase Goal 자동 검증 수동 검증
CCHC-001~003 1 P1-T1 CreatorChannelHomeControllerTest 홈 응답 JSON 필드명과 Boolean 값 확인
CCHC-004 1 P1-GATE CreatorChannelHomeEndToEndTest, ktlintCheck 기존 필드 유지 여부 확인

12. Decision Log

날짜 ID 상태 결정 근거 영향 요구사항·Goal
2026-08-10 DEC-001 확정 isPinned, isCommentAvailablenoticescommunities 모두에 추가한다. 두 배열이 같은 게시글 응답 DTO를 사용하며 사용자가 인터뷰 선택지 A를 승인했다. CCHC-001~004, P1-T1, P1-GATE
2026-08-10 DEC-002 확정 공유 응답 DTO를 확장하고 전용 DTO는 분리하지 않는다. 기존 도메인 값과 변환 경로를 재사용하는 최소 변경이다. CCHC-001~004, P1-T1
2026-08-10 DEC-003 확정 PRD를 구현 기준으로 승인한다. 사용자가 작성된 PRD를 검토하고 승인했다. 문서 전체, plan-task.md