쉼없이 달려온 6개월

챌린지를 시작할 때만 해도 멤버십에 내가 뽑혀서 갈 수 있을까? 를 걱정했었는데, 어느새 멤버십이 시작되어 있었고, 멤버십은 또 언제 끝나려나 곧 김밥말이들이 되어서 만나겠다 하면서 웃었던 게 엊그제 같은데 벌써 다 끝나서 2020년을 기다리고 있다.

나의 2019년을 여기에 모두 쏟아부었다고 해도 과언이 아닐 정도로 부스트캠프를 하면서 나는 엄청나게 성장했고, 또 많이 변했다. 그래서 이 과정 속 나는 어떻게 변화했는지 기록을 남겨보려고 한다.

부스트캠프 챌린지_웹 유아기

웹에 대해서는 하나도 모르던 꼬맹이 시절. 기껏해봐야 학부 때 배웠던 HTTP 프로토콜이나 알았던 때 였던 것 같다. git은 add, commit, push 밖에 할 줄 몰랐고 PR은 거의 처음 들어본 말이었다. 거기다 javascript까지 처음. 정말 개발도 몰랐다고 해도 과언이 아닌 것 같다. 그 때 남겼던 TIL들을 보면 내가 이 정도였다고? 할 정도로 웃음이 나온다.

부스트캠프 챌린지 과정은 매일 새로운 미션을 받아서 미션을 풀고 (기억이 맞다면) 9시까지 제출해야했다. 거기다 그 미션들에 대해 다음날 팀원들과 토론하고, 해결 과정들을 함께 살펴봐야했기 때문에 미션을 허투로 할 수가 없었다. 그 덕에 더 성장할 수 있었던 것 같기도 하다.

과정의 특성 상 매일 미션을 거치면서 배우는 점들이 생겼기 때문에 기록할 것이 많기도 했겠지만, 이 때의 나를 보면 참 열심히도 했구나하고 감흥이 새롭다. 하루하루 배웠던 걸 기록하고, 느꼈던 점들을 기록하고.. 지금의 나는 일주일에 한번 쓰는 것도 버거워서 이주일에 한번 적은 날도 있었는데. 옛날의 내가 대견하기도 하고, 반성하게 되기도 한다.

첫날의 기록
[부스트캠프 챌린지 첫날의 기록]

이 때 배웠던 모든 것을 나는 부스트캠프 멤버십을 하면서 모두 썼을까? 이 기록들을 다시 살펴보면서 느끼는 거지만, 진짜 많은 것들을 배웠고 치열하게 보내왔다.

과정들을 다시 보면서 아쉬운 점이 있다면, javascript를 처음 써봐서 교육의 본질에 집중하기 쉽지 않았다는 것. 조금 더 CS 지식에 집중하고 싶었는데 javascript에 대해 삽질하느라 그 과정에 집중하기 쉽지 않았다.

그래도 다음날 팀원들과의 토론 시간이 있어서 내가 공부하지 못했더라도 얻어갈 수 있는 것들이 많아서 정말 좋은 시간이었다. 멤버십이 되어서는 이 시간이 점점 짧아졌는데, 토의 시간은 많을 수록 좋았던 것 같아서 아쉽다.

가장 기억에 남았던 주제

비동기. 웹에서 가장 중요한 주제이기도 하다. 그래서 가장 많이 고통받았던 주제. 처음 Promise를 접했을 때의 기록을 보니, 차라리 콜백 지옥이 나을지도 모르겠다고 생각했다고 한다는 후문… 그 때의 나는 이걸 이해하느라 정말 힘들었나보다😓 (이 개념이 나오고 부터 맨날 9시에 퇴근했기 때문인 것 같기도..)

테스트 코드. 멤버십 팀 프로젝트에서도 정말 하고 싶었던 부분인데 하지 못했던 부분이라 더 기억에 남는 주제.. 프로젝트를 하며 하나를 고치면 다른 한쪽에서 발생하는 버그들을 보면서 왜 다들 테스트 테스트 하는지 더 실감할 수 있었다. (백엔드는 버그가 잘 안나와서 괜찮았는데, 대체 프론트엔드 테스트는 어떻게 해야하는 걸까?)

