"이 많은 과목 중에서 뭘 들어야 하지?" 😅
고교학점제가 본격적으로 시행되면서, 고등학생들은 이제 대학생처럼 스스로 시간표를 짜야 하는 시대가 왔어요!
192학점이라는, 대학생보다도 많은 학점 수를 보고 그 숫자에 압도당했는데 3년 동안 어떤 과목을 들어야 내 진로에 도움이 될까? 우리 학교에는 어떤 과목이 개설돼 있을까? 대학에서 권장하는 과목은 뭘까?하는 걱정이 앞설 거라고 생각해요.
실제로 고등학교에 진학하는 지인에게 물어봤을 때 새로운 고민거리가 생겼다는 식으로 화두를 시작하기도 했었어요. 선생님께 물어봐도 학생 수가 많아 일일이 상담하기 어렵고, 인터넷을 뒤져봐도 제대로된 정보들이 부족한 상황에서 생활기록부에는 내 강점과 약점이 다 기록돼 있는데, 정작 이걸 활용해서 과목을 추천해주는 시스템은 없던 점을 발견하게 됐어요.
"그래, 없으면 일단 만들어보자." 🔥 그렇게 시작된 프로젝트가 보고 계신 I'MF입니다.
고교학점제, 왜 어려울까요?
고교학점제는 2025년부터 전국 고등학교에 전면 시행됐어요. 학생이 진로와 적성에 따라 과목을 선택하고, 누적 학점이 기준에 도달하면 졸업하는 제도에요. 취지는 좋지만, 현실에서는 몇 가지 문제가 있죠.
[1] 정보의 비대칭성
- 2022 개정 교육과정에는 200개 이상의 과목이 존재해요
- 학교마다 개설 과목이 다르고, 이를 일일이 확인하기 어려워요
- 대학별로 권장하는 이수과목이 따로 있지만, 이 정보가 산재되어 있어요
[2] 개인화된 상담의 한계
- 교사 1명당 담당 학생 수가 많아 맞춤형 상담이 어려워요
- 생활기록부에는 학생의 강점, 수상경력, 동아리 활동 등이 기록돼 있지만, 이를 종합적으로 분석하여 과목을 추천하는 시스템이 없어요. 에브리타임의 학점 마법사 같은 기능이 아직 구현되어 있지 않아요.
[3] 복잡한 학점 규칙
- 공통 48학점 + 선택 144학점, 총 192학점을 들어야하는데, 학기당 25~34학점 범위 내에서 편성해야 해요
- 국어, 수학, 영어, 사회, 과학, 체육, 예술의 교과영역별 균형을 고려해야 해요
결국 학생들은 "일단 친구들이 듣는 걸로 신청하자"는 식의 선택을 하게 되고, 진로와 맞지 않는 과목을 듣거나 대학 진학 시 불리해지는 경우가 생겨요.
I'MF : https://iam-future.streamlit.app/
- PDF 생활기록부 자동 분석 스캔본 PDF든 텍스트 PDF든 상관없이, AI가 알아서 읽어내요. 학생 이름, 학교, 강점 과목, 약점 과목, 수상 경력, 동아리 활동, 진로 희망까지 자동으로 추출해줘요.
- 실제 학교별 개설 과목 조회 나이스 교육정보 API를 실제로 연동해서, 실제로 학생이 다니는 학교에 어떤 과목이 개설돼 있는지 확인해줘요. "추천받은 과목이 우리 학교엔 없네?"라는 문제를 원천 차단하도록 구성했어요.
- 대학별 권장 이수과목 반영 서울대, 연세대, 고려대, 성균관대, 경희대, 중앙대, 건국대, 동국대 등 주요 대학의 모집단위별 권장과목 데이터베이스를 구성했어요. 학생이 목표로 하는 대학과 전공을 선택하면, AI가 이 정보를 자동으로 참고하도록 구성했어요.
- 192학점 전체 조합 추천 1학년부터 3학년까지, 학기별로 어떤 과목을 들어야 할지 전체 로드맵을 제시해요. 공통과목 48학점 + 선택과목 144학점 규칙을 준수하면서, 학생의 강점과 진로에 맞는 과목을 배치하도록 구성했어요.
- 추천 근거 검증 Upstage LLM이 추천한 내용이 정말 학생 생활기록부에 근거한 건지 자동으로 검증해줘요. "수학 성적 우수", "정보올림피아드 수상" 같은 구체적인 근거를 제시하고, 부족한 부분이 있으면 개선 제안도 해줘요.
사용 방법
Step 1: 생활기록부 PDF 업로드
- 학교에서 발급받은 생활기록부 PDF를 업로드해요.
- Upstage의 Document OCR이 이미지로 구성된 혹은 텍스트로 구성된 PDF를 분석해요.
- 만약에 준비된 생활기록부가 없다면 샘플 데이터로 체험 버튼을 눌러서 진행할 수 있어요.
Step 2: 추출 정보 확인
- AI 분석시작 버튼을 누르면 직접 추출 정보를 확인해 볼 수 있어요.
- 이름, 학교, 강점, 약점, 수상경력을 Information Extract API가 깔끔하게 정리해줘요.
- 잘못 추출된 부분이 있으면 직접 수정할 수 있게 구성했어요.
Step 3: 학교 및 진로 설정
- NEIS API로 학교를 검색하고, 실제 개설 과목을 확인하도록 불러와지는 걸 볼 수 있어요.
- 목표 대학과 희망 전공을 드롭다운으로 선택해봐요.
- 그럼 기존의 자신의 생활기록부 기반 진로로 고교학점 설계를 도와줘요.
Step 4: AI 맞춤 학점 설계
- Solar Pro 3 LLM이 실시간으로 추론 과정을 보여주면서 과목 조합을 생성해줘요
- 고등학교 1학년부터 3학년까지 학기별 추천 과목과 그 이유를 확인할 수 있어요.
Step 5: 추천 검증
- AI 추천이 생활기록부에 얼마나 근거하는지 점수로 확인할 수 있어요.
- 부족한 부분에 대한 개선 제안을 받아볼 수 있어요.
Upstage Solar API 4종 세트
I'MF는 Upstage Solar API를 풀스택으로 활용해요. Document Parse, Information Extract, Solar Pro 3 LLM, Groundedness Check까지 네 가지 API를 단계별로 조합해서 사용하고 있어요.

