부스트캠프 2020 코스가 멤버십, 네트워킹데이까지 모두 마무리가 되었다. 마지막 5주동안 열심히 달려온 만큼, 일주일 정도 휴식하며 코딩테스트와 면접 준비를 조금씩 준비해나가고 있다. 나의 2020년 하반기를 함께한 부스트캠프인 만큼, 새해가 오기 전에 모든 과정을 돌아보는 후기를 써보고자 한다.
챌린지 돌아보기
챌린지 과정의 일일 회고들을 읽어보면, 새로 접하는 수많은 지식에 혼란스러워하는 내 모습이 보인다. Udemy로 JavaScript 인강을 하나 듣고 온 상태에서, 다른 전공생 분들의 실력과 CS 지식을 따라가기 위해 부단히 노력했던 기억이 난다. 첫번째 주에는 정말 내 코딩실력과 손이 원망스럽고, 나도 CS 전공생이었다면 좋았을텐데... 라는 생각을 많이 했던 것 같다. 미션이 하루 단위로 나와서, 이때는 정말 타임어택처럼 7시까지 과제를 끝내고, 또 그날 배운 내용을 gist에 정리하면서 하루를 꽉꽉 채워서 쓸 수밖에 없었다. 이때 정리해둔 내용들이 나중에 학습스프린트와 그룹프로젝트 때에도 가끔 볼 일이 생겼었다.
매일 프로젝트를 수행하면서, Code and Fix가 아닌 Plan and Code를 하는 법을 많이 익혔던 기억이 난다. 3주차부터는 항상 종이에 손으로 적어가며 설계 -> Skeleton 코드 작성 -> 테스트 작성 -> 코드 로직 구현의 작업 방식을 거쳤었다. 처음에는 바로바로 코드 구현에 들어가시는 다른 분들보다 느린게 아닐까? 데드라인을 맞추지 못하는 것이 아닐까? 걱정을 많이 했었지만, 숙달되고 나서는 오히려 때때로 다른 조원 분들보다 빨리 끝내는 경험도 하면서 좋은 작업방식이라고 생각했었다. 멤버십 때는 작업양이 더 많아지면서 테스트코드를 짤 시간이 없다고 느껴서 이 workflow를 그대로 가져가지 못했는데, 지금와서 돌아보면 한번쯤은 학습 스프린트때 시도해보면 좋지 않았을까? 라는 생각이 든다.
그래도 정말 이때 JavaScript 기본기가 많이 늘어서, 첫 주에 쩔쩔매던 내가 마지막 주에는 조원 분 한명이 '준수님 코드를 보고 정말 잘 짰다는 생각이 들었다.' 라는 말을 해주셨을 때 정말 기분이 좋았었다. 부스트캠프를 하면서 특출난 분들도 있지만, 확실히 과정을 성실히 따라가면 어느 수준 이상으로 실력이 늘 수밖에 없는 것 같다. 나는 다른 분들보다 지식이 없는 채로 시작했던 만큼 더 많은 것을 얻어갈 수 있었던 과정이었다.
학습스프린트 돌아보기
학습스프린트 기간은 6주를 끝내고 후기글을 적어놓아서 내가 과거에 쓴 글을 읽어보았다. 실제로 내가 웹에서 작동해볼 수 있는 작은 프로젝트들을 해보면서 많은 것들을 배우고 실습해볼 수 있는 기회였던 것 같다. 한편 이때는 본격적으로 웹 개발을 시작하면서, 과거 웹 개발 경험이 있으셨던 분들을 구현량이 남다르다라고 느꼈던 기억이 난다.
그룹프로젝트를 끝낸 지금 돌아보니, 이때가 내가 프로젝트에서 해보고싶은 경험들을 마음껏 하면서 자유롭게 실력을 쌓을 기간이었다고 느껴진다. 그룹프로젝트에서는 팀원들과 공동 목표를 향해 달려나가기 때문에, 내가 A 기능에 꽂혔다고 해당 기능을 마구 파거나 하는 것은 조금 지양해야 하는 경우가 있었다. 내 시간이지만 팀의 자원이기도 하기에, 프로젝트에 전체적으로 중요하다고 합의했던 것들을 만들어나가는 것이 더 중요할 때가 많았다.
그룹프로젝트 돌아보기
그룹프로젝트는 부스트캠프 전체 과정의 꽃이라고 해도 과언이 아니다. 그룹프로젝트를 하면서 정말 좋은 분들을 많이 만나고, 진짜 팀으로서 협업하는 법을 제대로 배울 수 있었다. 반면 학습스프린트에 비해 여러가지 서비스와 페이지가 혼합된 프로젝트를 만들면서 프로젝트의 복잡도가 수직 상승하는 것을 느낄 수 있었다.
3주 - 이슈트래커
첫 그룹프로젝트는 모든 그룹들이 공통된 주제를 진행했다. iOS 2명+ Web 3명 팀과 Web 4명 단독 팀 두 종류가 있었는데, 나는 iOS 분들과 함께하는 팀에 배정되었다. 프로젝트를 진행하면서는 "우리는 iOS 분들의 API까지 책임져야 하는데, 한 명이 오히려 부족하다니!" 라고 내적인 비명을 지르면서 했었다.
iOS 분들이 자체적으로 만드신 stub API로 지속적으로 개발하실 수는 없었기에, 빠른 시일 내에 개발용 API 서버를 띄우고, 또 그 서버가 죽지 않도록 관리하는 것이 정말 중요했다. 심지어 실제 사용자도 아니고, 같이 개발하는 팀원이지만 서버를 띄워놓고 잘 관리한다는게 얼마나 어려운 일인지 처음 맛을 보게된 것 같다. Slack이나 Zoom에서 "저기... 준수님 API 서버가 죽었네요..." 라는 말을 들으면 심장이 벌렁벌렁 뛰면서 당장 살리기 위해서 네이버 클라우드로 접속해서 머쓱하니 고치고 이러는 것을 반복했던 것 같다. 중간에 API 명세가 클라이언트나 API 서버의 사정에 의해서 바뀔 때도 많았고, 이에 대응하는 필요성도 있었다.
진행할때는 힘들었지만, 돌아보니 직장에 들어가기 전 다른 취준생들이 주로 해보지 못하는 경험을 해보았다는 생각이 많이 들었다. 이력서에 쓸 때도 Cross-Platform 프로젝트를 해보았다고 한 줄 적을 수 있고, 나는 모바일 클라이언트 팀원과도 협업한 경험이 있다라고 조심스레 써볼 수 있었다. 혼자 하는 프로젝트와 그룹 프로젝트가 다르듯이, 또 아예 서로의 코드를 100% 이해하기 힘든 상태에서 협업하는 프로젝트는 내 입장에서 또 다른 레벨이라고 느껴진다. 실제 현업에서는 보통 프론트엔드, 백엔드, 모바일이 모두 분업하기 때문에 이런 경험이 더 많아질 것이라고 느꼈다. 나에게 다시 3주 프로젝트를 시켜준다고 하면 주저없이 다시 iOS 분들과 함께하는 선택을 할 것이다.
5주 - 프론트엔드 에러, 퍼포먼스 모니터링 툴 Panopticon
대망의 마지막 프로젝트! 이 프로젝트는 마지막에 있는 네트워킹데이와 연계되는 만큼, 주제 배정부터 끝까지 다른 프로젝트보다 남다른 소중함이 느껴졌던 것 같다. 다행히 1지망 프로젝트에 배정되어서, 내가 가장 재미있다고 생각했던 주제의 프로젝트를 진행할 수 있게 되었다.
우리 팀의 프로젝트 주제는 "프론트엔드 에러 및 퍼포먼스 모니터링 툴" 이었는데, Sentry.io와 유사한 서비스를 만드는 프로젝트였다. 네이버와 같은 대기업에서도 유료로 사용하는 서비스이다보니, 다른 프로젝트와 비교해서 엄청나게 다양하고 복잡한 구현사항이 존재했다. 우리에게는 아쉽게도 5주라는 시간밖에 없었기 때문에 팀원들과 함께 합의해서 선택한 서비스의 특정 Core 기능들을 위주로 구현하게 되었다.
이때부터는 각 팀이 다른 주제를 가지고 있기 때문에, 모르는 것이나 공유하고 싶은 부분들 부스트캠프 전체보다는 팀 내부나 같은 주제를 가진 몇몇 팀들과 공유하게 된 것 같다. 챌린지때가 Slack이 가장 시끌벅적했고, 최종 그룹프로젝트에는 Slack이 거의 조용했는데 살짝 아쉬움을 느꼈다. 하지만 그만큼 5주를 함께하는 팀원들과 끈끈한 동지애(?)과 교류를 할 수 있는 기간이었다.
프로젝트 주제별로 기술 스택이 조금씩 달랐는데, 이때 TypeScript와 MongoDB를 쓰게 되면서 부스트캠프 공통(?) 스택에서 벗어나 새로운 기술 스택을 경험할 수 있었다. 프로젝트가 복잡해지는 만큼 전문성이 필요해져서, 몇몇 조에서 많은 분들이 프론트엔드 / 백엔드로 구분하여 분업을 하거나 하나의 feature를 담당해서 개발하는 방식을 택하게 되었다. 우리 조는 이런 방식을 택하지 않고, 모든 팀원이 프론트엔드, 백엔드, 그리고 우리 주제의 포인트인 SDK를 구분하지 않고 프로젝트 전체를 돌아다니면서 작업을 하였다. 다시 돌아보면 각 방법이 일장일단이 있다고 느낀다.
TypeScript와 MongoDB는 두 스택 모두 사용하면서 많은 매력을 느꼈다. TypeScript를 써보신 분들이 정말 좋다고 하는 말을 들으면서, "분명 Type 선언 등 코드 작성량은 더 많을텐데, 어디에서 이점이 있는 것일까?" 라는 궁금증이 많았었는데 프로젝트를 통해 시원하게 해소하게 되었다. 정적 Type 선언을 하면서 얻은 IDE의 자동완성 기능, 그리고 컴파일 타임의 에러 방지를 경험하면서 이래서 쓰는구나! 라는 깨달음을 얻는 기간이었다. JavaScript의 타입을 넘나드는 마법같은 테크닉을 부리기는 힘들지만, 그만큼 협업과 유지보수에서 큰 강점을 지닌다고 느꼈다.
MongoDB는 NoSQL을 처음 사용해봤는데, RDB보다 더 직관적이고 유연하면서도 대용량 데이터를 처리할 수 있다는 매력을 느꼈다. 아쉬운 부분은 프로젝트를 시작할 때 팀원분들이 다들 MongoDB가 처음이었기 때문에, MongoDB의 강점을 100% 살리는 DB 설계를 하지 못하였다. 정말 MongoDB를 제대로 쓴다면 소수(어떨때는 하나)의 Collection에 모든 데이터를 역정규화를 시켜서 써야하는데, 처음에 RDB 스타일로 설계를 해버려서 나중에 바꿀 기회를 잡지 못했다. 사용하면서 많은 매력을 느껴서 더 배워보고 싶은 분야 중 하나이다.
최종 프로젝트에는 또 현업 부서의 멘토님들이 오셨는데, 정말 좋은 멘토님을 만나게 되어서 많은 케어를 받을 수 있었다. 나는 당연히 3년차 쯤의 신입 티를 벗은 분일 것이라고 생각했는데, 팀 내에서 시니어 롤을 맡고 계신 5년차 이상의 개발자님을 뵙게 되어서 정말 매번 멘토링때마다 많은 조언을 받을 수 있었다. 프로젝트와 기술적인 부분 말고도 진로나 발표와 같은 부분도 신경써주셔서 큰 힘이 되었다.
프로젝트 마지막 주에는 에러를 잡고 최종 발표를 준비하면서 떨리는 한주를 보내게 되었다. 다행히 마지막 금요일에 실제 발표일과 똑같이 데모를 하고, 멘토님이 조율해주신 일정에 따라 현업 개발자님들과도 리허설을 하게 되어서 네트워킹데이의 발표는 순조롭게 마무리할 수 있었다. 오히려 멘토님과 부서 분들을 뵙고 한 리허설이 더 떨렸었다.
네트워킹 데이 이전에 다른 팀들이 멋진 결과물을 보면서 "와 정말 멋있다...! 어떻게 저런 걸 만들었지" 라는 생각을 하고, 또 우리 프로젝트가 상대적으로 부족한 것이 아닌가라는 걱정을 많이 하게 되었다. 자신이 한 프로젝트는 자기 자식과 같아서 어떻게 구현되었는지, 어디가 부족한지 내가 다 알고 있어서 괜히 부족하고 별 것 없어보인다. 하지만 우리 프로젝트도 충분히 멋지다라는 믿음과, 그동안 팀원분들과 헤쳐온 길을 믿고 발표를 준비했다. 실제 발표 이후 "이 정도면 나쁘지 않았다" 라고 생각했는데, 이후 우리 Zoom 부스에 많은 기업 관계자분들이 오셔서 폭풍 관심과 질문을 던져주셔서 의외의 기쁨을 누릴 수 있었다. 오히려 기술적인 부분보다, 팀원간에 규칙을 정하고 agile하게 협업한 부분들 좋게 봐주신 것 같다.
배운 것들
다시 돌아보면 부스트캠프를 통해서 정말 셀 수 없을 만큼 많은 것들을 배운 것 같다. 세세한 개념까지 다 들어가면 정말 한세월일 것 같고, 주요 부분만 뽑아보자.
Frontend: JavaScript, TypeScript, HTML, CSS, React, MVC 패턴, Observer 패턴, Webpack & Babel 입문, Material-UI
Backend: Node.js, Express, Koa, Sequelize ORM, MySQL, MongoDB, 클라우드 서버 사용법, 클라이언트 인증
Other: Notion, Git/GitHub, CI/CD, PR 리뷰, 스크럼, agile 방식, 팀 의사결정 & 조율방법
쓰고 나니 이걸 5개월만에 다 배웠다는 것이 정말 실감이 나지 않는다. 물론 저 스택들을 다 통달한 것은 아니고, 기본적인 기능과 개념만을 익힌 것이지만 그래도 정말 대단하다고 느낀다.
배워나갈 것들
부스트캠프에서 정말 수많은 것들을 배웠기에, 학습 키워드는 알고 있지만 어렴풋이 알고 있거나 "그런 개념이 있다" 정도만 알고있는 것들이 많이 있다. 사실 저 스택 중에 하나만 파도 제대로 모두 알려면 끝이 없는 것들이 많다. 내가 아직 숙달되지 못했다고 생각하는 키워드들을 계속 관리하면서 내것으로 만들기 위해서 노력해야겠다. 지금도 CORS, TypeScript 심화 문법, CSS Grid, Redux, Webpack & Babel, MongoDB, HTTPS 구현 등 내가 숙달하지 못한 것들이 수업이 생각난다.
스스로 칭찬
- 챌린지 첫날부터 시작한 일일회고를 마지막 날까지 마무리했다. 폭풍같이 지나가는 부스트캠프이기에, 만약에 이 일일회고들이 없었다면 오늘 적은 내용들의 반도 기억하지 못했을 수도 있을 것이다. 나중에도, 앞으로도 이 회고들이 큰 자산이 되길.
- 챌린지부터 마지막 그룹프로젝트까지, 매번 거의 빠짐없이 함께한 분들에게 "준수님은 코드 리뷰를 정말 세세하게 잘해주신다" 라는 감사한 말을 들을 수 있었다. 그룹프로젝트에 들어가면서 "같이 일하고 싶은 개발자"가 되자고 마음먹었는데, 적어도 코드 리뷰 부분에서는 이 목표를 달성한 것 같다.
- 중간중간 힘든 시기도 있었지만, 개발자가 되겠다는 큰 결단을 하고 이렇게 부스트캠프 마지막까지 달려온 나 자신이 자랑스럽다.
아쉬웠던 점
- 부스트캠프 일정에 치여서라는 핑계로 개발 서적을 많이 읽지 못했다. 챌린지 초반에는 새로 산 클린코드를 조금씩 읽고 스터디에서 발표도 했었는데, 멤버십이 마무리된 지금까지 클린 코드 완독을 하지 못했다. 컴퓨터와 검색을 끼고 사는 개발자가 왠 책이냐라고 할 수도 있지만, 나는 좋은 책은 저자가 한땀한땀 노력해서 정제한 지식을 내 것으로 만드는 최고의 방법이라고 생각한다. 그냥 개발자가 아닌 좋은 개발자가 되기 위해서 앞으로는 하루에 시간을 정해놓고 틈틈히 개발 서적을 읽도록 하자.
- 일일회고를 성실하게 쓴 반면에, 개발 블로그라고 할만한 내용들은 많이 쓰지 못한 것 같다. 나만의 기록이 아닌 다른 개발자에게 도움과 가이드가 될 수 있는 '기술적인' 글들을 앞으로는 써보도록 노력하자. Tistory는 지금과 같이 기록을 하는 곳으로 남겨두고, Medium이나 Velog등의 플랫폼을 사용하거나 따로 블로그를 만드는 것을 고려해봐야겠다.
- 다시 돌아가도 부스트캠프 일정과 병행이 가능할까 싶기는 하지만, 인턴에 지원하게 된 지금 Java를 같이 챙기지 못한 것이 다소 아쉽게 느껴진다. 워낙 좋고 메이저한 언어이기도 하고, 백엔드에 관심이 있다면 기본 소양이라고 생각한다. 앞으로는 틈틈히 Java, Spring 쪽도 수준을 올릴 수 있도록 노력해야겠다.
- 챌린지까지는 테스트코드를 많이 짰었는데, 그룹 프로젝트에서도 간단히 내가 담당한 부분에 시도는 했었지만 일정이 바쁘다보니 견고한 테스트코드나 TDD를 하지는 못한 것 같다. 앞으로는 테스트코드도 신경쓰도록 노력하자.
마치면서
지난주 네트워킹데이를 끝내면서 "와... 부스트캠프가 끝났구나" 라는 생각이 들었었는데, 오늘 회고를 쓰면서 보니 앞으로 개발자로 살아갈 많은 나날들 중 첫 발자국을 겨우 떼었구나라는 생각이 든다. 부스트캠프가 있었기에, 남들이 긴 시간 헤매고 거쳐오는 길들을 5개월이라는 짧은 시간 내에 방향을 잘 잡아서 올 수 있었던 것 같다. 캠프를 통해서 배운 지식과 경험도 중요하지만, 무엇보다도 개발자로서 살아가기 위한 좋은 습관과 자세를 얻어가는 것이 부스트캠프의 가장 큰 성과인 것 같다.
부스트캠프 마지막 날 다른 캠퍼님들 뿐만이 아니라 '부스트캠프'라는 대상에도 롤링페이퍼를 쓸 기회가 있었다.
후기를 쓰는 지금 보니 조금 낯간지럽고 쑥스럽기는 하지만, 정말 개발자로 첫 발을 내딛게 해준 부스트캠프에게 정말 진심으로 고마움을 느낀다. 캠프가 끝나고 같은 팀원분들과 스터디 외에는 일정이 없다보니 벌써 부스트캠프 때의 정신없던 시절이 먼 과거처럼 느껴진다. 앞으로도 내가 5개월동안 쏟아부었던 그 열정과 경험을 잊지 않는 스스로가 되었으면 좋겠다. 인턴도, 앞으로 취직도 아직은 걱정이 많이 되지만 부스트캠프 때의 나를 잊지 않고 살아간다면 언젠가는 좋은 개발자가 된 스스로를 볼 수 있을 것이라고 믿는다.
'Boostcamp 2020' 카테고리의 다른 글
부스트캠프 회고 - 5주 그룹프로젝트 5주차 day5 (0) | 2020.12.18 |
---|---|
부스트캠프 회고 - 5주 그룹프로젝트 5주차 day4 (0) | 2020.12.18 |
부스트캠프 회고 - 5주 그룹프로젝트 5주차 day3 (2) | 2020.12.17 |
부스트캠프 회고 - 5주 그룹프로젝트 5주차 day2 (0) | 2020.12.16 |
부스트캠프 회고 - 5주 그룹프로젝트 5주차 day1 (0) | 2020.12.15 |