Toss Frontend Accelerator 5기 Pre-Course 회고
시작하며
물론 아닌 경우도 있지만, 회사에서 업무를 하면서 정해진 요구사항을 구현하는 것은 대체로 어렵지 않다. 특히나 요즘은 AI 덕분에 누구나 구현을 할 수 있게 되었고, 구현이라는 건 잘 돌아가는지 보는 것만으로도 피드백이 되는 일이다. 하지만 단순히 돌아가는 코드를 짜는 것만으로는 뭔가 부족하다고 느꼈다. 내가 짠 코드가 나중에 유지보수에 병목이 되는 건 아닐까? 남들이 고치려다 한숨 쉬는 거 아닐까? 하는 의심을 많이 했다. 그렇다고 해서 뭘 해야 이런 생각에서 벗어날 수 있는지 모르겠다고 느꼈다. (지금 생각해 보면, 좋은 코드의 기준이 내 안에 없었던 것 같다.) 물론 동료들과 코드 리뷰도 하곤 했지만, 업무로 바쁜 사람끼리 하는 피드백이라, 배포했을 때 문제가 되지 않는지 보는 것만으로도 바빴던 것 같다.
그러던 중 마주하게 된 Toss Frontend Accelerator(이하 ACC)는 토스에서 개발한 교육과정으로, 전문가들이 실제로 코딩하는 과정에서 생각하는 방식을 배울 수 있는 교육이다. 코딩하는 방법을 배우는 게 아니라 생각하는 방법을 배운다니…. 너무나도 궁금한 교육과정이었다. 전문가와 나의 판단을 하나하나 대조해서 어디서부터 어긋나는지를 본다는 게 나에게 너무 필요한 과정이라는 생각이 들었다.
지원서를 작성하는 것부터 쉽지 않았다. 단순히 이력서를 내는 것이 아니라, 지원동기부터 나의 경험과 학습 방식에 대한 5개의 질문에 답을 작성하기 위해 많은 고민이 필요했다. 최선을 다해 답변을 작성했고, 운이 좋게도 5기 프리코스에 참여할 기회를 얻었다.
진행 방식
프리코스는 5기에 처음 도입된 방식이다. 3주간의 본 과정 전에 일주일 동안 하나의 과제를 가지고 본 과정을 체험할 수 있는 프로그램이다. 화요일 저녁에 두 시간 분량의 과제 공지가 올라왔고, 과제를 구현하며 생각하는 내용을 함께 녹음한 영상을 같이 업로드해야한다. 그 이후로 일요일 저녁까지 해당 과제에 대해서 멘토님과 동료들과 피드백을 주고받는 것이 프리코스의 커리큘럼이다. 단순 PR 코멘트 뿐만 아니라, 언제나 열려있는 디스코드 음성채널에서 동료들과 의견을 나눌 수 있었고, 목요일부터는 멘토님의 라이브 세션도 진행되었다.
배운 것 (Learned)
추출에서 추상화로
지금까지 내가 추상화라고 생각했던 건, 추상화가 아니라 추출이었다는걸 알게 되었다. 종택 님이 처음 나에게 추상화를 어떻게 정의하냐고 물어보셨을 때 내부를 읽어보지 않아도 예측할 수 있게 하는 것이라고 대답했다. 정의는 잘 알고 있으면서도, 내가 하는 게 추상화인지 추출인지는 구분하지 못했던 것 같다. 더러운 코드들이 마구 생길 것 같으니 냅다 묶어서 컴포넌트로 만들어 숨기고, 로직이 길어질 것 같으면 냅다 커스텀 훅이라는 쓰레기봉투를 만들어 주섬주섬 담았으면서 추상화했다고 생각했다. 프리코스를 통해 가장 먼저 얻은 건, 내가 만든 쓰레기봉투를 풀어헤칠 용기였다. 내 손으로 분리해 놓은 걸 다 펼쳐놓고 시작해야 그때부터 진짜 추상화가 가능해진다는 걸 배웠다.
중요한 건 본질
프리코스 내내 반복적으로 나오는 메시지 중 What(본질)은 드러내고, How(세부 사항)는 숨기자, 안에서 밖으로 추상화하자라는 이야기가 있다. 처음엔 "뭐가 What이지…?", "사람마다 다르게 생각할 수 있는 거 아닌가…?", "어디가 안이지…?" 하고 우왕좌왕했지만, 이제는 UI와 요구사항이라는 본질을 드러내고, 코드의 구조가 변경이 일어나는 단위와 일치하게 추상화하면 재사용성/유지보수성이 따라올 수밖에 없다는 것을 이해했다. 게다가, 코드 밖에서도 본질을 찾으려고 노력할 수 있다는 걸 알게 되어 삶의 모든 부분에 "본질 찾기"를 적용할 수 있지 않을까 생각하게 되었다.
내가 잘 짠 건가? 의 기준이 생김
기존에 내가 가지고 있었던 가장 큰 문제점은, 어떻게 해야 좋은 코드라고 부를 수 있는지에 대한 기준이 없다는 것이었다. 단순히 좋은 코드 === 읽기 쉬운 코드라고 생각했지만, 개발하는 중간에는 남들이 봤을 때 뭐가 더 읽기 쉬울지 (내가 방금 짰으니 난 다 잘 읽힘;;) 판단할 수 없었다. 그래서 추상화의 기준도 이래도 그만, 저래도 그만, 상관없는 거 아닌가? 생각하고는 했었다. 하지만 지금은 코드를 짜면서 아래와 같은 생각들을 하게 됐다.
- UI와 인터페이스가 1:1 대응하나?
- 표준에 가까운 인터페이스를 만들었는가?
- 컴포넌트 이름과 Props 이름의 덜컹거림이 없는가? (Props를 데이터의 통로로만 사용하지 않는가?)
사실 아직 세부 사항에 대해서 어떻게 처리하는 게 좋을지 기준도 부족하고, 더 많은 수련이 필요하다고 생각하지만 (조림 100번 하는 조림핑이 되자) 이제는 내가 왜 어떤 걸 추상화했고 어떤 건 안 했는지 말할 수 있는 근거가 생겼다.
방법론을 내 것으로
당연하게도 코드 퀄리티를 위해 공부한 게 이번이 처음이 아니다. Frontend Fundamentals를 읽는다거나, 쏙쏙 들어오는 함수형 코딩을 읽는다거나, 관련 발표 자료들을 시청한다거나…. 하지만 그런 자료를 접할 때마다 "이해는 했는데, 이걸 어떻게 내 코드에 적용하지?" 하는 의문을 지울 수 없었다. 좋은 얘기 읽고 뿌듯한 마음만 생길 뿐, 실제 적용하는 방법을 몰라 의미 없이 느껴지기도 했다. 하지만 이번 프리코스를 통해 지금까지 쌓아왔던 것들을 비로소 내 것으로 만들 수 있었다는 느낌이 든다. 고차 함수 써라, children 쓰는 게 불필요한 렌더링을 막는다. 이런 얘기 백 번 봤지만, 막상 내 코드 짤 땐 언제, 어떻게 적용해야 할지 몰랐는데, 이제 좀 써볼 수 있지 않을까 하는 생각이 들었다.
잘한 것 (Keep)
살면서 열심히 했다고 나 자신을 인정해 줄 수 있는 시간이 별로 없었는데, 이번 프리코스는 스스로 생각해도 열심히 하지 않았나 싶은 몇 안 되는 순간이었다. 덕분에 프리코스 시작하고 수, 목, 금 3일은 정말 오늘의 내가 어제의 나와 다르다고 느껴지고, 스펀지처럼 지식을 흡수하고 있다는 생각이 들었다.
가장 잘했다고 생각되는 것은, 과제를 일찍 제출하고 코멘트로 피드백을 많이 받은 것이다. 화요일 저녁에 과제가 올라와서, 수요일 오전에 바로 시작해서 4등으로 PR을 올렸다. 그리고 답글이 달릴 때마다 치열하게 고민하고, 이해가 안 되는 부분은 다시 질문해서 빠르게 수정 사항을 만들어 나갔다. 덕분에 목요일 저녁 첫 라이브 세션 전에 어느 정도 감을 잡았다는 느낌을 받을 수 있었고, 그렇게 작업한 마지막 수정 사항을 라이브 세션에서 종택 님께 피드백 받으며 이 방향이 맞구나! 확신할 수 있었다. 물론 그 뒤로도 많은 것을 배웠지만, 처음 나의 깨달음을 확인받았던 순간은 정말 잊지 못할 것 같다. 사실 라이브 세션 전에 혼자서 머리에 열나게 고민했던 내용을 라이브 세션에서 종택 님이 깔끔하게 설명해 주시니, "아, 이걸 먼저 들었으면 더 쉽게 해결할 수 있었던 거 아닌가…?" 라고 생각하기도 했지만, 내가 머리 싸맸던 시간만큼 더 내 것이 되었다고 생각한다.
그리고 또, 내가 지금까지 했던 걸 점검받고 싶어서 토요일 디스코드에서 동료분들 앞에서 라이브로 피드백을 요청했던 것, 라이브 세션 한 번도 빠지지 않고 뭐 하나라도 더 배우려고 노력한 것도 잘했다고 생각한다.
아쉬운 점 (Problem)
더 많은 의견 교류에 참여하지 못한 점
나는 일찍 자고 일찍 일어나는 편이라, 보통 다른 직장인 분들은 출근하셨을 때 혼자서 작업을 많이 했다. 그래서 새벽반 분들이 밤새 디스코드에서 논의하신 걸 아침에 일어나서 보면 약간 FOMO오고…. 나도 다른 분들이랑 더 얘기를 많이 해보고, 다른 분들 코드에서 하나라도 더 배워야 했나 싶기도 했다. 다만 이 부분은 내가 일찍 자는 게 문제가 아니라, 그만큼 내가 교류하고자 하는 노력이 부족했던 것 같다. ACC는 학습에서 병목이 되는 부분을 찾아 개선하는 걸 주된 목표 중 하나로 삼는데, 나에게 병목은 자신을 드러내는 걸 어려워하는 성격인 것 같다. 항상 내 의견을 말하기보단 남의 의견을 따라가는 걸 편하게 생각했고, 스스로에게 자신이 없어서 숨어있으려고 하는 태도가 내 성장을 저해한다고 느꼈다. 이번 회고를 공개하는 것도, 이 병목을 개선하기 위한 작은 시도이다.
회고를 데일리로 쓰지 않은 점
기간이 짧은 코스인 만큼, 끝나고 회고 써야지~ 하는 생각만 해서 메모장에 그때그때 적어두기만 했다. 하지만 짧은 시간에 워낙 많은 걸 흡수하려고 하다 보니 그동안 배우고 느낀 것도 양이 꽤 되어서 정리하기 쉽지 않았다. 그날그날 감상과 함께 회고했다면 하루하루 얼마나 성장했는지 더 잘 느낄 수 있었을 것 같다.
시도해 볼 것 (Try)
- 블로그, 디스코드 등을 통해서 더 많은 Output을 만들고, 자신을 드러내는 사람이 되자. 그리고 그 바탕이 될 자신감을 만들기 위한 충분한 연습을 하자.
- 아직 다른 분들의 PR을 다 보지 못했다. 각자 리팩토링하는 시간이 조금씩 달라서, 주말에 보려고 했는데 아직 작업 중이신 것 같아서 못 본 PR들이 많다. 회고 다 쓰면 진짜로…. 보러 가야겠다. 더 이상 미룰 수 없다….
- 하나의 과제를 계속 들여다보면서, 내가 과제에만 매몰되어가고 있는 게 아닌가 하는 생각을 했다. 앞으로 다른 코드를 보면서 프리코스에서 배운 것들을 적용할 수 있도록 노력해야겠다.
마무리
고작 일주일도 안 되는 시간 동안 너무 많은 것을 배웠다. 머리를 너무 많이 써서 빙글빙글 도는 것 같은 기분이 며칠간 지속되었다. 하지만 그만큼 몰입의 즐거움을 느낄 수 있었던 시간이었다. 프리코스의 도파민에 절여져 버려서 일상으로 돌아온 이번 주가 조금 심심하게 느껴지기도 한다.
사실 최근에 회사를 그만두게 되면서, 이 길을 계속 가는 게 맞는 건지 의심하지 않았다고 하면 거짓말이다. 내가 개발을 좋아하는 게 맞는지 고민하고, 도망칠만한 데가 없을지 생각해 보기도 했다. 하지만 이번 프리코스를 통해 잊고 있던 코딩에 대한 열정을 불태울 수 있었던 것 같다. 지난 몇 달간의 휴식을 통해 이제 막 지친 상태에서 벗어나고 있는 지금, 프리코스를 만나서 힘껏 달리고 새로운 것을 알아가는 즐거움을 온몸으로 느낄 수 있어서 무엇보다 의미 있는 시간이었던 것 같다. 마침 1월에 시작한 이 불씨를 유지한 상태로 2026년도 잘 살아갈 수 있기를!