GPT랑 앱 만들기 2 - 사용자 플로우
모든 사용자가 나처럼 귀찮음이 많고 성질이 급하다는 전제를 깔고 간다.
왜냐하면 이건 내가 쓸 거니까.
MVP 방식으로 명세를 최대한 간략하게 뽑아놓긴 했는데 문제가 있다.
유튜브 음악에 -> 태그를 달아서 분류하는 앱인데, 유튜브 음악을 어떻게 받아 올 건지 고민이었다.
Youtube Data API는 유튜브 메인 앱만큼 검색 성능이 빠르지 않고, 뭔가... 더 관리를 해 줘야 했던 것 같다.
게다가 검색 결과 뿌릴 때 썸네일까지 불러오려면 꽤 공수가 들어야 함. api 호출 안 하고 url로 붙을 수 있는지 조사가 필요하긴 하겠지만 어쨌든.
유튜브의 사용자 경험을 기대하는 사용자에게 있어 매력적인 요소는 아니다.
나는 성질이 정말 급하다.
그래서 앱 공유 방식을 제안했더니 뭔가 처음 듣는 용어를 말해 줬다. 짱이다.
그런데 여기서도 고민이 하나 있었다.
나는 앱 개발자가 아니라 사용자 플로우랑 UX에 관해서는 정말... 정말 모르기 때문에
앱을 켜는 시간에 대한 딜레이 기준조차 모르는 상태였다.
회사에서 배운 거... 딱히 없다. 회사 앱은 커다랗고 무거우니까 오래 걸린다
근데 나는 대강 태깅하고 치워버리려고 이걸 만드는 건데
여기서 오래 걸리면 플레이리스트 정리하려다가 사리 만든 사람으로 싸이버세상에 기록될 것 같았음
그딴 앱 나라도 안 쓴다.
무슨 말인지는 모르겠다.
대강 메인 화면을 가볍게 하고 사용자한테 부담을 넘겨 주고 세부 정보는 백그라운드에서 불러오라는 얘기 같은데
나는 왜 ios를 쓸까
나는 왜 애플워치를 쓸까
나는 왜 아이패드를 쓸까
개발자는 왜 맥을 쓸까
생각해보니까 다 내가 자초한 것 같다
DB가 더 빠른가? 그냥 디비 한 번 갔다 와라
주제가 휙휙 돌아가긴 하는데 일단 내가 궁금한 것들 두서 없이 막 물어볼 수 있어서 좋다.
만약 이게 회사 회의였다면 저기 죄송한데 그건 따로 관련자들만 미팅 잡고 지금은 기획 얘기만 하자고 한소리 들었을 수도 있다.
사실 안 들었을 거다.
사실 다른 사람들이 저랬으면 내가 속으로 욕했을 텐데
다행히 나는 지피티한테 두서없이 굴고 있다. 지피티는 참 좋은 친구다.
프로젝트 개요
- 목표: 유튜브 음악 링크에 태그를 달고, 태그 기반으로 플레이리스트를 만들어 공유할 수 있는 iOS/Android 앱 개발
- 클라이언트: Flutter 사용 (iOS 중심으로 고려)
- 서버: Spring Boot (Kotlin)
- DB: PostgreSQL (개발용으로 H2 병행)
- 캐시: Redis는 사용하지 않음, 클라이언트 중심 캐시 고려
✅ 주요 기능
- 유튜브 앱에서 공유 → 앱 Share Extension으로 진입 → 태그 입력 → 저장
- 여러 개의 태그를 한 번에 추가 가능
- 기존 태그 기반 자동완성 제공
- 태그별 미디어 순서 지정 가능
- 사용자별 태그 독립 관리
- 미디어는 CP + media hash 묶어서 unique
- 사용자별 유튜브 미디어 ID는 unique
✅ DB 테이블 설계
- users
- media (유튜브 video ID 기준, 사용자별 unique)
- tag
- media_tag_users (user_id, media_id, tag_id 복합 구성, order 컬럼 존재)
🔎 중요 조건:
- 테이블 간 FK 제약 조건 없음 (애플리케이션 레벨에서 제어)
- 플레이리스트는 media_tag_users에서 태그 조건으로 쿼리
- 익명 URL로 태그 기반 플레이리스트 생성 가능
✅ API 설계 관련
- 태깅 API는 기존 태그 + 신규 태그 혼합 허용
- 자동완성 기능 제공을 위해 태그 이름으로 입력 받되, 존재 여부 확인 필요
- 플레이리스트 생성 API는 태그 + 정렬 순서(옵션) 입력 받아 유튜브 URL 반환
- Swagger(Springdoc OpenAPI) 사용
✅ 기타 사항
- 검색 시 테이블 조인을 통한 인덱스 기반 설계 채택
요약본 내놓으라고 또 쪼은 다음에 내가 수정했다.
media는 동일 cp+media hash 복합키 걸어서 unique하게 가는 게 나을 것 같은데.. 이유는 여기다 메타 테이블 붙여야 할 것 같아서 그런다.
메타 테이블 하나 두고 썸네일 제목 가수 정도는 불러오는 게 youtube data api 매번 띄우는 것보다는 편할 것 같았다.
근데 솔직히 딥하게 생각 안 해 봤다
그냥 최대한 단순하게 만들고 싶은 마음이 있다
진짜 진짜 다행인 건 유튜브 기준으로만 생각했을 때 내가 끌고 오는 건 거의 static한 필드들이라 변경사항을 체크할 필요가 없다는 거다.