<%- include('partials/favicon') %> 학습센터 <% if (typeof filters === 'undefined') { filters = { q: '', type: 'all', tag: '' }; } %> <% if (typeof availableTags === 'undefined') { availableTags = []; } %> <% if (typeof pagination === 'undefined') { pagination = { page: 1, totalPages: 1, totalCount: 0, hasPrev: false, hasNext: false, prevQuery: '', nextQuery: '', pages: [] }; } %> <% if (typeof thumbnailQueueInfo === 'undefined') { thumbnailQueueInfo = { pending: 0, working: false, maxRetry: 2 }; } %> <% if (typeof thumbnailStatusSummary === 'undefined') { thumbnailStatusSummary = { ready: 0, processing: 0, failed: 0, pending: 0 }; } %> <% if (typeof recentEvents === 'undefined') { recentEvents = []; } %> <% if (typeof failureReasons === 'undefined') { failureReasons = []; } %> <% if (typeof adminRequested === 'undefined') { adminRequested = false; } %> <% if (typeof adminMode === 'undefined') { adminMode = false; } %> <% if (typeof tokenRaw === 'undefined') { tokenRaw = ''; } %> <% if (typeof tokenMasked === 'undefined') { tokenMasked = ''; } %> <% if (typeof returnQuery === 'undefined') { returnQuery = ''; } %> <% if (typeof retryQueued === 'undefined') { retryQueued = 0; } %> <% if (typeof lectures === 'undefined') { lectures = []; } %> <% if (typeof escapeHtml === 'undefined') { escapeHtml = function(s) { return String(s || ''); }; } %>
<%- include('partials/nav', { activeMenu: 'learning' }) %>

학습센터

최신 컨텐츠로 학습하고, 바로 업무에 적용하세요.

유튜브 링크 또는 PPT를 등록한 뒤, 목록에서 클릭하여 강의를 시청할 수 있습니다.

강의 검색/필터

<% if (adminRequested) { %> <% } %>
초기화

관리자 모드

<% if (retryQueued > 0) { %>

실패 건 재시도 <%= retryQueued %>건이 큐에 등록되었습니다.

<% } %> <% if (adminMode) { %>

관리자 모드 활성화됨

큐: <%= thumbnailQueueInfo.pending %> 워커: <%= thumbnailQueueInfo.working ? "작동중" : "대기" %> 실패 재시도 최대: <%= thumbnailQueueInfo.maxRetry %>
PPT 썸네일 - 준비완료 <%= thumbnailStatusSummary.ready %> 처리중 <%= thumbnailStatusSummary.processing %> 대기 <%= thumbnailStatusSummary.pending %> 실패 <%= thumbnailStatusSummary.failed %>
<% } else { %>

삭제 기능은 관리자 토큰이 있어야 활성화됩니다.

<% } %>
<% if (adminMode) { %>

메트릭 API: /api/queue/metrics?token=***

이벤트 로그 페이지 열기

실패 원인 TOP

<% if (!failureReasons.length) { %>

최근 실패 원인이 없습니다.

<% } else { %>
    <% failureReasons.slice(0, 5).forEach((item) => { %>
  • <%= item.count %>회 <%= item.reason %>
  • <% }) %>
<% } %>

최근 썸네일 이벤트

<% if (!recentEvents.length) { %>

이벤트 로그가 없습니다.

<% } else { %>
    <% recentEvents.forEach((evt) => { %>
  • <%= evt.type %> <%= evt.lectureTitle || evt.lectureId %> <%= new Date(evt.at).toLocaleString("ko-KR") %>
  • <% }) %>
<% } %>
<% } %>

유튜브 강의 등록

PDF/PowerPoint 강의 등록

동영상 파일 등록

등록된 강의

총 <%= pagination.totalCount %>건
<% if (!lectures.length) { %>

등록된 강의가 없습니다.

<% } %>
<% lectures.forEach((lecture) => { %> <% var _externalUrl = (lecture.type === "link" || lecture.type === "news") && (lecture.newsUrl || "").trim(); %>
<% if (_externalUrl) { %> <% } else { %> <% } %>
<% if (lecture.type === "ppt") { %> <% if (lecture.thumbnailUrl) { %> <%= lecture.title %> 썸네일 <% } else { %> 썸네일 <%= lecture.thumbnailStatus || "pending" %> <% } %> PPT 프리뷰 <% if (lecture.previewTitle && lecture.previewTitle !== "제목 없음") { %><%= lecture.previewTitle %><% } %> <% } else if (lecture.type === "news") { %> <% if (lecture.thumbnailUrl) { %> <% } %> 뉴스 <% if (!lecture.thumbnailUrl) { %>외부 링크<% } %> <% } else if (lecture.type === "link") { %> <% if (lecture.thumbnailUrl) { %> <% } %> 웹 링크 <% if (!lecture.thumbnailUrl) { %>외부 페이지<% } %> <% } else if (lecture.type === "video") { %> 동영상 파일 업로드 영상 <% } else { %> <% const ytThumb = typeof getYoutubeThumbnailUrl === 'function' ? getYoutubeThumbnailUrl(lecture.youtubeUrl) : null; %> <% if (ytThumb) { %> <%= lecture.title %> 썸네일 <% } %> YouTube 영상 강의 <% } %>
<% if (lecture.type === "youtube") { %>YouTube<% } else if (lecture.type === "news") { %>뉴스<% } else if (lecture.type === "link") { %>링크<% } else if (lecture.type === "video") { %>동영상<% } else { %>PPT<% } %>

<%= lecture.title %>

<%= lecture.description || "설명이 없습니다." %>

<% (lecture.tags || []).forEach((oneTag) => { %> #<%= oneTag %> <% }) %>
<%= new Date(lecture.createdAt).toLocaleString("ko-KR") %>
<% if (adminMode) { %>
<% if (lecture.type === "ppt") { %>
"> <%= lecture.thumbnailStatus || "pending" %> <% if (lecture.thumbnailError) { %> <%= lecture.thumbnailError %> <% } %>
<% } %> <% } %>
<% }) %>
<% if (pagination.totalPages > 1) { %> <% } %>