Skip to main content

LMS Platform

Cronozen LMS (learn.cronozen.com) is a white-label learning management system designed for Korean workforce development institutions. It provides HRD-Net regulatory compliance, electronic monitoring (EMON), and DPU-based attendance proof — all integrated with the Cronozen OPS hub.

Product Lineup

Remote Training LMS

HRD-Net compliant online courses for government-subsidized programs (내일채움카드). Includes EMON integration, anti-fraud protections, and automated compliance reporting.

Workshop Management

Offline seminar and workshop management with QR check-in, DPU attendance proof, capacity management, and location tracking.

Architecture

┌──────────────────────────────────────────────┐
│                  OPS Hub                      │
│        (auth.cronozen.com / SSO)             │
│   ┌─────────┬──────────┬──────────┐          │
│   │  Auth   │  Billing │   DPU    │          │
│   │  (JWT)  │  (Toss)  │ (Proof)  │          │
│   └────┬────┴────┬─────┴────┬─────┘          │
└────────┼─────────┼──────────┼────────────────┘
         │         │          │
┌────────▼─────────▼──────────▼────────────────┐
│              LMS Spoke                        │
│        (learn.cronozen.com)                   │
│                                               │
│   ┌─────────┐  ┌──────────┐  ┌───────────┐  │
│   │ Learning │  │ Workshop │  │   EMON    │  │
│   │ Engine   │  │ Attend.  │  │ Reporter  │  │
│   └─────────┘  └──────────┘  └───────────┘  │
│                                               │
│   ┌─────────┐  ┌──────────┐  ┌───────────┐  │
│   │  HRD    │  │  Fraud   │  │   QR      │  │
│   │ Comply  │  │ Detect   │  │ Check-in  │  │
│   └─────────┘  └──────────┘  └───────────┘  │
└───────────────────────────────────────────────┘

Hub-Spoke Integration

ComponentResponsibilityService
SSO AuthenticationJWT issuance, actor identityOPS
Billing & PaymentsToss Payments, subscriptionOPS
DPU Attendance ProofSHA-256 hash chain sealingOPS
Learning EngineCourse delivery, progress trackingLMS
EMON ReportingGovernment monitoring transmissionLMS
Fraud DetectionAnti-cheating, device fingerprintLMS

Multi-Tenant Structure

Each training institution is a tenant with isolated data, branding, and configuration.
Tenant: seocho-women-center
├── subdomain: seocho.learn.cronozen.com
├── centerId: 2 (OPS center mapping)
├── features: { hrdEnabled, emonEnabled, ... }
├── Products (courses, workshops)
├── Registrations (enrollments)
├── Progress (learner tracking)
└── Assessments (exams, assignments)

Tenant Configuration

Tenant-specific settings are stored in the Configuration table:
{
  "hrdEnabled": true,
  "hrdPassingScore": 60,
  "hrdMinProgressPercent": 50,
  "hrdMaxDailyLessons": 8,
  "emonEnabled": true,
  "emonApiUrl": "https://emon.hrd.go.kr/api/v1",
  "emonInstitutionId": "INST-001"
}

HRD-Net Compliance

Regulatory Requirements

HRD-Net (Korea Human Resources Development Service) mandates specific controls for government-subsidized remote training. Non-compliance can result in funding suspension.

Core Rules

RuleRequirementImplementation
Learning Activity10-second heartbeat trackingheartbeat-service.ts
Daily LimitMax 8 hours / 8 lessons per daylesson-unit-service.ts
Completion80% progress + 60-point scorehrd-completion-service.ts
SequentialLessons must be completed in orderLesson unlock gates
Assessment3 types: progress check, final exam, assignmenthrd-assessment-service.ts
IdentityPhone OTP verification (본인인증)mOTP adapter
MonitoringEMON API data transmissionemon-adapter.ts

Learning Heartbeat

The heartbeat system tracks learning activity at 10-second intervals:
{
  "contentId": "lesson-001",
  "registrationId": "reg-123",
  "sessionId": "sess-456",
  "watchedSeconds": 120,
  "playbackRate": 1.0,
  "isPlaying": true,
  "isTabVisible": true,
  "isWindowFocused": true,
  "deviceFingerprint": "fp-hash-789"
}
Processing pipeline:
  1. Client sends heartbeat batch (max 6 beats = 1 minute)
  2. Server validates registration, product ownership, expiration
  3. Updates DailyLearningLedger (per-actor daily tracking)
  4. Enforces 8-hour daily cap (28,800 seconds)
  5. Triggers EMON transmission on lesson completion

Assessment System

Three assessment types with weighted scoring:
TypeTimingWeightFeatures
Progress CheckDuring course (configurable trigger %)20-30%Must pass to unlock next lessons
Final ExamAfter 80% progress50-60%Time-limited, 3x question bank
AssignmentAnytime during course10-20%Plagiarism detection (Jaccard + cosine)
Question bank: Each exam draws from a 3x pool using Fisher-Yates shuffle. If an exam has 20 questions, at least 60 questions must exist in the bank. Auto-save: Student answers are saved every 30 seconds to Redis (2-hour TTL), preventing data loss on connection drops.

Anti-Fraud System (FDS)

Protections

CodeProtectionMethod
C1CAPTCHA verificationMath CAPTCHA, 2-hour Redis pass
C2Concurrent session preventionRedis session lock
C3Single learning windowBroadcastChannel API
C4Inactivity auto-logout2-hour idle timer
C5Copy/paste preventionExam mode clipboard blocking
C7Plagiarism detectionJaccard + 3-gram cosine similarity (80% threshold)
C8Assessment gate80% progress required for final exam
C10Minimum study time50% of lesson duration required
C11IP-based fraud detectionBehavioral analysis (partial)

