본문 바로가기
Retrospective

부스트캠프 2019 회고

by 동그란 혜주 2019. 12. 24.

들어가며

출발할 땐 반팔, 도착할 땐 패딩

반팔입고 시작했던 7월의 여름부터 패딩입고 마무리했던 12월의 겨울까지, 올 한해의 하반기를 전부 투자했던 부스트캠프 2019가 마무리되었다. 부스트캠프는 네이버의 비영리 재단인 커넥트에서 진행하는 교육 프로그램으로, 지난 2016년부터 시작되어 며칠 전 마무리된 부스트캠프 2019를 포함하여 총 4기수, 200명 이상이 수료한 규모 있는 소프트웨어 교육 프로그램이다. 이번 부스트캠프 2019는 JavaScript 언어를 기반으로 한 웹 풀스택 과정을 진행하였으며 이전 기수와는 다르게 역대 최대 규모로 프로그램을 진행하였다. -50명 내외를 선발했던 지난 기수들과는 달리 160명을 선발한 이번 기수는 아마 커넥트재단의 도전이 아니었을까 싶다

부스트캠프 모집 마감일 전날 부랴부랴 자소서를 제출하고 온라인과 오프라인, 총 두 번의 코딩 테스트를 거쳐 좋은 기회로 -2019년의 행운을 쏟아부었다 부스트캠프에 선발되었다. 제한된 시간에 프로그래밍 미션을 완수하고, 동료 간 피드백을 주고받는 강도 높은 경험을 반복하는 4주 동안의 챌린지 과정, 문제를 해결하기 위한 자기 주도적 학습, 동료와 함께하는 실전 개발 프로젝트로 구성된 18주 동안의 멤버십 과정을 훌륭하게 수료한 나 자신에게 일단 박수를 보내고 싶다. 고생했다 혜주야 😂

넘어지며

부스트캠프 챌린지 과정은 나에게 넘어지는 과정이었다.

일단 PR이 뭔지 설명을 해주세요..

부스트캠프 챌린지 첫날 진행되었던 OT에서 21시까지 PR을 보내야 한다. 는 말을 듣고 상당히 난감했다. git을 한 번도 사용해본 적이 없었던 것은 아니지만 정말 딱 한 번, 그것도 개인적으로만 사용해봤던 나에게 PR 이라는 용어는 마치 어서 와 개발은 처음이지? 하는 것과 같았다. OT를 듣는 내내 혼자 많은 고민을 했다. -도대체 PR이 뭘까? 내가 아는 PR은 자기 PR밖에 없는데.. 결국 지인한테 물어봐서야 답을 얻었다. 부스트캠프를 시작할 당시 git에 대한 나의 지식은 딱 이 정도였다. 아니지, 없었다는 표현이 더 맞겠다. (머쓱)


나만 못해 코딩

챌린지 과정은 현타와 자괴감의 연속이었다. 이전 회고에서도 언급했던 것처럼 내가 어쩌다 여기에 있나 하는 마음이 나를 더 괴롭히고 힘들게 했다. 부스트캠프를 활동했던 모든 동료분들은 열정적이셨고, 그저 대단하셨다. 그들의 모습과는 다르게 나는 아직 준비가 덜 된 사람인 것처럼 느껴졌고, 그 마음가짐이 나를 점점 무기력하게 만들기도 했다.

부스트캠프를 활동하면서 나는 성장에 대한 욕심이 무엇인지 절실하게 깨달았다. 주변의 좋은 동료들은 스스로에게 좋은 자극제가 된다. 나도 저만큼 알고 싶었고, 저만큼 하고 싶었다. 물론 기준을 내가 아니라 타인에게 두는 순간 힘들어질 수 있다. 이 교육과정에 참여했던 이유는 배우기 위해서였다. 아직 많이 부족하기 때문에 더 많이 배울 수 있을 것이라고 스스로를 위로하며 마음을 다잡았다.


Java와 JavaScript === 햄과 햄스터

한 달 동안의 챌린지 과정은 JavaScript ES6 문법을 학습하는 방식으로 이루어졌다. 이전까지 나는 Java 언어에 대한 경험밖에 없었기 때문에 JavaScript 언어 자체가 상당히 생소했다. 타입이 없다는 것도, 함수를 1급 객체로 사용한다는 것도, 클로저? 호이스팅? const와 let은 또 뭐야 var만 있는 거 아니었어..?

챌린지 초반에 서울숲 캠퍼들 사이에서는 같은 팀이 되면 이름과 함께 항상 묻던 것이 있었다.

"혹시 자바스크립트 사용해보셨나요?"
"아니요, 처음이에요"
"저도 처음에요ㅠㅠㅠㅠㅠ 자바스크립트 너무 어렵지않나요ㅠㅠㅠㅠㅠㅠ"

