메이킷올
경력근거: Bluetooth, BLE, Wi-Fi 기반 교육용 디바이스 및 키트와 연동되는 소프트웨어 기능 개발
※ 실제 산출물이 아닌 AI 예측 시안입니다.
메이킷올은 공고에 적힌 대로 Bluetooth, BLE, Wi-Fi 기반 교육용 디바이스 및 키트와 연동되는 소프트웨어 기능 개발을 맡기고, 만들 화면으로 사용자 페이지, 관리자 페이지, 교육 운영 페이지를 나란히 적었습니다. 키트가 학교로 실제로 나가고 그 주 수업이 몇 주차인지에 따라 준비물이 달라지는 회사라서, 지도안과 부품 목록을 맞춰 보는 계산이 교육 운영 페이지 안에 자리를 갖습니다. 수업일이 고정돼 있어 늦게 알면 고칠 시간이 없다는 점도 학교를 상대하는 제품이라 생기는 제약입니다. 다만 이 포트폴리오는 준비물 표기를 읽어 개수와 판 번호를 맞추는 계산과 그 결과를 읽는 화면을 보여줍니다. 펌웨어를 실제로 올리는 일이나 BLE 통신 안정화의 깊이는 주장하지 않습니다. 부품과 판 번호를 세는 데까지가 제가 손으로 만들어 본 범위이고, 키트에 펌웨어를 실제로 올리는 절차는 하드웨어 담당자께 배워야 하는 자리입니다.
공고는 Bluetooth, BLE, Wi-Fi 기반 교육용 디바이스 및 키트와 연동되는 소프트웨어 기능 개발을 담당업무로 적었습니다. 부품과 펌웨어가 수업 조건을 채웠는지 세는 일이 그 연동의 앞단에 놓입니다.
사용자 페이지, 관리자 페이지, 교육 운영 페이지 등 실제 서비스 운영에 필요한 주요 기능을 구현한다고 적혀 있습니다. 출고 전 키트를 세는 화면이 그 교육 운영 페이지 안에 바로 들어갑니다.
사용자 피드백과 교육 현장 운영 이슈를 바탕으로 개선사항을 정리하고 반영한다고 적혀 있고, 교육운영팀·하드웨어 담당자와 협업한다고 적혀 있습니다. 출고 전에 걸러야 할 키트를 화면으로 내는 일이 그 협업의 재료가 됩니다.
교육운영 담당자가 키트별 부품 목록과 수업 지도안, 그 주 출고 계획을 올리면 키트 한 벌마다 그 반이 할 수업이 요구하는 부품과 펌웨어를 짚어 네 판정 중 하나를 답니다. 지도안의 준비물은 서보모터 두 개처럼 개수가 붙어 적혀 있어서, 코드와 개수로 끊어 읽은 뒤 그 키트에 담긴 부품 줄 수와 세어 모자란 만큼만 뽑습니다. 펌웨어는 점으로 끊어 자릿수마다 견주고 점검 날짜는 수업일과의 날수로 세어, 손볼 키트가 사유별로 서고 어느 부품을 몇 개 더 넣을지 출고 전에 정해집니다.
학교마다 키트를 맞춰 내보내는 메이킷올 교육운영 담당자
같은 키트라도 그 주에 나가는 반이 몇 주차 수업을 하느냐에 따라 필요한 부품과 펌웨어가 달라서, 교육운영 담당자가 지도안과 부품 목록을 번갈아 보며 손으로 맞춰 보고 있습니다. 출고 계획을 기준으로 두 표를 맞춰 사유별로 내면 상자를 닫기 전에 손볼 키트가 가려지고, 수업 당일에 부품이 없어 진도를 못 나가는 반이 줄어듭니다.
키트별 부품 목록과 수업 지도안, 출고 계획을 올리면 키트마다 네 판정 중 하나가 붙고 사유별로 나오는 관리자 페이지입니다. 부품 목록은 창고에서 세어 적은 표를 받는 것으로 가정하고, 기기에 직접 연결해 상태를 읽어 오는 일은 다루지 않습니다.
키트 186벌에 손으로 매긴 정답 판정을 붙여 자동 판정과 대조하고 사유별 일치율을 냅니다. 화면은 기본 배포로 웹 주소를 열어 교육운영 담당자가 자기 자리에서 그 주 출고분을 올려 봅니다.
직관적코딩 앱이 BLE 로 읽어 온 제어보드 펌웨어 값을 부품 목록의 그 줄에 채워, 손으로 적던 판 번호 대신 기기에서 읽은 값으로 판정이 돌게 만드는 단계입니다.
교육운영 담당자가 부품 목록과 지도안, 출고 계획을 올리면 손볼 키트가 사유별로 나오고 모자란 부품이 개수와 함께 붙는 과정을 시연합니다.
키트 186벌마다 정답 판정을 손으로 달아 두고 자동 판정과 맞춰 사유별 일치율을 냅니다. 부품 목록과 지도안을 제가 지어낸 표라, 이 값은 성능을 잰 것이 아니라 시연 범위에서 규칙이 한결같이 도는지를 보여 줄 뿐입니다.
출고 표를 올리는 자리에 일부러 어긋난 표 18가지를 먼저 넣어 봅니다. 펌웨어 칸이 빈 부품과 지도안에 없는 수업 코드, 개수가 안 붙은 준비물 표기가 섞여도 화면이 서고, 읽지 못한 준비물 줄은 판정 자리 대신 hedge 로 내려갑니다.
키트 3천 벌과 수업 200건 규모에서 판정 한 바퀴에 걸리는 시간을 재고, 출고 전날 아침 회의 전에 끝나는지 봅니다.
숫자로 내놓을 수 있는 것은 키트 186벌에서 나온 사유별 일치율까지입니다. 일치율은 제가 꾸민 부품 목록에 제가 매긴 정답을 붙여 나온 숫자이고, 손볼 키트를 미리 잡아 수업이 실제로 덜 밀렸는지는 메이킷올의 출고 기록과 교육 현장 이슈가 들어와야 나옵니다. 그 기록이 붙는 주에 곧바로 돌릴 수 있도록 대조 러너와 정답 판정 서식을 먼저 짜 두었습니다.
키트 부품 목록과 수업 지도안을 제가 지어내고 정답 판정까지 제가 매겼으니, 사유별 일치율은 출고 전 점검이 얼마나 정확한지를 재는 숫자가 아닙니다. 면접에서는 이 화면이 도는 범위와, 메이킷올의 실제 출고 기록이 오면 바로 다시 잰다는 준비 상태까지만 말씀드립니다.
부품 목록을 채운 손과 정답 판정을 매긴 손이 같으니 둘이 어긋날 리가 없습니다. 그래서 펌웨어 칸이 빈 수동 부품과 요구 값과 똑같은 판 번호, 개수만 한 개 모자란 키트를 일부러 섞어 빈 칸과 같은 값, 한 개 차이가 판정에서 어느 쪽으로 가는지 드러나게 했습니다.
목록에 있다고 실물이 멀쩡한 것은 아닙니다. 이 판정이 세는 것은 창고에서 적은 부품 줄 수까지이고 부러진 서보모터는 사람이 열어 봐야 알기 때문에, 화면은 손볼 후보를 좁혀 줄 뿐 검수를 대신하지 않습니다.
학교가 이미 갖고 있어 일부러 빼고 보내는 부품이 있습니다. 그런 키트가 부품이 빠짐으로 걸리면 교육운영 담당자가 예외로 표시하고, 예외 목록을 어디에 둘지는 운영 과제로 남깁니다.
이 포트폴리오는 준비물 표기 읽기와 판 번호 비교, 그 결과를 읽는 화면을 보여줍니다. 펌웨어를 올리는 절차나 BLE 통신 안정화의 깊이는 주장하지 않습니다. 판정은 개수 세기와 자릿수 비교가 하고 모델은 출고 담당자가 읽을 한 줄만 씁니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
창고에 선 키트마다 어떤 부품이 몇 줄 들어 있는지 적은 표입니다. 판정의 대상 표이며, 펌웨어를 안 쓰는 수동 부품의 칸을 비워 두어 빈 값을 낮은 판 번호로 잘못 세지 않는 경로를 보여줍니다.
| kit_id | school_id | module_code | module_name | firmware_ver | checked_at |
|---|---|---|---|---|---|
| KIT-1142 | SCH-021 | MOD-CTRL | 제어보드 | 1.6.1 | 2026-09-05 |
| KIT-1142 | SCH-021 | MOD-BLE | 블루투스 모듈 | 1.6.1 | 2026-09-05 |
| KIT-1142 | SCH-021 | MOD-LED | LED 모듈 | — | 2026-09-05 |
| KIT-1142 | SCH-021 | MOD-BREAD | 브레드보드 | — | 2026-09-05 |
| KIT-1187 | SCH-037 | MOD-CTRL | 제어보드 | 1.4.2 | 2026-09-01 |
아래 JSON Schema 에 맞는 행을 더 만들어 주세요. {"type":"object","properties":{"kit_id":{"type":"string"},"school_id":{"type":"string"},"module_code":{"type":"string"},"module_name":{"type":"string"},"firmware_ver":{"type":["string","null"]},"checked_at":{"type":"string"}},"required":["kit_id","school_id","module_code","module_name","firmware_ver","checked_at"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) firmware_ver 가 null 인 수동 부품 줄, (2) 같은 부품이 두 줄 이상 들어 있는 키트, (3) 마지막 점검일이 석 달을 넘긴 키트, (4) 펌웨어 판 번호의 자릿수가 두 칸인 줄(1.7), (5) lesson_plan 의 준비물에 한 번도 안 나오는 부품 코드. 한 키트의 모든 줄은 같은 school_id 를 쓰고, 생성한 행은 반드시 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"kit_id":{"type":"string"},"school_id":{"type":"string"},"module_code":{"type":"string"},"module_name":{"type":"string"},"firmware_ver":{"type":["string","null"]},"checked_at":{"type":"string"}},"required":["kit_id","school_id","module_code","module_name","firmware_ver","checked_at"]}직관적코딩 수업 지도안에서 주차별 준비물과 요구 펌웨어를 뽑아 적은 표입니다. 판정의 기준 표이며, 준비물을 코드와 개수가 붙은 한 줄로 적어 개수까지 세어야 판정이 서게 했습니다.
| lesson_code | lesson_title | week_no | required_modules | min_firmware |
|---|---|---|---|---|
| LSN-04 | LED 신호등 만들기 | 4 | MOD-CTRL×1, MOD-LED×3, MOD-BREAD×1 | 1.4.0 |
| LSN-06 | 초음파로 거리 재기 | 6 | MOD-CTRL×1, MOD-ULTRA×1, MOD-BLE×1, MO… | 1.5.0 |
| LSN-07 | 블루투스로 조명 켜기 | 7 | MOD-CTRL×1, MOD-BLE×1, MOD-LED×1, MOD-… | 1.6.5 |
| LSN-08 | 서보모터로 자동문 만들기 | 8 | MOD-CTRL×1, MOD-SERVO×2, MOD-BREAD×1 | 1.6.0 |
| LSN-10 | 온습도로 스마트팜 돌리기 | 10 | MOD-CTRL×1, MOD-TEMP×1, MOD-BLE×1, MOD… | 1.6.0 |
아래 JSON Schema 에 맞는 행을 더 만들어 주세요. {"type":"object","properties":{"lesson_code":{"type":"string"},"lesson_title":{"type":"string"},"week_no":{"type":"integer","minimum":1},"required_modules":{"type":"string"},"min_firmware":{"type":"string"}},"required":["lesson_code","lesson_title","week_no","required_modules","min_firmware"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 같은 부품을 네 개 이상 요구하는 수업, (2) 준비물이 두 가지뿐인 초반 주차 수업, (3) 요구 펌웨어가 가장 높은 수업, (4) 준비물에 개수를 안 붙인 줄, (5) 쉼표 뒤에 공백이 없는 줄. 한 lesson_code 는 한 줄만 두고, 생성한 행은 반드시 위 스키마를 통과해야 합니다.{"type":"object","properties":{"lesson_code":{"type":"string"},"lesson_title":{"type":"string"},"week_no":{"type":"integer","minimum":1},"required_modules":{"type":"string"},"min_firmware":{"type":"string"}},"required":["lesson_code","lesson_title","week_no","required_modules","min_firmware"]}그 주에 어느 키트가 어느 학교 몇 반의 어떤 수업으로 언제 나가는지 적은 출고 계획입니다. 키트와 수업을 잇는 표라, 같은 키트도 나가는 주에 따라 판정이 갈라집니다.
| dispatch_no | kit_id | school_id | school_name | class_name | lesson_code | class_date |
|---|---|---|---|---|---|---|
| DSP-26W39-001 | KIT-1142 | SCH-021 | 서울 목운중 | 3반 | LSN-06 | 2026-09-22 |
| DSP-26W39-002 | KIT-1187 | SCH-037 | 고양 화정고 | 1반 | LSN-08 | 2026-09-23 |
| DSP-26W39-003 | KIT-1203 | SCH-052 | 인천 청라초 | 5반 | LSN-04 | 2026-09-22 |
| DSP-26W39-004 | KIT-1250 | SCH-064 | 수원 매탄중 | 2반 | LSN-10 | 2026-09-24 |
| DSP-26W39-005 | KIT-1288 | SCH-078 | 부천 상동초 | 4반 | LSN-06 | 2026-09-25 |
아래 JSON Schema 에 맞는 행을 더 만들어 주세요. {"type":"object","properties":{"dispatch_no":{"type":"string"},"kit_id":{"type":"string"},"school_id":{"type":"string"},"school_name":{"type":"string"},"class_name":{"type":"string"},"lesson_code":{"type":"string"},"class_date":{"type":"string"}},"required":["dispatch_no","kit_id","school_id","school_name","class_name","lesson_code","class_date"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 같은 키트가 다른 주에 다른 수업으로 나가는 줄 쌍, (2) 한 학교에서 여러 반이 같은 날 같은 수업을 하는 줄, (3) 수업일이 출고 다음 날인 촉박한 줄, (4) kit_inventory 에 없는 kit_id. 한 dispatch_no 는 한 줄만 두고, 생성한 행은 반드시 위 스키마를 통과해야 합니다.{"type":"object","properties":{"dispatch_no":{"type":"string"},"kit_id":{"type":"string"},"school_id":{"type":"string"},"school_name":{"type":"string"},"class_name":{"type":"string"},"lesson_code":{"type":"string"},"class_date":{"type":"string"}},"required":["dispatch_no","kit_id","school_id","school_name","class_name","lesson_code","class_date"]}| TypeScript | 판정 규칙과 화면, 서버가 같은 타입을 쓰는 언어입니다. 키트 한 벌의 판정 결과 모양을 한 곳에 정의해 양쪽이 어긋나지 않게 합니다. |
| React | 사유별 목록과 키트 하나를 펼쳐 준비물을 대조하는 상세 화면을 그립니다. |
| Next.js | 교육 운영 페이지의 골격이며, 표 업로드와 판정 목록, 키트 상세 세 화면을 한 앱에 담고 기본 배포로 웹 주소를 엽니다. |
| Claude | 공고가 적은 개발 도구 쪽입니다. 준비물 표기 규칙을 넓힐 때 지도안 문장에서 부품과 개수를 뽑는 정규식과 그 시험 사례를 Claude Code 로 함께 짭니다. |
| ChatGPT | 판정이 정해진 뒤 빠진 부품과 펌웨어 번호를 출고 담당자가 챙길 준비물 한 줄로 적습니다. |
| BLE | 3주차에 직관적코딩 앱이 제어보드에서 읽어 온 펌웨어 값을 부품 목록의 그 줄에 채워 넣는 경로로 씁니다. |
| Android/iOS 앱 | BLE 로 읽은 값을 서버로 올리는 쪽이 앱이라, 3주차에 앱이 보내는 값의 형식을 판정 입력과 같은 모양으로 맞춥니다. |
| PostgreSQL | 키트 부품·수업 지도안·출고 계획 세 표를 담고, 지도안에 lesson_code 유일 제약을 걸어 한 수업에 준비물이 두 벌 생기지 않게 합니다. |
| Node.js | 세 표를 받아 판정을 돌리고 결과를 화면에 넘기는 API 서버입니다. |
| 관리자 페이지 | 공고가 만들 화면으로 적은 교육 운영 페이지의 한 탭으로 들어가, 출고 전에 손볼 키트를 세는 자리를 맡습니다. |
✗ fail → 못 읽은 줄이 열에 하나를 넘으면 준비물을 적는 형식을 좁혀 다시 정하고 그때까지 그 수업을 판정 대상에서 뺍니다.
✓ pass → 2주차 정답 대조와 웹 주소 배포로 넘어갑니다.
✗ fail → 어긋난 건을 모아 판정 차례와 점검 날수 기준을 다시 봅니다.
✓ pass → 3주차 BLE 로 읽은 펌웨어 채우기로 넘어갑니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · kit_id + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
수업에 맞음준비 완료부품이 빠짐부품 부족펌웨어가 낮음펌웨어 미달점검한 지 오래됨점검 경과출고를 앞둔 키트 한 벌이 그 주 수업의 준비물·펌웨어·점검 날짜와 맞춰 어떤 판정을 받는지 남기는 형식입니다. 판정은 규칙이 정하고 요약 문장만 모델이 씁니다.
{"type":"object","properties":{"kit_id":{"type":"string"},"lesson_code":{"type":"string"},"verdict":{"type":"string","enum":["수업에 맞음","부품이 빠짐","펌웨어가 낮음","점검한 지 오래됨"]},"missing_modules":{"type":["string","null"],"description":"required_modules 를 쉼표로 끊어 코드와 필요 개수로 읽은 뒤, 그 kit_id 의 kit_inventory 행에서 같은 module_code 가 몇 줄인지 세어 모자란 만큼을 코드와 개수로 적습니다. 모자란 것이 없으면 비웁니다."},"lowest_firmware":{"type":["string","null"],"description":"그 키트의 firmware_ver 중 자릿수별로 비교해 가장 낮은 값입니다. 펌웨어가 적히지 않은 부품은 세지 않고, 셀 값이 하나도 없으면 비웁니다."},"required_firmware":{"type":["string","null"]},"days_since_check":{"type":["integer","null"],"description":"class_date 에서 그 키트의 가장 이른 checked_at 을 뺀 날수입니다."},"evidence":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"agg":{"type":["string","null"]},"value":{}},"required":["field","value"]}},"summary":{"type":"string"},"hedge":{"type":["string","null"]}},"required":["kit_id","lesson_code","verdict","evidence","summary"]}[
{
"kit_id": "KIT-1142",
"lesson_code": "LSN-06",
"verdict": "부품이 빠짐",
"missing_modules": "MOD-ULTRA×1",
"lowest_firmware": "1.6.1",
"required_firmware": "1.5.0",
"days_since_check": 17,
"evidence": [
{
"field": "required_modules",
"value": "MOD-CTRL×1, MOD-ULTRA×1, MOD-BLE×1, MOD-BREAD×1"
},
{
"field": "module_code",
"agg": "count",
"value": 4
},
{
"field": "lesson_title",
"value": "초음파로 거리 재기"
},
{
"field": "class_date",
"value": "2026-09-22"
}
],
"summary": "서울 목운중 3반 6주차 수업에 초음파센서가 필요한데 이 키트에는 들어 있지 않습니다.",
"hedge": null
},
{
"kit_id": "KIT-1304",
"lesson_code": "LSN-08",
"verdict": "부품이 빠짐",
"missing_modules": "MOD-SERVO×1",
"lowest_firmware": "1.7.0",
"required_firmware": "1.6.0",
"days_since_check": 12,
"evidence": [
{
"field": "required_modules",
"value": "MOD-CTRL×1, MOD-SERVO×2, MOD-BREAD×1"
},
{
"field": "module_code",
"agg": "count",
"value": 1
},
{
"field": "school_name",
"value": "성남 분당중"
},
{
"field": "class_date",
"value": "2026-09-26"
}
],
"summary": "성남 분당중 1반 자동문 수업은 서보모터가 두 개 필요한데 이 키트에는 한 개만 들어 있습니다.",
"hedge": "모자란 개수만큼 채워 넣으면 되는 키트라 다시 꾸리지 않고 부품만 넣어 보냅니다."
},
{
"kit_id": "KIT-1187",
"lesson_code": "LSN-08",
"verdict": "펌웨어가 낮음",
"missing_modules": null,
"lowest_firmware": "1.4.2",
"required_firmware": "1.6.0",
"days_since_check": 22,
"evidence": [
{
"field": "firmware_ver",
"value": "1.4.2"
},
{
"field": "min_firmware",
"value": "1.6.0"
},
{
"field": "module_name",
"value": "제어보드"
},
{
"field": "class_date",
"value": "2026-09-23"
}
],
"summary": "고양 화정고 1반에 나갈 키트의 제어보드가 1.4.2 라서 자동문 수업이 요구하는 1.6.0 에 못 미칩니다.",
"hedge": "서보모터와 브레드보드는 펌웨어가 없는 부품이라 이 비교에서 빼고 셌습니다."
},
{
"kit_id": "KIT-1203",
"lesson_code": "LSN-04",
"verdict": "점검한 지 오래됨",
"missing_modules": null,
"lowest_firmware": "1.5.4",
"required_firmware": "1.4.0",
"days_since_check": 84,
"evidence": [
{
"field": "checked_at",
"value": "2026-06-30"
},
{
"field": "class_date",
"value": "2026-09-22"
},
{
"field": "school_name",
"value": "인천 청라초"
},
{
"field": "lesson_title",
"value": "LED 신호등 만들기"
}
],
"summary": "인천 청라초 5반 키트는 6월 30일에 마지막으로 점검해 수업일까지 84일이 지났습니다.",
"hedge": "부품과 펌웨어는 수업 조건을 채웠고 점검 날짜만 지난 키트라 여는 김에 같이 손보면 됩니다."
},
{
"kit_id": "KIT-1250",
"lesson_code": "LSN-10",
"verdict": "수업에 맞음",
"missing_modules": null,
"lowest_firmware": "1.6.0",
"required_firmware": "1.6.0",
"days_since_check": 14,
"evidence": [
{
"field": "firmware_ver",
"value": "1.6.0"
},
{
"field": "min_firmware",
"value": "1.6.0"
},
{
"field": "module_code",
"agg": "count",
"value": 4
},
{
"field": "checked_at",
"value": "2026-09-10"
}
],
"summary": "수원 매탄중 2반 스마트팜 수업에 필요한 부품이 모두 들어 있고 가장 낮은 펌웨어가 1.6.0 이라 그대로 나가도 됩니다.",
"hedge": null
},
{
"kit_id": "KIT-1288",
"lesson_code": "LSN-06",
"verdict": "수업에 맞음",
"missing_modules": null,
"lowest_firmware": "1.5.0",
"required_firmware": "1.5.0",
"days_since_check": 13,
"evidence": [
{
"field": "firmware_ver",
"value": "1.5.0"
},
{
"field": "min_firmware",
"value": "1.5.0"
},
{
"field": "school_name",
"value": "부천 상동초"
},
{
"field": "class_date",
"value": "2026-09-25"
}
],
"summary": "부천 상동초 4반 키트는 제어보드가 요구 값과 똑같은 1.5.0 이라 낮은 쪽으로 세지 않고 그대로 내보냅니다.",
"hedge": null
},
{
"kit_id": "KIT-1142",
"lesson_code": "LSN-07",
"verdict": "펌웨어가 낮음",
"missing_modules": null,
"lowest_firmware": "1.6.1",
"required_firmware": "1.6.5",
"days_since_check": 24,
"evidence": [
{
"field": "firmware_ver",
"value": "1.6.1"
},
{
"field": "min_firmware",
"value": "1.6.5"
},
{
"field": "lesson_title",
"value": "블루투스로 조명 켜기"
},
{
"field": "class_date",
"value": "2026-09-29"
}
],
"summary": "서울 목운중 3반이 40주차에 할 조명 수업은 1.6.5 를 요구하는데 이 키트의 제어보드와 블루투스 모듈이 1.6.1 입니다.",
"hedge": "LED 모듈과 브레드보드는 펌웨어를 안 쓰는 부품이라 가장 낮은 값을 고를 때 빼고 셌습니다."
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 네 값 중 하나인지 확인합니다. 규칙이 정한 값이라 모델이 새 값을 적으면 그 응답을 버립니다. 2. kit_id·lesson_code·verdict·evidence·summary 필드가 빠짐없이 있는지 확인합니다. 3. days_since_check 가 0 이상인지 확인합니다. 수업일보다 늦게 점검한 날짜가 들어오면 입력이 잘못된 것이라 판정 대신 이슈로 내립니다. 4. missing_modules 를 다시 계산합니다. required_modules 를 쉼표로 끊어 코드와 필요 개수로 읽고, 그 kit_id 의 kit_inventory 행에서 같은 module_code 가 몇 줄인지 세어 모자란 만큼만 적습니다. 두 근거 값은 그 수업 지도안 행과 그 키트의 행 수에서 그대로 가져옵니다. 5. lowest_firmware 를 다시 계산합니다. 그 키트의 firmware_ver 를 점으로 끊어 자릿수마다 숫자로 견주고 가장 낮은 값을 고릅니다. 다만 firmware_ver 가 비어 있는 부품은 세지 않고, 셀 값이 하나도 없으면 펌웨어 판정을 하지 않고 그 사실을 hedge 에 남깁니다. 6. 펌웨어가 낮음은 lowest_firmware 가 min_firmware 보다 낮은지 자릿수 비교로 다시 계산합니다. 두 값이 같으면 낮은 것이 아니라 맞는 것으로 봅니다. 7. days_since_check 를 class_date 에서 그 키트의 가장 이른 checked_at 을 뺀 날수로 다시 계산하고, 60 을 넘는지 확인합니다. 8. 사유가 둘 이상 걸리면 부품이 빠짐, 펌웨어가 낮음, 점검한 지 오래됨 차례로 하나만 남기고 하나도 안 걸리면 수업에 맞음을 답니다. 9. evidence 의 field 이름이 입력 표에 있는 컬럼인지 대조합니다. 없는 이름을 인용하면 요약이 지어낸 문장이라는 뜻이라 규칙이 만든 기본 문장으로 되돌립니다. 10. evidence 의 value 가 수록된 행의 원문 값과 같은지 확인합니다. 여러 행을 세어 얻은 수치는 agg 를 함께 적습니다. 11. summary 가 존댓말 한 문장으로 끝나는지 확인합니다. [평가 러너 · 2주차] 손으로 매긴 정답 판정 186건과 자동 판정을 대조해 사유별 일치율을 내고, 어긋난 키트는 따로 모아 부품 표기를 읽는 규칙을 손볼지 정합니다. 부품 목록과 펌웨어 번호를 흔들어 만든 키트에 손볼 곳을 일부러 심어 두고 심은 수와 잡은 수를 견주는 일도 이 러너에서 합니다. [수동 검증 · 사람이 봅니다] 1. 부품이 빠짐으로 걸린 키트 20벌을 열어 학교가 이미 갖고 있어 빼고 보내기로 한 부품인지 교육운영 담당자가 판단합니다. 2. 수업에 맞음으로 넘어간 키트 20벌을 표본으로 열어 목록에는 있는데 실물이 고장 난 부품이 섞였는지 보고 판정 차례를 다시 봅니다.