어디가(adiga.kr) 환산점수 자동 수집

한국대학교육협의회 대입정보포털 어디가의 [대학별 점수산출] 서비스를 우리 시스템에서 자동으로 호출하는 패턴. 박지민 입시 도구 (D:\work\jimin\files\adiga_score_fetcher.py)에서 검증 완료 (2026-05-24).

어디가 점수산출 서비스 개요

  • 어디가 자체 기능: 학생부+수능 성적을 대학별 점수산출식으로 자동 계산
  • 2026학년도 수시: 218개교 대상 / 212개교 점수산출 제공 (2025-07-23 오픈)
  • 메뉴: [대학성적분석] (/sco/agu/univScoScaAnlsView.do?menuId=PCSCOAGU2000)
  • 학생부 종합전형은 점수산출 X (정성평가라 산출 공식 없음 — 어디가 공지 명시)

3-Endpoint 흐름

순서EndpointMethod응답역할
1/sco/agu/univScoScaUnivGroupAjax.doPOST x-www-form-urlencodedHTML fragment 88KB (217개 학교 input + data-unvnm/value=unvCd)점수산출 제공 학교 리스트
2/sco/agu/admssScaUnivDetailLstAjax.doPOST x-www-form-urlencodedHTML fragment ~22KB (15건/페이지 페이지네이션. 각 checkbox에 5개 식별자)학교당 모든 학과·전형 + 식별자
3/sco/agu/univScoScaAnalsLstAjax.doPOST multipart/form-dataHTML fragment (학과별 환산점수 블록, 15개 max batch)batch 환산점수

5개 식별자 (학과·전형 1건당)

3번 endpoint 호출 시 학과·전형 1건당 5개 식별자 필수:

식별자예시출처 (2번 endpoint 응답 checkbox 속성)
unvCd0000142 (순천향대 본교)data-unvcd
ruCd0009244 (학과)data-rucd
comScsbjtCd0022354 (공통 학과)data-comscsbjtcd
slcnGroupCd001 (선발 그룹 — 수시/정시/추가 등)data-slcngroupcd
lclsfAftCdB 또는 D (대분류)data-lclsfaftcd

추가 favoriteCnt=0. checkbox의 value20270000142200010022507108733B 형식 (학년도+unvCd+…+lclsfAftCd 통합 ID, selArr 용).

인증

종류위치메모
JSESSIONID쿠키 (eao4a1r5kVj...amV1c19kb21haW4vYWRpZ2Ey)본인 어디가 로그인 세션. 30분~2시간 유효
X-CSRF-TOKENRequest 헤더3de83902-289b-46a4-a55c-5954dba26478 형식
_csrfform payloadX-CSRF-TOKEN과 동일 값
userIdform payload (userId=10-10287840 형식)학생 어디가 계정 ID. 환산점수 계산에 본인 성적 매핑용
WAF 쿠키 (WMONID, 1:1c6_1, 1:1c3_2)쿠키WAF가 자동 발급, 세션 유지에 필요

응답 파싱 (3번 endpoint)

블록 단위 구조 (학과·전형 1건당):

{학교명}[본교]
{학과명}
학생부위주(교과) > {전형명}
산출내역 | 즐겨찾기
학생부 | 100.0 | 전학년 | 100 | 일괄합산
2026학년도 전년도 입시결과는 | 추후 제공 예정
{학생 환산점수}        ← 예: 953.199
({만점})                ← 예: (1000)
{환산등급}              ← 예: 3.3
7월 제공예정

파싱 룰:

  • (만점) 패턴이 들어있는 line 찾기
  • 직전 line = 학생 환산점수
  • 다음 line = 환산등급 (1.0~9.0 범위 검증)
  • 학생부 N.N 전학년 N 등 = 공식 요약 (학생부 반영비율·학년·합산방식)
  • 추후 제공 또는 7월 키워드 = 학과 70%컷 미공개 (7월 이후 어디가 제공 예정)
  • 종합전형은 환산점수 자체가 0.0 또는 비어있음 → None 처리

모듈 사용 (Python)