JavaScript 경험이 없는 캠퍼분들을 만나면 그렇게 반가울 수가 없었다. 생소한 미션을 생소한 언어로 구현해야 하는 것에 대한 어려움을 함께 나눌 수 있었기 때문에 많은 분들이 물어보셨고, 나 또한 많은 분들께 여쭤보았다.

챌린지에서는 JavaScript 안의 reduce, forEach 등 편리한 함수들을 직접 구현해보며 내부방식을 이해하는 식의 미션들도 주어졌다. 멘붕 역사의 시작이었던 챌린지 3일 차의 미션 중 하나는 reduce 함수를 직접 만들어 구현하는 것이었다. 그 날 reduce 함수를 처음 들어봤는데 직접 구현하라니 ... 😂 그래서 해당 함수의 역할을 이해하는 데에 많은 시간을 투자했다.-라고 쓰고 미션실패라고 읽는다..! 지금에서는 reduce 함수를 사용하여 코드를 작성할 수 있지만, 당시에는 꽤 힘든 미션이었다.


넘어져도 괜찮아

미션을 완수했던 날도 있었고, 완수하지 못했던 날도 있었다. reduce 함수를 이해하지 못해 미션을 실패했던 지난날의 나처럼 아무것도 몰라도, 부족해도 괜찮다. 하면서 배우면 된다. 모른다는 것에 대해 두려움을 갖는 순간 성장할 수 있는 영역이 좁아진다. 모른다는 것은 알아갈 게 많다는 것이다. 부족하다는 것은 성장할 수 있는 가능성이 크다는 것이다. 그것이 부스트캠프 챌린지 과정을 통해 가장 크게 느낀 부분이다.

일어서며

부스트캠프 멤버십 학습 스프린트 과정은 나에게 일어서는 과정이었다.

프론트엔드냐, 백엔드냐 그것이 문제로다

6개월 동안의 과정 중에서 학습 스프린트의 8주가 가장 재미있던 활동이었다. -물론 모든 순간이 재미있었다 챌린지에서의 미션과 학습 스프린트의 미션은 아주 많이 달랐다. CS 기반으로 내부적으로 구현해야 했던 챌린지 미션과는 달리, 학습 스프린트에서는 모든 어플리케이션의 기본인 로그인/회원가입 프로젝트, 캐러셀 UI를 제공하는 amazon 쇼핑 서비스를 클론한 프로젝트, drag&drop 기능을 제공하는 github project 기능을 클론한 프로젝트, react 라이브러리를 사용한 airbnb 검색 서비스 클론한 프로젝트 총 네 개의 웹 어플리케이션을 풀스택으로 구현하는 것이 미션이었다.

웹 개발자를 준비하며 나는 항상 프론트와 백엔드의 기로에서 갈등했다. 프론트를 할 때는 눈에 보이는 화면을 만드는 프론트가 재미있고, 백엔드를 할 때는 눈에 보이지 않는 곳에서 데이터를 다루는 백엔드가 재미있었다. 개발자라면 풀스택이지! 여전히 둘 다 재미있지만, 풀스택으로 진행되었던 학습 스프린트 활동을 통해 어느 정도의 방향을 잡을 수 있었다.


백엔드도 좋은데 프론트엔드가 더 좋아

앞서 말했던 미션들을 각각 2주씩 프론트와 백엔드 모두 구현하는 것이 학습 스프린트 과정의 핵심이었다. 보통은 프론트 개발 1주, 백엔드 개발 1주 해서 미션을 완수하는 편이었는데 나는 프론트 개발에 거의 3/4 정도를 투자했다. 앞서 말한 고민에 대한 답을 그때 찾았다. 나는 프론트구나..!

내가 작성한 코드가 사용자에게 보여지는 화면을 책임지며, 직접적인 시각적 피드백을 제공할 수 있다는 점이 프론트엔드 개발의 가장 큰 매력이라고 생각한다. 학습 스프린트 과정은 주어진 디자인대로 만드는 것이 아니라, 미션을 바탕으로 화면을 디자인하고 설계해야 했기 때문에 사용자에게 만족스러운 경험을 제공할 수 있는 UI/UX에 대해 많이 고민 할 수 있었다.

간단한 예를 들자면, 버튼을 만들고자 했던 의도를 사용자가 명확하게 알 수 있도록 디자인하기 위해서는 커서를 포인터로 바꾸는 것뿐만 아니라, 색을 대비시키는 것과 같은 인터렉션을 주어야 한다. 또한 클릭 이벤트를 통해 텍스트를 입력하는 영역을 생성하는 경우, 해당 영역으로 커서를 이동시켜 포커스를 넘겨줘야 한다. 어떻게하면 사용자 가까이에서 사용자에게 좀 더 익숙하고, 친근한 화면을 제공할 수 있을지 고민하면서 프론트 개발에 대한 흥미를 키울 수 있었다.


