콘텐츠로 이동

개설강좌

학기별 개설강좌를 학과 코드, 과목명, 교수명으로 검색합니다. 로그인이 필요 없고, 세 조건이 모두 선택이라 모두 비우면 그 학기 전체를 받습니다. 학과와 학기 코드는 학과·학기 코드로 확인하세요. 공통 규칙은 공통 규칙입니다.

Python은 snake_case, Node.js와 Java는 camelCase입니다 (예: department_code > departmentCode). Java는 선택 인자도 빈 문자열("")로 직접 넘깁니다.

파라미터 타입 필수 기본값 설명
category_code 문자열 필수 - 소속 분류 코드 (학부 20, 일반대학원 30 등). 값은 코드표에서 받아 넘깁니다
year 문자열 필수 - 연도
semester_code 문자열 필수 - 학기 코드 (10, 11, 20, 21)
department_code 문자열 선택 "" 학과 코드. 비우면 학과 제한 없음
course_name 문자열 선택 "" 과목명 검색어 (부분 일치). 비우면 제한 없음
instructor_name 문자열 선택 "" 교수명 검색어. 비우면 제한 없음
  • 세 조건은 서로 독립이며 원하는 것만 조합합니다. 셋 모두 비우면 그 학기 전체입니다.
  • 반환은 Lecture 목록입니다.

학교 요청

  • POST https://sjpt.sejong.ac.kr/sch/sch/ext/SueOpenTimeQ/doList.do, 본문 {"dm_search": {...}}, 응답 데이터셋 dl_main.
  • 학교는 필터 키가 하나라도 빠지면 _SUBMIT_ERROR_로 답하므로, 라이브러리가 사용하지 않는 키도 빈 값으로 모두 채워 보냅니다.
  • 공백 한 칸도 검색어로 받으므로 값은 앞뒤 공백을 지운 뒤 보냅니다.

예시 JSON입니다. 필드 이름은 Python snake_case이고 Node.js와 Java는 camelCase입니다. 학교 데이터는 바뀌므로 값은 예시입니다.

[
{
"course_number": "011839",
"section": "001",
"name": "전공탐색",
"course_type_code": "1E",
"course_type_name": "공필",
"credits": "1.0",
"hours": "1.0 / 0 / 1",
"total_hours": "1",
"schedule": "목19:00-20:00",
"room": "센B104",
"instructor": "홍길동",
"grade_level": "1",
"department_code": "3517",
"department_name": "AI로봇학과",
"year": "2026",
"semester_code": "20",
"extra": { "PLAN_REG_YN": "Y", "YEAR_SMT_NM": "2026/2학기" }
}
]

모든 필드는 문자열이고 없으면 빈 문자열입니다. extra는 위 표에 쓰지 않은 학교 필드를 담은 문자열 맵입니다.

필드 학교 키 설명
course_number CURI_NO 과목 번호
section CLASS 분반
name CURI_NM 과목명
course_type_code, course_type_name CURI_TYPE_CD, CURI_TYPE_CD_NM 이수 구분 코드와 이름
domain_code, domain_name SLT_DOMAIN_CD, SLT_DOMAIN_CD_NM 선택 영역 코드와 이름
credits CDT 학점 (예: 3.0)
hours TM_NUM 시간 (학교 표기 그대로, 예: 3.0 / 3 / 0)
total_hours TOT_TM_NUM 총 시간
schedule LESN_TIME 강의 시간 (예: 화13:00-15:00)
room LESN_ROOM 강의실
instructor LESN_EMP 교수 이름
grade_level STUDENT_YEAR 학년
language_code, language_name CURI_LANG_CD, CURI_LANG_NM 강의 언어
department_code, department_name DEPT_CD, SCH_DEPT_ALIAS 개설 학과 코드와 이름
managing_department MANAGE_DEPT_NM 관리 학과
remark REMARK 비고
year, semester_code YEAR, SMT_CD 연도, 학기 코드
extra 그 밖의 필드 학교 원문 필드
  • 조건 조합마다 하루(기본 86400초) 캐시하고, 호출당 학교 요청은 한 번입니다.
  • 학교 쪽 실패(연결, 시간 초과, 비정상 응답, _SUBMIT_ERROR_)는 마지막 캐시 값 또는 빈 목록입니다. 캐시가 없으면 failure_cache_seconds(기본 60초) 동안 요청 없이 빈 목록을 돌려줍니다.
  • lectures는 필터 값 때문에 예외를 던지지 않습니다.
  • 빈 목록은 「조건에 맞는 강의가 없음」과 「학교 쪽 문제」를 구분하지 못합니다.
  • 비공식 엔드포인트입니다. 필터 키 요구 사항 같은 동작은 학교가 바꾸면 달라집니다.
  • 언어 필터는 LANG_CHK="KOR"로 고정해서 보냅니다.
  • 조건을 모두 비운 응답은 수 MB로 크고 캐시 항목 하나가 cache_ttl_seconds 동안 메모리에 남습니다. 전체가 필요하지 않다면 학과 단위로 조회하세요.
  • 강의 계획서(수업계획서)는 제공하지 않습니다. 양식에 교수 이름과 연락처 줄이 있어 기본 제공 대상에서 뺐습니다. 교과목 개요는 교육과정의 overview로 받을 수 있습니다.
  • 계약 원본: spec/PUBLIC_DATA.md
// 학과 하나의 강의 (학기 코드 20 = 2학기, 과목명·교수명은 비움)
List<Department> departments = publicData.departments("20", "2026", "20");
List<Lecture> lectures = publicData.lectures("20", "2026", "20", departments.get(0).getCode(), "", "");
// 과목명으로만 검색
List<Lecture> byName = publicData.lectures("20", "2026", "20", "", "알고리즘", "");

강의의 course_number와 department_code로 그 학과 교육과정의 학년·학기·교과목 개요를 이어서 조회할 수 있습니다 (교육과정).