xAPI와 LRS에 대해 알아보자
입사 후, 내게 주어진 첫 과제는 xAPI와 LRS, 두 키워드에 대해 파악하는 것이었다. 개념 자체는 지금으로부터 약 10년 전인 2013년에 나왔지만, 코로나 시대로 온라인 학습 도구의 폭발적인 성장과 LMS(Learning Management System)의 진화 등 비교적 최근에 주목받는 기술이라고 하여 이 기회에 한 번 정리해보았다.
이 글은 나와 같이 xAPI와 LRS에 대해 모르는 사람들을 대상으로 작성해보았다. 이 글을 다 읽고 나면 두 키워드의 흐름과 연관성이 기억에 남았으면 좋겠다.
xAPI(Experience API)란 사용자의 학습 활동과 패턴을 데이터화하여 기록하는 표준화된 데이터 형식이다. 검색 기능을 통해 강의를 찾고 영상을 재생하거나 중단하는 과정, 학습을 완료하는 사용자의 행동 모두 수집하는 것이다. xAPI 데이터는 ‘Statement’ 라고 불리는 JSON 형식으로 표현, LRS(Learning Record Store)에 전송된다. 이를 통해 사용자가 학습하는 행동 데이터를 분석하거나 활용할 수 있다.
xAPI 데이터 모델
가장 먼저, Actor는 학습 활동을 하는 주체로 Agent(개인 학습자)와 Group(여러 학습자가 활동하는 그룹)로 정의한다. Verb는 ‘재생함’, ‘완료함’ 등 학습 행동을 담고있다. Object는 학습 활동을 뜻하며 Activity 나 Statement, Actor 를 담는다. 이로 보아, 학습 활동의 대상은 다른 Statement 또는 다른 사람(Actor)이 될 수 있다.
Statement 구조
{
"version": "1.0.0",
"id": "33cff416-e331-4c9d-969e-5373a1756120",
"actor": {
"mbox": "mailto:example@example.com",
"name": "Example Learner",
"objectType": "Agent"
},
"verb": {
"id": "http://adlnet.gov/expapi/verbs/experienced",
"display": {
"en-US": "experienced"
}
},
"object": {
"id": "https://www.youtube.com/watch?v=xh4kIiH3Sm8",
"objectType": "Activity",
"definition": {
"name": {
"en-US": "Tax Tips & Information : How to File a Tax Return "
},
"description": {
"en-US": "Filing a tax return will require filling out either a 1040, 1040A or 1040EZ form"
}
}
},
"timestamp": "2013-04-01T12:00:00Z",
"attachments": [
{
"usageType": "http://adlnet.gov/expapi/attachments/signature",
"display": { "en-US": "Signature" },
"description": { "en-US": "A test signature" },
"contentType": "application/octet-stream",
"length": 4235,
"sha2": "672fa5fa658017f1b72d65036f13379c6ab05d4ab3b6664908d8acf0b6a0c634"
}
]
}
Statement 구조를 좀 더 파헤쳐보자.
제일 먼저 xAPI Statement 버전을 나타내는 version과 각 Statement를 구분하는 UUID인 id가 보인다.
actor는 사용자의 이메일 주소(mbox)와 사용자 이름(name), 사용자의 종류(objectType)를 담고 있다. mbox는 사용자를 식별하는 식별자로도 사용된다.
verb는 행동을 고유 URI로 정의하는 id(experienced
)와 verb를 설명하는 display 객체로 구성된다. 위의 예시로 보아 영어(en-US
)로 ‘경험했다'라는 것을 나타내며 다국어를 지원한다.
object는 id와 objectType, definition 객체로 이뤄진다.
- id: verb의 id와 동일하게 활동의 고유 식별자(URI)를 의미한다
- objectType: 학습 방법을 의미하며 다른 Statement나 Actor가 위치할 수 있다. 한 Statement에 참조된 다른 Statement(
StatementRef
)는 id를 가지는 반면, 하위 Statement(SubStatement
)로 위치하는 경우 id를 가질 수 없다. - definition: 학습 활동의 메타 데이터로 활동 명(name)과 설명(description)을 갖는다. en-US로 보아 name과 description 모두 다국어 지원을 한다.
timestamp는 Statement가 발생한 시간(UTC 기준)이다.
attachments는 첨부 파일 정보를 포함하는 배열로 다음 key-value 형식을 갖는다.
- usageType: 첨부 파일의 용도를 정의하는 URI(
signature
) - display: 첨부 파일명(다국어 지원)
- description: 첨부 파일에 대한 설명(다국어 지원).
- contentType: 첨부 파일의 형식(MIME 타입)을 지정한다.
- length: 파일 크기(바이트 단위)
- sha2: 첨부 파일의 SHA-256 해시 값으로 무결성 검증에 사용한다.
LRS 검증 및 저장
LRS에 저장되기 전, xAPI의 사양을 제대로 갖추었는지 2단계에 나눠 검증한다.
- Statement가 Actor, Verb, Object를 필수로 가지면서 JSON 형식인지 JSON Schema Validator와 LRS API를 사용하여 검증한다.
- LRS가 ‘xAPI Statement를 올바르게 처리하고 저장할 수 있는지’를 LRS 유효성 테스트(ADL Test Suite)를 통해 검증한다. ADL Test Suite을 관리하는 ADL(Advanced Distributed Learning Initiative)은 xAPI와 LRS의 표준화를 관리하는 미국 국방부 산하 기관이다.
이렇게 통과된 xAPI 데이터는 LRS에 저장되어 향후 사용자 행동 분석에 활용되거나 HTTP POST request로 전송된다.
POST /statements HTTP/1.1
Host: lrs.example.com
Content-Type: application/json
{
actor: ..
verb: ..
object: ..
}
xAPI 2.0은 IEEE(Institute of Electrical and Electronics Engineers; 전기전자공학자협회)의 승인으로 IEEE 9274.1.1–2022로 등록되어 신뢰성과 호환성이 강화되었다.
오늘날 xAPI와 LRS는 내가 즐겨하는 Duolingo부터 edX 등 교육 플랫폼부터 기업 교육 및 성과 관리, 의료 분야 등 다양한 분야에서 사용된다고 한다. 이번 기회를 통해 사용자 데이터가 굉장히 중요한 현 시대에 필요한 기술을 알게 되어 흥미로웠다.