채점쏙
블로그 목록

학원 시간표는 4 차원 — 시간 × 방 × 강사 × 정원 충돌 자동 검출

중·대형 학원에서 시간표 짜다 보면 “이 시간에 이 반이 가능한가”를 머리로 계산하다가 한 번씩 사고가 납니다. 같은 방에 두 반이 잡혔거나, 한 강사가 두 군데 동시에 가있거나, 정원이 20명인 반에 22명이 등록돼 있거나. 학원 규모가 커질수록 시간표는 평면(2D)이 아니라 4 차원으로 다뤄야 한다는 게 베타 인터뷰에서 반복 확인된 패턴입니다.

이 글은 채점쏙의 시간표 충돌 자동 검출이 어떤 4 차원을 보는지, 어떤 충돌을 어떻게 풀어내는지, 학원이 도입하면서 운영 reality 가 어떻게 바뀌는지를 정리한 글입니다.

시간표는 왜 4 차원인가

학원 시간표 한 슬롯은 “언제, 어디서, 누가, 누구에게” 네 정보가 모두 정해져야 성립해요.

  • 시간 (when). 월 14:00~15:30 같은 슬롯.
  • 방 (where). 201호 / 304호 같은 물리 공간.
  • 강사 (who). 김 선생님 같은 담당.
  • 반 정원 (whom). 중2-A 반 20명 / 고1-B 반 24명.

이 네 차원 중 하나라도 다른 슬롯과 부딪히면 학원 운영이 막혀요. 평면 시간표(엑셀 표)에서 강사 중복은 잘 보이는데, 방 중복이나 정원 초과는 한 칸 한 칸 손으로 세기 전에는 안 보입니다. 학기 초에 학생 신규 등록이 몰리면 정원 초과는 며칠 뒤에 “선생님, 우리 아이 반이 22명이라던데요” 학부모 전화로 처음 알게 되는 경우가 많아요.

네 가지 충돌 — 종류별 패턴

1. 방 중복 — 가장 흔한 충돌

한 방에 같은 시각 두 반이 잡히는 경우. 학원이 교실 3개를 쓰는데 중2-A 반과 고1-B 반이 모두 화 16:00~17:30 에 201호로 잡혀있는 케이스. 평면 엑셀에선 행이 다르면 안 보입니다. 채점쏙은 이걸 즉시 빨간 카드로 검출합니다.

해결 후보가 3 가지: ① 한 반의 시간을 다른 슬롯으로 옮기기 ② 한 반의 방을 다른 방(202호 등)으로 옮기기 ③ 방 우선순위 설정으로 자동 배정. 우선순위는 /rooms 에서 학원이 미리 정해두면, 충돌 시 시스템이 “201호는 중2-A 반에 우선 — 고1-B 반은 자동으로 202호” 같이 추천해줍니다.

2. 강사 중복 — 이중 배정

한 강사가 같은 시각에 두 반을 담당하는 경우. 보통 학원이 강사 한 명에게 일을 몰아주다 보면 발생합니다. 평면 엑셀에선 강사 칼럼이 있으면 보이지만, 사이 이동 시간을 안 보면 또 놓쳐요.

예를 들어 김 선생님이 14:00~15:30 에 201호 중2-A 반, 15:30~17:00 에 304호 고1-A 반. 같은 시각은 아니라 “충돌 아니다” 보이는데, 15:30 정각에 한 반 끝내고 다른 반 시작은 강사가 사이 이동을 못 해요. 채점쏙은 강사 중복을 “시각 겹침” 만으로 보지 않고 “사이 이동 시간 가드 (default 15분)” 까지 같이 봅니다. 이 케이스도 충돌로 잡혀요.

3. 정원 초과 — 학기 초의 함정

반 정원 (classrooms.capacity) 보다 등록 학생이 많은 경우. 학기 초에 학생 신규 등록이 몰리면 학원장이 “일단 받아두자” 하다가 24명 정원 반에 27명이 들어가는 일이 생겨요. 평면 시간표에선 학생 수가 안 보이니까 학기 시작 전 학부모 통화로 처음 발견됩니다.

