3주차 회고를 따로 작성하려고 했지만, 원정대 활동 시작과 동시에 너무 바빠지는 바람에 3-4주차 회고를 한꺼번에 작성하게 됐다.
우테코 생활을 하며 회고에 활용하기 위해 그때 그때 생각나고 느낀 점들을 키워드 중심으로 간단하게 정리하고 있는데, 일주일만 밀려도 '회고 부채'가 너무 많이 쌓인다..
시간이 지날수록 당시에 느꼈던 생각과 감정들이 희미해지기도 해서 회고를 밀리지 않도록 시간을 더 내보도록 하자.
3주차부터 '송곳 원정대' 활동이 시작됐다.

이 활동의 핵심은 다음과 같다.
원정대 기간은 총 2주였고,
2주차가 되는 금요일에 테크 살롱을 통해 다른 크루들에게 공유하고 발표하는 방식으로 진행됐다.
이번 기수부터 본격적으로 도입한 활동인데 안그래도 JS 스터디를 만들까 고민하고 있던 나에게는 너무 좋은 취지의 활동이었다.
자신만의 뾰족한 강점(송곳)을 만든다는 의도가 좋았다.
내가 선택한 원정대는 다음과 같다.
JS 코드 동작 원리 이해 — 실행 컨텍스트·스코프·클로저로 코드 흐름 설명하기
함수형 프로그래밍 딥다이브 - 불변성, 순수 함수, 부수 효과 통제, 선언적 프로그래밍 등을 잘 활용하기
JS에 대한 기본기 없이 프레임워크만을 사용하여 개발해왔기에 이에 대한 갈증이 있었고
본격적으로 프레임워크를 다루기 시작하는 레벨 2가 되기 전인 지금이 이 기본기를 닦을 수 있는 가장 적기라고 생각했다.
또한 프론트엔드는 객체 지향보다는 React와 같은 프레임워크를 활용하여 주로 '함수형 프로그래밍'으로 개발을 하는데, 이 패러다임에 대해 자세히 공부하고 싶은 마음도 있었다.
(지금 공부해놓으면 이후 React로까지 확장이 가능하지 않을까라는 생각!)
원래는 TDD까지 총 3개를 신청했다가 도저히 몸이 남아나질 않을 것 같아 TDD는 막판에 드랍했다..ㅋㅋ
활동은 다음과 같이 진행됐다
개념 학습은 모던 자바스크립트 딥다이브 책을 기준으로 진행했다.
원정대의 주제가 JS의 특정 '개념'에 대해 제대로 이해하는 것이었기에
이 개념을 이해하는 가장 좋은 방법으로 문제 풀이를 선택했다.
문제를 만들어야 한다는 생각이 있다보니 맹목적인 학습을 하기보다
'이 개념에서 헷갈릴만 한 개념은 뭐지?'
'꼭 알아야 할 중요한 개념을 문제로 어떻게 풀어낼 수 있을까?'
와 같이 스스로에게 질문을 던지며 학습을 할 수 있어 좋았다.
또 각자 만들어 온 문제를 풀어보고 의견을 나누는 과정에서
같은 책으로 동일한 개념을 학습해왔어도 중요하게 생각하는 포인트가 다른 부분을 볼 수 있어 좋았고,
미처 깊게 학습하지 못했던 부분을 다시 상기할 수 있었다.
아래는 내가 Gemini Canvas로 만들어 본 '실행 컨텍스트' 학습 퀴즈 웹앱이다.
🔗 링크: https://gemini.google.com/share/be21f7c35b37
- 크루원들이 제작한 홍보 포스터(?) -
테크살롱은 부스 형식으로 진행됐는데
스코프, 실행 컨텍스트, 클로저 별로 파트를 나누어서 개념에 대해 설명하고
이후 해당 개념에 대해 문제 풀이를 하는 식으로 진행했다.
동작 원리에 대해서는 애니메이션으로 시각화하여 보여주는 것이 좋다고 생각해서
학습 퀴즈 웹앱을 만들어 발표에 활용했다.

