콘텐츠로 이동

학과·학기 코드

학교 학사정보시스템(SIS)의 강의시간표 화면이 쓰는 코드표(소속 분류, 학기, 학과, 이수 구분, 선택 영역)를 로그인 없이 받습니다. 코드와 이름은 직접 적어 두지 말고 이 메서드로 받아서 다른 메서드에 넘기세요. 학과 코드는 로그인한 학생의 SIS 결과(departmentCode)와 같은 체계입니다. 공통 규칙은 공통 규칙입니다.

메서드는 5개입니다: organization_categories(), terms(category_code), departments(category_code, year, semester_code), course_types(), selective_domains(). Node.js와 Java는 camelCase(organizationCategories(), courseTypes() 등)이고, departments는 Node.js에서 departments({ categoryCode, year, semesterCode })처럼 객체로 받습니다.

파라미터 타입 필수 기본값 설명
category_code 문자열 terms, departments에서 필수 - 소속 분류 코드. 하드코딩한 목록이 아니라 organization_categories()가 돌려준 code를 넘깁니다
year 문자열 departments에서 필수 - 연도. terms(category_code)가 돌려준 year를 넘깁니다
semester_code 문자열 departments에서 필수 - 학기 코드 (아래 표)

나머지 세 메서드(organization_categories, course_types, selective_domains)는 파라미터가 없습니다.

학기 코드 학기
10 1학기
11 하계 계절학기
20 2학기
21 동계 계절학기

학교 요청

  • POST https://sjpt.sejong.ac.kr/sch/sch/ext/SueOpenTimeQ/ 아래 엔드포인트: 소속 분류·이수 구분·선택 영역은 doOnload.do, 학기는 doYearsmtlist.do, 학과는 doLesndeptgroup.do. 본문은 {"dm_search": {...}} JSON입니다.
  • 학과 요청의 dm_search는 ORGN_CLSF_CD, YEAR, SMT_CD, YEAR_SMT(연도/학기 코드, 예: 연도/20)를 담습니다.
  • 소속 분류·이수 구분·선택 영역은 같은 doOnload.do 응답에서 나오지만 메서드마다 캐시 항목이 따로입니다.

모두 목록을 돌려줍니다 (OrganizationCategory, Term, Department, CourseType, SelectiveDomain). 예시 JSON의 필드 이름은 Python snake_case이고 Node.js와 Java는 camelCase입니다 (예: name_en > nameEn). 학교 데이터는 바뀌므로 값은 예시입니다.

// terms("20")
[{ "year": "2026", "semester_code": "20", "code": "2026/20", "name": "2026/2학기", "extra": {} }]
// organization_categories()
[{ "code": "20", "name": "학부", "name_en": "Undergraduate", "extra": { "PRT_ORD": "200" } }]
// departments("20", "2026", "20")
[{
"code": "3517", "level": "2",
"college_code": "3500", "college_name": "인공지능융합대학",
"unit_code": "3517", "unit_name": "AI로봇학과",
"major_code": "", "major_name": "",
"name_en": "College of AI Convergence Department of Artificial Intelligence and Robotics",
"extra": { "DEPT_NM": "인공지능융합대학 AI로봇학과【3517 학부】", "ORGN_CLSF_CD": "20" }
}]
// course_types()
[{ "code": "11", "name": "교필", "category_code": "20", "extra": { "CURI_TYPE_FULL_NM": "교양필수" } }]
// selective_domains()
[{ "code": "10", "name": "인성과도덕", "name_en": "Character & Morality", "extra": { "PRT_ORD": "1" } }]

값이 없으면 빈 문자열이고, 모든 모델에 extra(문자열 맵)가 있습니다.

필드 학교 키 설명
code COM_CD 분류 코드 (학부 20, 일반대학원 30 등). 다른 메서드의 category_code로 넘깁니다
name, name_en CD_NM, CD_NM_ENG 한국어, 영어 이름
extra 그 밖의 필드 예: 표시 순서 PRT_ORD

