안녕하세요. 학교 정보를 찾을 때 여러 사이트와 엑셀 파일을 오가야 하는 불편을 줄여 보고 싶어서 우리학교어때를 만들었습니다.
개발 전 과정은 바이브코딩 방식으로 진행했습니다. AI에게 코드를 한 번 생성해 달라고 한 뒤 끝낸 프로젝트는 아니고, 요구사항을 문서로 나누고 구현 결과를 실제 데이터와 대조하면서 오류를 다시 고치는 과정을 반복했습니다. 특히 학교 데이터는 화면이 그럴듯한 것보다 다른 학교에 잘못 연결되지 않는 것이 더 중요하다고 판단해 매핑과 검증에 가장 많은 시간을 썼습니다.
서비스에서는 학교명 검색, 같은 학교급끼리 비교, 지역별 공시 데이터 비교, 교과별 학업성취 자료와 학교폭력대책심의위원회 심의 결과 등을 확인할 수 있습니다. 원본에서 확인되는 수치와 자체 계산 지표는 구분해서 표시하고 있습니다.
데이터 구성
- 학교 기본정보
- 학급, 학생 수
- 교원 수
- 학생 이동 정보(전입, 전출)
- 안전교육 이수 시간
- 학교폭력대책심의위원회 결과
- 교과별 학업성취(평균 점수만 반영)
기술 구성
- Next.js App Router, TypeScript, Tailwind CSS
- Firebase Firestore와 Firebase Admin SDK
- Vercel 배포 및 GitHub Actions 자동화
- 브라우저 검색용 정적 search-index.json
- 학교 상세·랭킹·비교 페이지용 정적 JSON
- NEIS·학교알리미 데이터 수집 및 row_hash 기반 변경분 반영
- 학교알리미 XLS 파일의 표 구조를 판별하는 수동 공시 자료 가져오기 도구
만들면서 예상보다 어려웠던 부분
가장 까다로웠던 것은 학교명 매칭이었습니다. 이름이 같은 학교, 이름이 변경된 학교, 폐교된 학교, 학교급만 다른 학교가 섞여 있어 학교명만으로 연결하면 오매핑이 생길 수 있었습니다. 학교 코드와 교육청 정보, 지역, 학교급을 우선 사용하고 자동으로 확정할 수 없는 항목은 별도 검증 대상으로 남기는 방식으로 바꿨습니다.
학업성취와 학교폭력 공시 XLS도 파일마다 표의 열 위치가 완전히 같지 않았습니다. 특정 열 번호를 고정해서 읽으면 정상적인 숫자처럼 보이는 잘못된 값이 들어갈 수 있어, 표 제목과 헤더를 확인해 형식을 구분하고 범위를 벗어나는 값은 반영하지 않도록 검증 단계를 넣었습니다.

3 hours ago
1

![[헬스캡슐]은행잎 추출물, ‘베타아밀로이드 응집 억제’ 효과 확인 外](https://dimg.donga.com/wps/NEWS/IMAGE/2026/05/26/133978263.3.jpg)




!['꽃청춘' 3인방, 무계획 제주의 높은 벽..결국 티켓 구하기 실패[별별TV]](https://image.starnewskorea.com/21/2026/05/2026052421091553722_1.jpg)
![[오피셜] ‘불꽃슈터’ 전성현, KT서 ‘퍼펙트 10’ 파트너 문성곤과 재회…서민수도 3년 계약](https://pimg.mk.co.kr/news/cms/202605/28/news-p.v1.20260528.c55346b19e8f45bfb362482843760fb3_R.png)

English (US) ·