프론트엔드가 더 좋지만 백엔드도 좋아

프론트 개발에 대해 더 큰 흥미를 가지게 되었지만, 백엔드 개발에도 프론트 못지않은 재미를 느꼈다. 서비스는 사용자에게 어떠한 정보나 기능을 제공해야 한다는 목적이 있어야 하고, 그러한 역할은 백엔드의 도움 없이는 힘들다. 물론 Serverless 서비스도 많다

부스트캠프 2019는 JavaScript 언어를 기반으로 진행되었기 때문에, Express 라이브러리를 사용해서 백엔드 서버를 구축하였다. 이전에 Java Servlet과 Spring을 사용하여 간단한 백엔드 개발을 했던 경험이 있다. 그와 비교해서 Express는 쉽고 편리하게 개발할 수 있다는 확실한 강점이 있었다. 하지만 우리나라는 대부분 Spring을 사용하여 백엔드 개발을 한다는 사실..

풀스택으로 개발하기에는 프론트 개발과 동일한 언어를 사용하는 Express만큼 강점을 가진 라이브러리가 없다고 생각한다. 또한 앞서 말한 것처럼 러닝 커브가 높지 않기 때문에 2개월 동안 프론트와 백엔드를 모두 배우기에는 Spring은 쉽지 않았을 것이다.

백엔드 개발을 할 때는 어떻게 하면 프론트에서 사용하기 편리하도록 데이터를 가공하여 전송할 수 있을까 고민했다. 또한 REST API를 사용해서 개발했기 때문에 좀 더 RESTFUL하게 API를 설계하고자 고민했다. 학습 스프린트를 진행할 때는 MySQL을 사용했기 때문에 데이터베이스 모델링을 하는 것에도 꽤 많은 시간을 투자했다. -MongoDB를 사용할 때는 모델링에 시간을 많이 투자하지 않았다는 것은 아님..


너무나도 유익했던 마스터 클래스

챌린지때는 마스터님과의 소통할 수 있는 시간이 부족했다는 것이 아쉬웠다. 챌린지 과정에도 매주 금요일 마스터님과 함께 이야기를 나누는 티타임이 있었지만, 다소 짧은 시간 동안 자율적으로 참여하는 시간이었기 때문에 더 많은 깊이 있는 이야기를 나누지 못해 아쉬움이 남았었다.

멤버십 과정에서는 매주 월요일과 금요일마다 마스터님의 강의와 리뷰가 진행되는 마스터클래스 시간이 생겼다. 월요일에 진행되는 마스터클래스에서는 해당 미션을 수행하기 위한 기본적인 기술에 대한 지식을 공유해주셨고, 금요일에는 한 주 동안 구현한 몇몇 캠퍼들의 코드를 리뷰해주셨다.

개인적으로 가장 기억에 남았던 마스터클래스는 첫 번째 마스터클래스였다. 좋은 코드란 무엇일까에 대해 고민하게 된 계기였던 크롱님의 매직 넘버에 대한 말씀과, 커밋 메세지를 작성하는 법에 대해 고민하게 된 계기였던 호눅스님의 git commit에 대한 말씀 덕분에 고민하는 개발자로 성장하는 법을 배울 수 있었다.


The Art of Readable Code

이전의 나는 좋은 코드를 작성하기 위해 고민해본 적이 없었다. 그 전에, 좋은 코드란 무엇일까 생각해본 적도 없었다. 부스트캠프를 참여하면서 많이 성장했음을 느끼는 부분 중 하나가 이것이다. 좋은 코드란 무엇일까? 요즘의 나는 주변의 개발자분들께도 위 질문을 많이 여쭤보고 있다. -대답은 다양했다. 나중에 좋은 코드란 무엇일까에 대해서도 포스팅을 해야겠다. 학습 스프린트 1주차 마스터 클래스에서 배웠던 읽기 좋은 코드가 좋은 코드이다 는 관점에서 1주차에 작성했던 코드에 대해 생각해보자.

if (elements.pw.value.length < 8 || elements.pw.value.length > 16) {
        validation.pw = false;
        text.innerText = '8자 이상 16자 이하로 입력해주세요.';
        text.style.color = color.x;
}

나는 이 코드를 작성했기 때문에, 816이 의미하는 바를 알고, 이 코드를 읽는데 어떠한 문제도 없다고 생각할 수 있다. 하지만 누군가가 저 코드를 본다면 해당 숫자가 의미하는 게 무엇인지 알 수가 없다. 사실 8과 16은 그 숫자 값 자체로 중요한 의미가 있는 것이 아니라, 최소/최대 길이이기 때문에 중요한 의미를 갖게 된 것이다. 위의 코드에서 사용한 8과 16이 바로 지양해야 하는 magic number 이다.

