4.6 KiB
4.6 KiB
마이클래스 영상 상세 모달 추천 영상 로직 점검 및 변경안
작성일: 2026-04-17
1) 직접 확인한 현재 상태
- 추천 영상 UI 바인딩 로직은
www/edu/js/common/VideoModalBase.js의loadRecommendedVideos(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)는 현재 다음 순서로 동작함.edu_content_keywords기반 추천 조회- 결과 없으면
category_code기반 fallback - 키워드 기반 조회 정렬은
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 개념):
- 현재 영상 goal_code 조회
SELECT content_id, goal_code
FROM edu_contents
WHERE content_id = :content_id
AND is_active = 1
LIMIT 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가지는 반영 권장.
- 주석 문구를 "키워드 기반" -> "goal_code 기반"으로 변경.
- API 실패/빈 결과 메시지는 유지하되, 디버그 로그에
goal_code를 함께 출력.
4) 현재 워크스페이스 특이사항(중요)
직접 재확인 결과, 아래 파일들은 0바이트가 아니라 실제 코드가 존재함.
www/edu/bbs/api/get_recommend_videos.phpwww/edu/bbs/api/get_video_time.phpwww/edu/skin/myclass.phpwww/edu/skin/myclass_list.phpwww/edu/skin/_modal/video.php
즉, 본 변경안은 현재 워크스페이스 코드 기준으로 바로 적용/검증 가능함.
5) 적용 전 추가 결정 필요사항
goal_code가 비어있는 현재 영상 처리 정책
- A안: 빈 목록 반환
- B안: 기존 카테고리 fallback 유지
- 동일
goal_code결과가 6건 미만일 때 UI 정책
- A안: 있는 만큼 노출
- B안: 부족분을 fallback으로 보충
- 응답 스펙 확정
- 기존
keywords유지 여부 - 신규
mode,goal_code필드 추가 여부
6) 적용 후 기대 결과
- 추천 영역에는 현재 영상과 같은
goal_code그룹 영상만 노출. - 랜덤 섞임 제거로 목표 단위 학습 흐름 일관성 확보.
- 최대 6개 고정 바인딩으로 UI 예측 가능성 향상.
7) 검증 체크리스트
- 서로 다른
goal_code영상 2개를 각각 재생해 추천 목록이 서로 다르게 바뀌는지 확인. - 추천 목록의 모든 항목이 현재 영상과 동일
goal_code인지 DB로 샘플 대조. - 현재 영상이 추천 목록에 다시 나타나지 않는지 확인.
- 같은 입력에서 새로고침해도 순서가 랜덤으로 바뀌지 않는지 확인.
goal_code가 없는 영상의 처리 정책(빈 목록 또는 fallback)을 합의한 정책대로 확인.