[1] Document Parse API — PDF를 텍스트로
생활기록부는 대부분 PDF 형식이에요. 그것도 학교 행정실에서 출력한 스캔본인 경우가 많아요. 이런 문서를 읽으려면 광학 문자 인식 기술인 OCR이 필요한데, Upstage Document Parse API가 이걸 해결해줘요.
# agents/document_agent.py response = self.client.parse_document(file_path)
Upstage Document Parse API 특징은…
- 스캔본 PDF도 정확하게 인식
- 페이지별로 텍스트와 테이블을 분리해서 추출
- 생활기록부 섹션 자동 분류 (인적사항, 수상경력, 교과학습발달상황 등)
이 API 덕분에, 학생이 굳이 생활기록부 내용을 타이핑하지 않아도 돼요. PDF만 업로드하면 끝나요!
[2] Information Extract API — 비구조화된 텍스트를 구조화된 데이터로
Document Parse로 텍스트를 추출했다면, 이제 그 안에서 필요한 정보를 뽑아내야 해요. 학생 이름, 학교, 강점 과목, 약점 과목, 수상 경력, 동아리 활동, 진로 희망, 담임 선생님 의견 등. Information Extract API는 JSON 스키마를 입력으로 받아서, 텍스트에서 해당 형식에 맞는 데이터를 자동으로 추출해줘요.
# utils/schema.py - Pydantic으로 스키마 정의 class StudentProfile(BaseModel): student_name: str = Field(description="학생 이름") school_name: str = Field(description="학교명") school_type: str = Field(description="학교 유형 (일반고/특목고/자사고)") grade: int = Field(description="학년") strong_subjects: List[str] = Field(description="강점 과목") weak_subjects: List[str] = Field(description="약점 과목") awards: List[str] = Field(description="수상 경력") clubs: List[str] = Field(description="동아리 활동") career_aspiration: str = Field(description="진로 희망") teacher_comment: str = Field(description="담임 선생님 의견")
특징:
- Pydantic 스키마를 JSON Schema로 자동 변환
- 타입 안전성 보장 (배열, 문자열, 정수 등)
- 실시간 스트리밍으로 추출 과정 시각화
이렇게 추출된 데이터는 다음 단계에서 AI 추천의 기반이 돼요.
[3] Solar Pro 3 LLM (Reasoning Mode) — 맞춤형 과목 조합 생성
이제 본격적으로 과목을 추천할 차례에요. Solar Pro 3는 Upstage의 최신 대형 언어 모델(LLM)인데, Reasoning Mode를 지원한다. 즉, AI가 논리적으로 사고하는 과정을 실시간으로 보여줄 수 있어요.
# agents/recommend_agent.py messages = [ {"role": "system", "content": self.SYSTEM_PROMPT}, {"role": "user", "content": prompt} ] stream = self.client.chat_completion_stream( messages=messages, model="solar-pro", reasoning_mode=True # 추론 과정 노출 )
Solar Pro 3가 고려하는 것들:
- 대학 입학전형 권장과목 — RAG 데이터베이스에서 검색한 권장과목을 최우선 반영
- 학생의 강점과 약점 — 수학을 잘하면 미적분, 확률과 통계 추천
- 학교 개설 과목 — 추천했는데 학교에 없으면 의미 없으니까
- 학점 규칙 준수 — 총 192학점, 학기당 25~34학점, 교과영역별 균형
특징:
- 추론 과정이 실시간으로 스트리밍돼요 (학생이 AI가 어떻게 생각하는지 볼 수 있음)
- 학년별/학기별로 과목을 배치해요 (1학년 48학점 공통 + 2~3학년 144학점 선택)
- 추천 근거와 핵심 포인트를 함께 제공해요
실제로 써보면, AI가 "이 학생은 수학 성적이 우수하고 공학 분야 진로를 희망하니까, 2학년 1학기에 미적분을 배치하고..." 같은 식으로 논리적으로 사고하는 과정을 볼 수 있다. 신기했어요.
[4] Groundedness Check API — 추천 근거 검증
AI가 그럴듯하게 추천은 했는데, 혹시 근거 없이 지어낸 건 아닐까? 이걸 확인하는 게 Groundedness Check API에요.
# agents/verify_agent.py response = self.client.groundedness_check( context=student_profile_text, # 학생 생활기록부 answer=recommendation_text # AI 추천 내용 )
특징:
- 추천 내용과 생활기록부 간의 일치도 점수 산출해요 (0~1)
- 발견된 근거 목록 추출해요 (예: "수학 성적 우수", "정보올림피아드 수상")
- 개선 제안 생성해요 (추천에 부족한 부분 지적)
- 실시간 스트리밍으로 검증 과정 시각화 해줘요
이 과정을 통해, AI 추천이 얼마나 믿을 만한지 객관적으로 평가할 수 있어요.
학생도, 선생님도, 학교도 행복해진다
[1] 학생 입장: 진로에 맞는 최적의 과목 조합
- 3년간 192학점 전체 로드맵을 한눈에 볼 수 있어요
- 대학 입학전형에서 권장하는 과목을 놓치지 않아요
- 생활기록부 기반 맞춤 추천으로, 내 강점을 살리는 선택이 가능해졌어요
[2] 교사 입장: 개인화된 상담 부담 경감
- 학생별 맞춤 추천을 AI가 1차로 해주니, 교사는 최종 검토와 상담에 집중할 수 있어요
- 대학 권장과목 데이터베이스가 통합돼 있어서, 일일이 찾아볼 필요가 없어요
[3] 교육 전반: 데이터 기반 의사결정
- 학생들이 어떤 과목을 선호하는지 데이터가 쌓이면, 학교는 개설 과목을 조정할 수 있어요
- 고교학점제 정착에 필요한 인프라로 활용될 수 있어요
무엇보다, 학생이 "친구들 따라서"가 아니라 자기 진로에 맞춰서 과목을 선택할 수 있다는 게 가장 큰 의미를 가져요.
I’MF 어떻게 만들어졌나요?
[1] 프레임워크 & API
- Streamlit: Python 기반 웹 애플리케이션 프레임워크. 파일 업로드, 멀티스텝 폼, 세션 상태 관리 등이 간편해요.
- Upstage Solar API: Document Parse, Information Extract, Solar Pro 3 LLM, Groundedness Check 통합해서 활용했어요.
- NEIS Open API: 나이스 교육정보 개방 포털. 학교 기본정보 조회 및 시간표 API로 실제 개설 과목 데이터를 가져와요.
[2] 라이브러리
- Pydantic: 데이터 검증 및 직렬화. JSON 스키마 자동 생성으로 Information Extract API 호출 시 타입을 보장해요.
- OpenAI Python SDK: Upstage API를 호출하는데, Solar LLM이 OpenAI 호환 인터페이스를 제공해요.
- Python-dotenv: 환경 변수 관리. API 키 같은 민감 정보를
.env파일로 분리해요.
- Requests: HTTP 클라이언트. Document Parse 및 Groundedness Check REST API 호출해요.
[3] 디자인
- Google Fonts: Bricolage Grotesque (디스플레이), JetBrains Mono (코드), Noto Sans KR (한글)
- 커스텀 CSS: Brutalist-Editorial 디자인 시스템. 다크 테마, 그라디언트 애니메이션 등 1,485줄의 CSS를 작성했어요.
프로젝트 구조
Oh_my_school_credit/ ├── agents/ # AI 에이전트 모듈 │ ├── document_agent.py # PDF 파싱 │ ├── extract_agent.py # 정보 추출 │ ├── recommend_agent.py # 과목 추천 │ └── verify_agent.py # 검증 ├── data/ # 데이터베이스 │ ├── subjects_2022.json # 2022 개정 교육과정 과목 목록 │ ├── university_requirements_rag.json # 대학별 권장과목 │ └── universities_list.json # 대학 메타데이터 ├── utils/ # 유틸리티 │ ├── upstage_client.py # Upstage API 클라이언트 │ ├── neis_api.py # NEIS API 연동 │ ├── university_rag.py # 대학 권장과목 검색 │ └── schema.py # Pydantic 데이터 스키마 ├── static/ # 정적 리소스 │ └── style.css # 커스텀 CSS ├── app.py # 메인 애플리케이션 └── requirements.txt # 패키지 의존성
Upstage AI를 직접 활용해보고 싶다면?
[1] API부터 써보기
처음부터 복잡한 시스템을 만들 필요는 없다. Upstage API를 하나씩 써보는 것부터 시작하면 좋아요.
- Upstage Console에서 API 키를 발급받아요.
- Document Parse API로 샘플 PDF를 읽어봐요.
- Information Extract API로 간단한 JSON 스키마를 정의하고 정보를 추출해봐요.
공식 문서(https://upstage.ai)에 예제 코드가 잘 나와 있어서, 따라하기 어렵지 않아요.
2. 작은 문제부터 해결하기
I'MF는 처음부터 192학점 전체를 추천하는 시스템으로 시작하지 않았어요. 처음엔 "생활기록부 PDF를 읽어서 학생 이름만 추출하는" 작은 기능부터 만들었어요. 그게 되니까 "강점 과목도 추출해볼까?", "그럼 과목 추천도 해볼까?" 식으로 점점 확장해나갔어요.
3.RAG(Retrieval-Augmented Generation) 활용하기
AI 추천 시스템을 만들 때, "AI가 모든 걸 알고 있겠지"라고 생각하면 안 돼요. AI는 대학별 권장 이수과목 같은 최신 정보를 몰라요. 그래서 우리는 RAG를 써야 해요.
RAG는 간단히 말하면, AI에게 "이 정보를 참고해서 답변해줘"라고 문서를 함께 제공하는 기술이다. I'MF에서는
university_requirements_rag.json 파일에 대학별 권장과목을 정리해두고, AI 프롬프트에 이 정보를 주입한다.# agents/recommend_agent.py university_info = self.univ_rag.search(university, major) prompt = f""" [대학 권장 이수과목] {university_info} [학생 프로필] {student_profile} 위 정보를 바탕으로 과목을 추천해주세요. """
이렇게 하면, AI가 없는 정보를 지어내는 환각 문제인 할루시네이션을 줄일 수 있어요.
I'MF는 아직 완벽하지 않아요. API 호출 속도가 느릴 때도 있고, 특정 형식의 생활기록부는 잘 못 읽을 때도 있어요. 대학 권장과목 데이터베이스도 8개 대학밖에 없어서, 더 많은 대학 정보를 추가해야 하기도 해요.
하지만 이 프로젝트를 하면서 느낀 건, 고교학점제라는 새로운 제도가 정착하려면, 학생들이 진로에 맞는 과목을 선택할 수 있도록 돕는 시스템이 필요하다는 걸 절실히 느꼈어요. 앞으로도 I'MF를 계속 개선해나갈 계획이에요. 더 많은 대학 데이터를 추가하고, API 속도를 최적화하고, 사용자 피드백을 반영해서 더 나은 서비스로 만들고 싶어요. 읽어주셔서 감사합니다. 😊
참고 링크
- GitHub 저장소: IM-F (프로젝트 코드)
- Upstage Console: https://console.upstage.ai (API 키 발급)
- NEIS Open API: https://open.neis.go.kr (나이스 교육정보 개방 포털)
- 2022 개정 교육과정: 교육부