부스트캠프 멤버십_웹 어린이

멤버십은 반으로 줄어든 인원, 서울숲 패스트파이브에 한 데 모여서 시작했다. 서울숲의 분위기를 보고 강남은 정말 어둑어둑 했구나하고 조금 슬펐다.. 사람은 환경에 적응한다고 미션에만 집중했던 강남 시절과는 달리 밝아진 분위기에 맞게 사람들과 더 잘 어울리려고 했던 것 같다.

학습 스프린트

챌린지에서는 미션 하루살이로 살아왔다면, 멤버십에서는 8주 동안 미션 일주살이(하나의 서비스 풀스택 개발로 친다면 이주살이?)로 살았다. 이 때 좀 다른 점이 있었다면 챌린지 때는 계획이랄 것도 없이 하루종일 달렸지만 멤버십에서는 나름 계획을 세워보면서 나아갔다는 점.

월요일에는 나름대로 프로젝트 전체에 대한 설계, 디자인 작업을 해보고 각 일별로 어떤 작업을 해야할 지 예상해봤다. 이 때 매일매일 개발 일지를 작성해서, 어떤 부분에 대한 작업을 했었는지 어떤 삽질을 했는지 기록했었는데 지금 보니 이런걸 했었네.. 하고 새롭다.

첫 로그인-회원가입을 만들던 프로젝트에선 기록도 열심히하고 참 열심히 했는데 2번째, 3번째에선 점점 기록을 줄였었다.

공채가 시작된 시즌이었는데, 주변이 모두 공채로 바쁜 데 나는 여기서 뭐하고 있나.. 하는 심적 부담감에 좀처럼 기록할 기운이 안났던 것 같다. 그래도 마스터님이 사람은 항상 언젠가 지칠 수 밖에 없지만, 아예 안하는 것보다는 횟수를 줄이면 언젠가는 다시 돌아오게 된다는 말을 상기하면서 2주에 한번이라도 회고 기록을 남기려고 노력했던 것 같다.

또 나보다 잘하시는 분들이 너무 많아서 부담감이 많아지기도 했다. 나는 이 기능만 개발하는 데도 엄청나게 허덕였는데, 누구는 여기까지, 거기까지 신경쓰면서 개발했네.. 기능을 포기하고 학습에 집중해야할까? 꼭 어느 한 곳을 포기해야만 할까? 이런 생각들로 가득해서 남들과 나를 계속 비교하느라 참 힘들기도 했다. 회고를 하다가 조금 울컥한 적도 있다.

그래도 그 위기를 딛고, 나를 자꾸 비교하지만 말고 나만의 목표를 세우기로 다짐했다. 좋은 기술도 많고 그걸 도입해서 해보는 것도 좋은 일이겠지만, 나는 지난주의 나보다 나은 코드를 만들어보자는 생각을 가지면서 보냈다.

실제로 코드를 보면, 지난 미션에서는 이게 뭐람.. 했던 코드를 개선해서 다음 미션에서는 더 깔끔하게 사용하고 있었다. 미션 자체를 완성도 있게 끝내진 못했지만, 최소한 지난번에 더티 코드 였던 부분을 개선해 점점 더 클린 코드를 향해 나아갔다.

마지막 주차에는 팀 프로젝트를 할 팀원들과 코드리뷰를 시작했는데, 그 때의 미션의 완성도는 가장 낮았지만 가장 깔끔한 코드를 만들었던 것 같다. 거기에 자극 받아 좀 더 프로젝트를 하면서 배운 것들을 정리하고, 기록하면서 보냈는데 이 때 기록했던 것이 기억에 많이 남았던 것 같다.

멤버십 학습 스프린트 마지막 기록
[멤버십 학습 스프린트 마지막 기록]

팀 프로젝트

