2023년 회고: 걸음을 떼다

YUZAMIN
Hello, World! I'm YUZAMIN, a diligently endeavoring frontend developer 🐤💦
2023년 회고: 걸음을 떼다

2023년 회고: 걸음을 떼다

매년 갱신되는 것 같기는 하지만, 올해는 내가 살면서 가장 바쁘고 열심히 산 해였다. 대학을 졸업했고, 해커톤에 참가했고, 구직 활동에 몰두했으며 정규직으로 취업했다. 중간중간 컨퍼런스나 행사에 참여하며 사람들을 만나기도 했고, 친구, 가족들과 함께 여행을 다녀오기도 했다. 알차게 채워나간 것 같아서 뿌듯하다. 연말에 이렇게 충만한 기분을 느낄 수 있음에 (과거의 나에게) 감사하다.

작년처럼 디테일한 회고를 쓰기엔 시간과 에너지가 부족하기 때문에 심플하게 써 내려가 보려 한다. 분량이 너무 과도하지 않기를 바라며…

2월: 드디어 졸업

우선 나는 유예의 유예를 거듭하다가 드디어 올해 2월 대학을 졸업했고 척척학사(?)가 되었다. 오랜만에 학교에 가서 가족들과 졸업 가운을 입고 사진도 찍고, 학위증도 받으니 대학생활이 끝났다는 것이 조금씩 실감이 나기 시작했다.

편도로 1시간 30분 넘는 시간을 지하철을 타고 등교하며, 초면의 학우들 앞에서 어색하게 발표를 (수없이) 반복하며, 1시간 동안 바삐 손을 놀려 빽빽하게 시험지를 채워나가며 나는 ‘내 인생에 더 이상의 학교생활은 없다, 없어야 한다…!’라고 생각하곤 했었다. 성격상 조용하고 있는 듯 없는 듯 학교에 다녀서 그리 다채로운 대학 생활을 하지도 못했고, 운동 부족으로 바닥을 쳤던 체력과 끊임없이 이어 했던 아르바이트로 인해 학기 중엔 거의 녹초가 되어 학교를 다녔기 때문이다. 그런데 사람 일은 모르는 거라고…(더보기)

어쨌든, 마침내 졸업을 했고, 나는 학생 딱지를 뗐다. 따라서 나는 일자리를 얻기 전까지는 꼼짝없이 ‘백수’였다는 것이다.

3월: 첫 해커톤 참가

작년 겨울, 구름톤에 참가 신청을 했었고 탈락해 버렸다. 올해 초, 심기일전하여 전보다 더 많은 시간을 들여 정성스럽게 지원서를 작성해서 재도전했고, 감사하게도 합격하게 되었다. 합격 문자를 받고서 너무 기뻐 펄쩍 뛰었던 게 기억이 난다.

봄의 제주도는 참 아름다웠다. 내가 사는 도시와는 달리 이미 벚꽃이 만개해 있었고, 날씨는 맑고 포근했다. 물론 그 풍경을 즐길 수 있었던 시간은 아주 짧았다. 나는 3박 4일간 총 8시간도 자지 못하고 제대로 된 식사도 서너끼 정도밖에 못 하며 몰두했다. 수상은 하지 못했지만 후회가 남지 않게 최선을 다했었음을 자신 있게 말할 수 있다.

구름톤을 통해 내가 얻은 것은 ‘몰입의 경험’ 그 자체였다. 나는 사실 그전까지는 몰입이나 집중이 어떤 건지 잘 모르고 있었다. 그저 해야 했으니 했고, 하다 보니 시간이 흘러갔을 뿐이었다. 그렇지만 간절히 원해서 참가한 해커톤에서 마감 기한을 맞추기 위해 고군분투하다 보니 자연스럽게 개발에 깊게 몰입할 수 있었고, 그러던 중 스스로가 굉장히 몰두하고 있음을 깨닫고는 내심 희열을 느꼈다. ‘이게 다들 그렇게 말하던 몰입이라는 거구나! 유레카!’ 이런 느낌이었다고나 할까. 밤을 새워서 코딩하며 지쳐가는 와중에도 참 즐거웠다. 나는 내가 즐기고 있는 일을 하고 있구나, 싶어서 행복하기도 했다. 예상보다 체력적으로 훨씬 힘들었지만 다시 과거로 돌아가도 나는 무조건 참가 신청을 할 것이다. 정말 값진 경험이었다.

