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

기억을 심다.

위치 기반 감정 일기 앱, Pinlog

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

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

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

경쟁사 대비
Pinlog의 차별점

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

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

개발 스택 &
아키텍처

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

UI/UX 엔진 iOS 네이티브 · Dart 단일 코드베이스
Riverpod v2 Hive 캐시 커스텀 렌더링

Riverpod v2로 전역 상태를 관리하고, Hive로 오프라인 우선 캐싱을 구현했습니다. 커스텀 렌더링 최적화로 지도 고스팅 아티팩트를 완전히 제거했습니다.

공간 시각화 3D Globe · 실시간 위치 렌더링
글로브 모드 카메라 컨트롤러 핀 클러스터링

3D 글로브 모드로 국가 단위 핀 클러스터링을 구현하고, 부드러운 카메라 컨트롤러로 실시간 위치 추적 및 지도 탐색을 제공합니다.

코어 백엔드 Auth · DB · Realtime · Storage
실시간 프레즌스 RLS 정책 엣지 함수

Realtime Presence로 300ms 이하 초저지연 위치 공유를 구현하고, Row Level Security(RLS) 정책으로 계정 간 데이터 접근을 완벽히 격리했습니다.

클라우드 커뮤니케이션 FCM · Google OAuth · Push
FCM 푸시 Google OAuth HTTP v1 API

FCM으로 푸시 알림 아키텍처를 직접 구축하고, Admin SDK 없이 HTTP v1 API를 통해 Google OAuth 인증을 연동했습니다.

AI 엔진 사진 분석 · AI 리캡 생성
Vision API 주간 리캡 제목 자동 추천

사진 업로드 시 Gemini 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 직접 호출.
지도 테마
How it works

세 단계로
기록이 완성됩니다

지도를 열고 핀을 심고 감정을 담는 것.
 그것이 전부입니다.

Step 01

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

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

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

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

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

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

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

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

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

아직 더 있습니다

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

NOTIFICATION 인앱 FCM 배너
FCM Push Banner Overlay 4s Auto-dismiss

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

ANALYTICS 활동 히트맵 캘린더
Heatmap Calendar View Activity Score

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

AI INSIGHTS 주간 · 월간 AI 리캡
Gemini AI Weekly Recap Monthly Summary

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

FILTERING 핀 필터 3종
Category Emotion Visibility

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

SOCIAL 소셜 FCM 알림 흐름
Friend Code FCM Push Real-time Sync

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

PRIVACY + WEATHER 공개 범위 & 날씨
Visibility Weather API Auto-detect

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

팀 구성 &
역할

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

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

PIN LOG — 기억을 심다.