🔗 링크: https://gemini.google.com/share/873022356ce7
나는 '실행 컨텍스트' 부분을 맡아 발표했다.
가장 고민됐던 부분은 개념 난이도 조절이였다.
오전에는 프론트엔드 크루들을 상대로
오후에는 안드로이드 / 백엔드 크루들을 상대로 진행했기에
적절한 난이도를 찾아야 했다.
깊게 하자니 프론트엔드 크루들조차 해당 개념을 모른다면 이해하기 쉽지 않을 것 같았고,
쉽게 하자니 우리가 학습한 내용의 깊이와의 괴리감이 있었다.
그렇다고 프론트와 안드/백엔드 각각의 레벨에 맞춰 두 개의 버전을 준비하기에는
물리적인 시간이 너무나도 부족했다.
그래서 우리 원정대가 내렸던 결론은 내부 동작 원리까지 깊게 들어가기보다는
실행 컨텍스트와 클로저가 어떤 개념인지 감만 잡을 수 있도록 하자'였다.
'쉽고 얕지만 핵심만'
이렇게 목표를 세우니 부담은 적어졌지만, 그만큼 학습에 대한 깊이도 함께 얕아지지 않았나 싶다.
(시간 부족과 2개의 원정대 동시 수행도 큰 몫을 했다)
문제는 우리 조의 발표 세션에 우테코 대장 포비가 참여하면서 시작됐다..
발표는 준비한대로 잘 했지만 내가 발표하던 도중 포비의 질문 폭격이 이어졌고
이 질문들에 대해 대부분 제대로 답변하지 못했다.
JS의 동작 원리에 익숙하지 않은 사람의 입장에서 봤을 때 당연히 의문을 가질만한 질문들이었다.
질문에 제대로 답변하지 못한 이유에 대해 스스로 피드백을 해봤다.
질문의 의도를 제대로 파악하지 못했다.
답변을 잘 하기 위해선 무엇보다 질문의 의도를 잘 파악하는 것이 중요하다.
하지만 나는 포비의 질문 내용과 그 의도를 제대로 들여다보지 않고 질문에서 나온 키워드 몇 개만 조합해서 나만의 다른 질문으로 해석했던 것 같다. 질문한 의도와 다르게 답변을 하니 포비가 '질문 내용'을 이해시키기 위해 칠판에 그려가며 설명하셨다.
제대로 딥다이브하지 못했다
각 개념에 대해서 알고는 있었지만 이것을 남에게 완벽히 설명할 정도의 깊이로 학습하지 못했다.
포비가 해주셨던 질문 복기
Q1. 실행컨텍스트는 함수 호출 시에 '소스코드 평가' 단계에서 만들어지고 이 단계에서 변수 등의 식별자를 등록한다고 했는데, 엔진이 호출 전 함수 선언부에 정의된 함수를 읽을 때는 해당 함수에 대해 아무런 정보도 저장하지 않는건지?
저장한다면 구체적으로 어떤 정보를 저장하는지?A1(내 답변). 질문 의도를 제대로 파악 못하고 딴 소리함..
Q2. 실행이 완료된 함수의 실행 컨텍스트는 콜스택에서 pop되어 제거된다고 했는데, 클로저는 이미 제거된 상위 함수의 실행 컨텍스트의 식별자를 어떻게 참조한다는건지? 구체적인 원리가 궁금하다.
A2(내 답변). 상위 함수의 실행 컨텍스트가 제거되어도 해당 함수의 식별자를 외부의 다른 함수가 참조하고 있다면 가비지 컬렉션이 해당 식별자를 메모리 영역에서 제거하지 못한다. 그래서 실행 컨텍스트가 제거되어도 클로저가 해당 식별자는 참조할 수 있는 것.
Q3. 참조할 수 있다는 건 어딘가에는 저장되어 있다는건데 그럼 이 식별자는 실행 컨텍스트 내부에 저장되어 있는 것이 아닌건지?
A2(내 답변). 답변 못함
A3(클라우디 답변). 식별자는 렉시컬 환경에 저장되고 이 렉시컬 환경은 실행 컨텍스트와는 별도의 메모리 공간에 존재함. 따라서 이 렉시컬 환경에 저장되어 있는 식별자를 참조할 수 있는 것.
JS 원정대 테크살롱 세션이 종료되고
깊이있게 학습하지 못했다는 스스로에 대한 실망과
제대로 답변하지 못했다는 아쉬움이 남았다.
하지만 지금 돌아보면 무난하게 끝났다면 몰랐을 내용들을
꼬리 질문을 해주신 덕분에 부족한 부분을 알 수 있었기에
'오히려 좋은 경험이었어'라고 스스로 결론 내렸다.
코치 준이 테크살롱 시작하기 전에 했던 말을 빌려봤을 때도
테크살롱의 목적은 완벽히 무언가를 전수하는 것이 아니었던 것 같다.
어쩌면 의도에 맞게 잘 경험한 것일지도?
누군가에게 처음부터 끝까지 다 알려준다는 생각보다는
잘 모르는 사람한테 주제에 대해 의견을 나누고 교류하는 시간이라고 생각해보자
모르면 내가 물어보면서 배운다는 마인드
백엔드/안드로이드 크루들을 우리의 '야생 학습'의 도구로써 활용해본다고 생각하자
발표를 통해 중요한 교훈은 얻었지만 부족한 부분을 채울 수 있는 액션 플랜이 필요하다.
You don't Know Js Yet 책도 활용메모리 힙 스레드 등의 개념을 딥 다이브할 필요가 있다.
함수형 프로그래밍은 다음과 같이 진행했다.
쏙쏙 들어오는 함수형 코딩 책을 기준으로 관련 개념을 학습했다.
학습한 책의 내용은 다음과 같다.
Chapter 3-5장의 '액션과 계산, 데이터'
Chapter 8-9장의 '계층형 설계'
개념 학습 후 각자 정리한 내용을 바탕으로 원정대 활동 시간에 의견을 나눴다.