4월 ~ 8월: 고군분투

이 4개월간의 시간은 이력서와 포트폴리오 작성, 과제와 코딩테스트, 그리고 면접과 면접과 면접의 나날들이었다. 이 시기의 고군분투는 이전에 올렸던 게시글에 자세히 서술되어 있으니 링크된 글을 참고해 주시길 바란다.

8월 ~ 11월: 수습 기간

취업하고 난 뒤부터는… 사실 다들 아시다시피 직장인은 굉장히 단조로운 일상을 보내게 된다. 점심시간을 포함한 9시간이라는 긴 시간을 회사에서 보내기 때문에 그리 특별한 이벤트가 생기기도 쉽지 않다. 수습 기간에 어떤 노력을 했는지도 위에 링크한 게시글에 잘 나와 있으니 그런 내용은 생략하도록 하겠다. 대신 회사 업무를 하며 기억에 남는 작업이 몇 개 있어서 그것들에 대해 얘기해보고 싶다.

얽히고설킨 컴포넌트들을 분리하다

나는 초반 몇주를 제외하고는 주로 사수로부터 작업을 할당받기보다는 내가 직접 일거리를 찾아서 해결하는 식으로 업무를 진행했는데, 하루는 한 페이지에 반응형을 적용해 보기 위해 코드를 뜯어보기 시작했다. 우선 뷰포트가 줄어들었을 때 화면 밖으로 벗어나는 컴포넌트가 없도록 뷰포트의 변화에 따라 컴포넌트들을 재배치 해야겠다고 판단했고, 이를 위해 서로 완전히 얽혀있는 컴포넌트를 분리해야만 했다. 그 과정에서 중복되는 논리를 없애고 불필요한 코드를 제거하며 코드의 줄 개수를 많이 줄일 수 있었고, 보다 이해하기 쉬운 코드로 개선해냈다고 (나는) 생각한다.

이 작업을 통해 내가 복잡하게 유착된 로직을 분리하고 컴포넌트를 들어내는 과정에 꽤 즐거움을 느낀다는 것을 알게 되었다. 사실 나는 다소 게으른 편임에도 불구하고 주변을 정돈된 상태로 유지하는 것을 중요시하고, 하루 날 잡아서 옷장이나 서랍을 뒤엎어서 깔끔하게 정리하는 것을 즐기는데, 이런 성향이 개발을 할 때에도 드러나는 것 같다. 이런 성향을 잘 활용하려면 타인의 코드를 잘 이해하고, 코드를 체계적으로 정리하면서도 버그가 발생하지 않도록 안전한 구조를 만드는 것이 중요할 것이다. 이 부분들을 잘 발전시켜 나가고 싶다.

라이브러리를 대체하다

잘해 낸 것처럼 서술한 것과는 달리, 나를 거의 한 달 넘게 괴롭힌 문제가 동일한 페이지에서 발생한다. 어느 날, 나는 위에서 내가 개선한 페이지에서 문제가 발생한다는 슬랙 메시지를 받게 된다. 해당 페이지는 일종의 status 페이지였는데, 총 6개의 차트 컴포넌트가 1초에 1회 간격으로 리렌더링되며 실시간으로 애플리케이션의 전반적인 상태를 보여주고 있었다. 그런데 그 페이지에서 오래 머무르면 어느 순간 갑자기 애플리케이션이 다운되어버렸다. 확인을 해봤더니, 해당 페이지에서 머물러있으면 애플리케이션이 차지하는 메모리가 점점 늘어나서 거의 1기가를 넘어가 버리는 것이었다. 어디선가 memory leak이 발생하고 있었다.

원인을 분석하기 위해 이전 코드로 다시 롤백해서 확인해 보니 다행인지 불행인지 해당 코드에서도 동일한 문제가 발생하고 있었다. 기존에도 존재하던 문제였는데 그 당시엔 발견되지 않았다가 내가 개선한 코드를 팀원들이 테스트해 보면서 드러나게 된 것이다.

