예시
interface Video {
id: number;
authorId: string;
url: string;
title: string;
author: string;
views: number;
uploadedAt: Date;
comments: VideoComment[];
}
interface VideoComment {
id: number;
videoId: number;
authorId: string;
nickname: string;
comment: string;
createdAt: string;
}
export const videos: Video[] = [
{
id: 1,
authorId: "loginId1",
url: "qwer_TBH.mp4",
title: "qwer - 고민중독",
author: "울라리",
views: 12,
uploadedAt: new Date("2024-02-10"),
comments: [
{
id: 1,
videoId: 1,
authorId: "loginId4",
nickname: "별빛소녀",
comment: "qwer은 전설이야!",
createdAt: "2024-04-15",
},
],
},
];
- 장점
- 영상 정보와 댓글을 한 번에 로드
- API 요청 횟수 감소
- 단점
- 댓글이 많아질수록 불필요한 데이터 전송
- 댓글만 수정해도 영상 데이터까지 함께 관리해야 함
2. 별도 댓글 API
예시
interface Video {
id: number;
authorId: string;
url: string;
title: string;
author: string;
views: number;
uploadedAt: Date;
}
interface VideoComment {
id: number;
videoId: number;
authorId: string;
nickname: string;
comment: string;
createdAt: string;
}
export const videos: Video[] = [
{
id: 1,
authorId: "loginId1",
url: "qwer_TBH.mp4",
title: "qwer - 고민중독",
author: "울라리",
views: 12,
uploadedAt: new Date("2024-02-10"),
},
];
export const videoComments: VideoComment[] = [
{
id: 1,
videoId: 1,
authorId: "loginId4",
nickname: "별빛소녀",
comment: "qwer은 전설이야!",
createdAt: "2024-04-15",
},
];
app.get("/videos/:videoId/comments", (req, res) => {
const videoId = Number(req.params.videoId);
const comments = videoComments.filter((c) => c.videoId === videoId);
res.json(comments);
});
- 장점
- 필요한 시점에만 댓글 데이터 로드 (데이터 정규화)
- 유지보수가 용이 (댓글 로직만 수정 가능)
- 단점
- 영상 + 댓글 모두 보여주려면 별도 요청 필요
- 즉각 로드 시 네트워크 요청 2회
3. 결론
- 댓글량이 많거나, 댓글 기능을 독립적으로 관리해야 한다면 → 별도 댓글 API 추천
- 작은 규모로 간단하게 운영할 경우 → 영상 데이터 내부 포함 가능