졸업프로젝트 1학기 기말고사

기억을 심다.

위치 기반 감정 일기 앱, Pinlog

지금 체험하기 더 알아보기
6단계
핀 생성 위자드
12가지
감정 타입
3D
지구본 뷰
실시간
소셜 연결
SCROLL
01 / 기존 내용 리마인드

기억은 흐릿해지고,
기록은 파편화된다

01
기억이 사라진다
여행지에서 찍은 사진은 수백 장이지만, 언제 어디서 어떤 감정을 느꼈는지는 금방 흐릿해진다. 시간이 지나면 어느 식당이었는지조차 기억나지 않는다.
02
기록이 파편화된다
사진은 카메라 롤, 감상은 메모앱, 위치는 지도앱에 따로 흩어져 있다. 나중에 돌아보려 해도 전체 그림을 한눈에 볼 수 없다.
03
함께 나누기 어렵다
같은 여행을 한 친구와 기억을 공유하거나, 추천 장소를 위치와 함께 자연스럽게 전달하는 방법이 마땅치 않다.

경쟁사 대비
Pinlog의 차별점

기존 서비스들은 위치·감정·소셜을 통합해서 다루지 못한다.

기능 Pinlog 여행일기 / 트립픽 인스타그램 AMOU
02 / 개발 스택

개발 스택 &
아키텍처

단일 코드베이스로 iOS를 타겟하되, 지도·서버·알림 각 영역에 최적의 도구를 선택했습니다.

크로스플랫폼 네이티브 앱 프레임워크. Dart SDK ^3.11.4, 현재 iOS 배포
단일 Dart 코드베이스로 iOS 타겟 · Android 확장 용이
3D 지구본 Globe Projection, Canvas 비트맵 마커 렌더링, 클러스터링, 지도 스타일 4종 (standard/satellite/dark/outdoors)
Google Maps 대비 3D 지구본 + Canvas 자유 커스텀
PostgreSQL DB + Auth (4종 OAuth) + Storage + Realtime + Edge Functions
RLS 기반 계정 격리 · 실시간 약속 위치 공유
Cloud Messaging (FCM) — 앱 푸시 알림 인프라. pinlog-ba4dc 프로젝트
친구 신청 · 약속 초대 · 도착 알림 크로스플랫폼 푸시
상태 · 알림 · AI · 서버
Riverpod v2 + Hive
타입 안전 상태관리 · 오프라인 로컬 캐시 — 서버 없이도 핀 조회 가능
Firebase FCM + TypeScript (Deno)
앱 ↔ Firebase 토큰 등록 · Edge Function에서 FCM HTTP v1 API 직접 호출
Google Gemini 1.5 Flash (Vision)
첨부 사진 이미지 + 카테고리를 멀티모달 분석 → 핀 제목 AI 자동 추천
03 / Problem & Solution

맞닥뜨린 문제들,
해결한 방법들

개발 과정에서 발생한 핵심 기술 문제와 그 해결 과정입니다.

01 / Mapbox
지도 핀 마커
잔상 버그
map_screen.dart
deleteAll() → createMulti(
opacity: 0.0
)
⚠ ghost marker on real device
Solution
opacity 페이드인 제거. createMulti(opacity:1.0) 직접 호출. 뮤텍스 지연도 제거.
02 / Auth
OAuth 로그인
콜백 누락
auth_provider.dart
// Safari → App 전환 후
❌ supabase.auth.session == null
// URL Scheme 미등록
Solution
Info.plist에 io.supabase.pinlog URL Scheme 추가. isOAuthWaiting guard 적용.
03 / FCM
Firebase Admin SDK
미지원 환경
send-fcm/index.ts (Deno)
// Firebase Admin SDK
❌ not supported on Deno
// FCM HTTP v1 needs JWT
Solution
Service Account JSON → crypto.subtle.sign으로 JWT 직접 발급. FCM HTTP v1 API 직접 호출.
Step 01

지도를 길게 눌러
핀을 심을 곳을 고르세요

Mapbox 기반 고해상도 지도 위 어디서든 핀을 심을 수 있습니다. 현재 위치는 자동으로 감지되고, 원하는 장소를 직접 선택해도 됩니다.

Mapbox GL 현재 위치 자동 감지 핀 클러스터링
Step 02

감정·사진·동행자를
한 번에 기록하세요

6단계 위자드로 카테고리, 감정 강도, 날씨, 동행자, 사진까지 완성합니다. 첨부한 사진을 Gemini Vision이 분석해 어울리는 제목을 자동으로 추천합니다.

12가지 감정 사진 최대 5장 Gemini Vision 제목 추천
Step 03

핀이 지도 위에
영원히 새겨집니다

저장 즉시 지도 위에 핀이 심어집니다. 핀이 쌓일수록 칭호가 오르고 특별한 뱃지를 수집하며, 친구와도 공유할 수 있습니다.

지도에 영구 저장 칭호 · 뱃지 수집 친구 공유
04 / 추가 기능
More Features

아직 더 있습니다

지도 위에서 벌어지는 모든 것.

인앱 FCM 배너

포그라운드 수신 시 시스템 알림 대신 앱 고유 디자인 오버레이 배너로 표시. 4초 후 자동 제거.

활동 히트맵 캘린더

핀을 심은 날을 색상 강도로 시각화. 기록이 쌓일수록 캘린더가 채워지는 성취감을 줍니다.

주간 · 월간 AI 리캡

한 주·한 달간 심은 핀 데이터를 Gemini가 자동 분석해 나만의 활동 요약 리캡 카드를 생성합니다.

핀 필터 3종

카테고리 · 감정 · 공개범위 세 가지 기준으로 지도 위 핀을 즉시 필터링해 원하는 기억만 골라볼 수 있습니다.

소셜 FCM 알림 흐름

6자리 코드로 친구 추가 → 상대 기기에 FCM 알림 → 알림 센터에서 수락/거절 → 즉시 친구 목록 반영.

공개 범위 & 날씨

핀별 공개 범위 (전체 / 친구만 / 나만) 설정. 날씨 자동 감지로 맑음·비·눈 등 당시 날씨도 함께 기록.

팀 구성 &
역할

최다울
팀장 · 총괄
FlutteriOSSupabase
조혜연
UX/UI 디자인 · 기획
FigmaUX 리서치기획
추형우
풀스택 엔지니어
FlutterBackendDB
정원
자료조사 & 문서화
기획QA문서화
Q&A

궁금한 점이 있으시면
편하게 질문해 주세요.

PIN LOG — 기억을 심다.