우테코에서 키워온 나만의 알맹이
이 내용은 6차 데모데이 라이트닝 토크 때 발표한 내용을 글로 공유하기 위해 작성했습니다.
알맹이
레벨 4, 9월을 시작할 때 우아한테코코스의 캡틴인 포비가 우리에게 해준 말을 인용하자면
내가 우테코 6기 크루, 레벨 4 참여 중이라면 프로그래밍 학습에 대한 즐거움, 자신감을 높이고 서류에 작성할 알맹이를 만드는데 집중하겠다.
서류에 작성할 알맹이.. 서류의 작성할 나만의 핵심을 만드는데 집중하자는 말이 인상 깊었다. 2월부터 11월 긴 교육과정 속 내가 만들어낸 서비스, 함께 일하면서 얻는 경험들, 수많은 미션들과 피드백들을 떠올리며 나는 무엇을 얻어갔고 스스로 어떤 알맹이를 만들어가고 있었을까? 고민하게 된 계기가 되었다.
1. 구현의도와 과정을 생각하기, 본질을 떠올리기
우테코의 미션 과정을 설명하면 아래의 사진처럼 1주 단위로 진행되며 각 미션마다 리뷰어가 배정되어 리뷰어에게 내가 작성한 기능에 대한 설명과 구현하면서 궁금했던 점, 주로 리뷰를 받고 싶은 점들을 pr에 설명하여 리뷰 요청을 보낸다. 그리고 리뷰어와 함께 피드백을 한 후 리뷰어가 머지를 하면 미션이 종료되는 방식이다.
평소에 요구사항을 봤을 때 큰 생각을 하지 않고 빠르게 기능을 해치워버렸던 나에겐 너무 어려운 미션이었다. 그래서 처음에는 pr에 무슨 내용을 담아야 할지 어려워했다. 고민한 내용이 별로 없는데 무엇을 적어야 할까?..
어떻게 pr 작성을 마치고 리뷰 요청을 하면 리뷰어께서 코드를 리뷰해 주시고 코멘트들이 나에게 오게 되는데, 그 내용들이 정말 어렵게 느껴졌다. 그 내용들을 간단하게 소개하면
- 왜 이런 구조로 작성하셨나요?
- 이 기술은 왜 사용하셨나요?
- 이 개념과, 저 개념의 차이는 무엇일까요?
왜라는 키워드가 정말 많았다. 이유를 크게 담지 않고 의미부여를 하지 않았던 것들에서 왜라는 질문들이 마구 들어오자 머리가 아파오고 리뷰가 두려워지기도 했다. 덕분에 질문의 답을 하면서 질문해 주신 내용에 대한 키워드도 찾아보면서 공부하고, 내가 작성한 구조를 그림으로 그려보는 연습도 하게 되었다. 여러 미션을 거치며 학습하게 되니 이전에 애매하게 알고 있던 지식들이 채워지게 되었다. 그러나 내가 얻은 알맹이는 단순히 지식이 채워지는 것이 아니다. 바로 왜가 핵심이다.
요구사항을 구현하면서 왜 이 기술을 사용해야 하지? 다른 기술을 사용할 수는 없을까? 다른 방법과 이 방법을 사용했을 때 각각 장점과 단점이 무엇일까를 떠올려보는 것. 아무 고민하지 않고 단순히 기술을 사용해 왔던 나에겐 색다른 경험이었다.
또한 레벨 2 때 프론트엔드 코치인 준께서 미션에 대한 소개와 설명강의를 해주실 때마다 강조하신 말을 인용하자면
결국 우리가 하려는 것은 무엇일까?
이것은 무슨 의미일까? 우리가 구현해야 하는 요구사항이 주어질 때 단순히 기능 목록을 작성해서 구현해 나가기 전에 내가 이 요구사항을 구현하려는 목적에 대해서 떠올려보라는 의미이다. 이 요구사항을 구현하는 목적이 무엇일까? 결국 우리가 하려는 것은 무엇일까를 떠올리고, 그 목적이 세워졌다면 그 목적을 달성하기 위한 핵심 기능을 한 줄로 정리해 보고, 그 핵심 기능을 구현할 수 있는 동작 가능한 가장 작은 버전을 만들어보는 것이다.
덕분에 내가 이 기능을 구현하려는 이유를 먼저 떠올리고 돌아가는 가장 작은 버전부터 구현해서 요구사항의 본질과 핵심을 먼저 바라보는 연습을 할 수 있었다.
미션 속에서도 내가 이 요구사항을 통해 구현하려고 하는 것은 무엇일까? 핵심을 구현하기 위해 작은 버전으로 무엇을 할 수 있을까를 떠올리며 설계하고 사용자 상호작용에 따라 상태가 어떻게 변하고 어떤 파생상태가 존재할지 떠올려 볼 수 있었다.
이런 시행착오와 과정들을 겪으며 나는 본질을 떠올릴 수 있었다. 이제는 새로운 기술을 도입한다고 했을 때 다른 대안은 없는지 기술의 장단점에 대해서 떠올리며 다양하게 기술을 아는 것에 집중하지 않고 필요한 기술을 제대로 아는 것에 집중할 수 있었다.
예를 들어, 나는 이전에 나는 상태 관리 라이브러리로 Recoil에 익숙해있었고 다른 상태 관리에 대해 익숙하지 않아 쓰기 꺼려했었다. 하지만 본질을 떠올리면 결국 다 상태 관리 라이브러리이고 prop drilling 문제를 해결하기 위한 더 편한 해결책이라는 관점에서 바라보면 다른 상태 라이브러리들도 이 문제를 해결해 주는 동일한 기술이라고 접근할 수 있었다. 그리고 이들의 특징은 무엇이고 어떤 장단점이 있는지를 파악하게 됐을 때 새로운 기술이라도 핵심을 빠르게 파악하고 도입할 수 있는 역량을 만들 수 있었다.
또한 상태 관리 라이브러리조차도 어느 컴포넌트가 어떤 상태를 관리할 수 있을지 구조를 그려보면서 어느 상태를 라이브러리로 관리해야 할지 관점도 세워볼 수 있었다.
왜와 본질을 떠올리는 것. 우테코에 들어와서 내가 주도적으로 만들어나간 첫 번째 알맹이이다.
2. 팀원과의 유대
우테코에 들어오기 전 나는 대학시절 중앙 동아리, 연합 동아리에서 여러 사람들과 만나며 프로젝트를 해왔다. 팀원으로 참여할 때도 있었고 팀장으로 주도적으로 이끌어나간 적도 있었다. 내 기억엔 팀장으로 참여한 것이 더 많았던 것 같다.
주로 내 스스로 성장하기를 추구했으며 프로젝트에 참여할 때도 "내가 틀을 이렇게 구축해 놓고 정리해 두었으니 이렇게 잘 따라오면 돼"라는 성향이 강했다. 팀장을 맡아와서 그런지 내가 제대로 틀을 구축해놓지 않으면 다른 사람들이 불편함을 느낄까 더욱 노력했었고 다른 사람들이 내가 열심히 작성해 놓은 흐름 그대로 따라오기를 바랬다. 그렇게 스스로 열심히 성장하고 주변으로부터 인정을 받으면서 자신감을 찾고 앞으로 나아가길 바래왔다.
그래서 더더욱 팀원들을 믿지 못했다. 내가 작성해 놓은 흐름대로 쫓아오지 않는 팀원들을 보면서 스트레스를 받아왔고 팀원들이 한 결과를 봤을 때 내 기준엔 모자란 결과물 투성이라고 생각했다. 그래서 팀원들의 결과물을 내가 이어받아서 버그를 고치고 불편한 구조를 갈아엎는 경우가 많았고 자연스레 내 업무량은 많아지게 되었다.
어느 날은 2~3개의 프로젝트를 한 번에 몰아서 하며 이곳저곳을 수정하고 기능을 추가하며 마치 코드 치는 기계가 된 것처럼 일을 할 때도 있었다. 또 어느 날은 하루 종일 클라이언트의 hotfix 수정 요구사항들을 전달받아 업무를 해결하고 반영했던 적도 있었다. 내가 재미있어서 학습하고 싶어서 참여했던 프로젝트였지만 과도한 업무량으로 인해 되려 나에게 큰 마음의 상처를 주었다.
이런 협업 경험을 갖고 있는 내가 레벨 3에 들어와 팀 프로젝트를 시작하게 되었다. 우테코에서 진행하는 프로젝트는 팀장이라는 개념이 없다. 모두가 다 같이 주도적으로 문제를 찾고 해결하라는 의미이지 않을까 생각한다. 그래서 회의를 진행하는 진행자, 문서를 기록하는 작성자가 매 번 바뀌며 모두가 의견을 자유롭게 낼 수 있으며 모두가 같이 정한 그라운드 룰 안에서 행동해야 한다.
그러나 역시 스스로 성장하기를 습관으로 여겨왔던 나는 팀원들과 개발 규칙을 세우고 구현하며 스트레스를 받기 시작했다. 어느 날은 팀원과 디자인 시스템에서 CSS를 작성하는 기준에 대해서 의견을 나눈 적이 있었는데 다른 사람들의 의견들이 납득이 되지 않았고 내 주장을 강하게 펼친 적이 있었다. 그 순간 팀원들에게 양해를 구하고 회의를 멈춰 다른 사람들의 의견들을 메모장에 적어봤다. 그 이유는 아래 사진 때문인데, 우테코에서는 코딩만 하는 것이 아니라 소프트 스킬도 같이 배운다. 그중 하나인 유강스(유연성 강화 스터디) 유연하지 않은 나의 모습을 찾고 실험 계획을 세워서 유연하지 않은 모습을 개선해 나가는 활동이다.
처음에는 받아들이기 어려웠지만 익숙해지려고 노력하니 오히려 내가 편함을 느끼고 있었고 내가 구축해놓지 않아도 내가 설계해놓지 않은 코드라도 괜찮을 수 있겠다는 안정감이 생기게 되었고 팀원들에 대한 신뢰가 생기기 시작했던 순간이었다.
신뢰를 느낀 가장 절정의 순간은 팀원들과 함께 협업의 문제를 해결해 나가는 과정 속에서였다. 내가 생각하는 이상적인 협업은 내가 구현하지 않은 부분도 자세히 설명 가능하고 다른 팀원이 어려움에 처했을 때 서로 도와줄 수 있는 환경이다. 그래서 우리 팀원들과 함께 이상적인 협업을 하기 위해서 기능을 혼자 개발하지 않고 팀을 나누어 페어 프로그래밍을 시도했다. 혼자 작성하지 않으니 서로 기능을 이해할 수 있을 것이라 생각했다. 하지만 팀을 나눈 페어 프로그래밍은 결국 팀으로 나뉘게 되니 다른 팀의 상황을 알지 못하는 대실패를 겪게 되었다.
정말 최악의 결과였다. 다른 팀의 사정을 알지 못하고 페어 프로그래밍으로 인해 속도도 늦춰진 상황 속에서 어떻게 하면 속도를 올리며 코드의 이해를 높일 수 있을지 논의했다. 그 결과 페어 프로그래밍을 포기하고 각자가 역할을 맡아서 기능을 개발하기로 했다. 그 대신 PR을 열심히 적기로 했다. 백엔드가 알아볼 수 있을 정도로 자세히 적자는 목표로 구현 의도와 과정들을 설명하며 어떤 생각을 담아서 기능을 개발했는지 자세히 적기로 한 것이다. 미션 때 PR을 적었던 것을 팀 프로젝트로 옮겨와 본 것이다. 그 결과 팀원이 구현한 기능에 대한 맥락을 빠르게 파악할 수 있었고 코드 리뷰의 속도도 줄일 수 있었다. 기능 구현의 속도도 높일 수 있었고 서로가 구현한 코드에 대해 이해할 수 있는 방법을 찾게 된 것이다. 팀원들과 같이 성장하고 나아가는 방법을 알게 된 것이다.
이제는 내가 모든 것을 책임지고 구현하지 않아도 마음의 안정감을 찾을 수 있게 되었고, 버그를 잡아주고 더 좋은 개선 방법을 추천해 주는 도움을 받고 내가 그 의견들을 적극적으로 반영하고 있다. 그리고 나도 적극적으로 의견을 물어보면서 조율해 나가는 경험도 하고 있다. 이제는 팀원들이 정말 든든하다. 무엇이든 다 할 수 있을 것 같은 느낌이랄까? 진정으로 팀원을 신뢰해 본 경험을 얻을 수 있었고 이것이 나의 두 번째 알맹이이다.
3. 꾸준히 글로 기록하기
우테코에서 경험할 수 있는 것들이 정말 많다. 수없이 많은 미션, 강의와 소프트스킬, 스터디, 협업 경험 등등 내가 성장할 수 있는 재료들을 꽉꽉 담아 나에게 주는 것 같았다. 이렇게 할 일도 정말 많고 배울 점들도 많은 상황에서 흘려보내지 않고 흡수하며 성장할 수 있을지 고민하다가 매일매일 일어난 일을 글을 써보는 도전을 했었다.
그래서 3월 초쯤에 매일매일 글을 쓰면서 하루에 일어난 일들을 마구 기록해 보기 시작했다. 여기 티스토리에서 확인할 수 있는데 1~2주 정도 했던 것 같다. 결과는 당연히 실패. 우테코를 시작하는 오티 때 알려주는 꿀팁(?)이 있는데
오늘이 제일 한가하다
진짜 오늘이 제일 한가하다. 지금 이 글을 작성하고 있는 이 순간도 느끼는 감정이다. 날이 가면 갈수록 바빠지는 날들 속에서 매일 글쓰기는 정말 쉽지 않았다. 금방 지치고 힘들어져 글을 쓰는 의지를 상실해 버렸고 그렇게 레벨 2가 끝나는 6월까지 글을 작성하지 않게 되었다..
그러던 도중 레벨 3을 시작하기 전 방학, 친한 크루들과 같이 글을 써보자는 제안을 받았다. 조건은 혼자가 아닌 같이, 매일이 아닌 일주일에 한 번 글을 작성해 보자는 스터디였다. 다시 마음을 다잡고 7월부터 다시 글을 작성하게 되었고 지금까지 이어지고 있다. (스터디를 제안해 준 프룬과 스터디에 같이 참여한 쑤쑤, 올리, 파슬리 정말 감사합니다..!)
친한 크루들과 같이 글을 작성하고 서로 응원해 주니 의지가 되었고 매일매일 쓰지 않으니 벅차지도 않았고 주말에 여유로운 분위기 속에서 글을 술술 작성할 수 있었다. 스터디 덕분에 레벨 3에는 행동대장 팀에서 일어난 협업 경험들을 기록할 수 있었고, 레벨 4에서는 행동대장 프로젝트의 개선점들과 로딩 성능 최적화에 대해 몰입하며 글을 작성해 볼 수 있었다.
우리 스터디는 글 내부 공유는 필수지만 스터디 외부로의 공유(ex 아래 사진의 블로그-포스팅-스터디)는 자유였다. 나는 내가 경험했던 것들을 다른 크루들에게도 공유하고 싶었고 그 덕분에 나는 블로그-포스팅-스터디 채널의 주 이용자가 되었다. 이 글도 올라갈 예정
이렇게 꾸준히 글로 기록하고 공유하니 우선 뿌듯했다. 꾸준히 공유하니 점점 다른 사람들이 내 글을 읽게 되고, 어떨 때는 도움이 되었다는 이야기를 해주기 때문이다. 그리고 이러한 기록들이 내가 지금 이력서를 작성할 때 큰 도움이 되고 있다. 진짜 서류에 작성할 알맹이가 된 것이다. 협업 경험들과 프로젝트 개선점들을 금방금방 꺼내 적기 좋았으며 링크를 통해 증빙도 할 수 있었다.
꾸준히 글로 기록하고 공유하는 가치를 알아간 것이 나의 세 번째 알맹이이다.
사실 제일 큰 알맹이는
2월부터 긴 시간 동안 함께해 온 크루들과의 추억이다. 함께 미션을 하며 고생도 잔뜩 하고, 그만큼 놀러 가서 스트레스도 풀기도 하고, 함께 어려움을 극복해 낸 순간들, 힘을 합쳐 살아있는 서비스를 만든 경험들과 단순히 그냥 캠퍼스에서 크루들과 재미있게 이야기하면서 지낸 모든 순간 하나하나 너무 행복했고 즐거웠다. 이제 11월이 되었고 멀게만 느껴졌던 수료식도 정말 얼마 남지 않았다. 이제 크루들과 헤어진다고 생각하니 너무 아쉬워ㅜ
소프트웨어 생태계에 선한 영향력을
우아한테크코스의 슬로건이다. 내가 우테코와 함께하며 배우고 경험한 모든 것들, 그 속에서 키워낸 내 알맹이들을 사회에 나가 마음껏 영향력을 행사하는 사람이 되고 싶다. 또한 후배들에게도 내가 키워온 알맹이들을 퍼뜨리는 그런 사람이 되고 싶다.