좋은 코드는 읽기 좋은 코드 라는 말이 있다. 나도 그 말에 전적으로 동의한다. 코드는 본인이 작성하는 것이지만, 그 코드를 읽고 사용해야 하는 사람은 규모에 따라 팀이 될 수도 있고, 회사 전체가 될 수도 있다. 내가 짠 코드를 다른 누군가가 유추해서 읽어야 하는 것이 아니라, 코드 자체로 봤을 때 바로 읽을 수 있어야 한다.


좋은 커밋 메세지를 작성하는 법

학습 스프린트 2주차 마스터 클래스에서 호눅스 마스터님 하셨던 말씀이 아직도 기억에 남는다.

Q. 아직도 git commit -m 으로 본문 없이 커밋하는 사람 있나요?
A. 그 사람이 저에요..

앞서 매직넘버에 관해 이야기한 것과 마찬가지로 내가 작성한 코드를 읽는 사람은 미래의 나뿐만이 아닌 다른 누군가가 될 수도 있다. 다른 사람이 작성한 코드, 혹은 이전의 내가 작성한 코드를 읽고 맥락을 이해하는 데에는 생각보다 많은 비용이 발생한다. 그 비용을 최소화할 수 있도록 도와주는, 커밋 로그는 일종의 기록이다. 그 기록은 미래의 나를, 혹은 다른 누군가를 위한 흔적이다.

좋은 커밋 로그는, 해당 로그만 보았을 때 진행 상황을 판단할 수 있어야 하고, 어떤 사항들이 왜 수정되었는지 등 변경된 코드에 대한 전반적인 설명이 담겨야 한다. 커밋 로그를 한 줄로 작성하기에는 부족한 경우가 발생할 수 있다. 대개 부족할 수밖에 없다. 친절한 흔적을 위해서는 본문이 필요하다.

학습 스프린트 첫 번째 미션을 구현하면서 남긴 커밋 로그이다. 위의 로그를 보면 무엇을, 왜 수정했고 어떤 방식으로 에러를 해결했는지에 대한 설명이 전혀 없다. 마스터님은 커밋 로그를 보면 그 사람을 알 수 있다고 하셨다. _-나는 불친절한 사람이었다.._😂

학습 스프린트 마지막 미션을 구현하면서 남긴 커밋로그이다. 물론 위의 로그들도 좋은 로그라고 할 수 있을지는 잘 모르겠지만, 분명 첫 번째 미션을 구현하면서 남겼던 커밋로그보다는 친절해졌다고 생각한다. 당시에는 영어로 된 커밋이 멋있다고 생각해, 부족한 영어 실력에 파파고를 등에 업고 애써 제목을 영어로 작성하려고 노력했지만, _억지로 영어로 적으려고 하면 해석도 안 되는 더 이상한 로그가 된다_는 말씀을 듣고 이후 그룹 프로젝트를 진행할 때는 한글로 된 커밋을 작성하기로 컨벤션을 맞추었다.


고민이 담긴 코드를 작성한다는 것

학습 스프린트 과정이 나는 정말 재미있었다. 점점 욕심이 생겼고, 매주 목요일마다 거의 밤을 새웠다. 어떻게서든 거의 모든 기능을 구현했고, 열심히 하고 있다고 생각했다. 하지만 시간이 지날수록 학습 스프린트를 임하는 자세에 대해 회의감이 들기 시작했다. 언젠가부터 무엇인가를 배우겠다는 마음가짐보다는 구현을 하는 것이 목표가 되었다. _무언가 잘못된 것 같다_는 생각이 든 순간부터 지치기 시작했다.

다른 사람들의 코드를 보며 내 코드에는 고민이 담겨있지 않다는 것을 느꼈다. 길을 잘 찾아가고 있다고 생각했는데, 주변을 둘러보니 다른 방향의 길을 걷고 있던 것처럼 느껴졌다. 구조적으로 어떻게 설계하는 것이 좋을까 고민하지도, 어떻게 하면 우아한 코드를 짤 수 있을까 노력하지도, 어떤 기술을 사용했고 그 기술을 사용하는 과정에서 어떤 것들을 느꼈는지 되돌아보지도 않았다는 것을 깨달았다. 그저 구현하기에 급급했고, 결과를 완성했다는 것에 만족했다. -물론 결과물을 완성하는 것도 중요한 부분임은 틀림없다고 생각한다.

