주니어 개발자의 사이드 프로젝트 회고

valley
12 min readApr 26, 2023

--

서론

2022년 3월 어느날 길을 가던 중 반려돌을 판매하는 광고 포스터를 보게 되었다.

반려돌? 요즘 Z세대들은 돌을 키운다고 하더라. (물론 본인도 Z세대)

이걸로 사이드 프로젝트나 해볼까?

한창 Z세대에게 K-MBTI가 열풍인데 MBTI + 반려돌 키우기를 만들어보면 어떨까? 하는 생각으로 프로젝트 팀원을 모으게 됐다.

뭘 만들었는데?

결론적으로 뭘 만들었냐는게 가장 궁금할 것 같아 해당 내용을 글 앞에 위치 시켰다.

간단하게 설명하면,

서비스명은 돌멩돌멩

성격유형검사를 통해 돌멩이를 입양하고, 방을 꾸밀 수 있으며, 자신의 돌멩이방 링크를 친구에게 공유해 친구가 돌멩이 방에 랜덤으로 주어지는 질문에 답하는 서비스이다.

질문에 대한 답변은 이끼를 통해 읽을 수 있고, 돌멩이방을 꾸미는데 사용할 수 있다.

하루한번 출석이끼를 제공하고, 친구가 나를 추천인으로 등록하면, 추천인 이끼를 받을 수 있다.

현재는 서비스를 종료 했으며, 자세한 내용은 인스타그램을 통해 확인할 수 있다.

팀원은 어디서?

나는 지인들을 모아 팀을 만들었다.

프론트 개발자 (본인), 서버 개발자, UI&UX 디자이너, 캐릭터 디자이너 이렇게 팀을 모아 프로젝트를 시작하게 되었다.

아마 지인 중에 할 수 있는 사람이 없다면, 온라인 상으로 구할 수 있다.

요즘 개발자 커뮤니티가 활성화가 잘 되어 있어서, 구하기 어렵지 않을 것이다.

  • okky
  • 생활코딩 페이스북 페이지
  • 인프런 커뮤니티
  • 프로그래머스 커뮤니티
  • 카카오톡 개발자 오픈채팅방

등 프로젝트 팀원 구한다는 제목으로 올리면, 사이드 프로젝트에 관심이 많은 개발자 분들이 많이 지원하게 된다.

경험상 대게 시니어 분이 오시는 경우는 잘 없고, 포트폴리오가 필요한 취준생, 주니어 분들의 지원 비중이 높다.

그리고 처음 보는 사람과 프로젝트를 같이 한다는 것은 쉬운일이 아니다.

돈을 주고 하는 것이 아니다 보니 중간에 흥미가 떨어진 일부 팀원이 돌연 하지 않겠다고 팀을 나가는 경우도 생기고, 오프라인 밋업이 필요한 경우 시간을 맞춰 모이기도 쉽지 않다.

따라서 팀을 만드는 팀장(?)은 팀을 이끌어 나가기 위해 많은 것들을 고려 해야한다. 사이드 프로젝트 이지만, 리더십은 물론이고, 협업 방식과 팀내 규칙, 함께할 팀원의 정보, 예외 케이스등을 잘 파악하고 있어야 한다.

어떻게 진행 됐나?

우리같은 경우는 KakaoTalk, Notion, Google Meet, Google Presentation, Github Issue 등 을 활용해 커뮤니케이션을 진행했다.

KakaoTalk 단톡방이 아닌 Slack을 사용하면 더 좋다. 스레드별 히스토리나 데이터나 파일 관리가 더 용이하기 때문이다. 여러가지 Bot을 붙여 활용할 수 있어서 팀원중 다수가 Slack을 잘 사용하고 있다면, 무료버전으로 도입해보는 것을 추천한다.

Notion 은 일정관리와 회의록 등을 남겨두는데 사용했다.

(어차피 링크 파기 돼서 들어가도 아무것도 안나옵니다 ㅎㅎ)

회의는 초기에는 매주 목요일 마다, 저녁에 온라인으로 약 1시간 정도 진행했다.

아무래도 초기에는 기획안이 분명하지 않고, 플로우나 컨셉 작업일정등을 함께 맞추어 조정해야하는 시간이 꽤 소요 되었다.

초기에는 기획서와 화면 프로토타입 기획에 서로 많은 시간을 쏟고, 오프라인으로 해커톤 처럼 무박 2일로 모여 같이 작업 하기도 했다.

우리의 멋진 UI&UX 디자이너의 프로토타입
우리의 멋진 캐릭터 디자이너의 프로토타입

