티스토리 뷰

728x90
SMALL

배경

사이드프로젝트를 하고 싶은 마음이 항상 있었다. 그러던와중에 만들고 싶은 프로젝트가 생겨버렸다. 그건 바로 모든 개발자들이 처음에 만드는 투두리스트다. 회사에서 이것저것 일을 하고 멘션을 보다보면 내가 뭘 하고 있는지 오늘 뭘 했는지 잊어버리는 경우가 많았다. 그래서 회사에 데일리 리뷰를 올렸는데(우리 회사에서는 각자 데일리 리뷰를 올리면 동료들이 의견을 제시하기도 하고 응원을 하기도 한다. 강요아님) 투두리스트를 작성하는게 어떠냐는 제안을 받았다. 오늘 적어봤는데 생각보다 만족스러웠다. 그런데 노트에 적다보니 조금 아쉬워서 사이트를 찾아볼까 하다가 그냥 내가 만들기로 했다.

대략적인 계획

일단 투두리스트를 그냥 대충 만들 생각은 없다. 시중에 나와있는 것들이 디자인이며 기능이며 여러가지로 더 좋을 것이다. 그럼에도 만드는 이유는 크게 두가지다.

 

첫번째는 내가 원하는 투두리스트를 만들고 싶어서다. 아무리 살펴봐도 백퍼센트 내가 원하는 기능만 들어가있는 제품은 없다. 내가 직접 기획하고 디자인하고 개발자에게 외주를 맡기지 않는 한 불가능하다. 그런데 나는 가능하다. 잘하진 않지만 프론트, 백엔드, 배포까지 할 수 있기 때문에 혼자서 모든 것들을 처리할 수 있다. 간단하게 생각해봤는데 나는 투두리스트를 혼자만 쓰는게 아니라 여러명이서 공유를 했으면 좋겠다. 글을 공유한다면 당연히 댓글도 만들어야한다. 글을 공유하고 댓글을 만드는 이유를 조금 설명하자면 투두리스트를 공유하면서 서로 응원하고 진행상황을 체크하고 격려하기 위해서다. 약간 sns와도 비슷하다고 볼 수 있다. 태그를 넣어서 검색할 수 있게 만드는 건 어떨까?? 투두리스트 인스타 같은 느낌?? 예를 들어 #개발자 #프론트엔드 이런식으로 올리면 같은 분야의 개발자들이 보고 자극을 얻고 댓글을 남기는 형태다. 그리고 비공개, 친구공개, 모두 공개 등으로 글의 상태도 분류해야 한다. 그리고 클라썸처럼 공간을 만들까도 생각을 했는데 일단 결정적으로 스콥이 너무 커진다. 지금은 회사를 다니면서 남는 시간에 프로젝트를 해야하기 때문에 많은 시간을 할당할 수 없다. 아마 계속해서 투두리스트를 개선해나가고 이용자들이 원한다면(기대는 안한다. 이미 잘 만들어져있는 것들이 너무 많기 때문에...) 확장성은 열어둬야겠다. 생각해보니 확장성을 열어둬도 좋고 열어두지 않아도 좋을 것 같다. 만약 확장성을 열어두지 않는다면 정말 골치아픈 일이 생기게 된다. 하지만 실제 회사를 다니면서도 이런 경우가 항상 생기기 때문에 이렇게 고민해보는 것도 가치있다고 생각한다. 일단 기술구현은 적지 않았는데 댓글에는 소켓을 넣을 것이다.

 

두번째는 새로운 기술을 공부하기 위해서다. 최근들어 새로운 기술을 많이 알게 되었다. yarn berry, monorepo, react query, recoil, nextjs, react18, emotion, nestjs 등등이 있는데 모두 사용해볼 생각이다. 실제로 최근에 이것들을 이용해서 정말 간단한 프로젝트를 만들었다. 간단하게 사용법을 익혔으니 이제 진짜 사용해봐야한다. 회사에 도입하고 싶은 기술들도 있는데 미리 배워서 주도적으로 도입하고 싶다. 특히 모노레포에 관심이 생겼다. 우아한형제들 기술블로그에서 모노레포 글을 봤는데 지인 개발자(우테캠 팀원)와 이름이 똑같아서 그분인가?? 했는데 그분이였다. 개인 깃헙에 레포도 있어서 참고할 생각이다. https://github.com/kowoohyuk/monorepo-template
그리고 저번에 공부거리를 추천해주신 분이 있는데 거기에 모노레포도 포함되어 있었다. 모노레포는 무조건 사용해볼거다.

세번째는 지속적으로 프로젝트를 유지보수하고 싶어서다. 실제 서버에 배포하는건 시작에 불과하다. 유지보수가 진짜다. 내가 1년전에 짠 코드를 보면서 유지보수를 하고 라이브러리들을 갈아끼우고 버전 업데이트를 하고 웹 최적화를 하나하나 적용시키는 이런 과정이 엄청 중요하다. 그런데 지금까지 안하고 있었다. 블로그에서 쓴 생각정리 중에 이와 비슷한 말을 꽤 여러번했다. 그리고 드디어 시작해보려고 한다.

프론트

