1주차 회고: https://laurent.tistory.com/entry/부스트캠프-9기-챌린지-1주차-회고
2주차 회고: https://laurent.tistory.com/entry/부스트캠프-9기-챌린지-2주차-회고
4주차 회고: https://laurent.tistory.com/entry/부스트캠프-9기-챌린지-4주차-회고
챌린지 과정 회고: https://laurent.tistory.com/entry/네이버-부스트캠프-9기-챌린지-회고
분명 저번 주에 챌린지 과정 중 가장 시간이 빨리 갔는데, 이번주는 저번주보다 더 빨리 지나간 것 같다.
매주 수행하는 미션에 집중해서 구현하다보면 어느 새 오후 7시가 되어 체크아웃을 하고 있고, 잠깐 쉬고 운동하고 오면 자정이 되어있다.
지금까지는 난이도가 어려워서 조금 오래 걸렸다고 느꼈는데, 이번에 피어 세션을 하면서 다른 원인도 있음을 느꼈다.
아래에서 자세히 이야기해보기로 하고, 일단 이번 주에는 미션을 수행하면서 어떤 것들을 느꼈는지 먼저 이야기해보자.
타임라인
11-12일차
난이도 있는 내용들이 있어서 생각보다 많이 존재해서 따라가기 어려웠다.
동기/비동기 내용에서 생각했던 것만큼 구현이 잘 되지 않았고 태스크 큐, 마이크로태스크 큐, 이벤트 루프 등 자바스크립트 내부적으로 무슨 일이 일어났는지 이해도가 낮았던 상황이었다.
코드로 구현해내려고 하니 마음대로 되지 않았었고 그래서 짝 프로그래밍임에도 불구하고 시간이 오래 걸렸던 것 같다.
이전에도 미션 중 노드 내장 라이브러리를 사용했었는데 이번에 본격적으로 사용하면서 Node.js의 EventEmitter를 배우게 되었던 시간이었다.
서평으로 Node.js 책을 리뷰한 적이 있었는데, 비동기 처리 관련 코드로 EventEmitter가 나와 그 때 당시에는 그렇게까지 와닿지 않았었다.
근데 실제로 코드를 사용하면서 설계부터 구현까지 직접 해보니 어떻게 비동기 처리를 수행하는지 이해할 수 있었다.
Node.js에서 제공하는 내장 함수들에 대한 지식이 없어서 2일 동안 전체적으로 시간이 오래 걸렸다고 생각한다.
디자인 패턴도 막상 사용하려고 하니 잘 모르고 있었다는 것을 깨달아서 Node.js에서는 어떤 디자인 패턴이 적용되는지 공부해야겠다고 느꼈다.
그래서 각각 Node.js 교과서 3판, Node.js 디자인 패턴 바이블이라는 책으로 추가 학습을 진행하고, 학습 정리에 위의 내용들을 최대한 정리해보려 한다.
첫 번째 책인 Node.js 교과서 개정 3판은 Node.js의 내장 객체, 내장 모듈, 파일 시스템 접근, 이벤트, 예외 처리에 대한 내용이 잘 적혀있다. 대부분 11-12일차에 했던 내용들의 기초적인 내용들이 담겨있어 따라가면서 익히면 좋을 것 같다.
이 책의 저자는 조현영님인데 인프런에 강의를 올리면서 지식 공유도 진행하고 계신다. 유료이긴 하지만 기초적인 지식은 미리보기 형태로 무료로 제공되고 있다. 먼저 영상을 보고 책을 읽어가는 것도 하나의 방법이 될 수 있을 것 같다.
[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지 강의 | 조현영 - 인프런
오른쪽의 Node.js 디자인 패턴 바이블 책은 널리 알려져 있는 디자인 패턴들을 Node.js로 풀어내는 책이다. 원래 디자인 패턴에 대한 학습도 필요한 상황이었기 때문에 이 책이라면 두 가지의 주제들을 모두 얻어갈 수 있을 것이라고 생각해 이 책을 선택했다.
책 내용 중 하나로 2주차에 나왔던 pub/sub 패턴을 메시징 시스템의 기초부터 설명한다. 그 다음에는 패턴 자체에 대해 간단히 설명하고 서버/클라이언트를 실제로 구현하면서 어떻게 채팅 애플리케이션을 만드는지 실습을 통해 보여준다.
그리고 위에 구현한 것들을 Redis로 수정해 작동하는 방식까지 설명해준다.
Pub/Sub 패턴이랑 Redis랑 어떤 연관이 있는지 긴가민가 했는데 이 책으로 확실히 알고 갈 수 있어 좋았다
이렇게 쓰니 뭔가 서평을 하고 있는 느낌이지만, 그만큼 이번에 했던 미션하고 잘 맞는 책인 것 같아 추천하고 싶다.
13-14일차
연속으로 Node.js 라이브러리를 사용하는 날이었다.
이번에는 Git 내부 동작을 fileRead, fileWrite 하면서 직접 구현하는 것이었다.
지금까지 Git 명령어를 사용해서 Github에 올리는 단순 동작들만 했었지 .git 폴더 안에 파일들이 어떻게 이동하는지에 대해서 전혀 생각해보지 못했다.
평소였으면 왜 이런걸 생각해 라고 하며 가볍게 넘어갔을 것인데 이번 기회에 이렇게 저수준으로 어떻게 돌아가는지 알 수 있었다.
다른 사람들도 생각을 많이 못 해본 탓인지 검색 결과에 블로그 글이 많이 없었다.
그래서 이번에는 git 공식 문서를 보면서 공부를 했었다. 이전에도 git 공식 문서를 본 적이 있지만 블로그가 더 쉽게 작성되어 있어 잘 안 보았었다. 하지만 git의 내부 - git 객체
부분은 공식 문서만 보고 해도 될 정도로 자세히 잘 작성되어 있었다.
특히 이번에 부스트캠프하면서 공식 문서나 책에 있는 글들을 나만의 언어로 다시 작성하면서 이해가 잘 되었다. 아무리 보기 어려운 문서여도 정리하는 방법을 터득해 내 것으로 만드는 방법을 익힌 것 같다.
집중력 이슈 해결
이번 11-12일과 13-14일차에는 짝 설계와 짝 프로그래밍을 진행했다.
보통 하루에 일정이 시작되면 정오에 점심을 먹고, 오후 2시부터 시작한다.
그 이후로는 쉬지 않고 쭉 개발을 이어서 진행한다.
짝 프로그래밍 중에 집중력이 종종 떨어졌지만, 짝이 너무 잘 집중해 개발에 임하고 있어 그 상황을 끊기가 조금 어려웠다.
시간을 정해놓았긴 했지만 막상 쉬기로 한 시간이 되면 시계를 미처 확인하지 못하고 짝과 함께 기능 구현에 매진하곤 했다.
장시간의 구현 과정은 힘들었지만, 확실히 혼자 구현할 때보다 굉장히 빨리 끝나게 되었다.
기존의 한계 상황에서는 바로 휴식을 취하거나 주의가 분산되는 등 집중을 잘 못했었는데, 짝 설계와 짝 프로그래밍만 하면 평소와 다른 집중력을 유지해 짝과 같이 대부분의 미션들을 수행하는 현상을 볼 수 있었다.
본래 짝 프로그래밍은 시행착오를 겪고 서로의 사고 과정을 실시간으로 지켜보며, 조언해주면서 무의식적으로 코딩하는 것을 방지하는 목적이다.
근데 원래의 목적과는 다르게 나에게는 집중력과 관련된 이슈가 개선되는 효과가 나는 것 같다.
어느쪽이든 긍정적인 영향을 미치는 것이므로 나쁠 건 없는 것 같다.
그래도 그 동안에 체크리스트를 모두 끝내지 못한 이유 중 하나가 집중력 저하는 틀림 없는 것 같다.
부스트캠프 이후에도 혼자 공부할 순간이 올 것인데, 이 때도 이렇게 집중하지 못 하면 안 될 것이다.
정해진 시간 내에 수행할 수 있는 힘을 가져야겠다 느꼈다.
학교 수업의 중요성
학교 다니면서 겪었던 고민거리 중 하나는 배우는 이론적 지식과 프로젝트를 하면서 사용하는 기술 간의 괴리감이었다. 왜 학교를 다니면서 이런 것들을 배워야 하는지 잘 와닿지 않았다.
특히 웹에서는 최신 기술 스택들을 활용한 개발 경험이 중요하게 여겨지곤 했다.
지난 1년간 동아리 활동, 해커톤 참여 등 대외활동을 열심히 해서 프로젝트 여러 개를 구현하는 것에 집중했었다. 이 과정에서 다양한 기술 스택을 접하고 프로젝트를 완성하는데만 급급했던 것 같다.
어차피 컴퓨터 구조, 네트워크, 운영체제 등 기초적인 지식에 대해 잘 알고 있지 않더라도 원하는 서비스들을 만들어낼 수 있었기 때문이었다.
이런 경험들이 쌓이면서 생겨난 생각들이 학교 수업의 가치를 과소평가하게 만들었다.
하지만 시간이 지날수록 부스트캠프 챌린지 과정을 거쳐보니 잘못되었다는 것을 깨달았다.
운영체제 수업이 좋은 예시가 되어줄 것 같다.
처음에는 Windows, Macos 등 특정 제품에 국한된 지식이라 생각했지만, Node.js와 같이 웹 개발 환경에서도 운영체제의 개념이 깊이 적용되고 있음을 알 수 있었다.
예를 들어, Node.js의 싱글 스레드 기반 동작 원리를 이해하는 데 학교에서 배운 지식이 크게 도움이 되었다.
더 나아가 멀티 스레드를 사용하고자 한다면 스레드 풀$_{thread \space pool}$이나 워커 스레드$_{worker \space thread}$ 같은 개념을 쉽게 이해하고 적용할 수 있었다.
운영체제라는 수업을 듣지 않았더라면 이해하는 속도가 정말 느렸을 것 같다.
위의 예시는 프로그래밍에 어떤 기초 지식이 있는지 알아보았다면, 반대로 기초 지식을 프로그래밍에 적용하는
미션은 또 다른 깨달음을 주는 좋은 경험이었다.
이 과정에서 기존에 이미 알고있다고 착각했던 개념들을 재점검하고 더 깊게 이해할 수 있었다.
특히 자바스크립트의 동기와 비동기 처리 메커니즘에 대한 학습은 매우 의미있었다.
자바스크립트의 ‘비동기’라는 키워드가 단순히 기다렸다가 실행하는 것
으로만 이해하는 수준에서 벗어나 이벤 트 루프, 태스크 큐와 마이크로태스크 큐의 상관관계, 콜 스택의 동작 원리까지 확실하게 학습했다. 함수가 콜 스택에 들어가는 순간부터 최종적으로 콘솔에 출력되기까지 전체 과정을 이해하게 된 것은 큰 성과임에 틀림없다.
이런 코어한 지식을 지금까지 모르고 썼다는 것이 정말 부끄러웠다.
하지만 지금이라도 부족한 부분을 깨달았고 이걸 토대로 성장할 수 있을 것이라 기대한다.
이제 자바스크립트의 내부 동작 원리를 이해했기 때문에, 더욱 근거 있고 효율적인 코드를 작성할 수 있을 것 같다.
기본기가 탄탄한 개발자
[뚜쪽이] #2 어쩌다보니 컴공 뚜족이들에게 채용(면접) 팁을 풀게된 상담시간 (신입, 인턴)
위 영상은 판교 뚜벅초라는 유튜버로, 주로 현직 개발자의 브이로그가 올라오는 채널이다.
가끔 취업을 준비하는 예비 개발자들을 위해 구글 폼을 받아 상담을 해주신다. 그 영상 중 하나인데 부스트캠프 경험에서 겪었던 것이랑 이 분이 조언해주시는 내용과 맥락이 어느 정도 일치하는 것 같아 공유한다.
이 영상의 마지막 답변에서 기본기에 대한 중요성을 강조한다. 전문성 있는 개발자로 성장하려면 단순히 기술 스택에만 집중하고 프로젝트 이것 저것 많이 해 보기만 하면 안된다고 경고한다.
뚜벅초님도 면접에 들어가보면 좋은 방향으로 성장할 수 있는 사람인지 아닌지를 보고 싶다고 한다.
기본 원리를 이해하면 복잡한 문제를 더 효과적으로 해결할 수 있고, 새로운 기술을 배울 때도 기본 지식을 바탕으로 더 빠르게 습득할 수 있기 때문이라 생각된다.
한 문장으로 이야기 하면, 기본기에서 흘러 나오는 순수한 바이브
라고 할 수 있을 것 같다.
정답이라고 할 순 없지만 이런 바이브가 나올 수 있으려면 어떻게 해야 할지 이전에는 잘 몰랐다. 근데 부스트캠프를 점점 해보면서 이 기본기에서 흘러 나오는 순수한 바이브
가 뭘 뜻하는지 얼추 알 것 같다.
부스트캠프에서 제공한 미션 형태의 학습 방식은 이론과 구현을 연결해보는 좋은 기회였다.
모든 요구사항을 완벽히 구현하지 못하더라도, 그 과정에서 얻은 CS 지식과 기초 지식들을 쌓을 수 있는 기회가 된 것이 가장 큰 것 같다.
개발 스택과 CS 지식 둘 사이에 한 쪽에 치우치지 않고 결과적으로 기본기가 탄탄한 사람이 되어야함을 다시 한 번 느끼게 되었다.
'Life > 네이버 부스트캠프' 카테고리의 다른 글
[부스트캠프 9기 챌린지] Day 18-19 (0) | 2024.08.07 |
---|---|
[부스트캠프 9기 챌린지] Day 16-17 (0) | 2024.08.05 |
[부스트캠프 9기 챌린지] Day 13-14 (0) | 2024.07.31 |
[부스트캠프 9기 챌린지] Day 11-12 (0) | 2024.07.30 |
[부스트캠프 9기 챌린지] 2주차 회고 (0) | 2024.07.26 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!