기획이라는 것 정말 쉽지 않았다. 생각보다 고려해야할 사항들이 많고, 개발하기도 바쁜데, 다른 팀원분들과의 원활한 커뮤니케이션을 위해 매번 생각한 내용을 구두가 아닌 자료를 만들어 공유를 드리는 방식을 택하다보니, 매번 자료를 준비하기도 힘든 부분이 있었다.

하지만 돌이켜 보면, 초반에는 힘들어도 기획서나 자료들이 탄탄해서 개발하는데 큰 시행착오 없이 빠르게 작업할 수 있었다.

갈아 엎다.

개발을 하다가 중간에 갈아엎는 일이 발생했다.

  1. 앱으로 처음 기획을 했었는데, 접근성이 높지 못하다는 판단을 하여, 인스타 공유 바이럴을 통해 확장할 수 있도록 웹으로 변경하게 되었다.

사실 UI같아도 웹이랑 앱은 완전 다른 영역이기 때문에 새로 개발을 하게 되었다.

하지만, 결과적으로는 웹으로 만들어서 더 좋은 아웃풋을 낼 수 있었다.

2. 기획을 바꾸게 되다.

AS-IS

기존에는 온라인 상에서 친구를 맺고 돌멩이가 랜덤으로 주는 하루 한문장의 문답일기를 본인이 쓰는 방식

TO-BE

친구가 링크를 통해 내 돌멩이 방에 들어오면, 랜덤으로 주어지는 질문에 친구가 답변을 달아주는 방식

결과적으로는 이렇게 바꾸니, 마치 Ask와 같은 바이럴 루트를 타게 되어 유저들의 인스타그램 소개와 하이라이트에 돌멩돌멩 링크를 걸어두는 재밌는 효과를 보게 되었다.

사실 이것뿐만 아니라 초기 기획안에서 완전히 벗어나 과감하게 갈아엎고 다시 만들기를 몇번 반복했다.

이를 통해 얻은 교훈도 있었다.

초기에는 언제든 갈아엎을 준비를 하자. 마음의 준비를 하자. 때론 과감해 질 필요가 있다.

개발적인 이야기

개발적인 이야기를 조금 덧붙여 보려 한다.

이야기가 길어질 것 같아 2편으로 포스팅하는게 좋을 것 같지만, 짧게 다루면,

서버는 Spring + Kotlin

DB는 MongoDB

인프라는 AWS 내 서비스

-

프론트는 NextJs, Typescript를 메인 스택으로 사용했고, Vercel로 배포하는 방식을 선택했다.

개발할 때 초기작업에 MSW 의 도움으로 초기 생산성을 높일 수 있었다.

NextJs의 선택은 검색엔진최적화를 편리하게 해주는 장점도 물론 있었지만,

NextJs 자체에서 제공하는 middleware나 이미지 최적화, file route 기반의 path route 제공 등의 편의기능이 너무 좋았다.

무엇보다, 현재 내가 NextJs를 사용하는데 어느정도 익숙해졌다. 라는 점이 있었다.

중간에 getServerSideProps를 오남용 하는 바람에 TTI 타임이 너무 길어져 일부 클라이언트 사이드로 옮기고, 기타 최적화 작업등을 통해 렌더링 속도를 3배 이상 개선 했었다.

MSW 또한 초기에 실제 API를 사용할 수 없고 명세서만을 받은 상황에서 네트워크 단까지 Mocking 할 수 있다는게 엄청난 매력으로 다가왔다.

네트워크 수준에서 발생하는 Loading, Error 등의 처리도 Mocking 할 수 있다는 말은, 나중에 실제 API를 붙였을 때 다른 작업이 거의 필요 없다는 것이다.

자세한 내용은 아래 게시물을 읽어보면 좋다.

https://tech.kakao.com/2021/09/29/mocking-fe

상태관리 는 Jotai 를 사용했다. Redux는 너무 보일러플레이트 코드가 많고, 사실 그정도까지의 고도화된 상태관리를 필요 없었다.

단순 상태의 props drilling을 없애기 위한 방안이 필요했음으로, Context API를 고려했으나, Context API 또한 렌더링 관련해서 신경 써야 하는 부분이 여간 적지 않다. 따라서 Jotai가 가장 적합한 스택이라 고려 하여 사용하게 되었다.

자세한 내용은 아래 게시물을 읽어보면 좋다.

Vercel로 배포한 이유는 프론트는 현재 고도화된 배포 싸이클을 만들 필요가 없었고, 무엇보다 쉽고 빠르다는 점이 우리정도 규모의 사이드프로젝트에 정말 적합 그자체 라는 생각이 들었다. 사실 아직 단점을 크게 못찾았다.

정말 엄청났다. 이것도 말하자면, 할말이 정말 많다. 이건 다른 2편으로 빼고, Nextjs 기반의 사이드프로젝트를 도전하는 개발자 분들 Vercel의 강력하고 편리함을 꼭 느껴보았으면 좋겠다.