프론트에서 사용할 기술들을 대략적으로 생각해보겠다. 일단 사용할 라이브러리 및 프레임워크는 react18, nextjs, recoil(redux saga), react query, yarn berry, monorepo, web socket, emotion,jest, cypress, react testing library, storybook이다. 현재 회사에서 redux saga를 사용하고 있어서 recoil말고 redux saga를 사용할 수도 있다. 이건 조금 생각해봐야겠다. 그리고 서버사이드렌더링과 웹최적화 sso, 테스트를 신경써서 해볼 생각이다.

백엔드

백엔드는 nestjs, mysql, typeorm, redis(memcached), google oauth를 이용할 생각이다. 특별한 건 없고 jest, supertest를 이용한 단위테스트, 통합테스트 정도만 할 생각이다. 그리고 당연하지만 계층별로도 테스를 할 생각이다. 예전에 서비스 계층을 빠트렸는데 꼭 해야한다는 조언을 받았다.

배포

배포는 그냥 aws ec2, github action을 이용할 생각이다. 자동배포안한지 좀 오래돼서 가물가물한데 예전에 정리해둔 블로그를 보면서 다시 해볼 생각이다. 열심히 정리했는데 다시 보니 글을 못쓴것같다. 내가 다시 보면서 알아볼 수 있을까?? 검색엔진에도 꽤 상위권에 뜨고 내 글을 참조한 글들도 많은데 좀 죄송스럽기도 하다... 다시보면서 더 깔끔하게 정리할 수 있는 부분이 있다면 다시 정리해봐야겠다.

시간 계획

어느정도 시간을 잡아야할까?? 회사일이 많으면 그 날은 시간을 못 쓸수도 있다. 그리고 개인사정으로 공부할 시간이 없을 수도 있고 다른 공부도 하고 있기 때문에 여기에 올인할 수도 없다. 좀 애매하다...

 

백엔드부터 살펴보자. nestjs는 간단하게 써봤지만 아직 기본 보일러플레이트도 만들지 못했다. 그래서 기본 코드잡는데도 시간이 꽤 필요하다.(2d) oauth는 사용해봐서 크게 어려움은 없을 것 같다. 태그도 대충 어떻게 쓰는지 기억은 나서 금방 할 것 같다. 팔로잉 팔로워도 대충 해보긴 했는데 크게 어려울것같지는 않다. 다만 서로 팔로잉을 한 경우에 친구를 맺어줘야 하는데 db 속도도 조금 신경을 써야할 것 같다. explain으로 속도도 확인해보고 싶은데 시간이 너무 많이 걸릴까봐 걱정이다. 댓글이나 게시글에 소켓을 넣어줘야하는데 이것도 시간이 좀 필요하다.(1d) 검색같은 경우는 elastic search를 이용하고 싶다. 아마 시간이 꽤 걸릴것같다.(2d) 상황을 봐서 시간이 부족하다면 나중에 구현하자. 일단 기본 검색을 만들고 자동검색은 나중에 추가하자. 캐시도 제대로 사용을 안해봤는데 제대로 공부하려면 꽤 시간이 필요해보인다.(2d) 대충 봤는데 elastic search, 캐시를 제외하고 빨라도 7일은 필요할 것 같다.

 

배포는 그냥 깃헙액션쓰면되는데 배포는 장담할 수가 없다. 꽤 많은 이슈들을 처리했고 방법도 배웠지만 예측할 수 없다. 그리고 pm2를 사용해서 서버는 무중단 배포를 했지만 nginx를 이용한 프론트 서버는 무중단 배포를 하지 않았다. 대충 보니까 로드밸런스를 이용해서 처리할 수 있다는 것 같은데 학습이 필요하다. 지금 나는 aws 관련된 지식이 얕다. 넉넉하게 2일이 필요하다.

 

프론트는 일단 익숙하지 않은 기술들이 있지만 리액트는 할줄알기 때문에 크게 어려움은 없다. 모노레포와 스토리북은 아얘 경험이 없는데 꽤 시간이 필요할 것 같다.(2d) 그리고 나는 프론트개발자이기 때문에 css에는 좀 신경을 써야한다. 제플린이나 피그마를 다뤄야하나?? 그러기엔 너무 시간이 없다. css 라이브러리를 사용하고 필요한경우에만 커스텀해서 사용하는걸 생각하고 있다. (그러면 css를 가져다 쓰는건데 신경쓴게 아닌가??) 서버사이드렌더링에 대한 이해도 없어서 학습이 좀 필요하다. dehydrate 같은 기본 개념을 봤는데도 바로 이해하지 못해서 애를 먹은적이 있었다. 프론트개발자인 만큼 백엔드보다 더 꼼꼼히 볼 생각이다. 그동안 테스트코드도 백엔드를 더 신경써서 만들었던 것 같다. 그래서 결론은 못해도 7일은 필요하다.

 

대략저긍로 생각해봤을 때 16일 정도가 필요하다. 아직 에픽을 나눈것도 아니긴하지만 대략적으로는 그렇다. 보름정도의 시간이 필요한건데 회사를 다니는 와중에 이 시간을 어떻게 내야할까?? 주에 20시간(2d)는 여기에 시간을 쏟아야할 것 같다. 그래도 두달이라는 시간이 필요하다. 투두리스트 만드는데 두달이라니.... 뭔가 잘못됐다. 일단 내일부터 에자일 방법론에 맞게 에픽을 정하고 스프린트 회의(혼자서 회의?)를 해보자.

728x90
LIST
댓글
공지사항