콘텐츠로 이동

학사 업무 기간

수강신청, 성적 조회처럼 업무가 어느 기간에 허용되는지를 본인 학사정보시스템(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

전체 코드는 에러 코드에 있습니다.

학교는 형태가 틀린 요청에 세션을 끊습니다. 그래서 라이브러리는 브라우저와 같은 순서로만 요청합니다.

  1. 포털 로그인(SIS용 반환 주소)과 SSO, SIS 사용자 정보 조회
  2. 메뉴 목록 요청: 서버 세션에 메뉴 권한을 올림
  3. 화면 열기 요청
  4. 기간 목록 요청: 본인의 소속 분류, 사용자 구분 코드와 연도, 월을 담음

모든 요청이 한 세션, 로그인 한 번입니다. 어느 단계든 실패하면 재시도 없이 중단합니다. 요청 순서와 값의 상세는 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());
}