같이 JS 스터디를 진행하던 JH 님께서 테오의 스프린트가 좋았다고 언급해주셨다.
필자는 평소에도 해커톤이라던가, 짧은 기간 동안 무언가를 몰입해서 만드는 프로세스를 몸소 겪어 보고 싶었다. 그러나 올해 1월에 열렸던 다른 해커톤 지원에 떨어졌었고, ICT 인턴쉽 합격 이후 입사 준비를 나름대로 진행하고 있던터라 처음에 스프린트 공고가 올라왔을 때는 별 생각이 없었다.
하지만 같이 스터디를 진행했던 JH 님께서 예전에 12기에 참가하셨다면서 되게 좋았다는 말을 해주셨고, 덕분에 스프린트를 신청해야겠다는 용기가 생겨 냉큼 지원서에 이름을 올리게 되었다. 난생 처음 보는 분들과 팀을 이루어 5일 동안 협업을 진행하는 과정이었고, 무엇보다 피그잼 과 스프린트 기법을 활용한 진행이 필자의 이목을 사로잡았다.
신청서에는 내가 어떤 기술 스택을 사용할 수 있는지, 이번 스프린트에서 어떤 것을 얻어가고 싶은지 등등.. 자신의 목표를 대략적으로 서술하였다. 사실 혼자서 개발하며 협업하는 기회를 얻기가 쉽지 않다. 작년의 내가 뼈저리게 느낀 점이며 올해는 다양한 사람들과 많은 경험을 나눠야겠다는 다짐을 하게 된 계기이기도 하다.
그렇게 시간이 지나 메일로 스프린트가 시작될 것이라는 안내를 받았고, 5일 간의 대장정이 마침내 시작되었다. 무척이나 떨리는 마음을 안고 당일 안내 받은 디스코드 방으로 접속하였다.
자신이 만들고 싶은 서비스를 간략하게 소개하는 글을 작성해오라는 스프린트 지침 과제가 있었기에, 나는 평소에 내가 생각했던 토이 프로젝트 주제 중 하나인 비밀이야! 를 소개하였다.
게다가 처음 발표를 내가 시작하게 되어서 상당히 당황했지만... 나름대로 내가 기획한 서비스에 대해 설명하고 다른 분들의 호응을 유도하였다. 테오도 처음이신데 발표를 굉장히 잘 하셨다며 칭찬했던 기억이 난다. (아싸)
그 이후에도 다른 분들의 발표가 이어졌는데, 필자는 개인적으로 본인이 기획한 아이디어를 진행하고 싶었지만, 솔직히 아이디어의 한계가 너무 뚜렷했고 특색 있는 주제는 아니라고 생각해서 반쯤 기대를 접은 상태였다. 결국 그 예상은 그대로 맞아 떨어졌고, 공감 수 부족으로 인해 "비밀이야!" 는 쓸쓸히 퇴장하였다.
그렇게 낙동강 오리알이 되어 어느 팀에 들어가야 하나 고민하던 와중, 라울이 제안한 이모힙합 이라는 아이디어에 유독 시선이 쏠렸다. 음악을 하나의 이모지로서 표현할 수 있다니. 이 얼마나 MZ 스럽고 Young 한 주제란 말인가? 약간의 고민 끝에 필자는 이모힙합 팀에 이모지를 내려놓았고, 필자를 포함해서 총 7명 의 팀원이 모이게 되었다.
특히 하랭의 경우 본인이 정한 아이디어가 본선까지 올랐음에도 불구하고 라울의 아이디어를 채택한 것이 아주 인상 깊었다. 나중에 이유를 묻자 이 주제가 더 끌려서 선택했다고, 납득이 가는 사유에 필자도 고개를 끄덕이며 따봉을 날렸다.
1일차에 진행된 팀 캔버스는 팀 구성원을 알아가는 시간 이었다고 생각한다. 개인적으로 침묵을 병적으로 싫어해 어색한 분위기를 최대한 타파하고자 했고, 덕분에 만장일치로 팀 MC 에 선정되는 영광을 누렸다. 솔직히 테오가 MC 투표를 진행하라고 말했을 때 반쯤은 나겠구나 싶어 내가 하겠다고 코멘트를 남겼다. (...)
또한 피그잼 을 활용하여 각자의 의견을 나누는 방식이 인상 깊었다. 단순히 글로서 의견을 표현하게 되면 생각을 정리하는 과정에서 시간을 오래 잡아먹는데, 피그잼의 경우 내가 생각한 것을 그대로 표현할 수 있는 좋은 수단이라고 생각했다.
이후에는 각자가 이루고 싶은 목표와 장단점, 그리고 협업을 하면서 반드시 지켜야 할 규칙 등을 이야기하는 시간을 가졌다. 혼자서 진행을 한터라 숨이 턱턱 막혔지만 팀원 분들의 호응 덕분에 MC 역할을 무사히 마쳤다.
이 날은 테오가 강조했던 타이머 사용 이 빛을 발하는 순간이었다. 한정된 시간에 각자의 의견을 이야기 하면 조금이라도 생각을 정리하게 된다는 의도가 정확히 맞았다고 생각한다. 개인적으로 시간을 정하지 않으면 이야기 간의 편차가 크다고 생각했는데, 이렇게 타이머를 맞추니 모든 팀원이 균일하게 대화를 나누어 인상 깊었다.
10시에 시작된 일정은 새벽 3시가 되어서야 끝이 났고, 회의를 마무리 하기 전 팀원 분들과 github 주소와 velog 주소를 교환함으로서 1일차 일정을 마무리 지었다.
여담으로 이때 모승과 테오가 우리 팀의 게더에 깜짝 방문했는데, 필자에게 MC에 자질이 있다는 칭찬을 건넸다. 물론 필자는 극구 부인했지만 어쩌면 나.. 숨겨진 재능을 찾았을지도? 그럴리가
다음 날은 우리가 궁극적으로 구현하고자 하는 서비스에 대한 생각을 교류하고, 이를 구체화하는 지도 그리기 시간을 가졌다. 필자는 개인적으로 이 두 번째 날이 가장 재밌었는데, 그 이유는 팀원들이 다양한 의견을 표출하였고, 이를 정리해나가는 과정이 정말 좋았기 때문이다.
처음에는 우리 서비스의 궁극적인 목적과 서비스를 이용하는 타켓층, 마지막으로 추구하는 핵심 가치 에 대한 생각을 나누었는데, 대체적으로 맥락은 비슷하지만 다른 관점에서 바라본 의견이 정말 많았다. 이모지를 통해 내가 듣고 싶은 노래를 듣는 것이 핵심 가치라고 생각하는 팀원 분도 계셨고, 이를 통해 내 음악 취향을 이모지로 표현하여 공유의 역할도 겸한다고 생각하는 분도 계셨다.
이렇게 작성된 의견들은 한데 모여 하나의 거대한 워드 클라우드를 형성하게 되는데, 가장 많이 등장했던 키워드는 아무래도 공감, 그리고 공유 였다. 단순히 음악을 이모지로 표현하는 것을 넘어서 내가 선호하는 분위기의 음악을 이모지로 찾는다는 이점이 컸다고 생각한다.
이렇게 의견을 하나로 통일하는 과정을 거친 후에는, 우리가 어떻게 하면 ~ 할 수 있을까? 라는 질의를 던지는 시간을 가졌다. 특히 이 과정은 아이디어를 구체화하는 것도 겸했기에 필자는 매우 중요한 과정이라고 생각했다.
우선 각자가 생각하는 핵심 포인트를 작성하고, 가장 의견이 대두된 키워드들은 별도의 그룹으로 묶어 우선적으로 토의를 나누었다. 개인적으로는 UI/UX 같은 사용자 편의성 뿐만이 아니라 구현에 대한 어려움도 같이 논의하는 과정이 정말 의미있는 시간이었다.
상단의 이미지는 사용자 신규 유입 을 어떻게 하면 더 늘릴 수 있을지에 대한 의견이다. 보면 알겠지만 정말 신박한 해결책들이 많이 나왔으며 이모지를 활용한 인터렉션 및 팬덤을 겨냥한 커스텀 이모지 추가와 같은 아이디어가 정말 좋다고 생각했다. 무엇보다 팀원 분들이 전부 리액션 갑이어서 진행하는 내내 화기애애한 분위기가 펼쳐졌다.
마지막으로는 우리가 제안한 방법을 하나로 묶어 정리하였다. 처음에는 단순히 이모지와 음악 스트리밍을 결합하는 정도였지만 서로의 의견을 공유하며 많은 아이디어들이 추가된 모습이 인상적이었다. 이것이 바로 집단 지성의 힘인가?
이후에는 각 페이지 별로 제공할 서비스를 작성하고, 유저 플로우를 설계하는 스토리 보드 시간을 가졌다. 여기서부터는 본격적으로 우리가 제공할 서비스 에 대한 구체적인 뼈대를 붙이면서 처음 서비스를 이용하는 유저가 어떻게 각 페이지를 거칠지를 논의하는 시간을 가졌는데, 이때 디자이너의 부재 가 개인적으로는 조금 아쉬웠다.
화면을 구성하고 요소를 추가는 과정에서 디자이너의 의견도 더해졌으면 하는 생각도 들었지만, 그래도 결과적으로는 깔끔한 플로우가 완성되었다고 생각한다. 실제로 이렇게 페이지 별 기능을 정리해 놓으니 개발을 시작하면서 쏠쏠한 이득을 보았다. 이래서 탄탄한 기획이 중요하다는 걸 뼈저리게 느낀 하루였다.
2일차에도 어김없이 10시에 시작해 새벽 3시에 일정을 마쳤다. 비록 시간은 늦었지만 테오도 우리 팀이 작성한 피그잼을 칭찬하였고 모승 또한 팀 분위기가 정말 좋다며 극찬을 해주셨다. 역시 우리 팀원 분들이 짱이다. 9조 만만세.
어느덧 3일차 시간이 밝았다. 분명 OT 때 필자는 야행성 인간이 아니라 잠에 취약하다고 말했는데 연속 세 번이나 늦게 잠이 들었다. 게다가 입사 일주일 전 기업에서 사전 과제 를 요구하는 메일을 받아 무척 당황했던 날이었기에 더 피로감이 컸다고 생각한다.
2일차에는 화면 별 기능을 구상했다면, 3일차는 이를 이미지로 도식화하여 그리는 시간인데 아쉽게도 우리 팀은 아직 디자이너가 구해지지 않은 상태였다. 따라서 레퍼런스와 대략적인 그림으로 각자 그려내고자 하는 레이아웃을 표현하였고, 이를 결정하는 UI/UX 최고권임자는 꾺이 맡게 되었다.
그 이후에는 행동 주도 개발 (BDD) 와 스키마 주도 개발 (SDD) 을 다같이 진행했는데, 개인적으로는 이를 정하는 과정이 다소 아쉬웠다. 기능에 대한 아이디어를 많이 발산하는 것은 좋았으니 각 페이지 별로 정확히 어떤 기능을 구현할지에 대한 구체적인 가이드라인 이 다소 부실하여 BDD 를 설계함에 있어 어려움이 많았다.
하지만 이 또한 배움의 과정이라고 생각한다. 일전에 TDD를 공부하며 BDD라는 개념 자체만 알았던 내가 이것을 직접 해보게 되는 날이 과연 언제 또 올까? 추후에 협업을 하게 된다면 BDD를 진행하기 전에 화면 구성도를 치밀하게 설계해야겠다는 생각이 많이 들었다.
마침내 기다리던 주말 시간이 다가왔다. 개인적으로 협업을 시작하기 전에 컨벤션 을 세우는 것을 무척이나 중요시 여기기에 필자는 시작 전 팀원들과 다 함께 git flow 및 code convention 을 세우고 Husky, commitlint 를 적용하여 컨벤션을 세우지 않을 경우 commit 및 push 를 제한하는 방침을 세웠다.
필자가 미리 준비한 컨벤션을 팀원들에게 소개했을 때의 반응은 무척이나 긍정적이었다. 덕분에 프론트엔드 파트 개발이 비교적 원활하게 흘러가지 않았나 싶다. 그리고 필자가 새롭게 전파한 gitkraken 에 대한 열기도 뜨거웠는데, 인턴쉽을 진행하는 지금은 커맨드로 git을 사용하지만 GUI 형식의 git flow를 지원하는 크라켄은 정말 개발을 편리하게 해준다고 생각한다.
이후 새로운 Organization 을 파고 필자가 사용했던 Next.js 보일러 플레이트를 설치한 후에, 각 branch 간의 merge rule을 정해 최소 2명 이상의 코드 리뷰 가 선행되어야 하고, Squash Merge를 진행한다는 설정을 추가하였다. 하지만 촉박한 개발 일정으로 인해 후반부로 갈수록 코드 리뷰가 그닥 빛을 보지 못해 아쉬웠다..
이후 git issue 와 pull request 에 대한 서식까지 마치고 이를 팀원들에게 공유하며 협업 프로세스에 대한 필자의 의견을 전파하였다. 다행이도 모두 긍정적인 반응을 보였으며 팀원들도 최대한 컨벤션에 맞춰 개발을 진행하려는 모습이 보였다.
아 참, 내가 프로젝트 사전 설정을 진행한 후에 PL 이었던 하랭이 나에게 갑작스러운 PL 권한 이행을 시전했다. 덕분에 팔자에도 없던 MC와 PL 직함을 두 개나 달아 무척이나 부담스러웠지만, 그래도 나라는 사람을 좋게 봐주었기에 이런 결과가 나오지 않았나 싶다. 실제 개발하는 걸 보니 하랭도 정말 능력자고.. 세상은 역시 넓다.
추가로 새롭게 합류한 디자이너 인 라문이 정말 빠르게 UI 프로토타입을 설계하고 미친 퀄리티의 페이지 디자인을 선보인 덕에 우리 팀은 그야말로 환호성을 지르며 라문의 작업물을 감상하였다. 꾺이 보증한 실력자라더니 정말 그 말이 딱 맞았다. 바쁜 일정에도 흔쾌히 작업을 진행해준 라문 정말 고맙고 최고다!
상단의 짤은 우리 조 피그마에서 라문을 환영하기 위해 설치한 특수 무대다. 환영해요 라문!
첫 번째로는 OAuth2 기반의 소셜 로그인 인증 서비스를 구축하는 일이었다. 이는 지난 프로젝트에서 진행했던 경험이 있어 비교적 쉽게 API 관련 유틸과 인증 관련 로직 설계를 마칠 수 있었다.
두 번째로는 Spotify 측에서 제공한 SDK와 Web API를 활용한 로컬 뮤직 플레이어를 개발하는 Task를 맡았다. 그런데 이게 가장 큰 문제였다. 공식 문서를 아무리 보아도 명확한 동작 방식을 이해하는데 꽤나 긴 시간이 걸렸다. 게다가 전부 영어로 작성되었다!
무엇보다 SDK를 쓰기 위해 Spotify 에 로그인을 진행하고, 이를 통해 받아온 JWT 로 SDK를 인증하여 가동하는 방식에서 토큰을 받아오는 방식도 타 플랫폼과의 차이점이 있었고, 받은 토큰도 1시간마다 만료되는 터라 일정 주기로 토큰 재발급을 요청해야 하는.. 아주 그지같은 상황이었다.
게다가 SDK 자체에서 음악을 재생하는 것이 아니라, 해당 플레이어를 사용하기 위해서는 별도의 Web API 요청을 보내 이를 핸들링해야 한다. 심지어 음악을 재생할 때나, 볼륨을 키우고 줄이는 과정에서까지도 말이다! 물론 소켓을 사용한 실시간 통신 기반의 스트리밍 방식으로 동작하는지라 이해가 가면서도 참.. 구현에 많은 시간을 쏟아서 아쉬웠다.
처음에는 메리가 최대한 해결을 해보려 했으나 토스를 하여 내가 해당 Task를 담당하게 되었다. 꼬박 6시간이 넘는 시간 동안 문서를 샅샅이 뒤진 끝에 OAuth2 인증 및 SDK 작동 테스트를 완료하였다. 처음에는 어쩔 수 없이 프론트 단에서 토큰을 발급 받는 과정까지 작성했으나, 추후 Spotify 의 괴랄한 인증 방식을 스프링에서 구현하고자 노력한 짱구에게도 박수를 보낸다.
주말이 지나고 돌아온 월요일에는 대망의 데모데이를 진행하였다. 아쉽게도 우리 팀의 경우 대부분의 기능을 구현하지 못해 스플래시 페이지만 제공하였지만, 스프린트가 끝난 이후에도 지속적인 개발을 통해 서비스를 릴리즈한다는 원대한 목표를 설계하였다. 그래도 이모지 투표 기능을 넣지 못한 부분은 좀 아쉽지만 뭐 별 수 있나. 추후에 더 멋있게 구현해야지.
필자는 모든 조의 서비스를 한번씩 이용해보고 각 구성원 분들과 짤막하게 이야기를 나누었는데, 다들 멋있는 결과물을 보여주셔서 개인적으로 재밌게 대화를 나누었다고 생각한다.
이후 회고를 가지면서 각자 좋았던 점과 아쉬웠던 점, 그리고 협업을 통해 얻었던 점 등을 적는 시간을 가졌다. 개인적으로는 벌써 5일이 지났나? 싶은 생각이 들면서도 정말 짧은 시간 동안 열심히 몰두해서 달려왔다는 생각이 들었다.
다른 팀원들도 이번 협업을 통해 얻은 점이 많아 보였다. 컨벤션에 대한 중요성이나 상호 협업을 진행하는 방식이라던가.. 개인적으로 필자는 컨벤션에 대한 중요함도 좋지만 MVP (최소 기능 구현) 설계에 대한 중요성을 뼈저리게 느낀 스프린트였다고 생각한다. 만약 MVP를 대충 세웠다면 장담하는데 아주 끔찍했을거다.
우리 팀은 스프린트가 끝난 이후에도 계속해서 서비스를 개발하기로 결정한 상태인지라, 앞으로 우리가 어떻게 개발을 진행할지에 대한 의견도 정말 많았다. 필자는 개인적으로 BDD 설계 와 컨벤센 을 더욱 철저하게 정하기를 바라고 있기에 이를 중심적으로 작성했고, 다른 팀원 분들도 어느 정도 비슷한 의견을 주셨다.
으악 도망쳐
무엇보다 첫 진행임에도 불구하고 매우 과분한.. 칭찬을 해주신 팀원 분들 덕분에 스프린트를 마무리하면서도 많이 뿌듯했다. 지금까지는 팀원의 입장에서 협업을 배우는 입장이었다면 이번에는 내가 그간 배운 협업 스킬을 어느 정도 공유하는 자리 였기에 더욱 기쁜 마음이 컸다.
하지만 아무리 그래도 유느님이랑 비비는 건 정말 천인공노할 짓이다. 필자는 아주 가늘고 길게 살고 싶지 이 나이에 유느님 모독죄로 죽는 건 바라지 않는단 말이다.
개인적으로 이번 스프린트는 아주 재밌고 유익했으며 새로운 경험을 하게 해준 기회의 장이었다. 단기간에 하나의 프로덕트를 만들기 위해서는 이런 방식도 존재하는 걸 알게 되었고, 이렇게 좋은 팀원들과 함께 또 하나의 프로젝트를 진행할 수 있다는 기쁨도 누리게 되었다. 앞으로 더욱 성장하는 개발자가 되기 위해서 많이 노력할 것이다.
루키!! 수고많았어요~~ 언제나 제일 마지막까지 회의를 하고 이야기를 나누는 팀이었는데 계속 즐거운 분위기 속에서 진행이 될 수 있었던 건 당연히 팀원들간의 케미도 좋았지만 루키의 역할도 주요했다고 생각합니다~ 앞으로의 멋진 결과과 궁금해지네요!! 기대할게요 ㅎ