일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- BFS
- socket
- 쉬운 문제
- type challenge
- dp
- TCP
- 그래프
- 수학
- 크롤링
- 타입스크립트
- Nestjs
- 프로그래머스
- 백준
- Node.js
- 레벨 1
- 자바스크립트
- 가천대
- typescript
- 소켓
- javascript
- HTTP
- Crawling
- 알고리즘
- 타입 챌린지
- Algorithm
- ip
- 프로그래머스 레벨 2
- HTTP 완벽 가이드
- 문자열
- dfs
- Today
- Total
kakasoo
부스트캠프 5기 멤버십 5주 프로젝트 회고 본문
아무래도 멤버십은 글을 쓰는 게 조심스러워서 이제야 올린다. 우리 팀은 자유 프로젝트였기 때문에, 우리가 직접 주제를 정하고 프로젝트를 시작했다. 그래서 이 주제에 대해서는, 굳이 부스트캠프의 허가가 없어도 글을 써도 될 거 같다. 우리가 어떤 프로젝트를 했고, 그 과정이 어땠는지 말해보고 싶다. 나중에는 기술적인 내용까지 전부 다 이야기해보고 싶다.
1. 공부해서 나 준다
우리는 사실 벤딩머신 팀이었다. 나는 미리 팀원들을 초대하고, 사람들과 이야기를 나눌 준비를 했다. 빨리 친해질수록, 더 자연스럽게 이야기가 가능할수록 능률이 높아질 거란 생각이었다. 그리고 월요일이 되고, 멘토링 전에 팀 빌딩을 시작했다. 아직 우리 주제에 대한 자세한 소개를 듣지는 못했지만, 미리 준비하면 분명 도움이 될 거란 생각이었다. 그런데 그 생각대로 되지 않았다. 우리 프로젝트는 취소되었다.
갑자기 팀이 해체되기 직전으로 밀렸다. 그래도 설마 운영진이 우리를 버릴 거라고는 생각하지 않았기에, 우리는 운영진이 이 문제를 해결하기 전까지 팀 빌딩을 이어나갔다. 물론 주제가 정해지지도 않은 상태로, 냉정하게 말해서 이 팀이 유지될 거란 확신도 없는 상태로 팀 빌딩을 하는 게 잘 될 리가 없었다. 우리는 첫 날에, 각자 공부를 하기로 했다. 우리가 다시 뭉치든 흩어지든 공부해서 아쉬울 건 없으니깐. 지금 생각하면 이 마인드도 참 좋았던 거 같다. 공부해서 남 주지 않는다는 마인드, 공부는 다 날 위한 것. 당시에는 속이 쓰릴 정도로 스트레스를 받고 있었지만, 시간이 지난 지금 다시 복기를 해보면, 이런 마인드가 있었기 때문에 우리 팀이 위기 때마다 극복할 수 있었던 것은 아닐까. 이 모든 것이 결국 우리에게 좋은 자산이 될 거라는 마인드.
2. 모르면 끝까지 물어보기
우리는 협업 툴인 miro와 당근마켓 사이에서 고민했다. 그러다가 우리는 투표를 통해 당근마켓을 하기로 했다. 그런데 당근마켓만 하자니 뭔가 허전하다. 다른 팀원의 말에 의하면 "지금까지 누차 해오던 것이 클론 코딩인데, 또 클론 코딩을 하기는 아쉽다." 였다. 그래서 우리는 기술적 도전을 하나 추가했다. 우리가 직접 리액트 같은 프레임워크를 만드는 것은 어떨까? 그렇게 우리는 주제가 정해졌다. 그런데 팀원 중 하나가 걱정이 된 모양이다. 우리가 잘할 수 있을지에 대해서 질문하였다. 그리고 이 주제가 타당한지, 다시 한 번 논의하자고 했다. 솔직한 내 감상으로는, 주제가 뭐가 중요하겠냐는 생각이 조금 있었다. 어차피 보여주는 것은 우리가 얼마나 잘했냐지, 주제를 보지는 않는다. 우리는 창업 팀이 아니다, 딱 이런 생각이었다. 더군다나 우리는 갑자기 자유프로젝트로 바뀌어서 이미 4일은 날려먹은 시점이다. 이 상황에 고민은 사치가 아니겠는가. 그러나 그 팀원의 말에, 우리 팀은 다시 처음부터 논의를 했다.
팀원4 : 우리가 협업을 하는 의미를 생각해보면, 모두가 만족할 때까지 이야기하는 게 맞는 거 같아요.
어느 쪽이 좋은가, 우리에게 공부가 되는 쪽은 어디인가, 그리고 우리를 위해서, 더 나은 방안이 있는가. 처음부터 논의를 하니 결국 우리는 기존의 주제로 가기로 했다. 결국은 같은 결론에 도달했다. 그렇지만 같은 결론이라 해서 같은 결과는 아닌 거 같았다. 당시 나는 의문에 가득 차 있었지만, 글쎄. 만약 그 때 팀원의 의견을 무시하고 강행했다면, 결국 누군가는 이 프로젝트에 금방 흥미를 잃고 말았을 것이다. 이 쯤에서 우리가 팀원과 정한 약속을 이야기해야겠다.
팀원2 : 그러면 모르는 거 물어봐도 화내지 않기에요, 진짜 몇 번을 물어봐도.
팀원3 : 그러면 모르는 거 있을 때 알 때까지 끝까지 물어보기에요.
아름다운 이야기 아닌가. 이런 마인드로 도전하면 뭔들 못할까.
3. 우리 팀은 꼰대들이야
다시 돌아가서 우리가 왜 프레임워크를 만들게 되었는지 말해보자. 사실 당근마켓이 우리 주제였던 것은 맞다. 거기에 우리가 프레임워크를 만들자고 했던 것인데, 여기서 가치가 전도되었다. "당근마켓을 위해 프레임워크를 만드는 게 아니라, 프레임워크를 만들고 그걸 자랑하기 위해 당근마켓을 만들자."가 되었다. 그 때 팀원 한 분이 우리 팀에 대해서 이렇게 말했다. "우리 팀은 다 꼰대들이야." 라고. 아닌 것도 아닌 게, 우리 팀이 프레임워크를, 바닐라 스크립트를 통해 만들려고 했던 것은 이게 '근본'이기 때문이다. 순수한 자바스크립트를 사용한다는 것, 프레임워크를 이해하기 위해 프레임워크를 만들어본다는 것. 이게 근본이었다. 다른 팀원의 멋들어진 표현을 빌리면 아래처럼 표현할 수 있겠지만.
팀원3 : 기술 (여기서는 프레임워크)은 어차피 변하는데, 그 근간이 되는 바닐라 스크립트는 바뀌지 않잖아요.
4. 가상 DOM에 DB를 섞으면?
그런데 놀랍게도, 어쩌면 당연하게도, 우리 중에 리액트를 제대로 아는 사람은 없었다. 하긴, 정말 있었으면 오히려 이 프로젝트를 안했을 것이다. 누군가에게는 기술적인 도전이 되지 않을 테니깐. 하지만 다르게 말하면, 리액트에 대해서 잘 아는 사람이 있었다면, 안한다고 했을지도 모르겠다. 생각보다, 이거 엄청나게 거대한 프로젝트였다.
어쨌거나 우리 중에 리액트를 아는 사람이 없으니, 당연히 리액트의 동작 방식에 대해 알 리도 없었다. 우리는 리액트의 간단한 사용법을 보며, 이게 어떤 원리인지 추론을 했다. 그 결과 우리는 가상 DOM을 맨 밑바닥부터 생각해볼 수 있었다. 지금도 기억 나는 게 바로 auto increasement다. 내가 발언했기 때문만은 아닌데, 이 부분에서 우리 논의가 멈췄기 때문이다. 우리의 논의는 '어떻게 이전 DOM과 다음 DOM의 node 위치를 서로 알고 비교할 수 있는가'에서 머무르고 있었다. 서로의 위치를 알지 못하면 root부터 타고 내려오면서 비교해야 하는데, 이건 비효율적이라고 생각했기 때문이다. 그 때 내가 냈던 아이디어가, node에 ID 값을 매기자는 것이었고, 그것을 편하게 하기 위해서 DB의 auto increasement와 같이, 앞에서부터 차례대로 매기자는 것이었다. 안타깝게도 이 방법도 실패했다. 근데, 지금 생각해보면 가능할 거 같기도 하다. 지금 만들어진 방식에 이 방식을 도입해도 되지 않을까?
어쨌거나 초창기의 우리는 굉장히 창의적인 방법으로 가상 DOM을 구현하고 있었다. 이게 만약 5주 프로젝트가 아니었다면, 정말로 독창적인 뭔가를 만들었을지도 모르겠다.
5. 사실 어제는 다 틀렸어요
팀원4 : 제가 하나 준비한 게 있어요. (ppt를 켜며)
다음 날 아침, 팀원 한 분께서 잠도 주무시지 않았는지 엄청난 분량의 ppt를 준비해오셨다. 그 맨 앞 장에는 제목이 붙어 있었는데, 제목은 거창하게도 "사실 우리는 어제부터 틀렸다." 정도 였다. 정확한 제목은 기억나지 않는데, 어쨌거나 우리가 10시간 넘게 토론한 게 다 틀렸다는 내용이었다. 그 분께서는 놀랍게도, ppt 중간에 복습 페이지도 만들어서 다시 설명을 해주셨고, 끝난 다음에는 팀원 하나 하나를 붙잡고, 본인의 언어로 다시 설명하라고 하셨다. 그러고 나서야 우리는 다시 이야기를 할 수 있었다.
6. 아빠는 개발자
시간에 쫓기는 우리는 하나의 블로그를 찾아냈다. 우리는 이 블로그를 정말 자주 참고했다. 그 블로그는 '아빠는 개발자' 라는 이름이었는데, 거기에 '나만의 리액트 만들기' 라는 글이 있었다. 외국의 개발자가 작성한 것을, 한글로 번역해준 고마운 글이었다. 그 글을 토대로 우리는 학습을 진행했고, 우리는 많은 걸 배웠다. 거기에서는 어떻게 jsx의 html이 JavaScript로 변화하며, 최종적으로 html이 되는가에 대해서 나와 있었다. 우리는 이 코드를 참고해서, 우리가 설계하던 가상 DOM의 빈 퍼즐들을 순식간에 메꿀 수 있었다. 그렇지만 자식은 언젠가 부모의 곁을 떠나야 하는 법. 우리에겐 선택의 순간이 왔다.
팀원4 : 우리 코드가 너무 이 블로그와 유사해진 거 같아요. 처음부터 엎고 다시 할까요?
팀원2,3 : 네...
팀원1 : (...이 사람들 미쳤나?)
참고로 팀원1이 나였다. 나는 저 당시 진심이었다. 우리는 자유프로젝트로 변경되서 안그래도 개발 시간이 부족한데 처음부터 다시 시작하자니, 이게 가당키나 한 이야기인가. 나는 그래서 덧붙였다.
팀원1 : 아, 정말, 엄청나게 힘들 거라곤 생각하는데, 지금 결정하세요. 정말로 엎으실 거면, 매일 밤까지 코딩하고, 주말에도 일한다고, 지금 결정하세요. (떨리는 목소리)
배수진을 치고, 말했지만 팀원들의 대답은 결국 'Yes'였다. 우리는 프로젝트를 삭제해버리고, 처음부터 다시 시작했다. 다른 사람의 코드를 참고하지 않고 우리만의 코드로 작성한다. 물론 기억 속에 남아 있다면 다시 써도 된다, 이 정도의 마인드였다. 종종 우리는 힘이 들면 아빠는 개발자가 그립기도 했다. 우리는 그 블로그의 포스트를 '답지' 라는 이름으로 부르곤 했다.
7. 헬로 월드
헬로 월드가 얼마나 감동적인지 아는가? 우리는 알았다. 우리가 만든 프레임워크로 헬로 월드가 나왔을 때, 우리는 벅차오르는 감정을 느낄 수 있었다. 아직 완벽하지도 않았고, 프레임워크의 모든 조건을 갖추지도 못했음에도, 우리가 만든 프레임워크로 'Hello world' 라는 말이 나왔다. 사실 냉정하게 본다면 순수하게 가상 DOM만을 이용한 것은 아니고, Input 태그와 event를 이용하여 만든 것이기에 반쪽 짜리 가상 DOM이었겠지만, 그럼에도 뭔가 된다고 느끼기에는 충분했다. 2주차 발표 때 "우리 놀랍게도 Hello world가 돼요!" 라고 자랑할 정도.
'후기 > 부스트캠프' 카테고리의 다른 글
부스트캠프 리뷰어 회고 - 1 (2) | 2022.10.01 |
---|---|
부스트캠프 5기 멤버십 3주 프로젝트 회고 (0) | 2020.12.19 |
부스트캠프 5기 멤버십 1~6주차 개인프로젝트 회고 (0) | 2020.10.18 |
부스트캠프 5기 멤버십 합격 후기 (7) | 2020.08.26 |
부스트캠프 5기 챌린지 4주차 후기 (0) | 2020.08.22 |