PageMate / 페이지메이트
교환독서를 하고 싶지만 함께할 사람을 찾지 못했던 독자들을 연결하는 플랫폼입니다. 책 여백에 메모를 남기며 책을 바꿔 읽고, 다시 만나 돌려받는 "가장 조용하고 깊은 독서 교류"를 모바일 앱으로 구현했습니다. EAS 프로덕션 빌드를 거쳐 App Store Connect 심사 제출까지 완료했습니다.
담당 영역
- Spring Boot 백엔드 도메인 설계 — 사용자 / 도서 / 교환 요청 / 약속 / 채팅 / 평가 / 알림
- OAuth 2.0 (카카오 · 구글) + JWT 인증 흐름
- WebSocket (STOMP) 기반 1:1 실시간 채팅 — CONNECT 프레임 JWT 인증(ChannelInterceptor)으로 세션리스 보안을 실시간 계층까지 유지
- 카카오 책 검색 API 연동을 통한 도서 정보 수집 (표지는 URL만 저장) · 프로필/채팅 이미지는 Cloudinary CDN 업로드
- 취향(장르) + 동네 기반 도서 노출 정책 설계 — 콜드스타트를 고려해 반경 하드필터 대신 동네 부분일치 노출
- Expo Push 알림 (FCM 대비 트레이드오프 비교 후 채택) — 요청 수신 · 약속문 동의 · D-3 / D-1 / D-Day 반납 알림
- Railway 클라우드 백엔드 배포 — MySQL 연동, Actuator health check 운영
- GitHub Actions CI 구축 — 백엔드 테스트 + JaCoCo 커버리지, 프론트 타입체크
기술적 포인트
- 도메인 상태 머신 · 요청 → 수락 → 약속문 동의 → 일정 확정 → 1차 교환 → 2차 교환 → 평가까지를 9개 상태의 상태 머신으로 모델링, 교환 확정은 양측(요청자/수락자)이 각각 확인해야 넘어가는 이중 확정 로직으로 설계
- 이미지 스토리지 전략 · 도서 표지는 카카오 URL 참조로 비용 없이 해결하고, 사용자 업로드 이미지는 ImageStorage 인터페이스로 추상화해 Cloudinary를 교체 가능한 경계 뒤에 배치
- 약속 기반 신뢰 시스템 · 약속문 동의 후에만 채팅이 열리는 흐름으로 안전한 거래 환경 설계, 정확한 주소 대신 동네명 기반 거리 표시로 개인정보 노출 최소화