🎯 프로젝트 시작 배경
요즘 "안드로이드 앱 개발" 스터디를 진행하면서, 평소 불편하게 느끼던 명함 관리의 문제점을 해결해보고 싶어졌습니다.
😅 기존 앱의 아쉬운 점
저는 주로 "기억하다"라는 앱을 사용해왔습니다. 명함 사진을 찍으면 자동으로 연락처를 추출해서 전화번호부에 저장해주는 기능이 정말 편리했어요.
하지만...
3-6개월 후 그 분과 다시 연락할 때마다 이런 상황이 반복됩니다:
📱 전화번호부 검색: "홍길 동"
[검색 결과]
홍길동 (ABC건설)
010-1234-5678
🤔 생각: "이 분... 어디서 만났더라?"구체적인 문제점들
1. 만남의 맥락(Context) 부재
어디서 만났는지? → 기억 안 남
언제 만났는지? → 저장 날짜만 표시
어떤 회의에서? → 정보 없음
무슨 이야기를 나눴는지? → 메모 안 해뒀으면 끝
2. 사진-연락처 매칭 불가
회의 단체 사진은 갤러리에 있는데
"이 사진 속 세 번째 분이 누구였지?" → 알 수 없음
얼굴은 기억나는데 이름이 안 떠오름
3. 관계 네트워크 시각화 없음
"이 분을 누구 소개로 만났더라?"
"A씨와 B씨가 아는 사이였나?"
같은 회사, 같은 학교 출신 연결 고리 파악 어려움
4. 나이 탓일 수도... 😭
한 달에 10-15장씩 명함을 받다 보니
시간이 지나면 정말 기억이 안 나요
💡 그래서 만들기로 한 앱: AwesomeBizCard
컨셉: "사람과의 만남을 잊지 않게 해주는 컨텍스트 기반 네트워킹 앱"
앱 이름: AwesomeBizCard
약칭: ABC
아이콘: ABC 이니셜을 강조한 명함 형태 + 네트워크 연결선
아이콘 컨셉:
┌─────────────┐
│ ┌─────┐ │
│ │ ABC │ │ ← 명함 형태 안에 ABC
│ └─────┘ │
│ ╱ ╲ ╱ ╲ │ ← 네트워크 연결선
└─────────────┘📋 Phase 1: 핵심 MVP 기능
F1.1 명함 스캔 & OCR (기존앱과 동일)
기능:
- 카메라로 명함 촬영 또는 갤러리에서 선택
- Google ML Kit으로 텍스트 자동 추출
- 이름, 회사, 직책, 전화번호, 이메일 자동 분류
- 사용자가 확인/수정 후 전화번호부 저장
기술:
- ML Kit Text Recognition API
- Android Contacts Provider APIF1.2 회의 일정 자동 매칭 ⭐ (차별화 포인트)
명함을 저장하는 시점의 Google Calendar 일정을 자동으로 연결합니다.
로직:
1. 명함 저장 시각 = T
2. Google Calendar API 쿼리:
[우선순위 1] T-30분 ~ T+30분 사이 진행 중인 일정
[우선순위 2] T 이후 가장 가까운 일정 (T+4시간 이내)
[우선순위 3] T 이전 가장 최근 일정 (T-4시간 이내)
3. 일정이 여러 개인 경우:
사용자에게 선택 UI 표시
"이 회의에서 만나셨나요?"
- 정책 세미나 (14:00-16:00)
- AI 기술 워크샵 (16:30-18:00)
4. 연결된 정보 저장:
- 회의 제목
- 회의 시간
- 회의 장소
- 참석자 리스트사용 시나리오:
14:30 정책 세미나 참석 중
15:00 휴식 시간에 명함 교환
15:05 앱으로 명함 스캔
→ 시스템: "현재 참석 중인 '정책 세미나'에서 만나셨나요?"
→ 사용자: "네!" (터치 한 번)
→ 자동 저장 완 료 ✅F1.3 위치 정보 자동 태깅
기능:
- GPS로 현재 위치 자동 획득
- Google Geocoding API로 주소 변환
- Google Places API로 장소명 검색
저장 정보:
- GPS 좌표 (위도, 경도)
- 주소 (도로명/지번)
- 장소명 ("코엑스", "서울역" 등)
개인정보 보호:
- 정확한 좌표는 앱 내부만 저장
- 전화번호부에는 "강남역 근처" 같은 일반화된 위치만 저장3-6개월 후 검색 시나리오:
🔍 검색: "작년 11월 코엑스"
[결과]
┌─────────────────────┐
│ 홍길동 (ABC건설) │
│ 2024-11-15 │
│ 정책 세미나 │
│ 📍 코엑스 3층 │
│ [회의 사진 2장] │
└─────────────────────┘
→ 아! 그때 데이터 표준화 논의했던 분!F1.4 사진 속 인물 매칭
회의 단체 사진에서 얼굴을 인식해서 연락처와 연결합니다.
워크플로우:
1. 갤러리에서 회의 사진 선택
[5명이 찍힌 단체 사진]
2. ML Kit Face Detection으로 얼굴 자동 인식
→ 5개 얼굴 감지
3. 각 얼굴 크롭 후 사용자가 매칭:
얼굴 #1 [크롭 이미지] → [기존 연락처: 홍길동]
얼굴 #2 [크롭 이미지] → [새 연락처 생성] → 명함 스캔
얼굴 #3 [크롭 이미지] → [기존 연락처: 김철수]
...
4. 크롭된 얼굴 사진을 프로필 사진으로 저장
5. 원본 사진도 회의 기록에 연결결과:
6개월 후 "홍길동" 연락처를 열면:
프로필 사진: 회의 때 크롭한 얼굴 사진
만남 기록: 2024-11-15 정책 세미나
회의 사진: [원본 단체 사진]
위치: 코엑스 3층
→ 맥락 복원 완료! 🎉
📱 주요 화면 설계
홈 대시보드
┌─────────────────────────────────┐
│ [로고] AwesomeBizCard [⚙️] │
├─────────────────────────────────┤
│ 🔍 이름, 회사, 회의, 장소 검색 │
├─────────────────────────────────┤
│ [최근순▼] [회사별] [회의별] │
├─────────────────────────────────┤
│ ┌───────────────────────────┐ │
│ │ [프사] 홍길동 │ │
│ │ ABC 건설 / 팀장 │ │
│ │ 📅 2024-11-15 정책 세미나 │ │
│ │ 📍 코엑스 3층 │ │
│ └───────────────────────────┘ │
│ │
│ ┌───────────────────────────┐ │
│ │ [프사] 김철수 │ │
│ │ DEF 기술 / 과장 │ │
│ │ 📅 2024-10-20 AI 컨퍼런스 │ │
│ │ 📍 강남역 근처 │ │
│ └───────────────────────────┘ │
│ │
│ [+] │
└─────────────────────────────────┘명함 스캔 - 결과 확인
┌─────────────────────────────────┐
│ [←] 정보 확인 [✓] │
├─────────────────────────────────┤
│ ┌───────────────────────────┐ │
│ │ [명함 이미지 썸네일] │ │
│ └───────────────────────────┘ │
├─────────────────────────────────┤
│ 이름 * │
│ ┌───────────────────────────┐ │
│ │ 홍길동 │ │
│ └───────────────────────────┘ │
│ │
│ 회사 │
│ ┌───────────────────────────┐ │
│ │ ABC 건설 │ │
│ └───────────────────────────┘ │
│ │
│ 회의 ⭐ │
│ ┌───────────────────────────┐ │
│ │ 정책 세미나 [선택] │ │ ← 자동 매칭!
│ └───────────────────────────┘ │
│ │
│ 위치 ⭐ │
│ ┌───────────────────────────┐ │
│ │ 📍 코엑스 3층 │ │ ← 자동 태깅!
│ └───────────────────────────┘ │
├─────────────────────────────────┤
│ [수정] [저장] │
└─────────────────────────────────┘연락처 상세 - 컨텍스트 표시
┌─────────────────────────────────┐
│ [←] [⋮] │
├─────────────────────────────────┤
│ ┌─────────────┐ │
│ │ [프로필 │ │
│ │ 사진] │ │
│ └─────────────┘ │
│ │
│ 홍길동 │
│ ABC 건설 공무팀 팀장 │
├─────────────────────────────────┤
│ 📞 010-1234-5678 [전화] │
│ ✉️ [email protected] [메일] │
├─────────────────────────────────┤
│ 만남 기록 ⭐ │
│ │
│ ┌───────────────────────────┐ │
│ │ 📅 2024-11-15 14:00 │ │
│ │ 정책 세미나 │ │
│ │ 📍 코엑스 3층 │ │
│ │ [사진] [사진] │ │ ← 회의 사진!
│ └───────────────────────────┘ │
│ │
│ ┌───────────────────────────┐ │
│ │ 📅 2024-09-10 10:00 │ │
│ │ 스마트건설 워크샵 │ │
│ │ 📍 여의도 IFC몰 │ │
│ └───────────────────────────┘ │
├─────────────────────────────────┤
│ 메모 │
│ ┌───────────────────────────┐ │
│ │ 건설 데이터 표준화에 관심 │ │
│ │ 다음 회의 때 샘플 공유 │ │
│ └───────────────────────────┘ │
└─────────────────────────────────┘🚀 Phase 2: 앱 고도화
Phase 1이 안정화되면 이런 기능들도 추가할 예정입니다:
1. Obsidian 스타일 관계 네트워크 그래프
나 (중심)
/ | \
(홍길동)(김철수)(이영희)
/ \ | / \
(A) (B) (C) (D) (E)
범례:
─── 같은 회의
··· 같은 회사
─── 같은 학교 (파랑)인터랙션:
노드 클릭 → 연락처 상세
핀치 줌으로 확대/축소
필터: "1촌만", "2촌까지", "전체"
2. LinkedIn 프로필 연동
자동으로 가져올 정보:
- 프로필 사진 (고해상도)
- 현재 직장 & 직책
- 이전 경력 히스토리
- 학력 (학교, 전공, 졸업년도)
- 상호 연결 (mutual connections)
- 추천 기술 (skills)3. 학교/회사 기반 자동 클러스터링
[홈 화면 상단 탭]
[전체] [회사별] [학교별] [회의별]
[회사별 탭]
┌─────────────────────┐
│ ABC건설 (5명) │
│ ├ 홍길동 (팀장) │
│ ├ 김철수 (과장) │
│ └ ... 더보기 │
├─────────────────────┤
│ K-Con (3명) │
│ ├ 이영희 (연구원) │
│ └ ... 더보기 │
└─────────────────────┘4. "이 사람을 통해 만난 분들" 추적
관계 추적:
홍길동
├─ (직접 만남) 김철수
│ └─ (김철수 소개) 이영희
│ └─ (이영희 소개) 박민수
└─ (직접 만남) 정다은5. 스마트 재연락 제안
┌─────────────────────────┐
│ 💬 다시 연락해보세요! │
├─────────────────────────┤
│ 홍길동 (ABC건설 팀장) │
│ │
│ • 6개월 전 마지막 연락 │
│ • 최근 LinkedIn에서 │
│ "프로젝트 매니저"로 │
│ 승진하셨습니다 │
│ • 서로 아는 분 3명 │
│ │
│ 제안 메시지: │
│ "승진 축하드립니다! │
│ 프로젝트 관련해서 │
│ 조언 부탁드려도 될까요?" │
│ │
│ [메시지 보내기] [나중에] │
└─────────────────────────┘6. 회의 전 브리핑 알림 (고도화 Point~! 아젠더를 올리면, 신규 네트워킹 멤버 제안)
캘린더 일정 30분 전 자동 알림:
┌─────────────────────┐
│ 🔔 회의 30분 전 │
│ 정책 세미나 │
├─────────────────────┤
│ 참석자 (3/5명 저장) │
│ │
│ 홍길동 (ABC건설) │
│ • 작년 11월 코엑스 │
│ • "건설 데이터 표준" │
│ 논의했음 │
│ │
│ 김철수 (DEF기술) │
│ • 첫 만남 │
│ │
│ [더보기] [닫기] │
└─────────────────────┘📊 PRD 작성 과정
Claude와 대화하면서 체계적으로 PRD를 작성했습니다.
PRD에 포함된 내용
✅ 1. 프로젝트 개요
- 문제 정의
- 솔루션 비전
- 사용자 페르소나
✅ 2. 기능 명세 (Phase 1 & 2)
- 상세 기능 설명
- 기술 스택
- 데이터 모델
- Use Cases
✅ 3. 화면 설계
- 5개 핵심 화면 레이아웃
- UI 컴포넌트 상세
- 사용자 플로우
✅ 4. 기술 스택 정의
- Frontend: Kotlin + Jetpack Compose
- Database: Room
- APIs: ML Kit, Google Calendar, Maps
- 개발 도구: Claude Code, Android Studio
✅ 5. Galaxy Z Fold 최적화 전략
- 커버 스크린 (6.2"): 빠른 스캔
- 메인 스크린 (7.6"): 분할 뷰
- 플렉스 모드: 상단 카메라, 하단 컨트롤
✅ 6. 개발 타임라인
- Phase 1: 3-4개월 (MVP)
- Phase 2: 4-6개월 (고급 기능)
✅ 7. 리스크 & 완화 전략
- OCR 정확도 문제
- API 할당량 초과
- 경쟁 앱 분석
✅ 8. 비용 추정
- Phase 1: $0/월 (Google 무료 할당량)
- Phase 2: $25 (Play Store 등록비)데이터베이스 스키마 설계
kotlin
// Room Database
@Entity(tableName = "contacts")
data class Contact(
@PrimaryKey val id: String,
val name: String,
val company: String?,
val position: String?,
val phoneNumber: String?,
val email: String?,
val businessCardImageUri: String?,
val profilePhotoUri: String?,
val androidContactId: Long?, // 전화번호부 ID
val createdAt: Long,
val updatedAt: Long
)
--- 중략 ---🎨 디자인 가이드 작성
PRD와 별도로 Google Stitch에서 사용할 디자인 가이드도 작성했습니다.
브랜드 컬러
Primary: Blue #1976D2
Accent: Orange #FF9800
Background: White #FFFFFF
Surface: Light Gray #F5F5F5Material Design 3 적용
Jetpack Compose
Dynamic Color 지원
다크 모드 대응
ABC 아이콘 디자인 방향
명함 형태 안에 ABC 타이포그래피를 넣고, 하단에 네트워크 연결선을 추가하는 컨셉
ui ui ui ui ui ui ui ui ui
한 무리의 사람들이 모바일 앱 화면에 표시됩니다.
📚 지금까지 배운 점
1. 문제 정의의 중요성
"명함 관리 앱을 만들자"가 아니라 "명함을 저장한 후 6개월 뒤에도 그 사람을 기억할 수 있게 하자"
→ 이렇게 구체적으로 문제를 정의하니 차별화 포인트가 명확해졌습니다.
2. 사용자 페르소나 = 나 자신
Primary Persona: "비즈니스 네트워커"
- 주 2-3회 외부 회의
- 월 10-15장 명함 수집
- 3-6개월 후 상대방 기억 어려움
- Galaxy Z Fold 사용자실제로 내가 겪는 문제를 해결하는 앱이라서 기획이 더 구체적으로 나왔어요.
3. MVP vs 완벽주의
처음엔 Phase 2 기능까지 다 만들고 싶었지만, Claude와 대화하면서 Phase 1만 완성해도 충분히 차별화된다는 걸 깨달았습니다.
Phase 1: 회의/위치 자동 매칭만으로도 기존앱과 차별화
Phase 2: 사용자 피드백 받고 나서 추가
4. PRD 작성의 가치
개발 시작 전에 PRD를 꼼꼼히 작성하니:
기능 우선순위가 명확해짐
기술적 제약사항 미리 파악
개발 일정 현실적으로 수립 가능
2부 "새로운 명함관리 앱 "ABC" 구현 하기~!" 로 넘어가 볼까요~!!!?