어디가(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 흐름
| 순서 | Endpoint | Method | 응답 | 역할 |
|---|---|---|---|---|
| 1 | /sco/agu/univScoScaUnivGroupAjax.do | POST x-www-form-urlencoded | HTML fragment 88KB (217개 학교 input + data-unvnm/value=unvCd) | 점수산출 제공 학교 리스트 |
| 2 | /sco/agu/admssScaUnivDetailLstAjax.do | POST x-www-form-urlencoded | HTML fragment ~22KB (15건/페이지 페이지네이션. 각 checkbox에 5개 식별자) | 학교당 모든 학과·전형 + 식별자 |
| 3 | /sco/agu/univScoScaAnalsLstAjax.do | POST multipart/form-data | HTML fragment (학과별 환산점수 블록, 15개 max batch) | batch 환산점수 |
5개 식별자 (학과·전형 1건당)
3번 endpoint 호출 시 학과·전형 1건당 5개 식별자 필수:
| 식별자 | 예시 | 출처 (2번 endpoint 응답 checkbox 속성) |
|---|---|---|
unvCd | 0000142 (순천향대 본교) | data-unvcd |
ruCd | 0009244 (학과) | data-rucd |
comScsbjtCd | 0022354 (공통 학과) | data-comscsbjtcd |
slcnGroupCd | 001 (선발 그룹 — 수시/정시/추가 등) | data-slcngroupcd |
lclsfAftCd | B 또는 D (대분류) | data-lclsfaftcd |
추가 favoriteCnt=0. checkbox의 value는 20270000142200010022507108733B 형식 (학년도+unvCd+…+lclsfAftCd 통합 ID, selArr 용).
인증
| 종류 | 위치 | 메모 |
|---|---|---|
| JSESSIONID | 쿠키 (eao4a1r5kVj...amV1c19kb21haW4vYWRpZ2Ey) | 본인 어디가 로그인 세션. 30분~2시간 유효 |
X-CSRF-TOKEN | Request 헤더 | 3de83902-289b-46a4-a55c-5954dba26478 형식 |
_csrf | form payload | X-CSRF-TOKEN과 동일 값 |
| userId | form 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.15 | 350 | 3.66 |
| 학생부교과(지역균형) | 335.15 | 350 | 3.66 |
| 학생부교과(사회통합) | 335.15 | 350 | 3.66 |
| 학생부종합(자기추천) | - | - | - (점수산출 X) |
| 학생부종합(기회균형) | - | - | - (점수산출 X) |
학생 내신 평균 3.54 → 어디가 공식(전학년 100% 일괄합산) 적용 환산등급 3.66.
한국 정부 사이트 자동화 일반 패턴
이 사례에서 추출한 한국 정부/공공 사이트 자동화 일반 룰:
| 항목 | 어디가 사례 | 일반화 |
|---|---|---|
| robots.txt | /robots.txt 302→/500.html (파일 없음) | RFC상 “제약 없음” 해석. 단 ToS 별도 확인 |
| WAF | WMONID, 1:1c6_1 같은 비표준 쿠키 자동 발급 | 한국 공공기관 펜타시큐리티·모니터랩 등 WAF. 쿠키 그대로 재사용 |
| CSRF | form _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: 학기별 학생부 상세
| Endpoint | Method | 응답 | 역할 |
|---|---|---|---|
/sco/sca/schScoAnlsForm.do | POST 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학기 | 3 | 5 | 4 | 6 | 4 | 4.32 |
| 2학기 | 4 | 4 | 3 | 6 | 3 | 4.0 |
| 평균 | 3.5 | 4.5 | 3.5 | 6 | 3.67 | 4.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). 가톨릭관동대 컴퓨터교육·가톨릭대 생명공학 논술이 환산등급 가장 좋음.
