1. 준비 단계
학습데이터 API 설계 또는 활용을 시작하기 위해 사전 준비 단계에서 아래의 주요 작업들을 순서대로 따라서 준비 또는 점검할 것을 권고함
가) 학습데이터 사전 분석
학습데이터 사전에서 제공하는 엔티티(Entity), 속성(Attribute), 행위 동사(Verb) 등 목록 검토
설계 대상 API의 목적과 범위를 명확히 정의
데이터 수집 및 전송 과정에서 필요한 속성을 선정
나) 데이터 활용 목적 정의
수집된 데이터를 통해 해결하려는 문제를 정의
이벤트 데이터와 집계 데이터로 나누어 각 데이터의 활용 방안을 결정
예) 학습 활동 추적(xAPI)
및 학습 성과 분석(AIDT 기술규격문서)
다) 표준 선택
학습데이터 API 설계에 적합한 표준을 선택
xAPI : 학습 이벤트 데이터를 실시간으로 수집 및 전송
Caliper Analytics : 학습 활동 데이터를 정밀하게 구조화
AIDT 기술규격문서 : 집계성 데이터 전송
라) 기술 요구사항 검토
설계 대상 학습데이터 API와 연계될 시스템의 기술 스택 및 요구사항 분석
데이터 보안 및 개인정보 보호 요건 검토
API 호출 주기 및 데이터 처리 방식(실시간, 배치 처리) 결정
마) 데이터 흐름 설계
학습데이터의 입력, 처리, 저장, 전송 흐름을 시각적으로 설계
예) 데이터 수집 후
LRS(Learning Record Store)에 저장 및 분석 시스템으로 전송
준비 단계는 학습데이터 API 설계의 방향성을 결정하는 중요한 과정으로, 학습데이터 사전과 표준을 기반으로 체계적인 데이터 설계를 지원함
2. 이벤트형 데이터 API 설계
이벤트형 데이터 API는 학습 활동 중 발생하는 실시간 데이터를 수집 및 처리하기 위해 설계. 단, 데이터를 기록 또는 수집은 실시간으로 처리를 하지만, 후속 작업으로 이뤄지는 데이터 정제 및 가공, 분석, 시각화 등은 일괄 처리 또는 지연 처리를 하는 것이 일반적이며, 비용 효율적인 방식임
이 항에서는 학습데이터 사전에서 정의된 영상(Media) 속성과 평가(Assessment) 속성을 활용하여 xAPI와 Caliper Analytics 표준에 기반한 API 설계 방법을 가이드
가) xAPI 형식의 학습데이터 API 설계
학습데이터 사전의 미디어 영역의 일부 항목과 속성을 활용한 예시 :
Actor : 학습 활동을 수행한 학습자(예: 학습자 ID)
Verb : 학습자가 수행한 동작(예: “Played”, “Paused”, “Completed” 등)
Object : 학습자가 상호작용한 미디어 자원(예: 영상 ID, 영상 제목 등)
Context : 학습자가 시청한 위치, 학습 환경 등 추가 맥락 데이터
Result : 재생 시간, 완료 여부 등 학습 활동의 결과 정보
JSON 예시 :
| 예제 1 : 영상 미디어 정보를 기반으로 한 xAPI 이벤트 |
|---|
|
{ "actor": { /* 학습 활동을 수행한 주체 */ "objectType": "Agent", /* 학습자의 계정 정보 */ "account": { "homePage": "http://example.com", /* 학습자가 소속된 시스템 URL */ "name": "learner123" /* 학습자의 고유 ID */ } }, "verb": { /* 학습자가 수행한 동작 (예: 재생) */ "id": "http://keris.or.kr/xapi/profiles/verbs/played", /* 동작의 고유 식별자 */ "display": { "en-US": "played" } /* 동작의 사람 읽기용 표현 */ }, "object": { /* 학습자가 상호작용한 대상 (영상 정보) */ "id": "http://example.com/video/video_id_01", /* 학습 대상의 고유 식별자 */ "definition": { "type": "http://keris.or.kr/xapi/profiles/activity-type/media", /* 활동 유형: 미디어 */ "name": { "ko-KR": "xAPI 코드 샘플 비디오" }, /* 영상 제목 */ "description": { "ko-KR": "xAPI 코드 설명을 위한 샘플 비디오" } /* 설명 */ } }, "result": { /* 학습 결과 */ "duration": "PT5M30S", /* 학습 활동 지속 시간 (ISO 8601 형식). float 형식은 330 */ "completion": true /* 활동 완료 여부 */ }, "context": { "extensions": { /* 활동의 추가적인 맥락 */ "http://example.com/extensions/difficulty": 3, /* 난이도: 3 */ "http://example.com/extensions/difficulty-min": 1, /* 최소 난이도 */ "http://example.com/extensions/difficulty-max": 5, /* 최대 난이도 */ "http://example.com/extensions/video-length": 330, /* 영상 길이(초) */ "http://example.com/extensions/creator": "KERIS" /* 제작자 정보 */ } }, "timestamp": "2024-12-25T12:34:56Z" /* 이벤트 발생 시간 (UTC 형식) */ } |
학습데이터 사전의 평가 영역의 일부 항목과 속성을 활용한 예시 :
Actor : 문제를 풀이한 학습자
Verb : 학습자가 수행한 동작(예: “Answered”, “Completed”)
Object : 평가 문항(예: 문항 ID, 문항 제목)
Context : 평가가 포함된 코스웨어 정보 등 추가적인 맥락 데이터
Result : 점수, 정답 여부, 제출 시간 등 학습 성과 정보
JSON 예시 :
| 예제 2 : 학습 활동(평가) 결과를 수집하는 xAPI 이벤트 |
|---|
|
{ "actor": { /* 학습 활동을 수행한 주체 */ "objectType": "Agent", /* 학습자의 계정 정보 */ "account": { "homePage": "http://example.com", /* 학습자가 소속된 시스템 URL */ "name": "learner456" /* 학습자의 고유 ID */ } }, "verb": { /* 학습자가 수행한 동작 (예: 완료) */ "id": "http://keris.or.kr/xapi/profiles/verbs/completed", /* 동작의 고유 식별자 */ "display": { "en-US": "completed" } /* 동작의 사람 읽기용 표현 */ }, "object": { /* 학습자가 상호작용한 대상 (평가 정보) */ "id": "http://example.com/assessment/test_id_01", /* 평가 대상의 고유 식별자 */ "definition": { "type": "http://keris.or.kr/xapi/profiles/activity-type/assessment", /* 활동 유형: 평가 */ "name": { "ko-KR": "xAPI 코드 샘플 테스트" }, /* 평가 제목 */ "description": { "ko-KR": "xAPI 코드 설명을 위한 샘플 테스트" } /* 설명 */ } }, "result": { /* 학습 활동의 결과 정보 */ "completion": true, /* 활동 완료 여부 */ "score": { "scaled": 0.95 }, /* 점수 (백분율로 스케일링) */ "duration": "PT5M30S", /* 학습 활동 지속 시간 (ISO 8601 형식). float 형식은 330 */ }, "context": { /* 활동의 추가적인 맥락 */ "contextActivities": { "parent": [ { "id": "http://example.com/course/course_id_01", /* 부모 활동 (강의 정보) */ "definition": { "type": "http://keris.or.kr/xapi/profiles/activities/course", /* 활동 유형: 강의 */ "name": { "en-US": "API Development Course" } /* 강의 이름 */ } } ] }, "extensions": { "http://example.com/extensions/difficulty": 3, /* 난이도: 3 */ "http://example.com/extensions/difficulty-min": 1, /* 최소 난이도 */ "http://example.com/extensions/difficulty-max": 5, /* 최대 난이도 */ "http://example.com/extensions/creator": "KERIS" /* 제작자 정보 */ } }, "timestamp": "2024-12-25T12:34:56Z" /* 이벤트 발생 시간 (UTC 형식) */ } |
나) Caliper 형식의 학습데이터 API 설계
학습데이터 사전의 미디어 영역의 일부 항목과 속성을 활용한 예시 :
@context : Caliper Analytics의 표준 JSON-LD 컨텍스트를 정의
type : 이벤트의 유형(예: MediaEvent, AssessmentEvent)을 지정
actor : 학습 활동을 수행한 학습자의 정보를 포함
action : 학습자가 수행한 동작(예: Played, Completed)을 나타냄
object : 학습 활동의 대상과 관련된 상세 정보를 포함
eventTime : 이벤트가 발생한 시간을 기록
generated : 이벤트로 생성된 결과를 정의(예: 결과 점수, 활동 지속 시간)
context : 학습 활동의 추가적인 맥락 정보를 제공
JSON-LD 예시 :
| 예제 3 : 영상 미디어 정보를 기반으로 한 Caliper 이벤트 |
|---|
|
{ "@context": "http://purl.imsglobal.org/ctx/caliper/v1p2", "type": "MediaEvent", /* 이벤트 유형: 미디어. Caliper 표준 이벤트 타입으로 지정 */ "actor": { "id": "http://example.com/learners/learner123", /* 학습자의 고유 ID */ "type": "Person" /* Actor의 유형: 사람 */ }, "action": "Played", /* 학습자가 수행한 동작: 영상 시청. Caliper 표준 action 목록 중에서 적합한 어휘를 찾아서 변환하여 지정 */ "object": { "id": "http://example.com/video/video_id_01", /* 영상 리소스의 고유 ID */ "type": "MediaObject", /* 리소스 유형: 미디어 객체. Caliper 표준 Entity 목록 중에서 적합한 유형을 찾아서 변환하여 지정 */ "name": "xAPI 코드 샘플 비디오", /* 영상 제목 */ "description": "xAPI 코드 설명을 위한 샘플 비디오", /* 영상 설명 */ "extensions": { "difficulty": 3, /* 난이도: 3 */ "difficultyMin": 1, /* 최소 난이도 */ "difficultyMax": 5, /* 최대 난이도 */ "videoLength": 330, /* 영상 길이 (초) */ "creator": "KERIS" /* 제작자 정보 */ } }, "eventTime": "2024-12-25T12:34:56.000Z", /* 이벤트 발생 시간 (ISO 8601 형식) */ "generated": { "type": "Result", /* 생성된 결과 유형 */ "duration": "PT5M30S", /* 학습 활동 지속 시간 (ISO 8601 형식). Caliper 표준은 ISO 8601 형식으로 변환하여 입력해야 함 */ "completion": true /* 활동 완료 여부 */ } } |
학습데이터 사전의 평가 영역의 일부 항목과 속성을 활용한 예시 :
JSON-LD 예시 :
| 예제 4 : 학습 활동(평가) 결과를 수집하는 Caliper 이벤트 |
|---|
|
{ "@context": "http://purl.imsglobal.org/ctx/caliper/v1p2", "type": "AssessmentEvent", /* 이벤트 유형: 평가. Caliper 표준 이벤트 타입으로 지정 */ "actor": { "id": "http://example.com/learners/learner456", /* 학습자의 고유 ID */ "type": "Person" /* Actor의 유형: 사람 */ }, "action": "Completed", /* 학습자가 수행한 동작: 완료. Caliper 표준 action 목록 중에서 적합한 어휘를 찾아서 변환하여 지정 */ "object": { "id": "http://example.com/assessment/test_id_01", /* 평가 대상의 고유 ID */ "type": "Assessment", /* 리소스 유형: 평가. Caliper 표준 Entity 목록 중에서 적합한 유형을 찾아서 변환하여 지정 */ "name": "xAPI 코드 샘플 테스트", /* 평가 제목 */ "description": "xAPI 코드 설명을 위한 샘플 테스트", /* 설명 */ "extensions": { "difficulty": 3, /* 난이도 */ "difficultyMin": 1, /* 최소 난이도 */ "difficultyMax": 5, /* 최대 난이도 */ "creator": "KERIS" /* 제작자 정보 */ } }, "generated": { "type": "Score", /* 생성된 결과 유형 */ "value": 0.95, /* 점수 (백분율로 스케일링) */ "duration": "PT10M" /* 학습 활동 지속 시간 (ISO 8601 형식) */ }, "eventTime": "2024-12-25T13:45:00.000Z", /* 이벤트 발생 시간 (ISO 8601 형식). Caliper 표준은 ISO 8601 형식으로 변환하여 입력해야 함 */ "context": { "contextActivities": { "parent": { "id": "http://example.com/course/course_id_01", /* 부모 활동 (강의 정보) */ "type": "Course", /* 활동 유형: 강의 */ "name": "API Development Course" /* 강의 이름 */ } } } } |
3. 집계성 데이터 API 설계
집계성 데이터 API는 학습 활동 데이터를 요약하여 정기적으로 처리 및 전송하는 방식으로 설계
이 항에서는 AIDT 기술규격문서에서 제공하는 집계 데이터 수집 가이드를 기반으로 학습데이터를 구조화하며, 학습데이터 사전의 영상 속성을 활용하여 설계 방법을 제시
집계성 데이터의 목적 : 학습 결과와 활동 데이터를 집계하여 학습 분석 및 성과 평가에 활용
데이터 수집 주기 : 일정 주기(예: 하루, 주 단위)로 데이터를 정리하여 전송
처리 방식 : 배치(batch) 처리 방식을 통해 데이터를 한꺼번에 수집 및 전송
학습데이터 사전의 미디어 영역의 일부 항목과 속성을 활용한 예시
Actor : 학습 활동을 수행한 학습자(예: 학습자 ID)
Verb : 학습자가 수행한 동작(예: “Played”, “Paused”, “Completed” 등)
Object : 학습자가 상호작용한 미디어 자원(예: 영상 ID, 영상 제목 등)
Result : 재생, 음소거, 건너뛰기, 일시정지 등 횟수 데이터
AIDT 기술규격문서에서는 “result” 블록에 집계 데이터를 기록하여 전송하도록 정의하였음
JSON 예시 :
| 예제 5 : 영상 미디어 정보를 기반으로 한 집계성 xAPI 데이터 |
|---|
|
{ "actor": { /* 학습 활동을 수행한 주체 */ "objectType": "Agent", /* 학습자의 계정 정보 */ "account": { "homePage": "http://example.com", /* 학습자가 소속된 시스템 URL */ "name": "learner123" /* 학습자의 고유 ID */ } }, "verb": { /* 학습자가 수행한 동작 (예: 재생) */ "id": "http://keris.or.kr/xapi/profiles/verbs/played", /* 동작의 고유 식별자 */ "display": { "en-US": "played" } /* 동작의 사람 읽기용 표현 */ }, "object": { /* 학습자가 상호작용한 대상 (영상 정보) */ "id": "http://example.com/video/video_id_01", /* 학습 대상의 고유 식별자 */ "definition": { "type": "http://keris.or.kr/xapi/profiles/activity-type/media", /* 활동 유형: 미디어 */ "name": { "ko-KR": "xAPI 코드 샘플 비디오" }, /* 영상 제목 */ "description": { "ko-KR": "xAPI 코드 설명을 위한 샘플 비디오" } /* 설명 */ } }, "result": { "extensions": { /* 집계 항목의 맥락과 집계 데이터 */ "http://keris.or.kr/xapi/profiles/media/1.0/results/extensions/VideoInfo" : [ { "id": "http://example.com/video/video_id_01", /* 재생한 영상의 ID */ “duration”: "PT5M30S", /* 학습 활동 지속 시간 (ISO 8601 형식). float 형식은 330 */ “attempt”: 3, “muteCount”: 1, “skipCount”: 2, “pauseCount”: 2 } ] } }, "timestamp": "2024-12-25T12:34:56Z" /* 집계성 데이터 전송 시간 (UTC 형식) */ } |