Skip to content
isdnetworks
Go back

미리보기가 다른 행을 안 셌다

(수정됨)

지각 감점 3점을 반영해 달라는 요청이 와서 화면에서 재계산을 누르니 3점이 나왔다.

Table of contents

Open Table of contents

증상 — 제출 방식에 따라 갈린 점수

먼저 이상한 것이 하나 있었다.

직접 제출   1.5
자동 마감   3.0

직접 제출 과 자동 마감 사이에서 감점이 두 배로 달라졌다.

화면 관측으로는 이렇게 보였다.

직접 제출   지각 감점만                1.5
자동 마감   지각 감점 + 미제출 처리    1.5 + 1.5

이 해석은 추정이고 감점 산식을 코드로 확인하지는 않았다.

같은 값이 여러 경로로 나올 수 있으면 지금 보는 것이 어느 경로인지 모른다는 뜻이다. 그래서 눈으로 관측한 값과 내가 추정한 해석을 구분해 적어 뒀다.

검증 — 메모와 DB를 봤다

저장하기 전에 이 건의 메모를 봤다.

admin_memo: 재평가 건으로 가산점 승인 완료

admin_memo 에 가산점이 이미 있다고 적혀 있어서 그 점수를 확인해 봤다.

SELECT bonus_score FROM local_dlp_grade_revisions
 WHERE submission_id = ? AND type = 'bonus';
3

bonus_score 로 이미 3점이 승인돼 있었다.

그런데 재계산 화면에는 3 하나만 보이고 이미 승인된 bonus_score 는 그 화면 어디에도 안 나오고 있었다.

원인 — 별도 행의 가산점

bonus_score 가 사는 자리가 달랐다.

[재계산 대상]  이번 과제의 지각 감점
[가산점]       type = 'bonus' 행 — 집계에 안 잡힘

미리보기의 집계가 type = 'penalty' 이번 건에 한정돼 있었다.

미리보기라는 이름 때문에 최종 결과로 읽었던 것이 문제였다. 그 화면이 무엇을 더하고 무엇을 안 넣는지는 코드를 봐야 나왔다.

결과 — 이중 계상이 된다

그대로 저장했으면 이렇게 된다.

가산점      +3  (이미 승인)
감점        -3  (새로 얹음)
────────────────────
성적부 반영   0  ← 의도한 -3 이 아니다

화면에는 -3 인데 성적부에는 0 이 들어간다.

저장 시점에는 오류가 안 나므로 성적부가 나가고 나서야 드러난다. 되돌리려면 성적부 쪽까지 손대야 해서 저장 전에 확인하는 것이 훨씬 싸다.

조치 — 닫고 나서 재계산

닫지 않고 그대로 저장하는 것과 기존 것을 먼저 닫고 재계산하는 것 두 가지 길 중 뒤쪽을 골랐다. 이유는 앞쪽은 이중 계상이 성적부에 나간 뒤에야 드러나서다. 순서를 정했다.

① 기존 가산점 보류를 미승인으로 먼저 닫는다
   (성적은 손 안 대고 가산점만 0으로)
② 그다음 재계산
③ 미리보기가 단일 점수로 나오는지 확인
④ 저장

가산점 을 먼저 닫고 나서 재계산하니 미리보기 점수가 실제 반영값과 같아졌다.

다만 닫지 않고 그대로 저장하는 경로가 화면에서 막혀 있지는 않았다. 사람이 순서를 지켜야 하는 자리는 적어 두지 않으면 언젠가 어긋난다.

대응 — 저장 후 검증

저장하고 끝내지 않고 둘을 더 봤다.

SELECT COUNT(*) FROM local_dlp_grade_revisions
 WHERE submission_id = ? AND type IN ('penalty', 'bonus') AND deleted_at IS NULL;

submission_id 로 세어 같은 성격의 보정 중복이 0건인지 본다.

SELECT * FROM portal_sync_jobs WHERE course_id = ? AND created_at > '<저장 시각>';

자동 마감으로 두면 이미 마감된 건에 재통지가 나갈 수 있어 portal_sync_jobs 도 0건인지 본다.

저장이 성공했다는 것과 의도한 상태가 됐다는 것은 다른 말이다. 같은 대상에 점수가 붙는 행이 여럿이면 화면 하나가 그 전부를 보여 주지 못한다.

정리


Share this post on:

Previous Post
같은 기능인데 메뉴가 둘이고 로그인이 달랐다
Next Post
실패한 마감이 삭제 밑에 묻혔다