from adiga_score_fetcher import parse_curl, AdigaScoreFetcher
 
# 1) 사용자 cURL에서 cookies + csrf + userId 자동 추출
creds = parse_curl(USER_CURL_TEXT)
 
# 2) Fetcher 인스턴스
fetcher = AdigaScoreFetcher(**creds)
 
# 3) 학교당 모든 학과·전형 + 식별자 수집 (페이지네이션 자동)
specs = fetcher.fetch_dept_list("0002660", "인천대학교[본교]")
# → List[DeptSpec] (298건)
 
# 4) 우리 학과 ruCd로 매칭
matching = [s for s in specs if s.ru_cd == "0174688"]
# → 분자의생명전공 5개 전형 (학생부교과 3 + 학생부종합 2)
 
# 5) batch 환산점수 호출 (15개 max chunk)
results = fetcher.fetch_scores(matching)
# → List[ScoreResult] (student_score, student_max, student_rank, ...)

검증 결과 (2026-05-24, 인천대 분자의생명)

전형학생 환산점수만점환산등급
학생부교과(교과성적우수자)335.153503.66
학생부교과(지역균형)335.153503.66
학생부교과(사회통합)335.153503.66
학생부종합(자기추천)--- (점수산출 X)
학생부종합(기회균형)--- (점수산출 X)

학생 내신 평균 3.54 → 어디가 공식(전학년 100% 일괄합산) 적용 환산등급 3.66.

한국 정부 사이트 자동화 일반 패턴

이 사례에서 추출한 한국 정부/공공 사이트 자동화 일반 룰:

항목어디가 사례일반화
robots.txt/robots.txt 302→/500.html (파일 없음)RFC상 “제약 없음” 해석. 단 ToS 별도 확인
WAFWMONID, 1:1c6_1 같은 비표준 쿠키 자동 발급한국 공공기관 펜타시큐리티·모니터랩 등 WAF. 쿠키 그대로 재사용
CSRFform _csrf + header X-CSRF-TOKEN 둘 다페이지 진입 시 토큰 발급. 토큰은 세션 단위
인증 자동화자동 로그인 비현실 (SMS·캡차)사용자 본인 브라우저에서 1회 로그인 → 쿠키 export (Copy as cURL) → 우리 시스템에서 재사용
식별 UA식별 UA (JiminAdmissionResearch/1.0 (+contact: ...)) 거부 안 됨다만 본인 브라우저 UA 그대로 쓰는 게 더 안전
ToS자동수집 금지 조항 명시적으로 없음 (사용자 검토 결과)본인 계정 본인 데이터 조회는 일반 허용 범위

실패 케이스 (불가)

  • 종합전형 환산점수 — 어디가도 산출 X (정성평가). 박지민 라인업 9/11이 종합이라 환산점수 시스템 효용은 교과·논술 2건만
  • 학과 70%컷 — 2026학년도 수시 시점에 “추후 제공 예정” (7월 이후 제공)
  • 자동 로그인 — SMS 본인인증·캡차로 비현실. 사용자 cURL 1회 캡처 필수

관련 메모

  • 박지민 입시 컨설팅: D:\claude\brain\Memory\jimin-admission-2026.md
  • 박지민 도구 세션 노트: D:\claude\brain\Sessions\2026-05-23-jimin-tool-build.md
  • 박지민 vault MOC: 03 Personal/Temp/박지민-입시-2026/_index.md
  • 다음 세션 진입점: D:\work\jimin\NEXT_SESSION.md
  • 모듈 코드: D:\work\jimin\files\adiga_score_fetcher.py

라이센스·윤리

  • 본인 계정 본인 데이터 조회는 일반 ToS 허용. 다중 계정 / 타인 데이터 수집 시 별도 검토 필요
  • Rate limit: 호출 간 1~2초 sleep (어디가 WAF 보호)
  • 식별 UA + 연락처 권장
  • 자동화 코드 git 공개 시 cookies·CSRF·userId 등 인증 정보 제거 (.adiga_creds.json .gitignore)

