ORBIT ORIGINAL GUIDE
LMS 릴리스 노트
cms-orbit/lms 릴리스 노트. 코스·레슨·퀴즈·수강 모델, 마켓플레이스 수익화, 리뷰·Q&A·과제·이수증, 드립 콘텐츠, 이수증 GUI 빌더의 단계별 도입 내역.
최종 수정 2026년 10월 10일
cms-orbit/lms는 TutorLMS 방식의 학습 관리 패키지입니다. 코스·섹션·레슨·퀴즈·수강 신청을 Orbit 관리자 엔티티로 제공하고, 공개 프런트엔드는 스타터킷처럼 호스트로 게시해 호스트가 소유합니다. 강사와 수강생은 일반 Orbit 사용자를 참조하므로(config('lms.user_model')) 순정 Laravel 호스트에서도 동작합니다.
composer require cms-orbit/lms:^4.6php artisan migratephp artisan orbit:frontend-syncphp artisan lms:install-frontend # 공개 프런트엔드를 호스트로 게시 (선택)4.6.1 — 2026-09-22
- 이수증 빌더를
registerFields로 등록해FieldComponentProps계약과 레지스트리 타입을 일치시켰습니다. LMS 프런트엔드를 포함한 호스트의 TypeScript 검사 오류를 수정했습니다. - README의 core 요구 버전을 Composer 선언과 일치시켰습니다.
4.6.0 — 2026-09-08
- core ^4.6(
OrbitAccess, PostgreSQL 500·strict mode·OrbitProvider 미등록 수정 포함). - GitHub Actions
ci.yml·release-guard.yml추가, pint 포맷 정규화. 위성 패키지 CI는 Packagist에 게시된 core와 이 패키지의 제약이 함께 해석되는지까지 검증합니다.
4.5.0 — 2026-08-31
- Laravel ^13.0 전용, core ^4.5. Laravel 11·12 호스트는 업그레이드가 필요합니다.
4.4.0 — 2026-08-31
- PHP ^8.4, core ^4.4. 운영 의존은 바뀌지 않았습니다.
4.3.1 — 2026-08-28
- PHP 제약
^8.3복구,laravel/pint^1.30, 릴리스 파이프라인 도입.
4.3.0 — 2026-07-24
- 이수증 GUI 빌더를 Orbit 관리자로 이관했습니다.
CertificateTemplateEntity의 편집 화면에 커스텀ReactField(lms-certificate-builder)를 추가해 관리자에서 캔버스에 텍스트와 플레이스홀더를 드래그 배치합니다. 컴포넌트는 패키지가 소유하고frontend.json의registrations로 자동 등록되므로 호스트 파일을 수동 편집할 필요가 없습니다(core ^4.0.12,orbit:frontend-sync필요). - 공개 스토어프론트의 빌더 페이지·컨트롤러·라우트를 제거했습니다. 학생용 이수증 보기·인쇄(
/certificates/{id})는 스토어프론트에 남습니다. - 패키지의 관리자·백엔드 기능은 게시된 스토어프론트와 무관하게 동작합니다. 호스트가 스토어프론트 게시물을 삭제해도 관리자 CRUD와 이수증 빌더는 그대로 작동합니다.
4.2.0 — 2026-07-24
드립 콘텐츠와 플레이어 옵션
- 코스 드립 콘텐츠:
drip_enabled와drip_type(off/after_days/by_date/sequential/prerequisite), 레슨별drip_days·drip_date·drip_prerequisite_id. Lesson::isUnlockedFor(Enrollment)/unlockDateFor(): 드립 규칙에 따른 레슨 잠금 판정. 무료 미리보기는 항상 열립니다.- 코스 플레이어 옵션:
player_disable_seek,player_disable_fastforward,player_autoplay,player_require_completion과Course::playerSettings().
이수증 템플릿
CertificateTemplate(이름·방향·크기·배경·요소 JSON·기본값)과 관리자 CRUD.CertificateService: 완료 수강에 이수증을 멱등하게 발급하고,{{student_name}}·{{course_title}}·{{instructor_name}}·{{issued_date}}·{{serial}}치환으로 인쇄·PDF용 HTML을 렌더합니다.
강사 대시보드와 프런트엔드 확장
InstructorDashboardService: 강사별 코스·수강생·수강 수·매출(총·정산 가능·정산 완료)·최근 리뷰·최근 Q&A 집계.lms:install-frontend가 강사 대시보드(/instructor), 이수증 보기·인쇄(/certificates/{id})를 추가로 게시하고, 강의 플레이어에 드립 잠금 표시와 옵션에 따른 빨리감기·탐색 제한(네이티브 비디오 기준)을 적용합니다.
4.1.0 — 2026-07-24
Phase 2 — 오픈마켓형 수익화
- 코스 가격 필드(
is_free,price,sale_price,currency,commission_rate). - 마켓플레이스 모델
Coupon,Order,OrderItem,Earning,Payout과 열거형. CheckoutService: 주문 생성 → 강사·플랫폼 수익 분배 → 결제 시 수강 등록. 무료 코스 즉시 등록, 쿠폰 할인, 환불(수익 회수·수강 취소)을 지원합니다. 커미션 기본값은lms.marketplace.commission_rate(기본 80%).- 관리자 엔티티 Orders·Coupons·Earnings·Payouts(
Marketplace섹션).
Phase 3 — 참여 기능
Review(별점·승인),CourseQuestion/CourseAnswer,Assignment/AssignmentSubmission(과제·채점),Certificate(시리얼 자동 발급).- 관리자 엔티티 Reviews·Q&A·Assignments·Certificates(
Engagement섹션),Course::averageRating()/reviewsCount().
Phase 4 — 공개 프런트엔드 스캐폴딩
php artisan lms:install-frontend: 코스 카탈로그·상세·강의 플레이어·체크아웃·학생 대시보드 페이지(React/Inertia)와 공개 컨트롤러·라우트를 호스트로 게시합니다. 게시 후에는 호스트가 소유하고 자유롭게 수정하며,--force로 덮어씁니다.routes/lms.php를routes/web.php에 한 번 등록합니다.
4.0.0 — 2026-07-24
Phase 1 — Core LMS
- 학습 도메인 모델
Course,CourseSection,Lesson,Quiz,QuizQuestion,Enrollment,LessonProgress(모두lms_접두사 테이블). - 코스·섹션·레슨·퀴즈·퀴즈 문항·수강 신청 관리자 CRUD 엔티티.
LmsServiceProviderauto-discovery로 자동 등록되며Learning메뉴 섹션과lms.entities.*권한을 함께 등록합니다. - 열거형
CourseStatus,CourseLevel,LessonType,QuestionType,EnrollmentStatus. Enrollment::recalculateProgress(): 레슨 완료 수를 전체 레슨 수와 비교해 진도율을 산출하고 100%가 되면 자동 완료 처리합니다.QuizQuestion::isAnswerCorrect(): 제출 답안을 정답 집합과 순서 무관하게 비교합니다.- 한국어 번역과 Boost 가이드라인.