스스로에게 실망했고, 반성했다. 나는 많은 것을 배우고 얻고 싶었고, 성장하고 싶었다. 고민이 담긴 코드를 짜는 것, 결과에 급급해 하는 것보다는 그 과정에서 많은 것을 배우는 것, 그것이 학습 스프린트를 마무리하는 시점에서 다시금 다잡은 나의 목표였다.

달리며

부스트캠프 멤버십 그룹 프로젝트 과정은 나에게 달려나가는 과정이었다.

잘해?잘해! 결성

11월부터 12월까지 진행되었던 그룹 프로젝트는 자율적으로 팀 빌딩이 이루어졌다. 팀을 선택하고 싶은 사람들은 자율적으로 팀을 꾸릴 수 있었고, 운명의 수레바퀴에 맡기고 싶은 사람들은 랜덤하게 팀에 배정받았다. 나는 챌린지때부터 친하게 지내던 분께서 같이 팀을 하자고 먼저 제안해주셔서 자율적으로 팀을 꾸릴 수 있었다.

기획부터 배포까지 모든 것이 자율적이었다. 어떤 서비스를 제공할 것인지 아이디어 회의를 시작으로 팀 프로젝트가 시작되었다. 모두가 만족하고, 만들면서 재미있고, 기술적으로 도전할 부분이 많은 서비스를 만들었으면 했다. 논의 끝에 온라인 IDE 서비스 CodeSandbox를 클론해보자는 의견으로 모아졌고 우리 서비스 이름은 cocode, 팀 이름은 잘해?잘해! 로 결정되었다. -팀 이름 내가 지었다 😆


디자인 누가 했어요? 저요 >///<

프로젝트 개발에 필요한 팀 규칙 작성과 아이디어 기획을 완성하는 것이 첫 주의 마일스톤이었다. 나는 이전에도 몇몇 동아리를 하면서 협업을 했던 경험이 몇 번 있었지만, 기획자, 디자이너분들과 함께 협업을 진행해봤기 때문에 개발자만으로 이루어진 협업은 처음이었다. 기획자와 디자이너가 없이 프로젝트를 진행하게 되면 기능을 정의하고, 화면을 기획하는 데에 시간이 오래 걸리지 않을까 걱정했지만, 다행히 전혀 걱정할 필요가 없었다. 개발자 만세!

우리는 클론 프로젝트를 진행했기 때문에 기능을 새로 정의하기보다는 두 달이라는 기간 동안 구현 가능한 스펙으로 기능을 추리면서 서비스를 구체화했다. 그리고 나는 평소에 디자인도 한번 해보고 싶었기 때문에, 디자이너 역할에 자원했고, Adobe XD툴을 이용해서 전체 UI를 디자인했다. -우리 서비스 디자인 예쁘다는 소리 들을 때가 제일 기분 좋았던 건 비밀


생각보다 다들 말이 많네요, 우리.

예상외로 개발에 시작하기 앞서 팀 규칙을 정하는데 가장 많은 비용이 소모되었다. 각자의 개발 스타일이 다르다 보니 맞춰야 할 컨벤션이 많았고, 논의해야 할 규칙이 많았다. 예를 들어 나는 보통 다음과 같은 스타일을 선호한다.

// 보통 한 줄인 경우 브레이스를 사용하지 않는다.
if (a > b) return a;

// 보통 함수는 arrow function을 사용한다.
const func = () => {};

// 보통 promise 보다 async/await 패턴을 사용한다.
const func = async () => {};

// 가급적 if~else문을 사용하지 않고 early return 한다.
if (a > b) return a;
return b;

하지만 어떤 분은 항상 브레이스를 사용하셨다. 또 arrow function은 콜백 내부에서만 사용하시는 분도 계셨고, promise 패턴을 더 선호하시는 분도 계셨다. 각자의 스타일이 있다 보니 컨벤션을 맞추기 위해 의견을 조율하는 데에 꽤 많은 시간이 소요됐다. 컨벤션까지 맞추어가며 협업했던 것은 처음이라 유익했고, 다른 사람들의 개발 스타일을 알아가는 시간이라 재미도 있었지만, _협업이 쉬운 게 아니라는 것_을 많이 깨달았다 😂

컨벤션 외에도 팀 자체에서 같이 지켜야 하는 부분이라면 사소한 부분이어도 반드시 회의를 통해 정했다. 회의를 거듭할수록 느꼈던 것은 생각보다 우리 팀 전부 말이 많았다. 사소한 부분을 위한 회의를 하다보면 대화 주제가 빗나가서 가끔은 아무 말 대잔치가 되기도 하고, 회의만 4시간을 하기도 했다. 그래도 초반에 컨벤션들을 잘 정의했기 때문에 프로젝트 중반쯤 리뷰어님이 우리 팀의 코드는 한 사람이 작성한 코드처럼 일관되는 것 같다는 칭찬을 해주셨다.

