Files
edu/myclass_recommend_goal_code_update.md

4.6 KiB

마이클래스 영상 상세 모달 추천 영상 로직 점검 및 변경안

작성일: 2026-04-17

1) 직접 확인한 현재 상태

  • 추천 영상 UI 바인딩 로직은 www/edu/js/common/VideoModalBase.jsloadRecommendedVideos(modalElement, videoData)에서 동작함.
  • 현재 프론트는 아래 API를 호출해 추천 목록을 받아 렌더링함.
    • /edu/bbs/api/get_recommend_videos.php?content_id={현재영상ID}
  • 렌더링 데이터는 data.videos를 순회하여 .video-list ul에 바인딩함.
  • 현재 주석/동작 표현은 "키워드 기반 추천"으로 되어 있음.
  • 백엔드 추천 API(www/edu/bbs/api/get_recommend_videos.php)는 현재 다음 순서로 동작함.
    1. edu_content_keywords 기반 추천 조회
    2. 결과 없으면 category_code 기반 fallback
    3. 키워드 기반 조회 정렬은 ORDER BY RAND(), LIMIT 8

2) 이번 요청 기준 변경 요구사항 정리

  • 랜덤 추천 제거.
  • 추천 기준을 edu_contents.goal_code로 통일.
  • 현재 재생 중 영상의 goal_code와 동일한 goal_code만 노출.
  • 동일 goal_code 묶음에서 6개 세트를 순서대로 바인딩.
  • 결과적으로 사용자가 선택한 목표 그룹(예: 1분기 목표) 내부 영상만 노출.

3) 변경 대상(핵심)

A. 백엔드 API: get_recommend_videos.php

  • content_id로 현재 영상 1건의 goal_code 조회.
  • goal_code가 같고, 활성 상태인 영상만 조회.
  • 현재 영상은 제외.
  • 정렬은 랜덤이 아니라 고정 순서(예: sort_order ASC, updated_at DESC, content_id DESC).
  • LIMIT 6으로 반환.
  • 기존 키워드/카테고리 fallback 분기는 제거(또는 기능 플래그로 비활성화) 권장.

권장 조회 흐름(SQL 개념):

  1. 현재 영상 goal_code 조회
SELECT content_id, goal_code
FROM edu_contents
WHERE content_id = :content_id
  AND is_active = 1
LIMIT 1;
  1. 동일 goal_code 추천 6건 조회
SELECT
    c.content_id,
    c.title,
    c.content_url,
    c.thumbnail_url AS thumbnail,
    c.category_code,
    c.category_group AS subcate,
    COALESCE(ec.code_name, c.category_code) AS category_name,
    c.goal_code
FROM edu_contents c
LEFT JOIN edu_codes ec
       ON ec.base_code = c.category_code
WHERE c.is_active = 1
  AND c.goal_code = :goal_code
  AND c.content_id <> :content_id
ORDER BY
    COALESCE(NULLIF(c.sort_order, 0), 9999) ASC,
    c.updated_at DESC,
    c.content_id DESC
LIMIT 6;

응답 형태 권장:

{
  "success": true,
  "mode": "goal_code",
  "goal_code": "G2026Q1",
  "videos": [ ...최대 6건... ]
}

B. 프론트(VideoModalBase.js)

  • 현 구조상 프론트는 API 결과를 그대로 렌더링하므로 큰 구조 변경 없이 유지 가능.
  • 다만 의미 정합성을 위해 아래 2가지는 반영 권장.
    1. 주석 문구를 "키워드 기반" -> "goal_code 기반"으로 변경.
    2. API 실패/빈 결과 메시지는 유지하되, 디버그 로그에 goal_code를 함께 출력.

4) 현재 워크스페이스 특이사항(중요)

직접 재확인 결과, 아래 파일들은 0바이트가 아니라 실제 코드가 존재함.

  • www/edu/bbs/api/get_recommend_videos.php
  • www/edu/bbs/api/get_video_time.php
  • www/edu/skin/myclass.php
  • www/edu/skin/myclass_list.php
  • www/edu/skin/_modal/video.php

즉, 본 변경안은 현재 워크스페이스 코드 기준으로 바로 적용/검증 가능함.

5) 적용 전 추가 결정 필요사항

  1. goal_code가 비어있는 현재 영상 처리 정책
  • A안: 빈 목록 반환
  • B안: 기존 카테고리 fallback 유지
  1. 동일 goal_code 결과가 6건 미만일 때 UI 정책
  • A안: 있는 만큼 노출
  • B안: 부족분을 fallback으로 보충
  1. 응답 스펙 확정
  • 기존 keywords 유지 여부
  • 신규 mode, goal_code 필드 추가 여부

6) 적용 후 기대 결과

  • 추천 영역에는 현재 영상과 같은 goal_code 그룹 영상만 노출.
  • 랜덤 섞임 제거로 목표 단위 학습 흐름 일관성 확보.
  • 최대 6개 고정 바인딩으로 UI 예측 가능성 향상.

7) 검증 체크리스트

  1. 서로 다른 goal_code 영상 2개를 각각 재생해 추천 목록이 서로 다르게 바뀌는지 확인.
  2. 추천 목록의 모든 항목이 현재 영상과 동일 goal_code인지 DB로 샘플 대조.
  3. 현재 영상이 추천 목록에 다시 나타나지 않는지 확인.
  4. 같은 입력에서 새로고침해도 순서가 랜덤으로 바뀌지 않는지 확인.
  5. goal_code가 없는 영상의 처리 정책(빈 목록 또는 fallback)을 합의한 정책대로 확인.