이 스레드의 많은 분들처럼, 저는 Discourse를 LMS(학습 관리 시스템)로 가볍게 사용할 수 있는 방법을 찾고 있었습니다. 전용 LMS 플랫폼은 너무 무겁게 느껴졌고, Discourse의 기본 “알림 감쇠(notification decay)” 기능(새 사용자에게 오래된 토픽이 "읽지 않음"으로 표시되지 않는 현상)은 코스 진행 상황을 추적하는 데 어려움을 주었습니다.
이 문제를 해결하기 위해 카테고리 설정, 작은 백엔드 플러그인, 그리고 테마 컴포넌트를 조합한 간단한 솔루션을 만들었습니다.
아래는 설정 방법과 이를 재현할 수 있는 오픈소스 코드입니다!
기본 개념: Discourse를 LMS로 활용하기
이를 위해 표준 Discourse 기능과 공식 Discourse Doc Categories 플러그인을 조합하여 사용합니다:
- 코스 = 카테고리: 각 코스는 자체 카테고리를 가집니다.
- 레슨 = 토픽: 각 레슨은 해당 카테고리 내의 토픽입니다.
- 권한: 회원은 레슨에 답변(질문)할 수 있지만, 새로운 토픽을 생성할 수 있는 권한은 스태프에게만 있습니다.
- 순서: 레슨 순서는 생성 날짜로 고정됩니다. (팁: 레슨을 게시할 때 순서를 미리 고려해야 하거나, Rails 콘솔을 사용하여 토픽 생성 시간을 과거로 되돌려 올바른 정렬을 강제할 수 있습니다).
- 강의 계획표(Syllabus): Discourse Doc Categories 플러그인을 사용하여 "인덱스 토픽(Index Topic)"을 지정합니다. 이 인덱스 토픽은 코스 강의 계획표/트래커 역할을 하며, 사용자가 코스에 진입하면 사이드바에 아름다운 개요(outline)가 렌더링됩니다.
빠진 조각: 진정한 진행 상황 추적
위 설정의 문제는 새로운 학생이 가입할 때 오래된 레슨 토픽이 "읽지 않음"으로 표시되지 않아 진행 상황을 시각적으로 추적할 방법이 없다는 것입니다.
이를 해결하기 위해 TopicUser 데이터베이스 테이블을 직접 조회하여 과거의 실제 읽기 상태를 확인하는 백엔드 플러그인을 만들었고, 표준 Discourse 사이드바를 실시간 LMS 진행 상황 트래커로 변환하는 프론트엔드 테마 컴포넌트를 개발했습니다.
1. 메인 사이드바 진행 상황 배지
테마 컴포넌트는 표준 파란색 알림 점을 코스 카테고리의 [ 읽은 수 / 전체 수 ] 진행 상황 표시자로 대체합니다.
2. 레슨 완료 체크마크
사용자가 코스를 클릭하면 Docs 플러그인이 강의 계획표를 렌더링합니다. 제 테마 컴포넌트는 사용자가 읽기를 완료한 특정 레슨 옆에 성공 체크마크(fa-check)를 삽입합니다.
3. 코스 완료
사용자가 카테고리 내의 모든 토픽을 읽으면, 사이드바의 진행 상황 배지가 자동으로 만족스러운 완료 틱(tick)으로 변환됩니다!
설치 방법
이는 표준 Discourse 알림 캐시를 우회해야 하므로, 백엔드 플러그인과 프론트엔드 테마 컴포넌트 모두를 설치해야 합니다.
1단계: 선행 조건 설치
공식 Discourse Doc Categories 플러그인이 설치되어 활성화되어 있는지 확인하십시오. 제 플러그인은 인덱스 토픽이 구성된 카테고리를 특별히 대상으로 합니다.
2단계: 백엔드 API 플러그인 설치
app.yml의 docker_manager 아래에 아래 내용을 추가하고 컨테이너를 다시 빌드하십시오. 이는 읽기 상태를 위한 빠른 API 엔드포인트를 제공합니다.
저장소 링크: https://github.com/zsviczian/discourse-course-progress
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/zsviczian/discourse-course-progress.git
3단계: UI 테마 컴포넌트 설치
웹 브라우저를 통해 관리자 > 사용자 지정 > 테마 > 설치 > Git 저장소에서 경로로 직접 설치하십시오.
저장소 링크: https://github.com/zsviczian/discourse-course-progress-theme
별도의 LMS 플랫폼의 부피를 줄이고 커뮤니티 주도 코스를 구축하려는 다른 분들에게 도움이 되기를 바랍니다. 사용하게 되면 알려주세요.



