Knowledge Base

추정분할점수 계산기

활성

문항별 예상 정답률만 입력하면 NEIS 추정분할점수 15칸 표를 자동 계산해주는 교사용 도구

shinnanchanguk.github.io/neis-cutscore-releases/
Tauri 2React 19TypeScriptVite 8Tailwind CSS 4Zustand 5shadcn/uiRust

Overview

What

NEIS 추정분할점수 계산기는 한국 중·고교 교사가 성취평가제 추정분할점수를 입력할 때 겪는 마찰을 해결하는 도구다. Tauri 데스크톱 앱과 웹 버전을 동시에 제공한다.

Why

NEIS는 교사에게 난이도 3단계 × 등급 5단계 = 15칸의 "최소능력자 예상 정답률" 표를 5% 단위로 채우라고 요구한다. 하지만 교사가 자연스럽게 가진 감각은 "문항별 예상 정답률"과 "성취도별 목표 비율"이지, 15칸 매트릭스가 아니다.

교사로서 직접 이 표를 채우면서 느낀 막막함이 출발점이었다. 개인 불편이 아니라 성취평가제 구조 자체의 문제임을 인식하고 도구로 해결하기로 했다.

How

상세 모드: 교사의 두 가지 입력(문항별 예상 정답률 + 성취도별 목표 비율)만 받아 1PL Rasch 모형 + 표준정규분포로 NEIS 15칸 표를 자동 계산한다. 수학의 복잡함은 숨기되, 셀 클릭으로 계산 과정을 투명하게 확인할 수 있다.

간편 모드 (v0.1.27): 이미 분할점수에 대한 감이 있거나, 문항별 정답률을 하나씩 넣기 번거로운 교사를 위한 역산 모드. 원하는 등급별 분할점수(A/B/C/D/E 컷)와 난이도별 배점합만 입력하면, 그 분할점수를 실현하는 NEIS 표 값을 Anchored Spread 알고리즘으로 역산한다. 상세 모드의 정밀한 시뮬레이션과 달리 빠른 결과 확인에 초점을 맞췄다.

Tauri 2 데스크톱 앱과 GitHub Pages 웹 버전을 동일 React 코드베이스로 이중 배포한다. .neiscut 커스텀 파일 포맷으로 시험별 저장/불러오기와 동료 교사 간 공유가 가능하다.

Impact

"교사의 감각은 감각의 자리에, 수학은 수학의 자리에." 교사가 이미 가진 직관을 시스템이 요구하는 형식으로 번역해주는 도구다. 블랙박스가 아니라 계산 근거를 투명하게 보여줘서 교사가 결과를 신뢰하고 설명할 수 있다. 간편 모드의 추가로, 교사의 숙련도와 상황에 맞는 두 가지 진입 경로를 제공한다.

Architecture

Tech Stack

  • Desktop: Tauri 2 (Rust 백엔드 + 웹 프론트엔드)
  • Frontend: Vite + React 19 + TypeScript
  • Styling: Tailwind CSS 4 + shadcn/ui
  • State: Zustand + persist (localStorage / Tauri AppData)
  • Math: 1PL Rasch 모형 + 표준정규분포 (상세), Anchored Spread 역산 (간편)
  • Deploy: Tauri 데스크톱(Windows/macOS/Linux) + GitHub Pages 웹 이중 배포

Architecture

2-Pane 레이아웃으로, 좌측은 입력, 우측은 NEIS 15칸 표 출력이다. 헤더의 상세/간편 모드 토글로 전체 좌·우 패널이 전환된다.

상세 모드: 핵심 계산 엔진은 순수 함수로 구현되어 UI와 완전히 분리되어 있다. 문항 난이도를 Rasch 모형으로 추정하고, 등급 경계를 표준정규분포 역함수로 계산한 뒤, 5% 단위로 반올림하고 단조성을 자동 보정한다. 상태는 examStore(Zustand)가 관리한다.

간편 모드: reverseSolver.ts가 역산 엔진을 담당한다. 원하는 분할점수에서 전체 목표 정답률을 계산하고, spread 파라미터로 쉬움/어려움 간 차이를 조정한 뒤, 보통 난이도 값을 가중합 방정식으로 역산한다. 상태는 simpleStore(Zustand)가 별도 관리한다.

동일한 React 코드베이스를 Tauri 데스크톱과 GitHub Pages 웹으로 이중 배포한다. useIsTauri 훅으로 네이티브 기능(파일 저장, 자동 업데이트)을 분기 처리한다.

Decisions

Decision 1: 1PL Rasch 모형 선택