학습한 내용을 바탕으로 예제 코드를 만들어서 실습을 진행했다.
실습 내용을 적용할 수 있는 소위 '냄새나는 코드'를 만들었다.
난이도 조절이 참 쉽지 않았지만 모두들 잘 만들었다고 칭찬해줘서 고마웠고 학습에 도움이 된 것 같아 뿌듯했다.
실습은 페어프로그래밍으로 진행했다. 도넛과 매칭되어 진행했는데 좋은 페어 경험이었다.
도넛이 기본적으로 나보다 개발을 잘하고, 기본기가 탄탄하다고 느껴졌기에 코드의 주요 흐름과 구현에 대해서는 도넛에게 조금 더 주도권을 줬다.
대신 나는 진행하며 의문이 드는 점에 대해 적극적으로 질문하며 의견 교류를 유도했고,
내가 도넛보다 상대적으로 덜 내향적이었기에 분위기를 이끌기 위해 노력했다.
내가 주도적으로 진행했던 지난 페어와는 달리 주도권을 상대방이 조금 더 쥐고 있는 상황에서
내가 할 수 있는 역할을 하며 결과적으로 만족스러운 페어 경험을 했던 것 같다.
활동을 통해 확실히 얻어갈 수 있었던 송곳은 다음과 같다.
계층형 설계는 조금 더.. 공부해봐야 할 것 같다.
원정대원 모두가 적극적으로 참여해 준 덕분에 나도 정말 열심히 참여했다.
무엇보다 좋았던 점은 원정대원들에게서 배울 점이 많았다는 것.
매일같이 회의하며 가깝게 지내다보니 원정대원 각자의 뚜렷한 장점을 볼 수 있었다.
크루들 각자의 개성과 강점을 보며 나의 강점은 뭘까?
생각해봤다.
아직은 잘 모르겠다.
하지만 이번 원정대 활동을 하면서 목표가 생겼다.
나만의 뾰족한 강점 만들기
많이 부딪혀보고 도전해보고 스스로 돌아보다 보면 찾을 수 있지 않을까
정말 열심히 준비했다.
테크살롱 직전 3~4일 정도는 잠도 거의 못자고
하루 종일 회의 → 10시 넘어서 하교 → 8시 30분 등교 → 하루 종일 회의 → ..를 반복했다.