팀 프로젝트에 참여하면서 기본적으로 지켰으면 하는 그라운드 룰도 함께 정했다.

밥 먹을 때는 일상 이야기를!
7시 이후 퇴근은 눈치 안보고 퇴근 가능!
2주에 최소 한번씩 회식!
10시 1분은 10시가 아니다.

지각은 하지 않되, 퇴근 시간은 자유. 밥 먹을 때는 일 이야기를 지양하고 2주에 한 번씩은 회식. 프로젝트가 후반부로 갈수록 밥 먹을 때도 개발 이야기를 하는 경우가 종종 생겼지만, 회식도 2주마다 꼭 했고 팀원 모두가 그라운드룰을 지키기 위해 노력했다. 21개 팀 중에서 거의 매일 가장 빨리 모든 팀원이 다 모이는 팀이었다. -아무도 인정해주지는 않았지만 우리끼리 뿌듯했음..!


발표를 맡은 우혜주 입니다.

부스트캠프는 많은 사람 앞에서 발표할 수 있는 좋은 기회가 꽤 많이 주어진다. 나는 발표를 하는 것에 대해 큰 거부감은 없지만, 딱히 나서서 발표 하겠다 손을 먼저 드는 성향도 아니기 때문에 살면서 많은 사람 앞에서 발표했던 적이 손에 꼽는다. -행사 진행과 같은 것은 제외..

그룹 프로젝트 첫 주차에는 모든 팀이 기획을 발표하는 시간을 가진다. 아이디어 기획과, 화면 기획서를 바탕으로 제공하고자 하는 서비스를 소개하는 시간이다. 앞서 말했듯이 나는 화면 기획에 굉장히 많은 정성을 쏟았고, 결과물에 상당한 애착이 있었다. 디자인하면서 아이디어 발표 내가 해야겠구나! 하는 생각이 들었지만, 먼저 말을 꺼내기 조금 쑥스러웠다..

발표자를 정하려고 하는데 다른 팀원들도 선뜻 나서는 사람이 없길래, 사실 하고 싶었는데 마치 아무도 안 하니까 내가 하겠다는 듯이 제가 할게요! 해서 내가 우리 팀의 첫 발표를 맡게 되었다. 너무 오랜만에 많은 사람들 앞에서 발표하니까 긴장이 많이 되었다. 그래도 나름대로 만족스럽게 우리의 아이디어를 다른 분들께 잘 전달했다. 부스트캠프를 하며 발표와 질문을 한 번씩은 해보는 것이 내 나름의 목표 중 하나였는데 아이디어 발표를 맡게 되면서 목표를 이루었다.


우리 팀에서 발생하는 git 문제는 제가 다 해결하겠습니다.

챌린지 첫날만 해도 PR을 이해하지 못하던 내가, 학습 스프린트 과정을 하면서 git에 대해 전반적으로 많이 익숙해졌다.-끊임없이 삽질한 결과..! 학습 스프린트를 마무리할 때쯤에는 이제 rebasecherry-pick 등과 같은 명령어들을 자유롭게 사용할 수 있게 되었고, 그룹 프로젝트 초반에 마스터님이 알려주신 깃 브랜칭 게임을 통해 더 자세하고 깊이 알게 되었다.

본격적인 개발을 시작하기 전, 우리 팀에서 발생하는 git 문제를 내가 다 해결하겠다는 호언장담을 했다. 실제로 프로젝트 진행이 중반부쯤 되었을 때 팀원분 중 한 분이 실수로 develop 브랜치가 아닌, 마스터 브랜치에 PR을 날리시고 merge 하신 적이 있었는데 잽싸게 내가 해당 문제를 해결했다. ✌🏻

또한 나는 불필요하게 많은 커밋 로그를 지양하는 편이기 때문에 rebase 명령어를 굉장히 좋아하고 많이 사용하는 편이다. 하지만 rebase 명령어는 이전의 기록을 변경하는 것이기 때문에 이미 push를 한 경우에는 해당 변경 사항을 반영하기 위해 force 옵션을 사용해서 push 해야 하므로 꽤 위험한 작업이다. 하지만 내가 rebase를 많이 사용하는 것을 지켜본 팀원들 모두 점점 rebase의 매력에 빠지게 되었고, 깔끔한 커밋을 남길 수 있게 되었지만 force push 사용이 잦아졌다.. -갑자기 분위기 반성..

이제는 git을 어느 정도 사용할 수 있다고 생각한다. 잘못 푸시하고 머지한 경우 이를 되돌리는 방법이라든지, 과거의 특정 커밋의 내용을 변경하는 방법이라든지 간단하고 사소한 문제들은 큰 어려움 없이 해결할 수 있게 되었다.