그 문제는 차트 라이브러리에서 발생하고 있는 것으로 확인되었다. 실제로 해당 라이브러리의 이슈로 memory leak이 발생한다는 내용이 올라와 있는 것을 발견했고, 차트 라이브러리 렌더링 부분만 제거했을 때는 문제가 재현되지 않았기 때문이다. 나는 문제를 해결하기 위해 별의별 방법을 다 사용해 보았다. 렌더링 간격을 3초, 5초로 늘려보거나, 애니메이션 설정을 off 하거나, 차트에 이미 표시되었다가 시간이 지나 차트 바깥으로 넘어가서 더 이상 표시되지 않는 과거 데이터들은 잘라내어 버리거나, 심지어 일종의 새로고침처럼 중간중간 차트 컴포넌트를 제거했다가 다시 렌더링하기까지 해보았다. 그 외에도 여러 가지 시도를 해보았고, 사수와 함께 머리를 싸매보기도 했으나 도통 해결될 기미가 보이지 않았다. 시간은 또 얼마나 오래 걸리던지…우선 문제를 재현하려면 해당 페이지에서 일정 시간 이상을 머물러가며 확인해야 했기 때문에 빠르게 진도가 나가지 않아서 답답해 미칠 지경이었다. 단순히 구현이 안 되거나 구현하면서 발생하는 에러가 아닌 한 번도 경험해 보지 못한 성능상의 문제였기 때문에 앞이 깜깜했다. ‘내가 실무를 하고 있기는 하구나’라는 생각도 들었다.

결국 내가 선택한 해결 방법은 차트 라이브러리를 포기하고 직접 차트를 구현해 내는 것이었다. 내가 한 달 넘게 헤매고 있자 사수는 내게 일단 본인이 직접 차트를 구현해서 해결할 테니 다른 일을 맡아서 하라고 해주셨는데, 나는 내가 작업하던 이슈를 차마 포기할 수가 없어 내가 직접 마무리해 보겠다고 말씀드렸다. 그리고 구글링 + ChatGPT와의 협업(?)을 통해 이틀 만에 기존에 사용하던 차트 라이브러리와 거의 90% 동일한 UI의 차트 컴포넌트를 만들어낼 수 있었다. 내가 작성한 코드로 구현된 차트 컴포넌트가 기존 차트 라이브러리의 차트와 닮아가는 것을 보면서 해당 라이브러리가 어떤 방식(과정)으로 구현된 것인지 대충 짐작할 수 있었다. 그리고 다행히 내가 만든 컴포넌트는 오래 놔두어도 메모리 누수 문제가 발생하지 않았고, 마침내 해당 이슈를 resolve 할 수 있었다. 그때의 기쁨과 해방감이란! 다시 떠올려도 짜릿하다.

반응형을 적용하다

기존 애플리케이션에는 반응형이 전혀 적용되지 않은 상태였다. 우리 팀이 만들고 있는 애플리케이션은 데스크톱 애플리케이션으로서 큰 화면에서 확인하게 될 가능성이 농후했기 때문에 뷰포트의 크기에 맞게 컴포넌트나 폰트 크기가 유연하게 늘어나고 줄어들어야 했다. 나는 한 페이지씩 반응형을 적용하기 시작했다.

우리 팀은 UI 라이브러리로 Ant Design을 사용하고 있었는데, 그렇기 때문에 불가피하게 라이브러리 컴포넌트의 CSS를 직접 수정해야 할 때도 많았다. 트위터에서 어떤 분이 자신이 가장 어렵다고 생각하는 프로그래밍 언어는 CSS라고 하셨던 것을 본 적 있는 것 같은데, 그 말이 괜히 나오는 말이 아닌 것이라는 생각이 들었다. 아무리 해도 까다롭고 어려운 것이 CSS인 것 같다. Button이나 Input 컴포넌트는 그나마 커스텀하기에 수월한 편이었다. 그중 최고 난도는 Ant Design의 RangePicker였다. 하나의 컴포넌트임에도 불구하고 내부에 10년, 1년, 1달 단위로 다른 UI가 렌더링 되었고, 범위를 선택하는 컴포넌트인 만큼 선택된 범위를 표시하는 효과까지 있었다. 진짜 눈이 빠지도록 개발자도구와 vscode를 왔다 갔다 하며 확인해야 했고, 클래스 명을 하나하나 찾아내어 CSS를 적용해야 했다. 어떻게든 해내긴 했으나, 다시 생각해도 너털웃음^^이 나온다. 하하…

아직 반응형 적용 작업은 다 끝나지 않은 상태이고, 여전히 할 일이 많이 남아있다. 나는 저번 주부터 그동안 한 번쯤 써보고 싶었던 Storybook을 활용하여 반응형 컴포넌트를 분리해서 어디서든 사용할 수 있게 만드는 작업을 진행하고 있다. 애플리케이션에 렌더링 된 UI를 직접 확인하지 않고 Storybook 서버만 확인하며 테스트하고 코드를 수정할 수 있어서 편리했다. 아직 능숙하지는 않지만, 배워보고 싶었던 기술을 업무에 적용할 수 있어서 만족스럽다.