테크살롱을 준비하며 가장 좋았던 점은 '빠른 테스트 후 피드백'이었다.
여기에는 원정대장 파라디가 많이 활약해줬다.
프론트뿐 아니라 백엔드/안드로이드를 대상으로 발표를 준비하다보니
'이걸 백엔드가 이해할 수 있을까?'
'너무 어렵지는 않을까?'
라는 고민이 각 지점마다 있었는데
그럴 때마다 파라디가 아는 백엔드 크루들을 데려와서 테스트하고 빠르게 피드백을 받은 덕분에 많은 도움이 됐다.
왜 피드백 주기를 짧게 가져가라고 하는지 알 수 있었고, 애자일 방식에 매력을 느꼈다.
평소라면 굳이 하지 않았을 발표를 용기내어 도전했다.
프론트뿐만 아니라 백엔드, 안드로이드 대상으로 스타트랙에서 발표해 볼 수 있는 흔치 않은 기회이고
11월에 할 테코톡을 미리 준비하며 발표 실력도 키운다는 생각으로 열심히 준비했다.
성공적인 홍보 덕분이었는지..(ㅋㅋ) 죄송해요 제임스
실제로 백엔드/안드로이드 크루들이 14명이나 참여해주셨고,
프론트분 크루들도 6명 참여해주셨다.
이날 진행됐던 테크살롱 중 제일 많은 크루 분들이 참석해주셨던 세션이었던 것 같다.
실습은 AI로 코드랩을 만들어 진행했다.
전공 수업을 들으면서 발표할 기회는 꽤 있었지만, 열심히 준비하지 않았다.
발표를 할 때면 미리 써서 간 스크립트만 열심히 읽다가 왔다.
사실 그 조차도 제대로 못 읽었던 같다.
그래서 발표 수업이 있을 때마다 스트레스가 있었고 피해다녔다.
우테코에서는 이러한 두려움을 깨고 싶었다.
결과적으로 이번 발표를 통해서 최소한 스크립트로부터는 자유로워졌다.
발표 내용과 플로우를 스스로 이해하고 납득한 상태로 발표하다 보니 이전과 비교하여 훨씬 자연스럽게 발표할 수 있었다.
하지만 발표에서 아쉬운 점도 있어 셀프 피드백과 함께 크루들에게 피드백을 부탁했다.
(정성스럽게 피드백해준 레스, 클라우디, 루멘 감사..)
아쉬운 점 위주로 적어봤다.
막상 해보니 그동안 크게 욕심 없었던 발표도 잘하고 싶어진다.
역시 뭐든 '하는' 버릇을 들여야 한다.
그래야 내 강점과 약점을 찾을 수 있으니까.
다음 발표에는 피드백을 반영하여 더 성장해서 돌아오겠다 👍
재밌게 활동했고, 취지에 맞게 얻어가는 부분도 분명히 있었다.
하지만 아쉬운 부분도 꽤 있었다.
원정대 활동을 진행한 대부분의 크루가 동의하는 내용이라고 생각한다.
2주라는 일정이 너무 빠듯했다.
미션과 병행하며 송곳을 만들기에도 빠듯한 시간이었기에 다소 뭉툭한 송곳이 되지 않았나 싶다.
스스로 충분히 딥다이브하고 학습한 내용을 바탕으로 전이가 이루어져야하는데
학습은 어느 정도 됐으니까 일단 발표 준비를 더 우선적으로 하게 되어 주객이 전도된 느낌이 많이 들었다.
단순 학습 내용 발표가 아닌 '전이'였기에 더 부담이 됐고 이로 인해 일정 수준 이상의 깊이 있는 학습도 힘들었던 것 같다.
의도는 좋았지만 백엔드, 안드로이드까지 꼭 불렀어야 하나..라는 생각이 들었다.
기본적으로 모든 세션이 JS 문법으로 진행됐고 백엔드 크루들 대상으로 테스트를 진행해봤을 때
문법부터 이해하기 힘들어했기에 난이도 조절이 쉽지 않았다.
(대부분의 백엔드, 안드로이드 분들은 별 관심이 없어 보이기도 했다..)
다음 원정대를 한다면 프론트만을 대상으로 해서 조금 더 깊게 하면 좋지 않을까 라는 생각이 있다.
벌써 우테코를 시작한지도 한 달이 지났다.
모든 시간을 우테코에 할애하며 최선의 노력을 다했다.
특히 소프트 스킬 면에서 전보다 성장한 것 같다.
스스로 크고 작은 여러 도전도 하고 있다.
(회고 글 공유, 테크살롱 발표 등)
이러한 노력들로 인해 불과 얼마 전의 나와 비교했을 때
지금의 내가 많이 변한 것을 체감하고 있다.
하지만 기술적인 부분을 돌아봤을 때
'내가 무엇 하나 제대로 얻었다고 할 수 있나?'는 질문에는 그렇다고 답하기가 어렵다.
Gemini Canvas 미션 부터 로또 1,2단계 미션, 원정대 활동까지 모두 열심히 했다.
하지만 솔직히 크게 남은 것이 있다는 생각은 잘 안든다.
그래도 하드스킬 면에서 얻어갈 수 있었던 점을 적어보자면
이 정도인 것 같다.
뭐가 문제일까에 대한 내 답은
아직 시작한지 얼마 안된 시점이라 더 그렇게 느끼는 것일 수도 있지만
우테코에서의 활동들을 통해 얻어가고 싶은 '명확한 목표'가 없다는 것이다.
상대적으로 가장 여유롭다는 레벨 1에서도 나는 당장 눈 앞에 주어진 태스크를 처리하기에 급급했다.
시간이 지날수록 신경써야 할 일들이 더 많아질 것이기에
커다란 줄기가 없으면 눈 앞의 일들을 처리하기에 급급해져 방향을 잃을 수도 있을 것 같다는 생각이 든다.
얻어갈 수 있는 모든 것을 얻어가려고 노력은 해보겠지만, 현실적으로 불가능하다.
그래서 내가 이 과정을 통해서 반드시 얻어가고 싶은 것과
만들고 싶은 나만의 뾰족한 송곳을 진지하게 생각해봐야 한다.
지금 내게는 이러한 구체적이고 큰 목표
즉, 내가 잘 나아가고 있는지 지속적으로 확인할 수 있는 커다란 줄기가 필요하다.
이러한 고민들을 안고 다음 주에 시지프에게 원온원 신청을 했다.
실제로 우테코 생활을 해본 경험이 있으니
나의 이런 고민에 조금 더 공감해주실 수 있지 않을까 싶은 마음에서다.
방향을 잘 잡을 수 있기를.