학과·학기 코드
학교 학사정보시스템(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(문자열 맵)가 있습니다.
소속 분류 (OrganizationCategory)
섹션 제목: “소속 분류 (OrganizationCategory)”| 필드 | 학교 키 | 설명 |
|---|---|---|
code |
COM_CD |
분류 코드 (학부 20, 일반대학원 30 등). 다른 메서드의 category_code로 넘깁니다 |
name, name_en |
CD_NM, CD_NM_ENG |
한국어, 영어 이름 |
extra |
그 밖의 필드 | 예: 표시 순서 PRT_ORD |
학교 응답에는 직원 이름이 들어 있는 CD_ALIAS1~CD_ALIAS3 필드가 있습니다. 라이브러리는 읽지도, extra에 담지도 않습니다.
학기 (Term)
섹션 제목: “학기 (Term)”| 필드 | 학교 키 | 설명 |
|---|---|---|
year |
YEAR |
연도 (문자열) |
semester_code |
SMT_CD |
학기 코드 (위 표) |
code |
YEAR_SMT_CD |
연도/학기 코드 형태 |
name |
YEAR_SMT_NM |
학교 표기 이름 |
학과 (Department)
섹션 제목: “학과 (Department)”| 필드 | 학교 키 | 설명 |
|---|---|---|
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학기categories = public_data.organization_categories()terms = public_data.terms("20") # 학부 학기 목록departments = public_data.departments("20", "2026", "20") # 학부, 학기 코드 20 = 2학기const categories = await publicData.organizationCategories();const terms = await publicData.terms('20'); // 학부 학기 목록const departments = await publicData.departments({ categoryCode: '20', year: '2026', semesterCode: '20' }); // 학부, 학기 코드 20 = 2학기학과 목록으로 강의를 찾는 전체 예시는 학과·강의 검색을 보세요.