Context: 초기에 단순 가중평균으로 시도했으나 현장 감각과 불일치하는 결과가 나왔다. "대충 답이 나오는 것"과 "교사가 신뢰할 수 있는 답"은 다른 기준이다. Decision: 1PL Rasch 모형으로 전환. 2PL/3PL 대비 추가 파라미터가 불필요하고, 교사가 제공하는 정보(정답률)만으로 충분하다. Consequence: 교사의 직관과 부합하는 결과를 얻게 됐다. 통계 모형을 제대로 쓴 쪽이 현장 감각에 맞는 답을 낸다.

Decision 2: 수학 은닉 + 투명성 동시 추구

Context: 학생 성적표에 닿는 숫자이므로 블랙박스 도구는 교사가 쓰지 않는다. 그렇다고 수학을 노출하면 진입 장벽이 높아진다. Decision: 기본 화면에서는 수학 노출을 최소화하고, 셀 팝오버로 "궁금하면 볼 수 있는" 계산 과정을 제공했다. Consequence: 시각적 투명성이 신뢰를 만들었다. 교사가 결과를 설명할 수 있게 됐다.

Decision 3: Tauri 2 + 웹 이중 배포

Context: 교사 PC에 설치하는 네이티브 앱(파일 저장, 자동 업데이트)이 주요 채널이지만, 설치 없이 써볼 수 있는 경로도 필요했다. Decision: 동일 React 코드베이스를 Tauri 데스크톱과 GitHub Pages 웹으로 이중 배포. useIsTauri 훅으로 분기. Consequence: 네이티브 앱의 편의성과 웹의 접근성을 동시에 확보했다.

Decision 4: 간편 모드(역산) 추가

Context: 교사마다 시험 준비 상황이 다르다. 문항별 정답률을 하나씩 넣을 여유가 없거나, 이미 분할점수에 대한 감을 잡고 있는 경우가 있다. 상세 모드 하나만으로는 이런 교사의 흐름을 수용하지 못했다. Decision: 원하는 분할점수와 난이도별 배점합만 입력하면 NEIS 표를 역산하는 간편 모드를 별도 진입 경로로 추가. Anchored Spread 알고리즘으로 구현. Consequence: 상세 모드는 정밀한 시뮬레이션, 간편 모드는 빠른 결과 확인이라는 두 갈래 진입 경로가 생겼다. 교사의 숙련도와 상황에 따라 선택할 수 있게 됐다. 다만 간편 모드는 개별 문항 수준의 시뮬레이션이 없어 정밀도가 낮고, 난이도 차이(spread)를 교사가 직접 설정해야 하는 한계가 있다.

Lessons

배운 점

교사의 언어와 시스템의 언어를 번역하는 것이 핵심 설계 원칙이었다. 교사가 이미 가진 감각(문항별 정답률, 목표 비율)을 시스템이 요구하는 형식(15칸 매트릭스)으로 변환하는 것이 이 도구의 전부다.

단순 가중평균에서 Rasch 모형으로 전환한 과정이 중요한 교훈이었다. "대충 답이 나온다"와 "현장에서 쓸 수 있다"는 완전히 다른 기준이다. 통계 모형의 복잡도는 높이되, 그 복잡함을 UI에 드러내지 않는 것이 목표였다.

시각적 투명성이 신뢰를 만든다는 것도 배웠다. 학생 성적표에 닿는 숫자를 다루는 도구이기 때문에, 교사가 "이 숫자가 어떻게 나왔는지" 설명할 수 있어야 했다. 셀 팝오버로 계산 근거를 보여주는 것이 그 해답이었다.

간편 모드를 추가하면서 배운 것은, 같은 도구라도 교사의 상황에 따라 필요한 진입 경로가 다르다는 점이다. 문항별 정답률을 정밀하게 넣을 여유가 있는 교사와, 이미 분할점수에 대한 감을 가지고 있어서 빠르게 NEIS 표만 확인하고 싶은 교사는 다른 흐름을 원한다. 하나의 모드를 복잡하게 만드는 것보다 두 개의 단순한 모드를 나누는 것이 낫다.

이 프로젝트의 독특한 점

교사가 본인의 직접 경험에서 출발한 프로젝트다. 성취평가제 구조의 문제를 인식하고, 수학 모형으로 해결하되, 그 수학을 감추는 설계를 했다. 상세 모드와 간편 모드라는 두 갈래 진입 경로는 교사의 다양한 상황을 수용하는 방향으로의 진화다.

Timeline

타임라인

  • 2025: 초기 구현 및 수학 모델 검증
  • v0.1.19: 웹 버전 추가 (GitHub Pages 배포)
  • v0.1.20: 모바일 반응형 레이아웃
  • v0.1.24: 헤더 레이아웃 정리, dorm.dev 링크
  • v0.1.27: 간편 모드(역산) 추가 — 원하는 분할점수에서 NEIS 표 역산
  • 다음 단계: 현장 교사 피드백 수집 및 UX 개선

관련 지식 노드