기나긴 학습 기간이 끝나고, 드디어 서비스를 만들게 되었다. 자율적으로 짠 팀이지만, 이전에 알던 팀원들은 아니었고 2명씩 알던 사이가 만나 구성된 4명의 팀이었다. 다들 팀이 짜진 과정을 들어보면 깜짝 놀랬다. X)

주제를 정하고, 이름을 정하기까지

어떤 서비스를 만들 것인지 정하는 데 1주일, 처음에는 마스터님이 강의를 하실 때 sli.do로 항상 질문을 받으셔서, 저거 만들어보면 재밌겠다는 생각으로 클론 프로젝트로 업그레이드 된 버전, sli.done을 만들어보자고 정했었다.

그래서 이름까지 다 정해진 프로젝트인 이 프로젝트를 하려다가 프론트를 좋아하는 우리로서는 그 프로젝트는 뷰가 너무 적다는 생각이 들었다. 그렇게 하게 된 것이 실시간 퀴즈 플랫폼.. Kahoot의 클론 프로젝트! 게임이다보니 보여줄 것도 많았고, 실시간이다보니 백엔드도 신경쓸 것이 많아 적당하다고 판단했다.

이름을 sli.done으로 둘 순 없어서, 새로 정하려고 이름을 생각해보다가 누군가 done으로 끝나니까 포세이돈이 생각난다고 해서, 그럼 로고에 삼지창을 집어넣으면 멋있겠다고 했고, 포세이돈은 그래도 뭔가 연관이 없는 것 같아서 생각해보다가 삼지창 하면 포크가 생각나지 않나, 포크면 pork 돼지.. 뭐 이런 식으로 계속 꼬리를 물면서 말하다가 포크는 찍는다는 의미가 있고, 우리 퀴즈는 고르기도 하니까 pick. 거기에 학습 플랫폼이니까 귀여움을 더해 pick과 fork에 y를 붙여 pickyforky, 피키포키가 완성되었다.

그러니까 sli.do > sli.done > 포세이돈 > 삼지창 > 포크 > fork는 찍는거 > 고르는건 pick > pickyforky 가 된거다..

우리는 되게 자연스러운 흐름이라고 생각했는데 이 이야기를 들은 어떤 분은 굉장히 특이하다고 했다. 보통 이런 생각은 한 사람에게서 나오는데, 여기는 다같이 특이한 사람들 모임이라고ㅎㅎㅎ.. 뒤돌아보니 특이하긴 한 것 같기도 하고.. 회의 과정이 항상 좀 특이하긴 했다.

잘 만들어졌을까?

처음 정했던 우리 팀 프로젝트의 목표는 이거였다.

  1. 모바일 퍼스트
    컨퍼런스 같은 장소의 특성상, PC보단 핸드폰 사용자가 더 많은 것을 고려해 모바일 퍼스트로 만들어보자.
  2. 안정적인 서비스
    1000명이 동시 접속해도 안정적인 서비스를 만들어보자.
  3. 디자인 라이브러리를 사용하지 말고 공용 컴포넌트 만들기
    쓸데없이 크기를 키우기보단, 우리가 필요한 수준의 공용 디자인 컴포넌트를 만들어서 사용하자.

미션! 프론트엔드
모바일 퍼스트는 처음에는 미디어 쿼리를 사용해서 대응하면 쉽게 될 줄 알았는데 아니었다. 미디어 쿼리로 일일히 대응하다보니 styled component를 사용하고 있는 우리로서는 스타일 코드가 너무 길어져서 더러워졌고, 가로-세로를 다 대응하려니 글자가 너무 작거나 너무 커지는 경우도 다반사였다.

그 다음에는 vmin같은 단위를 사용해서 비율이 유지되도록 했는데, 확실히 미디어 쿼리가 줄어서 코드는 더 깔끔해졌다. 하지만 가로 화면을 대응해야할 때는 흠.., 가로인 vm단위는 커졌지만 세로는 오히려 좁아지는 바람에 글자의 높이가 너무 커져서 지정된 범위를 벗어나기도 했다.

