Sandcorp샌드코프 · 웹·AI 제품 개발

새 프로젝트 받는 중 · 갱신 2026.11sandcorp.co.krGitHub

← 팁

성능

배점을 바꿀 때마다 AI를 다시 부르지 않게 — 원점수만 저장하고 합계·등수는 읽을 때 계산한다

AI가 매긴 항목별 0~5만 저장하고, 가중 합계·만점·등수는 지금 배점으로 읽을 때 셉니다. 다시 채점할지 가르는 지문에서도 배점을 뺍니다.

AI가 체크리스트 항목마다 점수를 매기고, 가중치를 곱한 합계를 저장해 순위를 냈습니다. 그런데 출제자가 항목의 배점을 바꿀 수 있게 하자 문제가 생깁니다. 저장된 합계는 옛 배점으로 계산된 값이라, 배점을 바꾸면 전원을 다시 채점하거나 합계를 일괄 갱신해야 합니다. 재채점은 AI 호출 비용이 그대로 다시 듭니다.

원인은 입력(AI의 판단)과 파생값(배점을 곱한 합계)을 같이 저장한 데 있습니다. 배점은 AI가 매긴 0~5를 바꾸지 않습니다. 바뀌는 것은 곱하는 쪽뿐입니다.

해법은 항목별 원점수만 저장하고 나머지는 읽을 때 계산하는 것입니다. 등수는 반올림한 표시값이 아니라 정수 Σ(점수×배점)로 매겨, 표시 반올림이 동점을 만들지 않게 합니다.

def total(scores: dict[int, int], points: dict[int, int]) -> tuple[float, int, int]:
    raw = sum(scores.get(i, 0) * p for i, p in points.items())   # 등수용 정수
    return raw / 5, sum(points.values()), raw                   # (합, 만점, 정렬 키)

# 「37.4 / 45점」처럼 보이고, 등수는 raw 내림차순·같으면 같은 등수

다시 채점할지 가르는 지문도 함께 좁힙니다. 지문에 「AI가 매기는 항목의 id와 문구」만 넣고 배점·필수 여부처럼 AI 판단을 바꾸지 않는 값은 뺍니다. 그러면 배점을 고쳐도 지문이 같아 기존 기록을 그대로 씁니다. 옛 데이터는 예전 가중치를 배점으로 채워 넣으면 Σ(점수×가중치)가 그대로라 순위가 바뀌지 않고, 이것을 회귀 시험으로 고정합니다.

문의 →