본문으로 건너뛰기
Jun's Portfolio
프로젝트
사이드·

Music Diary

그날 쓴 일기를 읽고 어울리는 음악을 골라 주는 웹 서비스

CLOVA로는 감정이 세 단계밖에 안 나와 OpenAI로 갈아탔고, 호출당 0.15달러라 상업화는 어렵다고 봤습니다

list

이렇게 만들었습니다

Music Diary는 사용자의 감정과 선호도에 맞는 음악을 추천하는 웹 애플리케이션입니다. Next.js로 만들었고, 사용자가 쓴 일기를 분석해 어울리는 음악을 추천하고 감정 히스토리를 정리해 줍니다.

Next.js를 고른 이유

웹 개발자로서 쓸 수 있는 기술 스택을 넓히고 싶었고, SSR로 SEO를 챙기면서 백엔드 서버를 따로 두지 않아도 된다는 점, 이미지를 비롯한 각종 최적화를 좋은 개발자 경험(DX)과 함께 얻는다는 점이 컸습니다.
데이터 저장에는 ORM 중 하나인 Prisma를 써서 JS 코드에서 MySQL 데이터베이스에 쉽고 효율적으로 접근하였고, NextAuth.js로 소셜 로그인을 아주 간편하게 구현하였습니다.
비동기 작업에는 Next.js의 새 기능인 Server Actions를 써 봤고, 최신 데이터를 자동으로 받아 오는 React Query 덕분에 클라이언트의 다이나믹한 상태를 훨씬 쉽게 다룬다는 것도 알게 되었습니다.

감정 분석에서 막혔던 부분

일기 내용에서 감정을 분석하려고 Naver CLOVA API를 썼지만, 이 API는 감정을 긍정·부정·중립 세 단계로만 나눴습니다. 그래서 일기에 자주 나오는 단어에 가중치를 준 뒤 나열해, 그 내용과 비슷한 가사의 음악을 추천하는 방식을 시도했습니다. 하지만 단어 개수만으로 고르다 보니 뜬금없는 음악이 나왔습니다. 비용이 들더라도 OpenAI의 API가 가장 적합하겠다 싶어, OpenAI API로 음악 추천과 약 일주일 치 일기를 장문으로 정리해 주는 기능을 추가하였습니다. 첨언하자면 일주일 치 일기는 생각보다 글자가 많아 한 번 호출에 0.15달러 넘게 나갔고, 그걸 보고 이 어플리케이션은 상업성이 없다고 판단했습니다.

앱으로 내보내려던 시도

Tailwind CSS 유틸리티 클래스로 반응형 디자인을 이미 맞춰 둔 상태라, React Native의 WebView를 쓰면 웹을 그대로 스마트폰 앱으로 배포할 수 있다는 걸 알게 되어 실제로 시도했습니다. 그런데 구글 플레이스토어의 개발자 계정 심사가 생각보다 까다로웠습니다. 심사를 마치면 다시 한 번 앱 배포를 시도해 보려고 합니다.