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

Music Diary

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

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

일기 목록 화면. 제목과 본문 미리보기가 카드로 쌓여 있고 상단에 일기 쓰기·감정 히스토리 버튼

이렇게 만들었습니다

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를 쓰면 웹을 그대로 스마트폰 앱으로 배포할 수 있다는 걸 알게 되어 실제로 시도했습니다. 그런데 구글 플레이스토어의 개발자 계정 심사가 생각보다 까다로웠습니다. 심사를 마치면 다시 한 번 앱 배포를 시도해 보려고 합니다.