협업의 가치

두 달동안 그룹 프로젝트를 진행하면서 마냥 순탄했다고 생각하지는 않는다. 알게 모르게 크고 작은 이슈들이 많았다. 같이 패스트파이브 라운지에서 밤을 새우며 개발한 적도 있었고, 배포가 잘되지 않아 손에 땀을 쥐었던 적도 있었다. 메인페이지의 원페이지 스크롤 기능을 구현하기 위해 노력했는데, 그 누구도 메인페이지를 스크롤 하지 않아 속상했던 적도 있었다.

그럼에도 같은 길을 걷고자 하는 동료들과 협업은 나에게 좋은 경험이었다고 확신한다. 혼자서 해결하지 못했던 부분을 머리를 맞대고 생각해보니 금방 해결되기도 했고, 잘 이해가 되지 않던 부분에 대해 질문하고자 설명하다가 갈피를 잡기도 했다. 또한 다른 팀원의 코드를 읽어가면서 코드를 이해하고 분석하는 힘도 많이 키울 수 있었고, 이런 방법도 있구나 깨닫기도 했다. 건설적이고 생산적인 대화를 통해 많은 영감을 얻을 수 있었다.

이번 그룹 프로젝트를 통해서 협업에 대해 많은 시행착오를 겪었고 더불어 많은 것을 느끼고 배웠다고 생각한다. 좋은 동료란 어떤 동료일까- 고민해본다. 나는 그들에게 좋은 동료였을까- 생각해본다. 짧지 않은 두 달 동안 나와 함께 프로젝트를 진행하며 힘들었을 팀원분들께 감사하다 .. (_ _)


저희 서비스는 코드 샌드박스를 클론한 서비스 코코드입니다!

부스트캠프 2019는 다양한 기업들과의 네트워킹 자리를 마련해주었다. 이번 기수는 따로 발표 없이 부스 형태로, 100분의 시간 동안 각 기업에서 관심 있는 팀의 부스를 방문해 자율적으로 질의응답을 갖는 방식으로 진행되었다. 우리 부스에도 많은 기업이 방문해주셨고 정말 100분동안 정신이 하나도 없었다.

안녕하세요! 혹시 코드샌드박스 사용해보셨나요? 저희 서비스는 코드 샌드박스를 클론한 온라인 코드 에디터 서비스 코코드입니다! 웹상에서 리액트 언어를 기반으로 한 웹 어플리케이션을 작성할 수 있는 환경을 제공해주고, 빌드된 화면을 실시간으로 확인할 수 있는 서비스인데요. 시연하면서 설명해드려도 괜찮을까요?

부스 소개 시간이 마무리되고 나니 이날을 위해, 이 말을 하기 위해 두 달 동안 노력했구나 하는 마음에 후련하기도 아쉽기도 했다. 프로젝트 소개 시간이 끝나면 네트워킹 시간으로, 자신이 관심 있는 기업들의 부스를 찾아가서 궁금한 것들을 묻고 답하는 시간을 가졌고 이것 또한 자율적으로 이루어졌다.

기업 네트워킹이 마무리된 지 며칠 되지 않아 아직 채용을 진행하지 않은 기업들도 많겠지만, 네트워킹 시간에 해당 부스에 방문하여 관심을 보인 사람들에게 개별적으로 컨택하여 채용 절차가 이루어지는 경우도 있고, 부스트캠프에 참여한 사람들 전원에게 채용 절차에 지원할 기회가 주어지기도 한다.

부스트캠프는 해당 기업에 지원할 수 있는 기회를 마련해주는 것이지, 완벽한 채용 연계를 보장하는 것은 아니다. 부스트캠프가 지원 기회를 제공해주었다면, 채용에 대한 여부는 본인 역량에 달린 것이다. 네이버, 라인, 카카오 등 이름있는 기업들과 마이리얼트립, 호갱노노 등 성장하고 있는 스타트업과의 채용 연계 기회가 주어진다는 것만으로도 엄청난 메리트이다.

완주하며

'짧은 시간 동안 이렇게 많이 성장할 수 있구나'를 혜주님을 보고 느꼈어요.

챌린지의 첫 번째 날, 그리고 마지막 팀 프로젝트를 함께했던 동료분께서 나에게 해주셨던 말이다. 이 말이 참 고마웠고 감사했다. 그동안 내가 했던 고민이 부질없지 않았음을, 잘해왔음을 말해주시는 것처럼 들렸다. 부스트캠프를 시작하기 전의 나는 고민이 없는 사람이었다. 고민 없이 코드를 짜고, 고민 없이 커밋을 했다. 지금의 나는 고민을 하기 시작한 사람이다. 코드 품질에 대해 고민을 하기 시작했고, 더 우아한 방법이 있을까 고민을 하기 시작했다. 다른 사람이 이해하기 쉬운 코드인가 고민을 하고, 좋은 코드란 무엇일까 고민한다. 고민을 하기 시작했다는 것, 그것이 내가 가장 많이 성장한 부분이 아닐까 싶다. -물론 아직도 많이, 아주 많이 부족하다.


