신청 전
13명의 프론트엔드 개발자와 일했던 커머스를 거쳐, 프론트엔드 개발자가 2명 뿐인 언론사에서 일하고 있다. 그마저도 비슷한 연차의 프론트엔드 개발자 2인은 각각 담당하는 제품이 달라, 거의 1인 체제로 개발을 하게 되었다.
규모가 큰 조직에서 작은 조직으로 옮겨갔을 때 가장 크게 마주하는 문제는 바로 의사결정이다. 코드 리뷰를 진행해도 서로의 제품에 대한 이해도가 낮았고, 리뷰에 드는 시간과 비용이 커질수록 LGTM(Looks Good To Me)으로 일을 하고 있었다.
결국, 복잡한 문제를 마주했을 때 내 해결책에 대한 판단 기준조차 찾기가 어려워졌다. 인원이 많은 팀에서 근무했을 때는 시니어나 여러 동료들의 리뷰를 통해 고민이 해결되었지만, 소규모 주니어 팀에서는 서로 검증해 줄 수 있는 경험이 부족해 내 해결법이 맞는지 확신하기가 어려웠다. 오픈소스 코드를 들여다보기도 했으나, 라이브러리마다 설계 패턴이 달라 무엇을 기준으로 선택해야 할지 고민만 커졌다.
그렇게 조직에 한계를 느낄 때쯤에 토스에서 프론트엔드 멘토링 프로그램 참여자를 모집한다는 공고를 만났다.
프리코스
요즘 취업이 어렵다더니, 멘토링 프로그램에 선발되는 것도 쉽지 않았다. 본인이 프로그래밍을 하면서 만난 복잡한 문제가 무엇이고 어떻게 접근하는지, 주변 피드백은 어땠는지 등 어떤 사고방식으로 일을 하고 어떻게 주변과 소통하는지에 대한 답을 해야했다. 다행히(?) 평소 업무 방식에 병목이 많아 반쯤 울분 섞인 답을 작성했고, 운이 좋게도 프리코스에 합격했다.
약 1주일 정도 되는 프리코스 기간 동안 한 일은 아래와 같다.
- 2시간 제한 시간 동안 과제 풀기
- 푸는 과정을 입 밖으로 내뱉고, 이를 화면 녹화와 함께 영상으로 기록하여 제출하기
- 디스코드에서 프리코스 참여자들과 피드백 주고 받기
- 피드백을 통해 제출한 코드를 리팩토링하기
과제 난이도는 어렵지 않았으나, 생각을 입 밖으로 내뱉는 것과 영상 속 내 모습을 받아들이는 건 무척이나 어려웠다. 평소 신중하다는 이야기를 듣지만, 이는 결국 고민의 시간이 길고 이를 드러내지 않는다는 뜻이기도 하다. 답답함으로 이어질 수 있는 이런 모습이 마음에 들지 않았고, 그래서 더 받아들이기 어려웠던 것 같다.
이런 내 모습과 달리 다른 참가자들은 디스코드에서 활발하게 고민을 나눴다. 내가 한참 생각하는 사이 누군가는 이미 답을 내리거나 새로운 질문을 던지고 있었다. 리팩토링 횟수도 다른 참여자들에 비해 적었다. 프리코스 내내 뒤처지는 느낌이 들었고, 이번엔 안 되겠다는 생각이 자연스럽게 따라왔다.
프리코스 기간이 끝나면 최종 인터뷰를 통해 본코스 합류 여부가 결정된다. 안될 거라는 생각에 마음을 내려놓아서 그랬는지, 막상 멘토(이하 종택님)와의 인터뷰는 카페에서 수다를 떠는 것처럼 편안했다. 인터뷰에서는 코드보다 일상 속 인지행동과 패턴에 관한 이야기가 주를 이뤘다. 프리코스가 어땠냐는 질문에 나는 뒤처졌던 느낌을 제일 먼저 말했고, 종택님은 내가 프리코스 동안 느낀 불편함이 '나를 드러내지 않는 행동 패턴'에 있다고 짚어줬다. 이를 극복하기 위해 어떤 액션을 취하면 좋을지도 함께 이야기했다.
인터뷰가 끝나자마자 나는 그 내용을 디스코드 채널에 공유했다. 무언가를 드러냈다는 것만으로도 한 발짝 나아간 느낌이 들었다.
본코스
불합격을 예상한 것과 다르게 감사히 합격을 하게 되어 본코스를 듣게 되었다. 본코스라고 해서 프리코스에서 다룬 내용과 크게 다르지는 않았다. 두 코스 모두 추상화 능력을 기르는 방법에 대해 다루었다.
추상화 — 사고
코스에서 말하는 추상화는 아래와 같다.
번잡한 세부사항(How)에 가려진 본질(What)을 드러내는 행위
코스를 듣기 전, 추상화라고 하면 무작정 복잡해 보이는 부분을 함수나 컴포넌트로 분리하는 방식을 생각했었다. 코드가 안 보이면 일단 정리된 것처럼 느껴졌기 때문이다. 하지만 그건 추상화가 아니라 은닉이었다. 나중에 그 파일을 열면 여전히 복잡했다.
이 습관이 드러난 건 페이지 컴포넌트를 작성할 때였다. 최상위에서 데이터를 한꺼번에 페칭하고 하위 컴포넌트로 내려보내는 식으로 코드를 작성했다. 데이터 선언은 파일 상단에 몰려 있고, 실제 사용은 한참 아래에서 하고 있었다. 정리된 것처럼 보였지만, 읽는 사람 입장에서는 선언과 사용 사이를 오가며 머릿속에서 연결해야 하는 코드였다.
제대로 된 추상화는 순서가 달랐다. 먼저 코드를 펼쳐놓고, 데이터와 로직을 실제 사용되는 곳으로 옮겨 선언과 사용의 거리를 좁히고, 요구사항의 언어로 이름을 붙인다. 그렇게 완성된 코드가 UI와 요구사항이라는 본질과 1:1 매칭이 되어야 한다는 기준이 생기고 나서야, 경계를 어디에 그어야 할지가 보이기 시작했다.
잘 된 추상화인지 확인하는 기준도 생겼다.
- 함수나 변수의 이름이 약속을 지키는가?
- 파일이나 함수로 나뉜 경계 바깥에서 안쪽을 몰라도 되는가?
- 같은 레벨의 코드들이 비슷한 수준으로 말하고 있는가? (한 쪽만 수다스럽지는 않은가?)
아직은 모든 상황마다 최적의 추상화를 한다고 할 수는 없지만, 적어도 어떤 부분에서 왜 이렇게 추상화했는지는 설명할 수 있게 되었다.
페어 프로그래밍 — 관찰
코드를 잘 작성하는 것만큼 중요한 게 있었다. 내 코드에서 무엇이 문제인지를 스스로 발견하는 것.
코스 동안 2인이 짝을 지어 페어 프로그래밍을 진행했다. 다만, 둘이서 같은 코드를 작성하는 일반적인 페어 프로그래밍과는 달랐다. 구현자와 관찰자로 역할을 나눠, 구현자는 평소대로 코딩을 하고 관찰자는 코드가 아닌 사람을 본다. 어디서 막히는지, 어떤 패턴으로 문제에 접근하는지를 관찰하면서 병목을 발견하고 함께 해결 방법을 찾아가는 방식이다.
나의 병목은 '말이 없어짐'이었다. 복잡한 문제를 마주하면 해석하는 시간이 길어졌고, 그 사이 방법만 고민하다 시간을 흘려보내는 패턴이었다. 나를 관찰하던 파트너는 "지금 어떤 문제를 겪고 계세요?", "이 문제를 어떻게 쪼갤 수 있을까요?" 같은 질문을 던졌다. 질문에 답하는 과정이 곧 정적을 부수는 과정이었다. "지금 ~를 해야 하는데 ~때문에 막혔어요." "가장 단순한 방법부터 해보고 이후에 리팩토링할까요?"와 같이 내 문제를 말로 좁히면서 병목을 해소할 수 있었다. 말이 없어진다면 일단 생각을 멈추고, 가설을 세워 문제를 좁히고, 가장 작은 가설부터 세우고 검증해 나가는 방법을, 관찰을 통해 알게 되었다.
일일 점검 — 발견
코스 기간 동안 매일 디스코드에 점검 기록을 남겼다. 아침, 점심, 저녁 세 번. 형식은 아래와 같았다.
- 아침: 오늘 하나만큼은 꼭 해내고 싶은 게 무엇인지, 그게 잘됐다는 걸 어떻게 알 수 있는지, 걱정되는 게 있다면 어떻게 대비할지
- 점심: 계획대로 되고 있는지, 안 된다면 왜 안 되는지, 어떻게 방향을 바꿀지
- 저녁: 오늘 어떤 패턴을 발견했는지, 그게 내일 어떻게 이어질 수 있는지
처음엔 그저 투두 리스트처럼 느껴졌다. 하지만 점검 기록이 쌓이면서 구조가 보이기 시작했다.
- 아침은 오늘 내가 통제할 수 있는 범위를 정의한다. 목표를 세우는 게 아니라, 실패할 수 있는 지점까지 미리 설계해두는 것.
- 점심은 계획과 현실의 간극을 빠르게 감지한다. 잘 되고 있으면 왜 잘 되는지, 안 되고 있으면 왜 안 되는지를 멈춰서 보는 중간 지점.
- 저녁은 그날의 경험에서 반복 가능한 패턴을 발견한다. 단순 회고가 아니라, 이 경험이 내일도 쓸 수 있는 구조인지 확인하는 과정.
결국 하루 안에 계획 → 실행 → 관찰 → 조정 → 패턴 추출을 의식적으로 반복하는 구조였다.
코드에서 신호를 찾고, 작은 단위로 실행하여 리팩토링을 하는 것과 같은 맥락이었다. 일상의 병목을 먼저 예측하고, 간극이 생기면 즉시 감지하고, 그 경험을 다음에 연결하여 나아지는 것이다.
코드만큼 중요한 사고 과정
코스 이전의 나는 문제를 마주하면 해결책부터 찾았다. '왜 막히는지'보다 '어떻게 풀지'를 먼저 생각했다. 그러다 보니 같은 자리에서 맴도는 일이 많았다. 병목을 해결한 게 아니라 병목을 피해 간 것이었다. 내 해결책이 맞는지 확신할 수 없었던 이유도 거기 있었다.
코스는 그 순서를 바꿔주었다. 먼저 멈추고, 지금 어디서 막혀있는지를 정의하는 것. 추상화를 수행하는 단계와 같은 원리였다. 코드에서는 세부 구현(How) 뒤에 숨은 본질(What)을 찾는 일이었고, 일상에서는 막히는 순간들 뒤에 숨은 패턴을 찾는 일이었다. 찾고 나면 가장 작은 단위로 쪼개서 움직일 수 있었다.
병목을 찾고 제거하는 일이 몸에 붙으면서 일상을 대하는 방식도 달라졌다. 집안일이 쌓이면 '왜 손이 안 가는지'를 먼저 봤다. 피곤해서라면 부족한 잠부터 자야 했고, 막막해서라면 설거지, 청소, 빨래로 쪼개면 됐다. 다른 사람들이 코스를 통해 인생까지 배운다는 말을 비로소 이해할 수 있게 되었다.
무엇보다 이 변화는 함께 배우는 과정 덕분에 생길 수 있었다. 혼자였다면 책을 읽고 끄덕이는 데서 멈췄을 것이다. 이 모든 내용을 이끌어준 종택 코치님, 그리고 6주 동안 서로를 관찰해 주고, 같은 고민을 나누고, 응원을 보내준 5명의 동료들 덕분에 지식이 행동으로 이어질 수 있었다. 코드 안팎으로 함께 성장한 우리 모두의 앞날이 기대가 된다.