패킹 (Packing)
목적지·기간·테마를 입력하면 그에 맞는 준비물 목록을 추천하고, 같이 가는 사람들과 체크리스트를 실시간으로 공유하는 앱입니다.
개요
목적지·기간·테마를 입력하면 그에 맞는 준비물 목록을 추천하고, 같이 가는 사람들과 체크리스트를 실시간으로 공유합니다. 디자이너 1명과 협업했고, iOS 클라이언트와 Node.js 백엔드를 모두 직접 개발했습니다. 24일 만에 완성했습니다.
주요 기능
- 맞춤 준비물 추천 — 목적지·기간·테마(바다/등산/쇼핑)·교통수단 기반. 여행 기간의 실제 날씨를 받아와 옷차림까지 제안
- 실시간 공유 — 파티원 초대, 공용/개인 준비물 구분 관리 (개인 준비물은 상대에게 안 보임)
- 스마트 리마인더 (APNS) — 출발 전날 날씨 체크 및 준비물 알림, 기상 특이사항 시 맞춤 알림
기술 스택
Swift 6.1+ · UIKit(코드베이스, No storyboard) + SwiftUI 혼용 · ReactorKit · RxSwift / RxCocoa / RxDataSources · Kingfisher · KeychainSwift
백엔드: Node.js · Express · MongoDB · Socket.io · Passport.js · JWT · AWS S3 · SendGrid
외부 API: Unsplash(여행지 사진) · OpenWeather(날씨)
기술적으로 어려웠던 것
- ReactorKit 단방향 데이터 흐름 — Action → Mutation → State → View로 뷰와 비즈니스 로직을 분리해, 상태 변화를 한눈에 추적할 수 있게 했습니다.
- RxSwift Reentrancy 문제 —
PublishRelay와 MainScheduler 활용으로 UI 변경은 메인 스레드, 네트워크는 백그라운드에서 처리하도록 정리했습니다. - Coordinator 패턴 — 여행 생성 프로세스 전체를
JourneyCreatorCoordinator파일 하나로 구현했습니다. - iPad 대응 — 적응형 레이아웃으로 iPhone SE부터 iPad까지 커버.
링크
기간: 2025.04.11 ~ 2025.05.05 (24일)