학사 업무 기간
수강신청, 성적 조회처럼 업무가 어느 기간에 허용되는지를 본인 학사정보시스템(SIS)의 「학사일정조회」 화면과 같은 방식으로 가져옵니다. 로그인이 필요합니다.
이 자료는 학교 공개 학사일정(학사일정)과 다른 자료입니다. 공개 학사일정은 학교 행사 일정이고, 이것은 로그인한 본인의 SIS가 업무별로 주는 허용 기간입니다.
요청 파라미터
섹션 제목: “요청 파라미터”| 파라미터 | 타입 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
student_id |
string | 예 | 학번. 비어 있으면 INVALID_INPUT |
|
password |
string | 예 | 포털 비밀번호. 비어 있으면 INVALID_INPUT |
|
year |
4자리 숫자 또는 문자열 | 예 | 조회 연도. 형식이 틀리면 요청 없이 INVALID_INPUT |
|
month |
1~12 또는 빈 값 | 아니오 | 빈 값 (그 해 전체) | 조회 월. 형식이 틀리면 요청 없이 INVALID_INPUT |
언어별 메서드와 연도·월 표기입니다.
| 언어 | 메서드 | 연도 / 월 |
|---|---|---|
| Java | fetchSisBusinessPeriods(id, pw, year, month) |
문자열 (월은 ""이면 연간 전체) |
| Python | fetch_sis_business_periods(id, pw, year, month="") |
숫자 또는 문자열 |
| Node.js | fetchSisBusinessPeriods(id, pw, { year, month }) |
숫자 또는 문자열, month 생략 가능 |
응답 데이터 구조
섹션 제목: “응답 데이터 구조”항목 하나가 목록의 한 행입니다. 예시는 Python의 snake_case 이름이고 Java와 Node.js는 camelCase입니다.
[ { "business_name": "업무 이름", "schedule_name": "일정 이름", "period": "yyyy-MM-dd ∼ yyyy-MM-dd", "start_date": "yyyyMMdd", "end_date": "yyyyMMdd", "extra": {} }]값은 학교 원문이고 없으면 빈 문자열입니다. 행 하나가 이상해도 목록 전체가 실패하지 않고, 빈 목록도 정상 응답입니다.
| 필드 (Python) | 학교 키 | 비고 |
|---|---|---|
period |
PERIOD |
텍스트. yyyy-MM-dd ∼ yyyy-MM-dd 형식 |
startDate (start_date), endDate (end_date) |
START_DT, TO_DT |
yyyyMMdd 원문. 기간이 열려 있으면 끝이 29991231 |
scheduleName |
SCHEDULE |
일정 이름 |
courseGroupName |
CORS_SCHE_GRP_CD_NM |
|
target |
TARGET_AUTH |
대상 |
businessName |
SYS_NM |
업무 이름 |
yearSemester |
YEAR_SMT |
|
timeText |
TMS |
|
categoryCode |
ORGN_CLSF_CD |
|
sortOrder |
PRT_ORD |
문자열 |
extra |
나머지 스칼라 키 | SIS extra와 같은 제외 패턴 (원문·extra 옵션) |
실패했을 때
섹션 제목: “실패했을 때”어느 단계든 실패하면 재시도 없이 예외입니다.
| 상황 | 코드 |
|---|---|
| 연도·월 형식 오류, 빈 입력 | INVALID_INPUT |
| 응답이 200이 아니거나 비어 있음, 소속·사용자 구분·메뉴 코드가 비어 있음 | DATA_FETCH_FAILED |
| 401 | AUTHENTICATION_FAILED |
| 학교가 로그아웃 오류를 돌려줌 | SESSION_ERROR |
| 그 밖의 학교 오류 | DATA_FETCH_FAILED |
| 기간 정보나 목록 구조가 예상과 다름 | PARSE_ERROR |
전체 코드는 에러 코드에 있습니다.
안에서 일어나는 일
섹션 제목: “안에서 일어나는 일”학교는 형태가 틀린 요청에 세션을 끊습니다. 그래서 라이브러리는 브라우저와 같은 순서로만 요청합니다.
- 포털 로그인(SIS용 반환 주소)과 SSO, SIS 사용자 정보 조회
- 메뉴 목록 요청: 서버 세션에 메뉴 권한을 올림
- 화면 열기 요청
- 기간 목록 요청: 본인의 소속 분류, 사용자 구분 코드와 연도, 월을 담음
모든 요청이 한 세션, 로그인 한 번입니다. 어느 단계든 실패하면 재시도 없이 중단합니다. 요청 순서와 값의 상세는 spec/PORTAL_FLOW.md의 2d에 있습니다.
학교가 화면을 바꾸면 값이나 구조가 달라질 수 있습니다.
예시 코드
섹션 제목: “예시 코드”// 한 달 (월을 "" 로 두면 그 해 전체)List<SisBusinessPeriod> periods = sejongAuthEngine.fetchSisBusinessPeriods(studentId, password, "2026", "10");for (SisBusinessPeriod period : periods) { System.out.println(period.businessName() + " " + period.scheduleName() + " " + period.period());}from sejongpeia import fetch_sis_business_periods
# 한 달 (month 를 비우면 그 해 전체)periods = fetch_sis_business_periods(student_id, password, 2026, 10)for period in periods: print(period.business_name, period.schedule_name, period.period)import { fetchSisBusinessPeriods } from 'pro-sejongpeia';
// 한 달 (month 를 생략하면 그 해 전체)const periods = await fetchSisBusinessPeriods(studentId, password, { year: 2026, month: 10 });for (const period of periods) console.log(period.businessName, period.scheduleName, period.period);