2026-05-24 갱신 — puppeteer로 cURL 흐름 전면 대체

새 endpoint: 학기별 학생부 상세

EndpointMethod응답역할
/sco/sca/schScoAnlsForm.doPOST multipart/form-data (type=11~32)HTML fragment 40~45KB학기별(1-1~3-2) 학생부 입력 폼 + 데이터
  • fnAnlsForm(tp) JS 함수에서 추출 (schoolScoreMngeView.do?menuId=PCMPGSGA1001 페이지)
  • type 값: 11=1-1, 12=1-2, …, 32=3-2
  • 응답 fragment에 과목별 단위수·원점수·표준편차·석차등급 다 들어있음 (메인 페이지 5교과 표보다 풍부)
  • 메인 페이지 자체에 학기별 표 (학기×5교과+평균) 직접 박혀있음 — <table> rowspan 구조 파싱

puppeteer 자동화 흐름 (cURL 수동 캡처 대체)

기존 cURL 흐름 문제 — 매 작업마다 cURL 캡처 부담 (JSESSIONID 30분~2시간).

puppeteer MCP로 대체:

mcp__puppeteer__puppeteer_navigate(
    url="https://www.adiga.kr/sco/agu/univScoScaAnlsView.do?menuId=PCSCOAGU2000&firstYn=N",
    launchOptions={
        "headless": False,
        "executablePath": "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
        "userDataDir": "D:\\work\\jimin\\files\\.puppeteer_profile",
        "args": ["--start-maximized"],
        "defaultViewport": None,
    },
)
  • 헤드풀 + 시스템 크롬 (puppeteer 자체 chrome 미설치 회피)
  • userDataDir 보관 → 첫 로그인 1회 + “로그인 유지” 옵션 시 며칠~몇 주 자동
  • csrf + userId 자동 추출: document.querySelector('input[name="_csrf"]').value / input[name="userId"]
  • 단일 evaluate에서 11학교 fetch (dept_list 페이지네이션 + ru_cd 매칭 + batch score 한 번에, 학교당 30~60초)

학생부 자동 추출 (선택과목 평균)

schoolScoreMngeView 페이지 첫 <table>:

구분국어수학영어사회과학평균
1학년 1학기354644.32
2학기443634.0
평균3.54.53.563.674.17
  • 첫 셀 학년 (rowspan), 다음 셀 학기, 그 뒤 5교과 등급 + 학기 평균
  • “보기” 버튼 학기 = 입력 완료, “입력” 버튼 학기 = 미입력 (자동 판별)
  • 학교 종합 평균 ≠ 5교과 단순 평균. 학생이 입시 반영 과목만 평균 (자연계 학생은 사회 제외 등). 값=0인 셀(미수강)은 평균에서 제외

박지민 (자연계) 사례

  • 어디가 5교과 단순 평균 (사회 포함): 3.79
  • 사회 제외 (국·수·영·과): 3.56 ≈ 진로상담 자료 평균 3.54 (오차 0.02)
  • 학교 NEIS 기록부가 최종 답이지만 puppeteer 자동 추출로 0.02 오차 수준 추정 가능

학과별 환산결과 (박지민 라인업 11학과, 2026-05-24)

지망학과best 전형환산등급
1인천대 분자의생명학생부교과3.66
2가천대 자유전공종합·점수산출 X-
3가천대 생명과학학생부교과(지역균형)3.49
4가톨릭대 생명공학논술2.65
5가톨릭관동대 컴퓨터교육학생부교과2.70
5경기대 바이오융합학생부교과3.74
6강원대 생명과학학생부교과(농어촌)3.74
안정건국대 글로컬점수산출 X-
안정단국대 식량생명점수산출 X-
안정상명대 화학에너지논술3.74
안정순천향대 의생명융합학생부교과3.30
안정충북대 미생물학생부교과3.72

종합 위주 9/11 라인업 중 환산점수 산출 가능 9개 (논술 2 + 학생부교과 7). 가톨릭관동대 컴퓨터교육·가톨릭대 생명공학 논술이 환산등급 가장 좋음.