Fraud Scoring (Workshop Attendance)

For workshop check-ins, a multi-layer fraud detection system runs in parallel:
Check-in Request

     ├── Rate limit: 3 attempts / 5 min per session
     ├── Device duplicate: fingerprint across participants
     ├── GPS spoofing: geofence validation (accuracy > 50m = risk)
     └── Time anomaly: unrealistic check-in patterns


Fraud Score: 0.0 ─── 1.0
  │           │         │
  PASS      FLAG     BLOCK
 (<0.3)   (0.3-0.7)  (>0.7)

EMON Integration

EMON (Electronic Monitoring) is the government’s real-time monitoring system for HRD-Net courses.

Data Transmission

The LMS transmits 6 record types to the EMON API:
TableDescriptionKey Fields
TB_USER_HIST_V2Learner infoName, ID number, email, mobile
TB_USER_LOGIN_HIST_V2Login historyIP address, login timestamp
TB_COURSE_HIST_V2Course metadataTotal education hours, approval code
TB_CLASS_HIST_V2Class sessionsScore, start/end date, insurance type
TB_ATTEND_HIST_V2AttendanceProgress rate (0-100), pass flag
TB_SCORE_HIST_V2ScoresEval type, score, IP, plagiarism flag

API Endpoints

POST /api/v1/learning/progress    → Lesson progress
POST /api/v1/assessment/result    → Assessment scores
POST /api/v1/completion           → Completion proof
The EMON adapter uses a queue system with exponential backoff retry:
EmonAdapter.forTenant(tenantId)
  .transmitProgress(learnerData)
  // Retry: 1s → 2s → 4s → 8s (max 4 attempts)
EMON transmission failures are logged but do not block the learner experience. Failed transmissions are queued for retry. If retries are exhausted, an alert is generated for manual review.

DPU Attendance Proof

Workshop attendance is sealed with DPU hash chains for tamper-evident proof.

Flow

QR Scan → Check-in Request → Fraud Check → DPU Seal

                                    ┌─────────┴─────────┐
                                    │  Local LMS Chain   │
                                    │  SHA-256 hash      │
                                    │  chainIndex: N     │
                                    └─────────┬─────────┘

                                    ┌─────────▼─────────┐
                                    │   OPS DPU API      │
                                    │  /api/dpu/demo     │
                                    │  (non-blocking)    │
                                    └───────────────────┘
Each attendance record contains:
  • dpuChainHash: SHA-256 hash linking to previous record
  • dpuChainIndex: Sequential position in the chain
  • dpuId: Reference to OPS DPU record
Tamper detection: Altering any single record breaks all downstream hashes in the chain, making tampering immediately detectable during audit.

QR Check-in

POST /api/admin/attendance/{sessionId}/qr → Generate token (5-15 min TTL)

Learner scans QR → POST /api/attendance/check-in
{
  "token": "qr-token-abc",
  "gps": { "lat": 37.4845, "lng": 127.0340, "accuracy": 12.5 },
  "deviceFingerprint": "fp-hash-789"
}

API Overview

Learning APIs (v3)

MethodEndpointDescription
POST/api/v3/learning/heartbeatSubmit activity heartbeat
GET/api/v3/learning/hrd-statusLearner progress view
POST/api/v3/learning/hrd-assessmentSubmit exam/assignment
GET/api/v3/learning/hrd-completionCheck completion status
POST/api/v3/learning/hrd-dashboardProgress dashboard data

Admin APIs (v2)

MethodEndpointDescription
GET/POST/api/v2/admin/productsCourse management
GET/PUT/api/v2/admin/emon-settingsEMON configuration
GET/api/v2/admin/emon-logsMonitoring logs
GET/api/v2/admin/hrdHRD compliance dashboard

Attendance APIs

MethodEndpointDescription
POST/api/admin/attendance/sessionsCreate workshop session
POST/api/admin/attendance/{sessionId}/qrGenerate QR token
POST/api/attendance/check-inLearner check-in
POST/api/admin/attendance/manualManual check-in

Payment APIs

MethodEndpointDescription
POST/api/payments/confirmConfirm Toss payment
POST/api/payments/webhookToss webhook handler

Product Types

TypeUse CasePayment
COURSEHRD-Net remote trainingVia HRD-Net (government)
COACHING1:1 mentoring sessionsToss Payments
PACKAGEBundled coursesToss Payments
WEBINARLive online sessions (Zoom)Toss Payments
WORKSHOPOffline group trainingToss Payments

Deployment

EnvironmentURLBranch
Stagingstg-learn.cronozen.comdevelop
Productionlearn.cronozen.commain
Tenant subdomains: {slug}.learn.cronozen.com

Database

  • Separate PostgreSQL instance from OPS (independent RDS)
  • Migration via Lambda: ./scripts/db-migrate.sh query lms-prod "SELECT ..."
  • DB aliases: lms-stg, lms-prod

Tech Stack

LayerTechnology
FrameworkNext.js 16 + TypeScript
ORMPrisma 6.18
DatabasePostgreSQL (RDS, VPC internal)
CacheRedis (sessions, heartbeat, draft answers)
VideoVimeo (HRD hosting)
PaymentToss Payments
MeetingZoom API (webinars)
MonitoringEMON API (government)
AuthOPS SSO (JWT)
ProofOPS DPU (SHA-256 chains)