네이버 부스트캠프의 멤버십 스프린트 과정을 마쳤다.
멤버십 스프린트 과정을 돌아보니 결국 1주차, 개발자 특강에서 배운 것들(문제에 접근하는법, 성장을 위한 발판)을 나만의 방법으로 구체화하는 과정이었던 것 같다.
다시 1주차에서 배운 것을 돌아보자.
아래 과정은 내가 1주차에 특강을 듣고 회고에 정리한 내용을 가져온 것이다.
문제에 접근하는 것
1. 문제는 무엇인가?
문제가 일어나는 현상을 명확하게 정의한다.
이것이 가장 처음에 이뤄져야할 단계이다.
2. 정말 문제인가?
기대한 현상과 실제 현상을 비교해보고, 어떤부분이 기대한 것과 다른지 파악한다.
3. 가설을 세운다.
이론적 접근을 통해 가설을 세우고, 실제 실천하여 확인해보는 과정을 거친다.
4. 무한 반복
계속해서 추론, 실천 과정을 반복한다. 답을 찾을때 까지.
성장의 발판
1. 인지
인지가 중요하다. 하지만, 우리는 살아온 경험, 편견 때문에 제대로 인지하기가 쉽지않다.
살다보면 안다고 착각하는 부분이 반드시 생기게된다. 이는 경험과 편견때문에 만들어진다.한번 경험에 봤다고 아는 것이 아니다. 이 부분을 모른다고 인지, 인정하지 못하면, 평생 이 부분을 익힐 수 없게 된다.
2. 학습
필요한 정보를 이론적으로 학습하는 단계다.
3. 경험
학습한 정보를 실제로 적용하고, 가설을 세우고 검증하는 단계이다.
4. 정리
정리하는 과정이 반드시 필요하다.
정리는 학습과 경험을 통합하는 과정이다.
경험과 정리, 둘중 하나라도 제대로 되지 않으면 아는 지식이라기보단 안다고 착각하는 지식이 되기 매우 쉽다.
배운 것들
왜 되는가?를 궁금해하기
왜 되는가?를 궁금해하다보면 왜 안되는가?를 이해할 수 있게 된다.
뭔가 의도한대로 안된다의 근본적인 원인은 그것을 제대로 이해하지 못하는 것에 있다.
왜 되는지를 고민하다보면 인지단계에서 잘 안되는 안다고 착각했던 것들을 알 수 있게 된다.
왜 되는지부터 파악해보자.
개념과 코드 결합하기
개념만 학습하면 휘발된다. 반드시 코드로 구현해보아야 비로소 제대로 이해하고, 활용할 수 있다. 이걸 정말 8주간 경험했다.
활용할 수 있는게 내 지식이다.
학습과 경험, 정리를 통해 나의 지식으로 만들자.
학습하는 법
위 두가지(왜되는가 + 개념과 코드결합)를 통해 올바른 학습 과정, 방법을 확립할 수 있었다.
1. 왜 이런 개념이 필요한가? 파악하기
해당 개념이 왜 필요한지, 어떤 문제를 해결하기 위해 등장한 것인지를 파악한다.
2. 어떻게 사용하는가? 학습하기
해당 개념이 어떻게 사용되는지를 학습한다. 라이브러리라면 어떻게 사용하는지를 학습해본다.
3. 왜, 어떻게 작동하는가? 고민하기
그게 실제로 어떻게, 왜 제대로 작동하는지를 고민해보거나 학습해본다.
4 .직접 만들어보기 or 구현단계의 코드를 살펴보기
고민, 학습한 내용을 코드레벨로 구현해보거나, 오픈소스라면 해당 코드를 직접 확인해본다.
5. 글로 정리하기
학습한 내용을 내 언어로, 직접 작성한다.
4번에서 분석한 내용을 기반으로 쓰기때문에 이때 작성하는 글은 어디서 복사해온 글이 아니라 온전한 나의 글이 된다.
중요한 것은 꺾이지 않는 마음
위의 학습방법을 적용 하는건 생각보다 쉽지 않다. 아니? 정말 어려웠다.
우선 구현과 코드를 찾아보는데에 시간이 많이걸리기도하고, 코드를 찾아도 이해하는게 굉장히 어렵기 때문이다.
음... 글로쓰니 그 난이도가 제대로 전달이 안되는 것 같다...
사례를 들자면... 리액트 코드를 쓰는데 리액트 톺아보기 글을 정말 7번은 읽은 것 같다.
읽다가 탈모 올 뻔했다.
하지만, 이런 문제를 해결하는 도구들은 누군가의 장기간의 고민끝에서 나온 것이다.
리액트 팀은 fiber를 도입하는데 2년이상의 연구기간이 걸렸다고한다.
이걸 2주만에 이해하려하니 이해가 안되는 것은 당연한 것이다. 욕심인 것이다.
인내심을 갖고, 누군가의 고민에 경의를 표하며... 학습하자.
도전해서 해낸 것들
1. 매주 회고글 작성하기
멤버십을 하면서 가장 잘했던 점이 매주 회고글을 작성하는 것이었다.
매주 회고글을 작성한게 모든 일들의 시초였다.
(사실 7-8주차에는 리액트 코드 작성해보랴, 뜯어보랴 하느라고 작성하지 못했다.)
매주 무엇을 했고, 무엇을 배웠으며 무엇을 느꼈는지 상기했다.
그리고 동시에 무엇이 부족한지 생각하고, 그걸 다음주에 채워나갔다.
잘한 것은 좀 더 발전시켰고, 못한 것은 채워나갔다.
물론 의식적으로 이걸 행한 것도 있지만, 회고글을 쓰다보니 무의식적으로 그렇게 하게 됐던 것 같다.
발전을 하려면 내가 어디에 있는지 부터 파악해야한다.
회고는 인지를 돕는다.
2. 매주 딥다이브
이번 멤버십 활동을 하며 가장 잘한 점이라고하면 2주차부터 아무도 시킨적 없지만, 스스로 궁금한 점들,목표를 설정하고 그걸 하나씩은 해냈다는 것이다.
이를 통해 매주 딥다이브를 경험할 수 있었다.
2주차
nodejs의 이벤트루프와 libuv, 그리고 js의 싱글스레드 환경에 대해 제대로 이해했다.
3주차
인증 인가, 웹서버와 백엔드서버를 분리하며 CORS를 만났다.
사실 플젝을 하다보면 반드시 한번씩 마주하게되는데, 항상 와일드카드로 문제를 회피해왔다.
그러나 이번에는 해결하는데에서 그치지 않고 그 부분을 제대로 학습했다.
덕분에 CORS의 등장배경, 동작방식을 정말 제대로 이해할 수 있었다.
4주차
바닐라js 클라이언트 테스트코드를 작성하는데에 성공했다. 이후부터는 테스트 코드를 작성하는 것이 수월해져서(방법을 아니까) 프로젝트에 항상 테스트코드가 존재한다.
5주차
웹서버를 직접 구현해보고, 라이브러리를 처음 뜯어봤다.
6주차
프로젝트에 vite 번들러를 적용시키면서 vite의 장점을 공부했었는데, 그러다보니 자연스럽게 번들러가 궁금해졌다.
그래서 번들링이 어떻게 일어나는지 학습하고, minipack 코드를 읽어보면서 webpack의 구현방식을 이해했다.
7-8주차
리액트처럼 동작하는 코드를 직접 작성해본 뒤, 실제 리액트 코드를 읽어보며 리액트의 동작방식을 이해했다.
정말정말 시간을 많이 투자했다.
테스트코드
항상 프로젝트를 할때, 일정에 쫓겨서 바쁘다는 이유로 테스트코드를 작성하지 않았었는데, 이번 기회를 통해 모든 함수에 대해서는 아니지만, 매일매일 테스트코드를 작성했다.
프로젝트를 장기간 지속하다보니 내 코드가 썩는 것을 실감했기 때문이다.
리팩터링의 필요성을 절실히 느꼈고, 이를 위해서 필요한 테스트코드들부터 작성하기 시작했다.
그런데 이게 한번 써보니 작성이 어렵지 않다는 것을 깨달았고, 그래서 좀 더 부담없이 작성할 수 있었다.
지속해야할 것들
나만의 성장/학습 메뉴얼
배운것과 경험한 것을 기반으로 나만의 성장/학습메뉴얼을 만들었다.
1. 인지
회고를 통해 이전 경험을 상기하고, 잘한 점을 발전시키고 못한점은 개선시킨다.
학습시에는 왜 안되는가? 보다는 왜 되는가?에 집중해서 내가 안다고 착각하는 부분을 발견한다.
2. 학습
필요한 정보를 학습하되, 해당 개념이 왜 필요한지, 어디에 사용되는지를 파악한 후에 학습에 임한다.
3. 경험
학습한 개념들을 실제로 적용하고, 직접 만들어보거나 만들어진 코드를 읽어본다.
왜, 어떻게 되는가에 더 집중한다.
4. 정리
3번에서 경험한 내용을 글로 작성한다. 3번을 이야기하려면 자연스럽게 2번도 작성하게된다.
글까지 작성해야 온전히 나의 지식이다.
지속적인 회고
메타인지를 갖기위해서는 지속적 회고가 필수임을 알게되었다.
특히 회고글이 쌓이니 이 글처럼 하나의 인사이트가 된다는 것을 알게되었다.
단기 회고를 통해 점진적 개선을 가져가고, 장기 회고를 통해 하나의 인사이트로 만들어가자.
부스트캠프도 이제 그룹프로젝트만을 앞두고있다.
학습 스프린트를 되돌아보니 정말 말도 안될 정도로 성장할 수 있었고, 후회없이 열심히 몰입했다고 느꼈다.
정말 이런 기회를 가질 수 있어서 감사하다.
이제 실제 프로젝트에 학습한 것들을 잘 활용하고, 이를 기반으로 더 성장해보자.
화이팅!