사이드 프로젝트 회고록 - 매일말씀

지난 1월 24일부터 2월 6일까지 약 2주간 진행한 사이드 프로젝트를 통해 배우고 느낀 점을 공유하려 합니다!

매일말씀

얼마전 부모님께서 감적적으로 힘들어하는 모습을 보았고, 위로해드릴 방법에 대해 고민하게 되었습니다. 꽤 무뚝뚝한 성격의 컴퓨터과학 전공 학부생인 저의 결론은...

💡 사람들에게 위로를 전달하는 서비스를 만들어보자!

였고, 여기서부터 제가 처음으로 완성한 사이드프로젝트가 시작되었습니다.

💡 아이디어 발전

"위로"라는 키워드 하나로 여러 아이디어를 떠올려보았는데

  • 긍정적 문구 제시
  • 사용자의 감정 고려

정도로 추려졌고, 의미 있는 말을 많이 찾을 수 있는 소스로 성경을 떠올렸습니다. 그래서 나온 최종 결정안은 사용자의 감정에 따라 적절한 성경 말씀을 추천해주는 웹 사이트입니다!

🚩 목표 설정

이 프로젝트를 통해 개인적으로 배우거나 해보고 싶은 것들을 정해보았습니다.

  • 비 관계형 데이터베이스 배우기
  • 사용자 분석을 통해 UX 개선하기
  • 사람들이 실제로 사용하는 서비스를 만들어 자신감 얻기

물론 결과적으로 이 목표들은 하나도 이뤄지지 않았지만, 목표를 설정함으로써 어떤 면이 부족했는지 파악할 수 있었고 다음 프로젝트는 어떻게 진행해야 할 지에 대한 힌트를 얻을 수 있었습니다.

🚀 사전 홍보

The Kanye Story를 읽고서 미리 홍보를 해서 수요를 파악하고 사람들의 관심을 모아보자고 생각했습니다. 두근두근한 마음으로 홍보 문구와 사전 등록 기능을 구현했고, 프로토타입 시연 영상을 찍어 트위터에 홍보했는데, 결과는...!


엄청난 무관심. 물론 트위터에서 눈팅만 하는 편이라 별 기대는 없었지만, 이 정도일 줄이야.

🔥 개발

좀 쓰라렸지만, 누가 안 쓴다고 해서 안 만들 것은 아니었기 때문에 개발을 이어나갔습니다.
일단 감정에 따라 성경을 추천해주는 서비스이니 성경 구절과 감정 태그에 대한 데이터베이스를 설계했습니다.

이런 식으로 간단하게 ERD를 그려서, 이 모습대로 AWS RDS에 데이터베이스를 생성했습니다.
요즘 많이 쓰는 성경 번역본은 저작권이 있다고 해서 이미 저작권이 소멸된 버전으로 데이터를 찾아 넣었습니다.

DB가 완성되고나서는 DB를 보여주는 REST API를 만들었습니다.

GET /bible
GET /bible/:book_id
GET /verse/:verse_id
GET /verse/random

위와 같이 첫 API를 만들어 올렸고 이것을 통해 화면에 무작위의 말씀을 올려주는 프론트엔드를 구현했습니다. 사실 이 쯤에 설날이 와서 속도가 확 줄었고, 빨리 마무리짓지 않으면 또 이전처럼 어영부영하다 완성하지 못하게 될 것이라는 생각이 머리를 스쳐서 마음이 조급해졌습니다.

표시된 말씀과 어울리는 감정을 태그하고, 태그에 바탕하여 감정 상태에 맞는 말씀을 제공하는 부분만 구현하면 완성이었기 때문에 설이 끝나자마자 빠르게 태그를 다는 기능을 개발했습니다. 그러고는 서버에 올리고 다시 트위터에 홍보했습니다.

역시나 별 반향은 없었으나 사람들의 반응은 기대하지도 않았기에, 스스로 1차적인 완성을 해냈다는 사실에 기뻤습니다. Done is better than perfect라는 말을 실감할 수 있습니다.

마지막으로 태그에 맞는 구절을 추천하는 기능을 만들었습니다. 이 부분부터는 솔직히 흥미가 좀 떨어져서 급히 만들기는 했습니다만... 일단 이런 느낌이었습니다.

특정 태그를 누르면 해당 태그에 적합한 구절이 뽑힐 때까지 무작위의 구절을 계속 가져옵니다.적합하다 라는 것에 대한 기준은 해당 구절에 가장 많이 추천받은 태그의 횟수를 기준으로 유저가 누른 태그가 절반 이상의 표를 받았는지 입니다.