다크모드까지 대응하려니, 만만치 않았다. 어떤 회사는 이 다크모드를 대응하려고 TF팀까지 있다고 했다. 미디어 쿼리로 대응이 안되는 브라우저들이 있다보니, 그 색상을 계산해서 다시 되돌려 주거나 하는 방식을 사용해야한다고 하는데 최대한 한 것을 많이 보여줘야하는 입장에서는 조금 딜레마였다. 여기까지 한다고 사람들이 알아줄까..?

실제로 마스터님도 반응형은 꽤 어려운 일인데, 잘 알아주지 않는 작업이라는 말씀도 하셨다.

공용 컴포넌트는 의외로 쉽게 잘 됐던 것 같다. 아무래도 이전 학습 스프린트에서도 컴포넌트화 해보는 것을 항상 생각해보라는 말씀 덕인지 크게 어렵지 않게 만들고, 사용할 수 있었다. 아마 우리에 맞게 설계된 간단한 컴포넌트들이었기 때문인 것 같기도 하다.

미션! 백엔드
백엔드 목표였던 안정적인 서비스는 지켜졌는지 잘 모르겠다. 마지막에 스트레스 테스트를 해봤어야했는데, 100명 정도에서 테스트를 그치고 결국 데모까지 제대로 된 테스트를 해보지 못했다.

그 점이 조금 아쉬운데, 어떻게 대처해야 더 많은 사람들을 수용할 수 있을 지에 대해서는 다같이 고민해봤기 때문에 구현은 못했더라도 생각까지 했다는 점에서 조금 아쉬움을 덜었다.

아쉬움

팀원 중 한명이 나가게 되서 팀 프로젝트에서 처음 구상했던 목표를 전부 구현하지 못한 점이 우선 가장 큰 아쉬운 점이다. 4명으로 시작해서 3명으로 끝나기.. 결국 잘 완성은 했지만 기능 하나가 빠져버리게 된 것이 아쉬운 점 하나.

또 GraphQL을 프로젝트에 한번 써보고 싶었는데 못쓰게 된 것도 조금 아쉽다. RESTful API는 api 주소를 정하느라 힘들고, 실제로 그 API를 쓰려고 하지 않긴 했지만 어쩌다보니 HTTP Method가 안맞아서 리팩토링을 하다가 그 형태와 비슷하게 리팩토링을 해버렸다. 그 이후론 RESTful하게.. 된 것 같다.

그러면서 소비되는 시간이 너무 많았던 것 같다. api를 짜고, 어떤 api인지 주석을 달고, fetch 함수를 또 만들어줘야 하고.. GraphQL은 이런 시간을 좀 단축할 수 있는 좋은 방법 중 하나였는데, 너무 늦게 학습을 하게 돼서 결국 도입은 실패했다.

여러모로 아쉬움이 많이 남긴 하지만, 그래도 팀원들과 알차게 좋은 시간들을 보낼 수 있었다. 마지막에는 부캠퍼들과 함께 12인큐 오버워치 내전도 하고, 회식도 하고..(역시 남는건 사람인가!)


6개월을 되돌아보려니 말이 엄청나게 길어졌는데, 그만큼 느낀점이 많은 시간이었다. 이 과정이 없이 만약 이대로 취업이든, 뭔가를 했더라면 지금의 내가 되기까지 정말 오랜 시간이 걸렸을 것이라고 생각한다. 그래서 쉼없이 여기까지 온 나에게 고생했다고 말하고 싶다! 앞으로 더 고생하라고!

아마 내 개발 인생은 부스트캠프 이전과 이후로 나뉘지 않을까! 그만큼 큰 시간이었던 것 같다. 이렇게 많은 개발자들이 한 데 모여서 같은 미션에 대해 얘기하고, 느낀점에 대해 이야기하는 시간은 흔치 않은 시간이라 정말 소중했던 것 같다.

6개월 동안 함께했던 모든 부스트캠퍼들, 마스터님 그리고 운영진분들께 정말 감사하다는 말씀을 드리고 싶다 :)