수익은?

수익은 애초에 이끼 결제 시스템 없이 광고 수익으로만 가려고 했다.

우리의 유저타겟은 초등학생에서 중학생 사이라 실제 결제의 허들이 높다고 생각했다. 실제로도 사용 유저는 11세 ~ 15세가 가장 많았다.

따라서 광고를 붙이고, 출석이끼를 제공한 것도 유저가 계속해서 들어올 수 있도록 유도하기 위함 이였다.

광고는 애드센스를 붙일 계획이였는데, 왜 그런지 콘텐츠 부족이라는 이유로 계속 심사에서 떨어져서 10번 이상의 시도를 해보고 결국 포기 했다.

실제로 우리 서비스의 콘텐츠는 많았고, 검색엔진최적화 또한 100점, 구글에 연관된 단어만 검색해도 첫번째 페이지 첫번째 게시물로 노출될 만큼 검색엔진에 노출이 잘됐었다. Lighthouse를 통해 받은 점수, Vercel에서 측정해준 성능 점수 모두 100점으로 만점을 받았는데, 대체 어느 부분이 문제인지, 다른 블로그들을 모두 참고해 작업을 했지만, 결국 통과하지 못하고,

카카오 애드핏을 사용하게 되었다.

하지만.. 노출수가 아주 높았고, CTR(광고가 클릭된 횟수를 광고가 게재된 횟수로 나눈 값) 또한 아주 높았음에도 불구하도 수익이 많이 나지 않았다.

한달 서버비용 낼 정도도 안나올 때가 많았다. 이것도 서비스 종료의 원인 중 가장 큰 부분을 차지 했다.

그래서 어땠어?

사실 처음으로 유저에게 배포해본 서비스 치고, 만명 이상의 유저를 한달 조금 넘는 기간 정도만에 확보 하면서 열심히 앞으로 달려나갔다.

아마 더 운영했으면 꾸준히 늘었을 것 같다.

초기에 하루 신규 유저가 2천명 이상 가입하면서 자축도 했다.

CS도 직접 받아보며, 유저분들 이랑 소통도 했다.

인스타그램 링크로 걸어뒀는데, 인스타 그램 자체에 문제가 생겨서 발생했던 이슈였다.

직접 받아보니 대부분의 CS는 친절하지 않다.

CS에 대응할때는 유저가 한큐에 답할 수 있도록 유도하는게 중요하다는 생각을 했다.

어떤 부분이 안되는지, 어떻게 보내주어야 답이 가능한지, 임시 해결방법은 무엇인지 등 미리 템플릿화 시켜서 제공해도 좋을 것 같다.

회사에서도 CS를 받지만, 중간에 담당자 분이 따로 계시기에 내가 고객님과 직접 대답하고 대응한적은 없어서 서투른 부분들이 많았다.

초기에는 거의 유저분과의 스무고개를 진행했었다.🫠

우리서비스를 초기에 아주짧게 페이스북 광고에 넣었었는데 지식인에 이 서비스좀 찾아달라는 글도 올라왔었다.

그리고 부끄럽지만, 인프런 인터뷰도 했다 ㅎㅎ

서비스를 종료하며

정말 인기를 한몸에 받았고, 유저분들이 너무 사랑해주셔서 하루하루가 기뻤다. 처음으로 유저에게 공개해본 프로젝트 이기도 했고, 기획부터 CS 까지 모두 내손으로 해보니까 엄청난 경험이 되었다.

하지만, 비용적인 문제들도 따르고, 각 팀원분들이 본업에 집중하고 다른 새로운 프로젝트들을 시작하면서 계속 운영하기가 어려워졌었다.

많이 슬프지만, 다시 또 언제 열지 모른다. 새로운 모습으로 다시 만날 수 있기를 기도하며!

그리고 함께 해준 우리 팀원분들 모두 감사합니다 ㅎㅎ😍

그리고 유저분들 서비스 재밌다고 해주시고, 서비스 종료에 아쉬워 해주셔서 너무 감사합니다😍

이렇게 종료하여 우리 추억속에 남길지 아님, 또다른 모습으로 새로이 등장할지 모르지만, 나의 첫 개인 서비스 돌멩돌멩 안녕!

-

그리고 많은 주니어 개발자분들!

여러가지 사이드 프로젝트를 도전해보고 실패해보고 성공해보는 경험들을 해보길 바랍니다! 그 사이즈가 크든 작든 여러분들에게 엄청난 경험이 될 것이라고 생각합니다. (그게 수익을 낸다면 더더욱 좋구요 ㅎㅎ)

엄청난걸 하지 않아도 우리의 프로젝트는 늘 멋지니깐요!

--

--