04PNUSA
2026.04 · 약 1개월 운영부산대 도서관 좌석 알리미
개인 프로덕트 · 운영 종료 · 1인 개발 · Web · iOS
React · TypeScript · SwiftUI · Node.js · Vercel

Overview
부산대학교 도서관 서비스가 리뉴얼된 뒤, 빈자리가 있는지 확인하려면 열람실을 하나씩 열어봤다 나오기를 반복해야 했습니다. PNUSA는 여러 열람실의 좌석 현황을 한 화면에 모아 보여주고, 빈 좌석이 생기면 좌석 위치와 함께 알려주는 개인 서비스입니다. Web으로 시작해 iOS 앱까지 확장했고, 운영 중 도서관 측 요청을 받아들여 약 한 달 만에 서비스를 종료했습니다.
Product
Web · 열람실 현황열람실별 빈자리 수 · 좌석 배치도 · 예약 가능한 좌석 번호를 한 화면에 모으고, 빈자리 발견 로그를 함께 표시

Web · 자리 찾기확인할 열람실을 직접 고르고 조회 간격을 설정 
Web · 예약 확인좌석 번호와 상세 배치도를 보여주고 예약 여부는 사용자가 결정 
iOS · 좌석 찾기열람실별 토글 · 지금 자리 확인 · 자동 자리 찾기 
iOS · 빈 좌석 알림빈 좌석이 감지되면 열람실 · 좌석 번호와 배치도를 함께 안내
Problem
시험기간에는 열람실 페이지를 하나씩 들어갔다 나오기를 반복하며 자리가 나기를 기다리는 사용자가 많았습니다. 직접 같은 방식으로 자리를 찾다가, 좌석 현황이 열람실 단위로 흩어져 있어 한 번에 비교할 수 없다는 점이 문제라고 봤습니다.
Solution
- 열람실 현황 확인
- 빈 좌석 감지
- 열람실 · 좌석 안내
- 사용자 확인
- 직접 예약
좌석을 대신 잡아주는 매크로가 아니라, 빈자리를 먼저 찾아 알려주고 예약은 사용자가 확인한 뒤 직접 진행하는 흐름으로 설계했습니다.
Engineering · Vacancy Detection
User
PNUSA Web / iOS
Polling
5~30초 간격
Proxy
PNU Library API
Vacancy Detection
Seat Alert
User Confirmation
- 조회 간격을 5~30초 범위에서 설정하도록 두어, 필요 이상으로 잦은 요청이 발생하지 않게 구성
- 감시 대상 열람실을 사용자가 직접 선택하게 해, 사용자가 늘어도 요청 수가 무제한으로 늘지 않도록 요청 빈도와 대상 범위를 함께 제어
- 빈자리가 감지되면 열람실 · 좌석 번호와 배치도를 함께 안내
Engineering · Authentication
Web
도서관에 로그인한 뒤 발급된 인증 토큰을 사용자가 직접 입력하고, 로컬 프록시가 이를 그대로 중계
iOS
토큰을 보관하는 별도 서버를 두지 않고, 인증 토큰을 사용자 기기에만 저장
계정 ID · 비밀번호를 서비스 서버가 직접 수집하거나 보관하지 않는 방향으로 인증 구조를 설계했습니다.

iOS · 로그인앱이 자체 로그인 폼을 두지 않고 부산대 공식 페이지에서 직접 로그인
Results
- Views
- 6,700+Views
- Visitors
- 3,400+Visitors
- App Store 교육 카테고리
- 146위App Store 교육 카테고리
- 서비스 확장
- Web → iOS서비스 확장
개인 SNS에 공유한 뒤 짧은 기간에 사용자가 늘었고, Web 서비스에서 iOS 앱까지 확장했습니다. 운영 중 부산대학교 도서관으로부터 공식 앱 서비스 활용에 대한 협조 요청과 함께 서비스 중지 요청을 받아, 이를 받아들여 운영을 종료했습니다.

App StoreEducation 차트 진입 · 캡처 시점 No.147 
Top DownloadedEducation 무료 앱 다운로드 순위