물고기를 잡는 방법도 알려주지 않는다.

부스트캠프 자체에서 캠퍼에게 요구하는 것, 강제하는 것은 전혀 없다. 미션이 제공되긴 하지만 미션을 다 완수하지 않는다고 불이익이 있는 것도 아니며, 미션을 완수하라고 강요하는 것도 아니다. 그저 물음표를 던져줄 뿐 그 대답은 스스로가 찾아가는 것이다.

물고기를 잡아주기보다 물고기 잡는 법을 가르쳐라는 옛말이 있다. 어떻게 보면 부스트캠프는 물고기 잡는 법도 가르쳐주지 않는다. 물고기가 필요한가? 하는 물음표를 던져주고, 물고기가 필요하다고 스스로가 생각이 들면 물고기를 잡는 방법 또한 스스로 찾아 나가는 과정이었다. 그렇기 때문에 참가한 사람 개인마다 이 과정을 통해 얻어가는 것들이 모두 달랐을 거라 생각한다.


성숙한 개발자로서의 첫 발걸음

거의 6개월 동안 매일을 오전 10시부터 오후 7시까지 출근했던 프로그램이 마무리되고 나니, 학교를 졸업한 것 이상으로 아쉬웠다. 이 회고록도 내 예상보다 훨씬 길어졌는데-구구절절한 스타일, 사실 아직도 더 회고하고 싶은 것들이 많다. 챌린지 서울숲 캠퍼들은 마지막 주에 거의 매일을 회식했던 일, 멤버십 합격했을 때 나중에 잘못 발송된 메일 이라고 연락 올까봐 서울가는 버스에서 급하게 노트북 꺼내서 입과 신청 메일 보냈던 일, 학습 스프린트때 7주차에 호눅스님께 코드리뷰 받았던 일, 벨로퍼트님이 부스트캠프에 리액트에 대해 강의하러 오셨을 때 목소리 덜덜 떨면서 왜 많은 라이브러리 중에서 리액트를 선택하셨나요 하며 질문했던 일 -진짜 멋진 질문을 하고 싶었는데.. 질문이 끝나자마자 후회했다 등 재미있었던 일들도, 긴장됐던 일들도, 아쉬웠던 일들도 많은 일이 있었다.

부스트캠프 과정은 개발자의 길을 걷고 싶다는 막연한 생각을 좀 더 명확하고 구체화할 수 있었던 시간이었다. 같은 길을 걷고자 하는 동료분들로부터, 이미 그 길을 걸어가고 있는 시니어 분들로부터, 길을 걷고자하는 스스로로부터 많은 배움을 얻었고, 많은 고민을 나눴고, 많은 해답을 찾을 수 있었다.

부스트캠프를 하면서 많은 것들을 깨달았다. 어떤 수준까지의 코드를 작성 할 수 있는 사람이 되고싶다 와 같은 성장에 대한 욕심, 동료의 코드를 읽고, 이해하고, 분석하며 얻게되는 넓은 시야, 같은 고민을 나누는 동료와 함께 성장하는 힘, 어떠한 개발자로 성장하고 싶다는 개발자로서의 목표, 어떻게하면 품질이 높은 코드인지, 구조적으로 설계를 잘 할수 있는지와 같은 심도있는 고민 등 많은 것들을 내 것으로 흡수하고자 노력했다. 나에게 부스트캠프는 성숙한 개발자로서의 첫 발걸음을 내딛게 된 계기가 되었다.


내 인생의 터닝 포인트

부스트캠프를 마무리하며 마지막으로 제출한 설문조사에 이 과정을 지인에게 추천하겠냐는 문항이 있었다. 이번 부스트캠프를 운영하셨던 스탭분들과 마스터님들이라면 무조건 추천할 것이다. 내 인생에서 가장 열심히 살았다고 자부할 수 있는 6개월이었다. 앞으로 지속 가능한 개발자로 성장하다 가끔 슬럼프에 빠지게 될 때, 이 추억을 회고하며 다시 앞으로 나아갈 힘을 얻을 수 있을 것 같다. 부스트캠프 2019를 참가할 수 있었던 것은 개발자로서의 커리어로 봤을 때 엄청나게 큰 행운이었고, 잊지 못할 기억이다.

'Retrospective' 카테고리의 다른 글

부스트캠프 2019 멤버십 합격  (30) 2019.08.13

댓글