원래는 서버에서 하나를 보내주는 것으로 생각했습니다. 그런데 DB를 잘못 짰는지, SQL을 잘 못쓰는 것인지 어떻게 해야할 지를 모르겠어서 일단 해당 구절이 태그 별로 투표받은 횟수를 보내주는 API를 하나 추가했습니다. 눈치채셨겠지만, isGood에서 해당 API를 통해 적합성을 판단합니다.

어찌저찌 마무리는 지었습니다. 이번 경형을 통해 다음 프로젝트는 더 많이 배우고, 더 많이 성장할 수 있기를, 나아가 누군가 소중해 써주는 서비스를 만들어보길 기대합니다!

발전할 것들

프로젝트의 시작부터 하나하나 짚어보겠습니다.

✅ 목표를 정할 때

아무래도 사이드 프로젝트란 그 결과만큼이나 과정에서 얻어가는 것이 중요하기 때문에 어떤 것들을 배울지 목표를 정하는 것은 중요하다고 생각했습니다. 그래서 아이디어가 나오자마자 목표를 정했습니다. 하지만 프로젝트가 끝난 지금 생각해보면 목표를 정하는 것은 아이디어가 구체화된 후라는 생각이 듭니다.

뭘 할지도 모르는 채로 목표를 정하게 되면, 목표가 상상력을 막거나 아이디어 때문에 목표를 잃는 일이 생깁니다. 저의 경우 무작정 비 관계형 데이터베이스를 써보겠어! 하고 목표를 잡았다가 이런 일정한 형식의 데이터가 있는 경우에는 그다지 적합하지 않다는 점을 알게 되었죠.

그리고 목표가 전혀 모르는 것을 배우는 것이어서는 안됩니다. 저는 비 관계형 데이터베이스를 전혀 모르는 상태로 저런 목표를 세웠기에, 목표를 아예 포기할 수 밖에 없었습니다. 사이드 프로젝트를 하는 동안 NoSQL에 대해 처음부터 배울 수는 없으니까요. 대략적으로 아는 것에 익숙해지거나, 좀 더 전문성을 키우는 수준에서 목표를 정해야 한다고 생각합니다. 공부는 따로 해야합니다.

📝 개발에 들어가기 전에

솔직히 앞서 언급한 The Kanye Story만 읽고 기대에 부풀어 사전 등록 페이지를 올렸습니다.

하지만 유저는 내가 상상한 것을 원하지 않을 수도 있다는 점!
아이디어가 있고 그걸 만들고 싶으면 데이터를 모으는 것이 우선입니다. 가장 단순한 방법으로는 설문조사가 있습니다. 사람들에게 질문을 던져서 내가 생각한 포인트가 실제 페인 포인트가 맞는지, 어떤 방식으로 개선되길 원하는지, 어느 정도로 불편을 느끼는지 등 사람들의 생각을 물어보는 것이 중요합니다.

정확한 페인 포인트를 아는 것은 문제를 정확히 읽는 것과 같습니다. 문제를 풀려면 제대로 읽어야합니다.

✨ 개발에 관해서

아이디어를 바탕으로 프로로타입 디자인을 하고 개발을 진행했기에 중간 중간 추가하고 싶은 기능이 많았습니다. 이 부분에 있어서는 의견이 갈릴 수 있지만, 개인적으로는 어떤 기능이 필요한지에 대해 정확히 정해야 하고, 이 때 필요한 기능은 페인 포인트를 해결하기 위한 최소한이어야 한다고 생각합니다.

앞서 말한 페인포인트를 찾는 과정을 제대로 거쳤다면 꼭 필요한 기능을 찾을 수 있을 것이고, 이것을 다른 어떤 디자인, 개발보다 먼저 해야합니다. 경험 상 항상 프로젝트의 막바지에는 아이디어가 넘쳐나지만 시간 소모적인 아이디어입니다.

📄 프로젝트가 끝난 뒤

프로젝트가 끝나면 뭔가 허한 느낌이 있습니다. 그 순간에 프로젝트를 진행해온 시간을 되새기며 이렇게 회고록을 쓰는 것이 좋은 경험이 될 것이라 생각합니다. 저는 이 글을 쓰면서 많이 배웠고, 나아갈 방향을 생각해볼 수 있었습니다. 무작정 다른 프로젝트를 시작하거나 휴식을 갖는 대신, 제대로 마무리짓고 배울 수 있는 것을 최대한 배우다면 내일이 오늘보다 더 나은 프로그래머가 될 수 있을 거라 생각합니다!

좋은 웹페이지 즐겨찾기