영상 댓글 API 설계: 영상 데이터에 포함 vs 별도 분리

김현준·3일 전
0

잡다한

목록 보기
9/9

1. 영상 데이터 내부에 comments: []

예시

// 1) Video 타입에 댓글 배열 포함
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;
}

// 2) 영상 목록
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

예시

// 1) Video와 VideoComment를 분리
interface Video {
  id: number;
  authorId: string;
  url: string;
  title: string;
  author: string;
  views: number;
  uploadedAt: Date;
}

interface VideoComment {
  id: number;
  videoId: number; // videoId를 통해 연결
  authorId: string;
  nickname: string;
  comment: string;
  createdAt: string;
}

// 2) Mock 데이터
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",
  },
  // ...추가 댓글
];

// 3) /videos/:videoId/comments 라우트 핸들러 예시
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 추천
  • 작은 규모로 간단하게 운영할 경우 → 영상 데이터 내부 포함 가능
profile
기록하자

0개의 댓글