연말을 맞아 넥스터즈 회고 모임에 참여했었는데, 한 해 동안 무슨 일이 있었나 정리해 봤더니 일도 많이 했고 이것저것 활동도 많이 하고 다녔다. 그 중에서 특히 기억에 남는 일을 중심으로 회고를 정리해봤다.
💼 미리캔버스 2.0 리뉴얼
원래 우리 회사 프로젝트는 MVVM을 약간 변형한 자체 아키텍처로 구성된, ES6 클래스 기반 객체지향 바닐라 프로젝트였다. 그런데 회사 자체 아키텍처 구조를 가져가다 보니 진입 장벽이 높고 기존 구성원들도 아키텍처를 제대로 이해하지 못하는 문제가 발생했다.
그래서 올해에는 캔버스 영역을 제외한 주변부 UI를 Next.js 기반으로 리뉴얼하는 프로젝트를 진행했고, 현재 베타 서비스를 운영하고 있다.
사실 나는 2.0 리뉴얼 프로젝트 초창기에는 참여할 계획이 없었는데, 추후 진행해야 하는 에픽 이슈와 크게 관련된 부분이 있어서 프로젝트 구조 설계부터 참여하는 게 좋을 것 같아 참여 제안을 드려서 합류하게 됐다.
프로젝트에 참여하게 되면서 기능 개발 외에도 디자인 시스템 컴포넌트 개발, API 호출 함수 생성 자동화, ESLint 커스텀 룰 작성 등의 작업도 진행했다. 기존에 주로 하던 캔버스 작업과는 다르게 생산성과 관련된 작업에도 많이 참여하면서, 개발자 경험에 대해 많이 생각하게 되었던 것 같다.
새로운 기술을 도입해 볼 수 있다는 점은 좋았지만 아쉬운 점도 있었다. 기존에 아키텍처가 정해져 있던 때에는 UI 로직과 비즈니스 로직을 분명하게 분리해서 작성해야 한다는 컨벤션의 역할을 아키텍처가 해주었는데, 새로운 프로젝트에서는 이 부분이 잘 지켜지지 않는 것 같다. 뷰 컴포넌트 안에 UI 로직과 비즈니스 로직이 구분 없이 복잡하게 얽혀 있어서 덩치도 크고 로직도 복잡해지는 경우가 많이 발생했다.
이런 문제를 해결해 보고 싶어서, 2023년 하반기에는 UI와 비즈니스 로직을 어떻게 구분할지, 그리고 그 기준을 다른 사람들에게 어떻게 전파할지에 대해서 가장 많이 고민한 것 같다. 그러다 예전에 추천받은 ‘쏙쏙 들어오는 함수형 코딩’ 책을 읽게 됐는데, 이 책에서 인사이트를 많이 발견했던 것 같다. 이 부분에 대해서는 나중에 따로 포스팅해 보려고 한다.
테스트에 대해서도 많이 고민하고 있다. 일정이 많이 급했던 프로젝트라 테스트 작성을 거의 하지 못했는데, 그러다 보니 나중에 리팩토링을 수행할 때 기능이 똑같이 동작한다는 걸 보장하기 어려워서 힘들었다. 그래서 프론트엔드에서는 어떻게 유의미한 테스트를 잘 작성할 수 있을까를 고민하고 있다. Jest 기반의 단위 테스트부터 Testing Library를 활용한 컴포넌트 테스트, Storybook Interaction Test 등 다양한 시도를 해보고 있다.
좋은 구조를 고민하면서 코드를 작성하는 것도, 테스트를 작성하는 것도 하면 좋다는 걸 모두가 알고 있지만 잘 하지 못 하는(않는?) 일인 것 같다. 왜 그럴까를 생각해 보다가, 구체적으로 어떻게 해야 하는지 잘 몰라서 그런 경우가 많은 것 같다는 생각이 들었다. 프론트엔드 아키텍처든 테스트든 이론적으로 어떻게 하면 좋다는 내용은 많지만, 실제 사례가 공유되는 일은 많이 없다. 실제 프로젝트는 Counter 예제보다 훨씬 복잡한 기능으로 구성돼 있으니, 응용하기 어려울 수밖에 없다.
그래서 내가 고민한 내용과 내가 작성한 코드를 다른 사람들에게 많이 공유하면 그 내용이 레퍼런스가 되어서 누군가에게 도움이 될 수 있겠다고 생각했다. 그런 생각에 2023년에는 개인 기술 블로그와 회사 위키에 내가 겪었던 문제와 해결 방법에 관한 글을 많이 작성했다. 특히 회사에서는 동료 개발자 분들과 비즈니스 코드에 대해 논의하다가 프로젝트 내부 비즈니스 코드를 작성하는 컨벤션을 제안하기도 했다.
프론트엔드는 자바스크립트를 사용해서 언어에서 제약하는 부분이 적기도 하고, 프레임워크도 다양해서 다른 분야에 비해 모범 답안이 없는 것 같다. 그런 점이 어려우면서도 어떻게 하면 더 잘 만들 수 있을지를 고민하는 게 재미있어서 프론트엔드 개발을 계속 하게 되는 것 같다. 언젠가는 내가 고민한 내용을 토대로 복잡한 프론트엔드 세상에서 어려움을 겪는 입문자를 위한 가이드 문서나 강의를 만들어 보고 싶다.
🎉 반다라트 앱 출시 feat. 넥스터즈 PM
넥스터즈 23기에 참여하면서, ‘만다라트 에디터’를 주제로 프로젝트를 제안했고 감사히도 내 주제가 채택되어 PM이자 웹 프론트엔드 개발자로 프로젝트에 참여하게 됐다. 우리 팀은 어쩌다 보니 넥스터즈의 모든 직군(iOS, Android, 디자이너, 웹 프론트, 백엔드)이 모두 모인 8명의 대형 팀이 되었다.
나는 웹 프론트엔드를 맡았는데, 사실 우리 서비스는 앱이 중심이다 보니 웹이 중요한 게 아니라 웹 비중이 적어서 개발보다는 PM 역할에 좀 더 집중했다. 대신에 평소 해보고 싶었던 서버 사이드 렌더링 구현에 도전해봤다. 웹 개발 얘기는 이 포스팅에 더 자세히 써뒀다.
넥스터즈 PM은 생각보다 발표를 많이 한다. 한 기수 동안 네 번을 발표했다. 제일 떨리는 건 첫 세션 때 프로젝트를 소개하는 발표인 것 같다. 이 때는 같은 팀원도 없이 혼자서 준비해서 내 프로젝트를 어필해야 하는 거라 더 어려운 것 같다. 발표가 끝나면 질문도 받는데, 생각해둔 기술 스택이나 디자인 컨셉이 있는지, 이런 엣지 케이스엔 어떤 정책을 가져갈 건지, BM이 뭔지도 물어보기도 해서 좀 준비를 많이 해가야 한다..
PM의 주요 업무는 팀 회의 주최, 일정 관리, 팀 내 의견 조율 등등인 것 같다. 프로젝트 초기에는 PM이 아이디어 주인이기도 하고 프로젝트에 대해 가장 많이 알고 있는 사람이다 보니 특히 의사결정을 해야 할 일이 많다. PM이 초반에 중심을 잘 잡고 결정을 바로바로 잘 내려 줘야 프로젝트가 방향을 잘 잡을 수 있을 것 같다.
감사하게도 모든 팀원이 이 프로젝트에 진심으로 적극적으로 임해줬다. 회의 때 다른 서비스의 레퍼런스를 한가득 조사해 오거나, 생각지도 못한 아이디어를 내서 고민을 해결해 주기도 했다.
우리의 가장 큰 고민은 9x9 만다라트는 모바일 화면에서 보여주기에는 너무 복잡해서 가독성이 너무 떨어진다는 점이었다. 그런데 누군가 이걸 아예 줄여버리면 어떻겠냐는 아이디어를 냈고, 그때부터 ‘만다라트’라는 기존의 모양을 따라갈 필요가 전혀 없다는 걸 깨달았다. 중요한 건 모양이 아니라 큰 계획을 작은 단위로 구체화해 나가는 행위이기 때문이다.
이 아이디어 덕분에 지금의 바람개비 모양의 반다라트 서비스가 만들어지게 됐고, 가독성과 편의성, 직관성을 모두 잡은 UX를 구현할 수 있게 됐다.
이런 아이디어가 나올 수 있었던 이유는 자유롭게 어떤 생각이든 말해도 다들 존중해주고 같이 고민해주는 분위기였기 때문이었던 것 같다. 그리고 새로운 관점의 아이디어를 말하는 걸 주저하지 않는 팀원이 있어주었던 덕분에 다른 팀원들도 편하게 새로운 아이디어를 말할 수 있었던 것 같다.
짧은 기간 안에 출시를 할 수 있는 가장 중요한 전략은 ‘욕심 버리기’인 것 같다. 넥스터즈는 2개월 동안 활동하는데, 첫 한 달은 디자인, 나머지 한 달 동안 실질적인 기능 개발을 한다고 생각하고 일정을 짜야 한다. 그런데 MVP 이상의 기능을 조금이라도 욕심내는 순간 출시는 불가능하다고 봐야 하는 것 같다. 우리도 하고 싶은 건 정말 많았는데, 그걸 다 덜어내고 ‘만다라트 작성하기’ 기능만 구현하니 2개월이 끝나 버렸다.
그래서 넥스터즈 활동이 끝난 후에도 작업을 이어가고 있다. 활동 기간처럼 매번 모이긴 어렵지만, 격주로 온라인 회의를 하면서 아주 조금씩 천천히 새로운 기능을 준비하고 있다. (너무 고맙게도 거의 모든 팀원이 프로젝트를 계속 이어나가는 데 동참해줬다)
다운로드 통계를 보니 외국에서의 다운로드도 조금씩 발생하고 있어서, 국제화를 적용하면 외국 유저도 많이 모을 수 있겠다는 생각이 들어서 영어 국제화를 추가했다. 이제는 소셜 로그인, 목표 추천과 같은 편의 기능을 준비하고 있다.
그리고 홍보도 하지 않았는데 어디서 입소문이 도는지 꾸준히 다운로드 수가 늘고 있다. 특히 새해를 맞아서 엄청난 우상향 그래프를 그렸고, 일간 반다라트 생성수는 100회를, 구글 플레이스토어 총 다운로드 수는 500회를 넘겼다...!
앞으로도 반다라트 팀원들과 재밌고 유익한 서비스를 만들어가 보려고 한다 🙂 올해도 잘 부탁해!!
👩💻 OSSCA 지역 스프린트 @청주 멘토링
작년에 참여했던 OSSCA 멘토님께 제안을 받아, 이번에는 내가 멘토로서 OSSCA에 참여하게 됐다. 멘토링은 5년차를 채우기 전에 해보고 싶었던 일 중 하나였는데, 정말 감사한 기회로 생각보다 빠르게 목표를 이루게 됐다.
행사 당일이 젤다의 전설 2 발매 예정일이어서 3일 내내 게임하려고 월요일에 젤다 휴가를 써 둔 상태였는데 나중에 행사 날짜가 잡혀서 계획은 무산돼 버렸다. 다행히 연차를 미리 써둔 덕분에 월요일에는 하루 종일 게임했다
우리 팀은 참여한 학생들이 각자 적어도 하나의 PR은 머지했으면 했다. 그리고 이 날을 기점으로 새로운 Release를 배포해서, 자신의 작업이 실제 마켓플레이스에 배포되는 경험을 해볼 수 있었으면 했다. 그래서 비교적 쉽게 해결할 수 있는 UI 이슈 위주로 이슈를 마구 생성했다.
다행히도 6명의 멘티 분들 모두 각자 하나 이상의 이슈를 해결해서 PR을 올린 후 머지까지 진행했고, 이 날 새로운 버전도 릴리즈했다. 짧은 시간이었는데 열심히 참여해 주시고, 할당한 이슈를 해결하는 것 뿐만 아니라 PR 리뷰에도 적극적으로 참여해 주셔서 감사했다. 좋은 협업 경험으로 남았으면 좋겠다.
아쉬운 점은 1박2일 기간 동안만 진행된 행사라 시간이 넉넉하지 않았다는 점이다. 문제에 대해 혼자 고민해 보실 수 있도록 힌트만 드리고 싶었는데, 시간이 부족해서 내가 생각하는 정답을 그대로 알려드릴 수밖에 없었던 점이 너무 아쉬웠다. 그래도 내가 알고 있는 것을 어떻게 잘 전달할 수 있을지에 대해 고민해 보게 된 기회였던 것 같다.
🖊️ 글또
이왕 글을 쓴다면 재밌는 글을 쓰고 싶었다. 재밌는 글을 쓰려면 내가 직접 프로젝트에서 겪은 문제의 해결 방법과 배운 점을 써야겠다고 생각했다. 그래서 회사 업무나 사이드 프로젝트를 하면서 배운 것들을 중심으로 글을 썼고, 예제를 만들어야 한다면 내가 직접 작성한 코드로 구성했다.
아쉽게도 글또 8기 활동 중에는 중반 쯤에 잠깐 번아웃이 와서 글을 작성하지 못한 주도 있고, 스터디를 위해 준비한 내용을 그대로 올려서 때운 주도 있었다. 이번 9기 활동에도 참여하고 있는데, 이번엔 잘 조절해서 끝까지 재밌는 글을 올리며 완주해 보고 싶다.
글또에서 가장 많이 배운 게 있다면 회고하는 방법인 것 같다. 글또에서는 회고를 정말 많이 한다. OT를 듣고 나서, 빌리지 반상회를 하고 나서, 글또가 끝날 때도 설문조사로 회고를 진행한다.
예전에는 어떤 일을 시작하는 이유가 큰 의미 없이 ‘재미있어 보여서’ 였던 경우가 많았다. 그래서인지 나중에 돌이켜 봤을 때 아쉬움이 남는 활동이 많았던 것 같다. 그 이유를 지금 생각해 보면, 활동을 시작하기 전에 그 활동을 하는 목적을 생각해 보지 않았고, 활동이 끝난 후에 내가 했던 고민과 배운 점을 기록하지 않았기 때문인 것 같다.
글또 프론트엔드 반상회에 참여했을 때, 반상회를 시작하면서 글또 창시자(?) 성윤님께서 오늘 반상회에서 얻어가고 싶은 것을 생각해 보고, 그걸 달성하기 위해 어떻게 해야 할 지도 고민해 보라는 말씀을 해주셨다. 이 얘기를 들으면서 활동에 참여하는 마음가짐에 대해 다시 생각해보게 된 것 같다.
그 후로 나만의 회고 템플릿을 만들어서, 내가 올해 참여했던 활동에 대해 늦게나마 회고를 작성해 봤다. 이 활동을 하게 된 이유와 이루고 싶은 목표를 적고, 활동이 끝난 후에는 4F와 KPT 회고, 기술적으로 고민했던 부분을 정리했다. 이것도 따로 정리해서 포스팅해봐야겠다.
🚚 서울 이사
대학 입학 후부터 수원에서 자취를 하고 있었는데, 회사 취업 이후에도 이사의 필요성을 느끼지 못해서 1년 반 동안 그대로 수원에 살고 있었다. 그 동안 서울 구로구에서 수원까지 편도 1시간 반 거리를 통근했다. 다행히 재택근무가 가능해서 일주일에 두 번 정도는 재택을 했지만, 점점 회의나 협업이 많아지면서 출근을 할 수밖에 없어졌다.
그래서 올해 6월 말에 관악구로 이사를 오게 됐다. 집에서 회사까지 30분 밖에 안 걸려서 아침 10시에 일어나도 지각하지 않고, 여름에는 퇴근하고 집에 와도 해가 떠 있었다. (충격) 진작 이사할걸;; 집도 내가 원하던 조건에 딱 맞는 집이라 아주 만족하며 살고 있다.
2024 목표
(TODO: 내용 추가)
- 건강하게 살기
- 규칙적인 생활
- 주변 사람들에게 잘 하기
- 해외 여행 가기
사실 2024년이 시작된 지 일주일이나 지났는데 추상적인 목표밖에 세워두질 않았다. 구체적인 액션 플랜은 반다라트를 사용해서 작성해 보면 좋을 것 같다. ㅎ