채점쏙은 학생 한 명 등록할 때마다 반 정원 체크를 자동으로 합니다. 정원 24명 반에 25번째 학생을 등록하면 “정원 초과” 경고 + 분반 후보 추천. 분반은 같은 시간대 다른 방의 같은 과목 반으로 자동 매칭해줍니다.

4. 사이 이동 시간 부족

학원이 여러 건물에 분산되어 있거나, 같은 건물 안에서도 1층과 4층 교실을 오가야 하면 강사 이동 시간이 필요합니다. 채점쏙의 default 가드는 15분인데, 학원이 layout 별로 조정 가능 (5분 / 30분). 이 가드가 학원 운영에서 의외로 큰데, 강사 번아웃의 30%가 “사이 이동 시간 부족” 에서 나온다는 인터뷰가 있었어요.

화면에선 어떻게 보이는가

/schedule-conflicts 페이지에서 모든 검출된 충돌이 카드 list 로 내려옵니다. 카드 한 장에 충돌 종류 / 원인 / 해결 후보 / 영향 받는 반·학생 수가 다 들어 있어요. 학원장이 카드 한 장씩 클릭해서 “해결 처리” 누르면 audit log 에 기록되고 다음 cron 검출에서 제외됩니다.

충돌이 0 인 학원은 “시간표가 깔끔합니다” 안내가 떠요. 새 시간 슬롯 추가 시 (반 생성·시간표 편집·학생 신규 등록) 자동 재검출이라 학원장이 “지금 충돌 있나” 매번 손으로 확인할 필요 없습니다.

방 자원을 등록 안 한 학원도 동작하는가

/rooms 가 빈 학원도 강사 중복 + 정원 초과 검출은 동작합니다. 교실 1~2개로 운영하는 작은 학원은 방 자원을 안 등록해도 무방하고, 교실 3개 이상이면 등록하는 게 충돌 검출 정확도를 크게 올려요. 방 등록은 학원 첫 셋업 시 5분 안에 끝납니다 (방 이름 + 정원 + 우선순위만 입력).

학원에서 일어난 변화

베타 인터뷰에서 자주 나온 변화:

  • 학기 초 정원 초과 사고 감소. 24명 반에 27명이 등록되어 학부모 통화로 처음 알게 되는 케이스가 0 으로 떨어졌다는 학원이 다수.
  • 강사 번아웃 신호 조기 발견. 사이 이동 시간 가드를 통해 “이 강사는 화·목 시간표가 너무 빡빡하다” 가 가시화. 학기 중간에 시간표 조정이 가능해졌어요.
  • 새 반 추가 시 자신감. 시간표 충돌이 자동으로 잡히니까 “이 시간에 반 하나 더 만들어도 되나” 학원장이 망설이는 시간이 줄었습니다.

운영 reality — voice 02 G 무한 보강 가드

학원 시간표 충돌 검출이 voice 02 G “무한 보강” 가드와 직접 연결됩니다. 결석 학생을 보강 잡다 보면 강사 시간표가 무한히 늘어나는 패턴이 있는데, 충돌 검출이 그 신호를 미리 잡아줘요. 보강 잡기 전에 “이 강사는 이번 주 이미 25 시간이라 한 시간 더는 위험” 경고가 뜨면 학원장이 다른 강사로 분산시키거나 학생에게 다른 시간을 제안하게 됩니다.

정리

시간표를 평면(2D)으로 다루면 정원 초과·방 중복·사이 이동 부족 같은 숨은 충돌이 누적되다가 학기 중간에 터집니다. 4D 로 보면 신규 슬롯 추가 시점에 미리 잡혀요. 채점쏙의 충돌 검출은 학원 첫 셋업 후 시간표가 한 번 잡히면 그 다음부턴 거의 무인 운영입니다.

관련 글