개발자 친구와 함께 둘이서 4월 2일 세 줄 독후감 서비스를 시작했어요. (https://www.sejulbook.com/)
우리의 목표는 6월 말까지 가입자 50명이에요.
(참고로 현재까지 누적 가입자는 30명이랍니다 :)
오늘은 세 줄 독후감 프로젝트에 대한 전반적인 내용은 '데이터 분석가' 중심으로 풀어보려 해요.
- 그래서 세 줄 독후감이 뭔데?
책을 좋아하게 된 2021년부터 블로그에 기록하고 싶었어요.
근데 블로그에다가 책 한 권을 다 적고 있는 저를 발견하게 됩니다.
"이러다 힘 빠져서 꾸준하게 못 쓰겠구나"
그렇게 책을 기록하는 데 부담을 덜고자 세 줄로 요약해서 기록하기 시작했어요.
- 프로젝트 제안 및 역할
개발자 친구가 겨울방학동안 프로젝트 아이디어를 고민하던 와중
제 블로그에 있는 세 줄 독후감을 인상 깊게 봐줬어요.
그리고 '세 줄 독후감'을 콘셉트로 프로젝트를 함께 해보면 어떻겠냐고 제안했고, 흔쾌히 수락했습니다.
저는 DB 설계, 비즈니스 로직에 필요한 쿼리 짜기, 가입자 50명 담당까지 세 가지 역할을 맡게 되었어요.
- 처음이자 마지막일 것 같은 DB 설계
솔직히 처음에는 DB 설계를 만만하게 봤습니다.
"그냥 테이블 만들고, 연결만 해주면 되는 거 아님?"
그리고 DB 설계하기 위해 자료를 찾으면서 겸손도 함께 발견했습니다.
고려해야 할 것들이 정말 많았거든요,,
"무결성? 유연성? 확장성? 아니 관계는 또 뭐 이렇게 많아? Fxxking.."
그래도 어쩌겠습니까 해내야죠
DB 설계 - 테이블 분리
DB 설계에 있어서 효율적인 저장공간, 효율적인 쿼리 작성을 위해
테이블 분리에 대한 이야기를 개발자 친구와 정말 많이 나눴어요.
주로 테이블을 분리할지, 없앨지에 대한 고민을 할 때는
"~했다면?"라고 가정을 하며 판단을 주로 내렸어요.
예를 들어, 세 줄 독후감 임시저장 테이블에 대한 고민을 한다고 쳐요.
그러면 "사용자가 세 줄 독후감을 발행하지 않고 임시저장을 했다면?",
"세 줄 독후감을 발행했다가 임시저장을 했다면?" 라고 생각해 보는 거예요.
그렇게 생각하다 보면, "임시저장을 했는지 안 했는지가 중요한 거니깐 굳이 임시저장 테이블을 만들지 않고,
기존 세 줄 독후감에 임시저장 컬럼 하나를 만들어주는 게 더 효율적이겠구나"라는 판단을 내리게 되더라고요.
DB설계 - 관계 설정
DB 설계에 있어서 생각보다 쉬웠던 것은 테이블 간 관계 설정이었어요.
다대다관계는 대량의 중복 데이터가 발생할 수 있기 때문에 반드시 풀어줘야 해요. 그러면 우리가 생각해야 할 것은 '일대다'인지 '일대일'관계인지에 대한 여부만 판단해 주면 돼요.(다대다관계라면, 테이블을 분리해 줘야겠지요.)
관계 설정에서 가장 도움이 됐던 것 또한 "~했다면?"라고 가정하는 거예요.
예를 들어, 유저 테이블과 세 줄 독후감 테이블의 관계 설정을 한다고 쳐요.
그러면, "유저는 무조건 한 명만 있겠지? 그렇지만 그 유저는 여러 가지의 독후감을 쓸 수 있겠지?
아 그러면 유저 테이블이 '일'이고 세 줄 독후감 테이블이 '다'인 관계구나!"라고 판단해 주는 거예요.
컬럼 이름에 대해서 강조
각 테이블에 들어가는 컬럼 이름을 그냥 제가 알아볼 수 있도록 지정해 줬어요.
하지만 저만 이해하고 있으면 되는 게 아니더라고요.
팀원 전체가 쉽게 이해할 수 있는 이름으로 컬럼을 지정해주는 게 중요해요.
실제로 컬럼 이름에 대한 이해를 잘 못하고 있어서 동상이몽 한 이력이 있어요.
완성된 ERD
SQL 공부를 하면서 테이블에 대한 이해를 하기보단, 쿼리에 대해서만 이해를 하려고 했어요.
하지만 DB 설계 과정에서 배운 테이블에 대한 이해 덕분에
join, 서브쿼리를 활용한 비즈니스 로직을 짤 때 큰 도움이 되었어요.
DB설계에 도움이 많이 된 블로그: https://velog.io/@sontulip/how-to-db-design
- 비즈니스 로직에 필요한 쿼리 작성
* 비즈니스 로직이란? 컴퓨터 프로그램에서 실세계의 규칙에 따라 데이터를 생성·표시·저장·변경하는 부분을 일컫는다.
지금까지 책을 통해서 SQL을 공부하기만 했어요.
그래서 언제 SQL을 활용할 수 있으려나 하던 찰나, 이번 프로젝트에서 활용할 수 있는 기회가 왔답니다.
테이블 생성 쿼리
완성된 ERD 바탕으로 MySQL에 테이블 생성 쿼리를 다 짰는데 문제가 발생합니다.
개발자 친구가 "우리가 사용하는 DB 배포 사이트(PlanetScale)에서 외래키 제약 조건을 지원하지 않는다."라고 말했어요.
즉, 테이블 간 외래키 제약조건을 지워야 한다는 말이에요.
이 말을 듣자 "아니 그러면 조인 없이 쿼리는 어떻게 짜라는 거지.."라는 생각이 먼저 들더군요.
결국, 개발자 친구와 수많은 카톡을 주고받으며 내린 결론은 외래키를 사용하지 않기로 했어요.
외래키를 사용하지 않고 어떻게 쿼리를 작성했는지에 대해서는 추후에 기록하겠습니다.
검색 기능 개선
세 줄 독후감에는 책 정보, 서재 등 검색 기능이 있어요.
그중에서 책 정보는 API를 사용하여 가져오고 있는데, LIKE 함수를 통해 검색 쿼리를 작성하면 시간이 너무 오래 걸렸어요.
이를 개선하기 위해서 FULL TEXT INDEX를 활용했어요. 이에 대해서도 추후에 기록하겠습니다😅
- 가입자 50명 가보자고
앞선에 말씀드렸듯이 6월 31일까지 목표는 가입자 50명이에요.
"가입자를 어떻게 늘릴까" 고민을 참 많이 했어요. 고민의 결과들을 들려드리려 해요.
인스타그램
가장 먼저 떠오른 건 인스타 계정을 키워서 홍보를 하는 것이었어요.
계정을 키우면서 중요한 것은 '꾸준함'과 '책 관련 콘텐츠'라고 생각을 했어요.
그렇게 '하루 15분 책 읽고 전하고 싶은 내용을 기록하기'와 '한 권을 다 읽으면 세 줄 독후감으로 기록하기'
이렇게 두 가지 콘텐츠가 나오게 되었어요.
https://www.instagram.com/sejulbook/
위 링크는 세 줄 독후감 계정이에요😄
가장 중요한 것은 인스타 계정을 통해서 가입자나 방문자가 있는지에 대한 여부겠죠?
구글 애널리틱스를 통해서 확인한 결과, 예상한 것보다는 방문자가 적었어요.
그렇지만, 사람들에게 세 줄 독후감을 꾸준하게 노출시킬 수 있는 수단으로 활용하기에는 좋다는 생각이 들어
지금까지도 꾸준하게 콘텐츠를 발행하고 있어요.
에브리타임 홍보게시판
인스타 계정뿐만 아니라 다른 홍보 수단도 필요했어요.
그러다, 예전에 홍보게시판을 통해서 공모전 팀원들을 구했던 기억이 나서 바로 글을 올리고
만나는 친구들마다 각 대학교 게시판에 홍보글을 올려달라고 부탁을 했답니다.
구글 애널리틱스로 확인한 결과 385명의 방문자들 중 70%가
에브리타임을 통해 유입될 정도로 홍보 효과가 좋았어요.
앞으로의 계획
목표를 달성까지 20명이 남았어요.
현재는 세 줄 독후감 책갈피를 계획 중이에요.
책갈피 디자인은 앞면에는 세 줄 독후감 로고만, 뒷면에는 세 줄 독후감 QR코드를 넣음으로써
지속적인 노출과 사이트 방문을 유도할 예정이에요.