7.2 KiB
7.2 KiB
PRD: 크리에이터 채널 홈 커뮤니티 응답 확장
문서 정보
| 항목 | 내용 |
|---|---|
| 문서 상태 | 구현 기준 확정 |
| 작성일 | 2026-08-10 |
| 최종 수정일 | 2026-08-10 |
| 대상 제품 | 크리에이터 채널 홈 API |
| 작성자·결정권자 | 사용자 |
| 관련 API Contract | 별도 문서 없음, 이 문서의 7. API 계약을 기준으로 함 |
| 관련 구현 계획 | docs/20260810_크리에이터_채널_홈_커뮤니티_응답_확장/plan-task.md |
| 관련 review | 없음 |
1. Overview
크리에이터 채널 홈 API의 notices와 communities 게시글 응답에 고정 여부와 댓글 가능 여부를 각각 isPinned, isCommentAvailable로 제공한다. 기존 조회 결과가 이미 보유한 값을 응답에 그대로 반영해 클라이언트가 별도 추론 없이 게시글 상태를 표시할 수 있게 한다.
2. Problem Statement
- 현재
GET /api/v2/creator-channels/{creatorId}/home의 게시글 도메인 모델에는 고정 여부와 댓글 가능 여부가 있지만 홈 응답 DTO에는 두 값이 없다. - 클라이언트는 홈의 게시글이 고정 글인지, 댓글 작성이 가능한지 응답만으로 일관되게 판단할 수 없다.
notices와communities가 같은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는 변경하지 않는다.
notices와communities전용 응답 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 직렬화 방식을 유지한다.
- 기존 공유
CreatorChannelCommunityPostResponse와from변환을 재사용한다. is*JSON 이름이 변경되지 않도록 기존 Boolean 응답 필드의@JsonProperty관례를 따른다.- 신규 dependency와 별도 abstraction을 추가하지 않는다.
- 구현은 응답 DTO와 직접 영향받는 테스트로 제한한다.
9. 성공 기준
notices[*].isPinned와notices[*].isCommentAvailable이 실제 값으로 응답된다. (CCHC-001~003)communities[*].isPinned와communities[*].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, isCommentAvailable을 notices와 communities 모두에 추가한다. |
두 배열이 같은 게시글 응답 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 |