그리고 지금: 새로운 꿈을 꾸다

11월 중순, 공식적으로 정규직 전환이 되었고 명함도 받아볼 수 있었다. 약 2년간의 준비 끝에 드디어 나는 내 코드로 돈을 벌 수 있게 된 것이다.

개발자가 되고 싶다는 꿈의 씨앗이 나의 마음 깊은 곳에 심어진 날이 아직도 생생하게 기억난다. 3~4년 전 어느 날, 우연히 나는 TED 영상 하나를 시청하게 되었는데, 연사가 테크 업계의 여성 부족 현상에 관해 설명하며 사람들이 잘 모르는 과거의 여성 기술(공학)자에 대해 소개해 주는 영상이었다. 한창 진로 고민을 하고 있었던 나는 그날 저녁, 가족에게 그 영상의 내용을 설명하며 나도 IT 업계에서 일하고 싶고, 테크 업계의 작디작은 여성의 비율을 높이는 한 명이 되고 싶다고 말했던 게 기억이 난다. 사실 얘기하면서도 아주 터무니없는 꿈이고 이뤄질 가능성이 매우 적다고 생각하고 있었다. 그렇지만 그 꿈의 씨앗은 내 안에 몸을 웅크리고 있다가, 내가 예전 같았으면 그냥 지나쳐버렸을 작은 기회 하나를 움켜쥐도록 만들었다. 그게 시작이었다. 한 편의 영상이.

아직 내 꿈이 이뤄진 것은 아니다. 꿈을 이루는 여정이 시작되었을 뿐. 그렇지만 나는 새로운 꿈을 꿀 수 있는 용기를 얻었다. 단순히 마침내 취업해서 정규직이 되었다는 것이 다가 아니었다. 절대 피어날 수 없다고 생각했던 씨앗의 움튼 새싹을 보며 나는 이제 다른 터무니없어 보이는 꿈들도 꿔볼 수 있게 된 것이다. 이 용기는 앞으로 걸음마를 떼고, 경보를 하다가 조금씩 달리기 시작해서 전력 질주를 하는 그 전 과정에서 수없이 고꾸라지고 부딪히고 깨질 나를 일으키고 부축해 줄 것이라 믿는다. 여전히 두렵고 걱정되지만, 나는 내가 원하기 전까지는 이 걸음을 멈추지 않을 생각이다.

산에서 큰 돌을 굴린다고 생각해 보자. 산 정상에 멈춰있는 돌을 낑낑대며 1cm만이라도 옆으로 옮겨서 산 아래로 굴린다면, 옮기기 전에 굴린 돌과는 전혀 다른 곳에 도착해있을 것이다. 나는 스스로가 참 현실성 없는 꿈을 꾼다는 냉소적인 생각이 들 때, 나의 이 꿈과 그 꿈을 이루기 위한 노력은 산 정상의 돌을 아주 조금이나마 옆으로 옮겨놓는 일인 것이라고 생각한다. 실제로 그렇게 내가 개발자가 된 것이지 않은가. 생각이 여기까지 이르면 스스로를 비웃는 내 안의 또 다른 내가 조금 머쓱해하며 비웃음을 거둔다.

나는 위에 적은 것과는 달리, 이번 12월에 방송통신대학교에 덜컥 입학 신청서를 냈다. 하하하… 그렇지만 꿈을 이루기 위해서는 학사가 필요할 것이라고 판단했고, 전공 공부를 해보고 싶다는 생각도 했기 때문에 (당연하게도) 자발적인 선택이었다. 2024년이 많이 바쁘고 고된 한 해가 될 것 같지만, 기대가 된다. 꿈과 목표라는 게 이래서 참 무섭고 대단하다.

새해가 시작되어 새로운 꿈을 꾸는 모든 분께 이런 이야기들이 도움이 되었으면 좋겠다. 짧은 영상 하나가 내 인생의 궤도를 바꾸었듯이, 모두에게 2024년이 새로운 꿈을 꾸고 그 꿈을 향해 발걸음을 떼는 도전적인 한 해가 되기를 바라고 또 바란다. Happy New Year!