eCourses 만들기: 커뮤니티‑우선 LMS SaaS (그리고 공개적으로 구축해야 하는 이유)
Source: Dev.to

저는 eCourses라는 학습 관리 시스템 SaaS를 만들고 있습니다. 이 서비스는 기존 플랫폼에 비해 가격이 비싸거나 기능이 과도하게 복잡하다고 느끼는 작은 커뮤니티와 독립 교육자를 위해 설계되었습니다.
이 글은 시리즈의 첫 번째 글로, 공개적으로, 오픈 소스로, 제한된 예산으로 처음부터 LMS를 구축하고 배포하면서 겪은 아키텍처, 결정, 그리고 “배운 교훈”을 단계별로 소개합니다.
왜 eCourses를 만들었나요?
대부분의 LMS 플랫폼은 다음 중 하나에 해당합니다:
- 솔로 크리에이터와 작은 커뮤니티에게는 너무 비쌈.
- “코스 + 모듈 + 레슨 + 실시간 세션” 같은 단순 워크플로우에는 너무 복잡함.
- 강사가 자신의 교육 스타일을 실험해볼 수 있도록 너무 경직됨.
저는 다음을 만족하는 무언가를 원했습니다:
- 커뮤니티에 자연스럽게 녹아드는 느낌 (단일 강사만이 아니라).
- 합리적인 부하에서 월 $10 이하로 기술적·재정적으로 확장 가능.
- 실제 제품 환경에서 API 설계, 캐싱, 복잡한 상태를 실험해볼 수 있음.
이렇게 eCourses는 개인적인 아이디어에서 시작해 현재는 실제 제품이자 포트폴리오 프로젝트가 되었습니다.
현재 eCourses가 무엇인가요
핵심적으로 eCourses는:
communitySlug기반 라우팅을 갖춘 커뮤니티‑스코프 LMS SaaS.- 강사가 다음을 할 수 있는 관리자 패널:
- 이미지 업로드는 ImageKit을 사용해 코스 생성·편집·소프트‑삭제.
- 드래그‑앤‑드롭(낙관적 UI, 두 단계
index트랜잭션)으로 모듈·레슨 순서 재배열. - 학생이 아닌 멤버를 강사로 지정.
이 구조는 다음을 위한 기반을 마련합니다:
- 공개 코스 페이지.
- 비디오 업로드 및 재생.
- 실시간 세션 및 녹화.
- 학생 진행 상황 추적 및 분석.
실제 서비스는 현재 https://ecourses-sigma.vercel.app 에 배포돼 있으며, 전체 스택은 MIT 라이선스로 오픈 소스입니다.
큰 그림: 기술 스택
| 계층 | 기술 / 패턴 |
|---|---|
| Framework | Next.js 15 (App Router + Turbopack) |
| Language | TypeScript |
| Auth | Clerk |
| Database | PostgreSQL |
| ORM | Prisma v7 |
| Cache | Upstash Redis |
| File Storage | ImageKit |
| Frontend UI | Tailwind CSS v4 + shadcn/ui + dnd‑kit, nuqs, React Hook Form + Zod |
| State (HTTP) | TanStack Query v5 (React Query v4 in browser) |
이 스택은 강력한 타입 지원, 빠른 반복, 그리고 나중에 모바일‑친화적인 백엔드로 확장할 수 있는 명확한 경로를 제공합니다.
함께 따라하고 싶다면
- 실시간 서비스: https://ecourses-sigma.vercel.app
- MIT 라이선스로 오픈 소스
- 현재 활발히 개발 중이며, 향후 몇 달 안에 실제 커뮤니티에 배포할 계획
다음과 같이 참여할 수 있습니다:
- 레포지토리를 Star / fork하고 이슈나 PR을 열기.
- 질문이나 제안(특히 LMS‑특화 UX, API 패턴, 캐싱 관련) 남기기.
- 프로젝트 진행 상황을 팔로우하기; “실제 규모의” LMS 아키텍처가 SaaS 수준에서 어떻게 구현되는지 궁금하다면, 이곳에서 그 변화를 지켜볼 수 있습니다.