RAIM Schedule Manager
서울로봇인공지능과학관 직원 일정·교육·초과근무 통합 관리
- Period
- 2026.06 (약 2주)
- Role
- 기획 · 1인 풀스택 (Claude 기반 바이브 코딩)
- Cycle
- 발견 → 기획 → 개발 → 적용·운영
Why
직원 일정과 교육 신청이 엑셀과 수기로 흩어져 있었습니다.
하지만 손이 제일 많이 가는 쪽은 외부 교육이었습니다 — 연간 일정이 외부 사이트 표에만 있어 사람이 옮겨 적어야 했습니다.
전 직원이 같은 캘린더를 보고, 외부 일정은 Puppeteer 크롤러가 채우고, 정원은 Firestore 트랜잭션이 지킵니다.
기획부터 배포까지 약 2주. 지금도 근무 현장에서 쓰고 있습니다.
My Role in the Architecture
백엔드 서버 없이 혼자 기획부터 배포까지 진행했습니다.
Firebase Auth·Firestore를 백엔드 대신 사용해 인증·권한·데이터 계층을 설계했습니다.
관리자 승인 기반 계정 상태(대기 → 활성 · 정지)를 두고, Vue Router 가드에서 권한별 접근을 차단했습니다.
Vue 클라이언트부터 외부 일정을 긁어오는 Puppeteer 자동화 스크립트까지 시스템 전체를 직접 구현했습니다.
Stack
Highlights
서버 없이 설계한 인증·권한 체계
별도 백엔드 없이 Firebase Auth·Firestore만으로 인증과 데이터를 처리해 유지 비용을 최소화했습니다.
관리자 승인 기반 계정 상태(대기/활성/정지)를 두고 Vue Router 가드에서 권한별 접근을 차단했습니다.
월간 캘린더로 전 직원 일정 공유
교육·출장·휴무·연차·반차 등 유형별 일정을 등록하면 전 직원이 한 화면에서 봅니다.
v-calendar 기반 캘린더에 유형별 색상을 입혀 한눈에 파악되도록 구현했습니다.

불규칙한 외부 표 구조를 자동 수집
Puppeteer 크롤러로 외부 교육 사이트의 연간 일정을 수집해 Firestore에 저장합니다.
숨겨진 셀·날짜 뭉침 등 불규칙한 표 구조는 파싱 로직으로 보정해 데이터 정확도를 확보했습니다.

동시 신청에도 안전한 정원 관리
교육 신청 인원은 Firestore 트랜잭션으로 처리해 동시 신청 시 정원 초과를 막았습니다.
AI가 생성한 코드를 그대로 쓰지 않고, 권한 가드·키 관리 같은 구조와 보안을 직접 검증했습니다.
Friction & Resolution
회원가입 기능을 배포한 직후, 가입이 되지 않는 문제가 발생했습니다.
직원들이 매일 쓰는 시스템이라 원인을 찾기 전에 먼저 되돌렸습니다 — 배포에서 롤백까지 34분이었습니다.
원인은 제 실수였습니다. 서버 없이 Firebase만으로 인증·권한을 처리하는 구조를 택했는데, 인증 규칙에 대한 이해가 부족한 상태에서 손을 댄 것이 가입 경로를 막았습니다.
고쳐서 다시 올리는 것보다, 쓰는 사람이 멈춰 있는 시간을 줄이는 것이 먼저라고 판단했습니다.
Result
- 실제 근무 현장에 배포, 운영 중
Next project