부스트캠프의 모든 과정을 마쳤다.
정말 길다면 길고 짧다면 짧은 5개월
굉장히 많은것을 배우고, 느낄 수 있었다.
배우고 느낀것을 챌린지, 스프린트, 그룹프로젝트로 크게 3가지로 나누어서 살펴보자.
챌린지
챌린지에서는 CS미션이 매일매일 쏟아지며 정말 힘겹게 미션을 해결했던 기억이 있다.
챌린지를 통해서는 어떻게 큰 문제를 작은 문제로 분할할 것인지, 그 방법을 터득할 수 있었다
정의조차 잘 되지 않는 거대한 문제를 마주하다보니 어렵기도 어렵거니와 좌절감을 느끼기도 했었다.
하지만 4주동안의 훈련 과정을 통해 문제를 해석하고, 해결하기 위한 작은 체크포인트를 만들고, 하나씩 정복해나갔다.
챌린지에서 배운 것들을 되돌아보자.
소통을 통한 함께자라기
챌린지를 통해 정의되지않은 답이 존재하지 않는 문제에 대해 토론하고, 여러가지방법들을 시도해가며 지식을 쌓아가는 방식이야말로, "잘하기" 가 아닌 "자라기" 라는 것을 알 수 있었다.
이 과정에서 소통을 어떻게 해야 나의 의견과 근거를 명확하게 전달 할 수 있는지, 어떻게 질문해야할지도 감을 잡아갈 수 있었다.
덕분에 다른 사람들의 문제 접근 방식을 이해하고, 이를 내 것으로 만들어 적용시키는 방법도 익힐 수 있었다.
더불어 나의 해결 방법도 공유하며, 도움을 주고 도움을 받는 함께 자라기의 효과를 몸소 겪으면서 이런 문화를 지속시키고 발전시켜야겠다는 다짐을 했다.
문제를 해결하는법
아래의 과정을 통해 대부분의 문제를 해결해낼 수 있었다. 이 과정은 이후 학습스프린트에서도, 그룹프로젝트에서도 매우 유효했다. 아마 평생 써먹게 될 방법이다.
1. 문제를 읽는다.
2. 이해안되는, 모르는 단어를 찾는다. (대충 아는 것은 모르는 것이다.)
3. 용어를 학습한다.
4. 명세를 읽고, 기능을 한번씩 다 적어본다.
5. 역할과 책임별로 나눠본다.
6. 설계도를 그린다.
7. 역할과 책임에 맞춰서 기능을 하나씩 설정한다.
8. 기능, 함수 하나씩 구현 해나간다.
또한, 설계에 너무 집착하지 않고, bottom-up과 top-down을 오가며, 빠르게 전략을 수정하는 방법도 체득할 수 있었다.
지금 내 상태를 확인하고, 모르는 것을 체크하고, 내가 할 수 있는 것을 설정하고, 그것을 행한다.
매우 큰 문제는 해결할 수 없지만, 작은 여러가지 문제는 충분히 해결할 수 있다.
이건 비단 미션뿐만 아니라 인생에도 적용되는 방법이 아닐까싶다.
회고의 중요성
챌린지를 통해 주기적인 회고가 성장에 매우 큰 도움이 된다는 것을 알 수 있었다.
무언가 잘하고 싶다면, 현재 내 상태가 어떤지부터 확인해야한다. 회고가 내가 어디쯤에 있는지 확인할 수 있게 도왔다. 즉, 메타인지를 높힐 수 있었다.
그래서 멤버십에서는 대부분 매주 회고를 진행했고, 덕분에 엄청나게 성장할 수 있었다.
단기 회고를 통해 점진적 개선을 가져가고, 장기 회고를 통해 하나의 인사이트로 만들어가자.
학습스프린트
챌린지과정에서 좋게 봐주셔서, 멤버십에 합격할 수 있었고, 부스트캠프 활동을 지속할 수 있었다.
학습 스프린트에서는 챌린지보다는 느슨한, 나 스스로 목표를 잡고 학습을 진행했다.
덕분에 기존에 알고있다고 착각했던것들, 언젠가는 공부해봐야지 다짐했던 것들을 학습할 수 있었고, 비약적인 성장을 이룰 수 있었다.
학습스프린트에서 배운 것들을 살펴보자.
문제에 접근하는 방법
챌린지에서 문제를 해결하는 방법을 학습했다면, 이번에는 문제에 접근하는 방법을 학습할 수 있었다.
1. 문제는 무엇인가?
문제가 일어나는 현상을 명확하게 정의한다.
이것이 가장 처음에 이뤄져야할 단계이다.
2. 정말 문제인가?
기대한 현상과 실제 현상을 비교해보고, 어떤부분이 기대한 것과 다른지 파악한다.
3. 가설을 세운다.
이론적 접근을 통해 가설을 세우고, 실제 실천하여 확인해보는 과정을 거친다.
4. 무한 반복
계속해서 추론, 실천 과정을 반복한다. 답을 찾을때 까지.
이 방법은 스프린트와 그룹프로젝트에서 무엇인가 잘 안될때, 어떻게 해야할지 로드맵처럼 사용할 수 있었다.
이후 프로젝트와 여러가지 문제에 접근하는 과정에서도 계속해서 사용할 수 있는 좋은 방법이라고 생각한다.
성장을 위한 단계
성장을 위한 단계도 구체적으로 학습할 수 있었다.
덕분에 안다고 착각하는 것들을 경계하며, 아는 것과 모르는 것을 조금 더 명확하게 구분짓고자 노력할 수 있었고, 배운 것을 블로그 글로 바로 작성해 휘발되지 않게 노력했다.
1. 인지
인지가 중요하다. 하지만, 우리는 살아온 경험, 편견 때문에 제대로 인지하기가 쉽지않다.
살다보면 안다고 착각하는 부분이 반드시 생기게된다. 이는 경험과 편견때문에 만들어진다.한번 경험에 봤다고 아는 것이 아니다. 이 부분을 모른다고 인지, 인정하지 못하면, 평생 이 부분을 익힐 수 없게 된다.
2. 학습
필요한 정보를 이론적으로 학습하는 단계다.
3. 경험
학습한 정보를 실제로 적용하고, 가설을 세우고 검증하는 단계이다.
4. 정리
정리하는 과정이 반드시 필요하다.
정리는 학습과 경험을 통합하는 과정이다.
경험과 정리, 둘중 하나라도 제대로 되지 않으면 아는 지식이라기보단 안다고 착각하는 지식이 되기 매우 쉽다.
위 두가지는 특강을 통해 학습할 수 있었다.
정말 평생동안 써먹을 수 있는 너무나도 좋은 로드맵을 주신 조은님께 정말 감사하다는 말씀 드리고싶다.
나만의 학습법 만들기
학습스프린트는 내가 목표를 잡고, 그 목표를 달성해가는 형태로 진행했던것 같다.
이런 스프린트 과정을 통해 위의 두가지를 기반으로 나만의 학습법을 세울 수 있었다.
1. 왜 이런 개념이 필요한가? 파악하기
해당 개념이 왜 필요한지, 어떤 문제를 해결하기 위해 등장한 것인지를 파악한다.
2. 어떻게 사용하는가? 학습하기
해당 개념이 어떻게 사용되는지를 학습한다. 라이브러리라면 어떻게 사용하는지를 학습해본다.
3. 왜, 어떻게 작동하는가? 고민하기
그게 실제로 어떻게, 왜 제대로 작동하는지를 고민해보거나 학습해본다.
4 .직접 만들어보기 or 구현단계의 코드를 살펴보기
고민, 학습한 내용을 코드레벨로 구현해보거나, 오픈소스라면 해당 코드를 직접 확인해본다.
5. 글로 정리하기
학습한 내용을 내 언어로, 직접 작성한다.
4번에서 분석한 내용을 기반으로 쓰기때문에 이때 작성하는 글은 어디서 복사해온 글이 아니라 온전한 나의 글이 된다.
특히, 왜, 어떻게 작동하는가?가 중요하다고 생각했다. 왜 되는지를 고민하다보면 인지단계에서 잘 안다고 착각했던 것들을 발견할 수 있게되기 때문이다.
딥다이브를 통한 코드리터러시 향상시키기
학습 스프린트 과정에서 필요한 것들을 학습하기위해, 직접 라이브러리와 비슷하게 만들어보기도 하고, 라이브러리 코드를 처음으로 뜯어보기 시작했다. (웹서버 -> 웹팩 dev server ->번들러 -> react로 이어지는 흐름이었다.)
물론 쉽지 않았지만, 끈기를 갖고 하나씩하나씩 이해하다보니 정말 온전한 나의 지식으로 만들 수 있었다.
여러가지 작은 성공들을 이뤄가다보니 자신감이 생겼고, 더 큰 도전들을 할 수 있는 용기가 생겼다.
그룹프로젝트
그룹프로젝트는 챌린지, 스프린트를 통해 학습한 것들을 종합적으로 활용하고, 더불에서 팀프로젝트에서 프로덕트를 어떻게 관리하면 좋을지에 대해 고민하고, 방법들을 얻어갈 수 있는 소중한 경험이었다. 또, 팀원들을 너무 잘 만나서 정말 즐겁게 프로젝트에 몰입할 수 있었다. 정말 감사하다.
애자일
소프트웨어 장인, 함께 자라기 등 애자일에 대한 책을 읽어봤지만, 구체적으로 어떻게 프로젝트가 진행되는지는 알기 힘들었다. 부스트캠프를 통해 백로그 관리를 통한 스프린트, 데일리스크럼을 진행하며 어떻게 해야 프로덕트가 잘 만들어질 수 있을지 체득할 수 있었다.
지금까지 프로젝트는 항상 얼레벌레 우다다다 진행했었고, PM이 있으면 좋겠다는 막연한 생각을 했었는데 그런 생각들을 반성하게되었다. 개발자의 일은 개발자가 관리할 수 있어야하고, 백로그를 통해 이것이 가능하다.
이제부터는 정말 체계적으로 프로덕트를 관리할 수 있겠다는 자신감을 가질 수 있었다.
왜를 더 날카롭게
사실 이전까지는 어떤 문제를 해결하는데 현재 상태로는 구현이 불가능하다 싶으면 찾아봤을때 가장 먼저 나오는 라이브러리를 아무 생각없이 다운로드 받아 사용하기 일수였다.
하지만 왜 이 라이브러리를 사용해야하는가? 를 조금 더 고민했다.
왜 이 라이브러리를 사용해야하는가? 를 고민해야하는 이유는 여러가지를 되짚어가면서, 자연스럽게 사용자와 개발자 팀원에게 더 나은 경험을 줄 수 있게 때문이다.
1. 우리가 하고자 하는 것은 무엇인가?
2. 현재 우리가 겪고 있는 문제는 무엇인가?
3. 우리가 겪는 문제의 본질은 무엇인가?
4. 그 문제의 본질을 이 라이브러리가 해결해 줄 수 있는가?
5. 이 라이브러리보다 더 여러 가지 기준에서 더 나은 라이브러리는 없는가?
6. 혹은 라이브러리를 작성하지 않고 직접 기능을 구현하는 것이 더 효율적인가?
유저 경험을 향상시키기 위한 노력
어떻게 돌아가게 만들까에서 한발짝 더 나아가 어떻게 하면 더 빠르게, 더 좋은 가치를 전달할 수 있을지 고민할 수 있었다.
즉, 성능을 개선하기 시작했다.
번들링 사이즈줄이기, 캐시, 렌더링 최적화등 여러가지 방면에서 고민을 통해 성능을 개선하는 경험을 가져갈 수 있었다.
개발자 경험을 향상시키기위한 노력
더불어 개발자의 경험도 향상시키기위해 노력했다.
아무래도 혼자 진행하는 부분이 아니기도하고, 개선한다면 작업속도와 퀄리티를 높힐 수 있겠다는 생각에서 여러가지 노력을 했다.
이 과정에서 여러가지 고민을 할 수 있었고, 결과적으로 팀원들을 위해 조금 더 읽기 좋은 코드를 작성하고, 더 나은 환경을 구성해줄 수 있는 사람이 될 수 있었다.
읽기 좋은, 직관적인 코드 작성하기
리액트에서 좋은 코드를 작성하기위해 많이 노력했던 것 같다.
특히 중첩 모달에 관한 부분들과 라이브러리에 대한 의존성을 줄이기위해 주입하는 과정에서 여러가지를 학습할 수 있었다.
덕분에 context API에 대한 오해를 풀 수도 있었고, 스프린트때처럼 라이브러리를 뜯어보며 다른 개발자는 어떻게 작성하는지를 알 수 있었다.
개발 환경 개선하기
개발과 배포에서 귀찮은 것들을 개선하기위해 신경을 썼다.
github actions와 S3, CloudFront를 사용해 CICD를 구성해보기도하고, 크로스도메인 환경에서(로컬-배포의 차이) 쿠키 로그인을 할 수 있도록 처리하는 등 개발 환경을 개선하기위해 많이 노력했다.
마치며
부스트캠프를 통해 5개월이라는 정말 짧은 시간동안 폭발적인 성장을 이룰 수 있었다.
어떻게 문제에 접근하고, 어떻게 해결할지를 학습할 수 있었고, 이를 통해 나만의 학습법을 만들 수 있었다.
학습에 그치지 않고 배운것을 기반으로 사용자와 팀원을 위해 프로덕트와 개발환경을 개선해나갈 수 있었다.
이전까지는 어떻게 "만들까?" 에 대해 더 집중했다면 이제는 "어떻게" 만들까? 에 대해 더 집중할 수 있게 됐다.
1. 어떻게 해야 더 빠르게, 개선된 가치를 사용자에게 전달할 수 있을지 고민하게 되었다.
2. 어떻게 팀적으로 프로젝트트를 관리하고, 개선해나갈 수 있을지 고민할 수 있게 되었다.
정말 소중한 경험을 할수 있게 해준 팀원들, 부스트캠프의 마스터분들, 운영진분들, 그리고 캠퍼분들께 감사하다는 말씀 꼭 드리고싶다.