학교 응답에는 직원 이름이 들어 있는 CD_ALIAS1~CD_ALIAS3 필드가 있습니다. 라이브러리는 읽지도, extra에 담지도 않습니다.

필드 학교 키 설명
year YEAR 연도 (문자열)
semester_code SMT_CD 학기 코드 (위 표)
code YEAR_SMT_CD 연도/학기 코드 형태
name YEAR_SMT_NM 학교 표기 이름
필드 학교 키 설명
code DEPT_CD 학과 코드. 학생의 SIS 결과 departmentCode와 같은 체계
level DEPT_LEVEL_CD 2 학과 또는 학부, 3 학부 안의 전공
college_code, college_name DEPT_L_CD, DEPT_L_PRINT 단과대 코드와 깨끗한 이름
unit_code, unit_name DEPT_M_CD, DEPT_M_PRINT 학과 또는 학부 코드와 이름
major_code, major_name DEPT_S_CD, DEPT_S_PRINT 전공 코드와 이름 (level이 3일 때만)
name_en DEPT_NM_ENG 영어 이름 (일부 행은 비어 있음)
  • level이 2이면 code와 unit_code가 같고, 3이면 code와 major_code가 같으며 상위 학과는 unit_code입니다.
  • 이름은 *_PRINT 계열이 깨끗합니다. extra에 들어가는 DEPT_NM 같은 *_NM 필드에는 【3517 학부】 같은 꾸밈이 붙어 있고, 라이브러리는 이를 지우지 않습니다.
  • college_code가 항상 실제 단과대는 아닙니다. 융합전공이나 옛 묶음 코드가 올 수 있으니 코드는 연결 키로만 쓰세요.
  • 위 필드 밖의 학교 컬럼은 모두 extra에 담깁니다.

이수 구분 (CourseType)과 선택 영역 (SelectiveDomain)

섹션 제목: “이수 구분 (CourseType)과 선택 영역 (SelectiveDomain)”
모델 필드 학교 키
CourseType code, name, category_code CURI_TYPE_CD, CURI_TYPE_CD_NM, ORGN_CLSF_CD
SelectiveDomain code, name, name_en COM_CD, CD_NM, CD_NM_ENG

개설강좌의 course_type_code, domain_code와 같은 이름의 코드입니다 (개설강좌).

  • 메서드와 인자마다 하루(기본 86400초) 캐시합니다. 학과는 소속 분류, 연도, 학기 조합마다 따로 캐시되고, 호출당 학교 요청은 한 번입니다.
  • 연결 실패, 시간 초과, 데이터셋 키 없음, 학교의 _SUBMIT_ERROR_ 응답(HTTP 200이어도 오류 객체가 올 수 있음)은 예외 없이 마지막 캐시 값 또는 빈 목록입니다.
  • 빈 목록은 정상 응답일 수 있습니다. 예를 들어 해당 학기에 학과가 없는 소속 분류가 있습니다.
  • 이 다섯 메서드는 입력 오류로 예외를 던지지 않습니다.
  • 비공식·무버전 엔드포인트입니다. 학교가 예고 없이 바꾸거나 없앨 수 있습니다.
  • 학과 목록은 학기마다 달라집니다. 학과가 추가되고 이름이 바뀌므로 원하는 학기를 항상 같이 넘기세요.
  • 이 목록은 그 학기에 강의를 여는 학과(시간표 필터용)입니다. 센터, 처 같은 비학술 조직 등 모든 행정 조직은 아닙니다.
  • code가 학생 SIS의 학과 코드와 같다는 점은 학부 재학생 계정 기준입니다. 대학원생, 복수전공, 교직원 계정의 코드는 다를 수 있습니다.
  • 계약 원본: spec/REFERENCE_DATA.md
List<OrganizationCategory> categories = publicData.organizationCategories();
List<Term> terms = publicData.terms("20"); // 학부 학기 목록
List<Department> departments = publicData.departments("20", "2026", "20"); // 학부, 학기 코드 20 = 2학기

학과 목록으로 강의를 찾는 전체 예시는 학과·강의 검색을 보세요.