2022년 돌아보기

목표·학습·번아웃을 지나며 개발자로서 방향을 찾았던 2022년의 기록.

Career, Retrospective, Learning, Burnout

머릿말

2022년은 하고 싶은 것이 명약관화해졌다.

오래도록 흥미를 갖고 할 수 있는 것이 무엇이고, 내가 잘하는 모멘트를 오래도록 살릴 수 있는지, 그런 질문들. 물론, 후에 돌아보았을 때 그때의 답안지라며 제출한 것이 정답이 아닐 수도 있다는 암시 정도는 하고 있었다.

나름 꾸준함을 유지하려 노력했던 흔적들 by wakatime
나름 꾸준함을 유지하려 노력했던 흔적들 by wakatime

1년 정도의 적잖은 시간이 흐른 지금 돌아보면, 자명할 순 없지만 아직까지는 성공적인 것처럼 보인다. 그 시간 속에서 크고 작은 목표의 설정이 있었고, 이 크고 작은 퀘스트들의 달성을 위한 레벨 업을 위해 노력했다.

물론 대부분의 퀘스트에서 나는 스스로를 너무나도 옳아맸고, 그 결과로 지나오는 시간 동안 번아웃과 많이 친해지기도 했지만, 적어도 그때마다 당장 내일 내디딜 수 있는 곳이 한계는 아니어야만 했다.

1월, “이번 역은 ‘UI’ 입니다”

항상 시각적으로 드러나고 형태를 지니는, 비주얼적인 모든 것이 재밌고 즐거웠다.

마침 지닌 있는 능력들을 비교해 봤을 때, 그쪽이 가장 강점이 있다는 것도 어느 정도 깨달았다. 그래서 전공도 패션 디자인이었다. 하지만 비전과 적성, 재능에 대해서 보다 깊이 고민하며, 조금 더 정제시킨 결과, 도달하게 된 곳은 사용자 인터페이스라는 스테이션이었다.

하지만, 이 스테이션에서 큰 고민이 생겼다.

시각적으로, 직관적으로 무언가를 디자인하는 시간은 항상 즐거웠다. 실제로 시각적인 부분을 프로토 타이핑하는 것은 정말 즐거운 일이었지만, 그것을 실체화시키는 프론트엔드 엔지니어링 또한 매력적이었다. 로직을 갖추고 쓰인 코드가 웹으로 형태를 갖추며 보이는 것은 경험해 보지 못했던 아름다움이자, 순수한 몰입을 했던 시간들이었다.

스스로에게 최소한의 증명이 필요했던 걸까.
스스로에게 최소한의 증명이 필요했던 걸까.

둘 다 너무 매력적이었고, 선택의 신중함을 위해 당장 결정하는 것을 유보하고 싶어서 봤던 웹디자인 기능사는 합격했고 텝스 시험도 마치며, 결정해야 하는 시간은 도래했다.

2022년 중, 상대적으로 가장 여유 있었지만, 머릿속은 빽빽했던 때가 아닐까.

2월, 역사 밖으로

그래서 많이 찾아보고 자주 되짚어봤다.

실제로 프로덕트나 서비스를 사용하며, 스스로 어떤 불편함, 혹은 개선점을 떠올리고 그것을 바꿀 수 없을까에 대한 고민을 나는 꽤 자주 했던 기억이 있다. 그 모멘트를 실제로 구현할 수 있는, 생각에 그치던 것들을 가장 효율적으로 실현할 수 있는 포지션은 뭘까. 이렇게 선지는 하나로 줄었다.

얼마나 길게 숨을 참고, 얼마나 잘 맞고, 가진 부분들을 여기서 발휘할 수 있을지는 모르겠다. 그렇지만 멈춰 있을 수는 없었기에 결정을 했고, 스스로 디벨롭에만 전념할 수 있도록 평소의 크고 작은 취미 같은 것들도 줄여가고, 포터블하고 성능도 훌륭한 맥북 프로도 구입하며 그렇게 오래도록 달릴 열차의 바퀴와 엔진을 정비했다.

이제 준비는 끝났고, 얼마나 길 지 모를 시간동안 호흡을 참기로 했다. 작년에 너무 복잡하다고 생각했던 Node.js를 제대로 파고들고, 리액트와도 다시 마주하기로 했다.

3월과 4월, 비어 있는 젠가 탑 채우기

HTML, CSS, JS에 대한 어느 정도의 — 지금 보면 매우 미숙한 — 수준은 작년에 부분적으로 마주했고, 웹디자인 기능사 시험에서도 나오는 이야기들이라 알고 있었고, 노드도 한두 번 훑고 나니 자신감이 생겼다.

하지만, 리액트 튜토리얼을 간단하게 맛보고 느낀 것은 구조 분해 같은 최신 JS 문법들이나, 자주 사용하게 되는 메서드 같은 것들이 익숙하지 않았다는 점은 더닝 크루거 곡선의 꼭대기에서 탈출시켜주었다.

모르는 것이 나올 때마다 기록한 내용들.
모르는 것이 나올 때마다 기록한 내용들.

물론 그 외의 언어적인 부족함도 깨달은 점이 있었기 때문에 조금 더 채울 방법을 고민하던 중, 코딩 테스트를 위한 알고리즘 문제를 푸는 것만큼 다양한 언어 기능과 메서드에 친숙해지는 방법이 없고 언젠가 넘어야 할 벽이었기에, 자료 구조와 알고리즘을 공부하며 JS로의 딥 다이브를 하기로 했다.

이때는 Notion에만 기록했었다.
이때는 Notion에만 기록했었다.

그래서 유데미에서 강의를 들으며 다양한 자료 구조와 알고리즘을 자바스크립트의 클래스 기능을 이용해 구현해 보고, 문제도 하루의 정량을 정해두고 매일 풀었다.

간단한 스택과 큐, 이진 탐색 같은 것들부터, 우선순위 큐, 트라이 같은 자료구조와, 다익스트라같은 알고리즘까지. 그리고 책도 사서 틈틈이 읽으며 부족한 부분을 채우려 노력했다.

이때 정리해 기록해둔 것들은 나름 정리를 잘 해두었기에 아직까지도 필요할 때 보곤 한다. 어딘가에 공개해 둔 그런 건 아니지만, 나만의 아카이브 같은 게 된 것 같다.

5월, 6월과 7월, 우물 안 개구리의 바깥 내다보기

이제 쉬운 문제들 — 사실 굉장히 쉬운 — 은 곧잘 풀게 되었고, 리액트도 정말 기초 정도는 다룰 수 있게 되었다. 이 자신감을 갖고, 홀로 Public API를 제공해 주는 음원 사이트를 기반으로 간단한 리액트 프로젝트 하나를 시작했다.

나름 노트에 레이아웃도 잡아보고, 와이어 프레임도 그려보고, 라우팅도 설계했다. 하면서 조금씩 변경되는 것들도 있었기도 했지만, 지금 보면 그때의 시야는 너무 좁았지만 그래도 시야 안에서 구현할 수 있던 것들은 많이 구현하려 했었다고 생각한다.

처음에 작성했던 포스팅들.
처음에 작성했던 포스팅들.

이와 동시에, 평소에는 아직 아는 것이 많지 않아 기술 블로그를 쓰고 싶은 마음만 있는 상태였는데, 해보지 않은 것들을 해보며 겪었던 케이스들에 대한 솔루션이나, 코딩 테스트 문제 풀이라도 꾸준하게 공유하면 좋을 것 같다는 생각이 들었고, 미디엄에 블로그를 개설해서 포스트를 작성하기 시작했다.

혼자서 무언가를 디벨롭 한다는 것은 어려운 일이었다.
혼자서 무언가를 디벨롭 한다는 것은 어려운 일이었다.

아무튼 그렇게 프로젝트 하나를 완성하고, 이전에 만든 리액트 튜토리얼을 이용한 프로젝트로 포트폴리오를 만들어 G 회사의 인턴을 뽑는 공고에 처음 지원했었다.

사실 이때, 마감일이 껴있는 주에 프로젝트가 마감될 예정이었는데 구현하려던 기능에 대한 에러와, 개발 환경과 배포 환경의 괴리에서 생긴 에러 때문에, 꼬박 일주일 밤을 새우고 마감 전날은 아예 24시간이 넘게 VS Code 안에서 살며 마감일에 맞춰 겨우 서류를 제출했던 기억이 있다. 전공이 전공이니만큼 학부 생활도 비슷했었어서, 야작이 아침까지 이어지는 게 어색하진 않았다.

물론 당연한 얘기지만 한 단계도 넘어가지 못했다. 첫 단추를 꿰었더라도 어디서든 떨어졌을 테니, 지금 생각해 보면 고맙게도 더 공부할 시간을 마련해 준 셈이라고 생각한다. 그런 서류가 붙었을 리가 없다.

그래서, 조금 더 레벨 업을 하기 위해 올라와 있는 공고들을 보고 분석하며 내가 갖춰야 할 기술에 대해서 데이터를 수집했다.

그렇게 타입스크립트를 배웠고, 이 타입스크립트를 연습하기 위해서, 바닐라 타입스크립트 환경에서 Redux를 연습하고, 리액트에서도 타입스크립트를 사용해 Redux를 활용하는 것을 연습했었다.

부실하지만, 처음으로 친구들에게 보여주었던 프로젝트.
부실하지만, 처음으로 친구들에게 보여주었던 프로젝트.

6월 말에 배운 타입스크립트를 리액트에서 보다 실전처럼 시연해 보기 위해 ‘Trello’같은 할 일 목록 보드 애플리케이션을 만드는 프로젝트를 했었고, Redux가 아닌 Recoil 같은 새로운 라이브러리도 접해봤다. 이때도 배포하면서 태양이 한 바퀴 도는 것을 종종 보곤 했다.

지금도 여전히 열심히 쓰고 있다.
지금도 여전히 열심히 쓰고 있다.

그리고 이때 즈음, 지나오는 여정 속에서 배우고 알게 되는 부분에 대한 기록은 꾸준히 하고 있었지만, 스스로의 꾸준함에 대한 시각적인 척도를 만들기 위해 ‘Today I Learned’라는 이름 하에 어느 정도의 규격화를 시켰다.

이와 동시에, 매일은 아니지만 여전히 꾸준하게 알고리즘 문제를 풀고 있었고, 자만하지 않고 나의 수준에 대해 보다 더 객관적인 판단을 할 수 있도록 우아한 테크 캠프나 부스트 코스 같은 코딩 테스트를 보는 부트 캠프에 지원하고 시험을 응시했었다.

이 과정 속에서 소소하게 합격하는 작은 단계들이 적잖은 동기 부여를 주었던 것 같다.

8월, 탈진했지만 쓰러질 순 없는

넷플릭스의 랜딩 페이지는 정말 아름답다. 인터랙션과 사용자 경험도 너무 좋은 편이라고 생각한다.

그래서 이를 클로닝 해보기 위한 ‘앳-플릭스’라는 이름 하에 프로젝트를 했었다. 이 프로젝트에서 사용한 인터랙션 라이브러리에 대한 이야기를 하기 전에, 먼저 할 이야기가 있다.

내가 학생이었을 때, T 회사의 애플리케이션이 출시되었는데 당시 꽤나 혁신적이었기에 다들 사용했고 나도 그중 하나였다. 그땐 이렇게 될 줄 몰랐겠지만 현재 이 회사는 엄청나게 큰 회사가 되었고, 작금의 꿈이 향하는 회사이기도 하다.

여전히 이 회사의 애플리케이션은 사용자 경험이 좋다고 느끼고, UX가 철저히 고려된 카피 라이팅과 인터랙션은 특히나 강점이라고 생각했다. 그래서 평소에 이 회사가 사용하는 기술에 대해서도 관심이 많았는데, 그중 ‘Framer-motion’이라는 인터랙션 기술이 있었고, 이 기회에 이를 도입해 봤다.

생각했던 것보다 복잡했지만, 이후 언젠가 개인적으로 틈틈이 꾸준하게 키워갈 프로젝트에 꼭 도입하고 싶은 기술이라는 생각이 들 정도로 다양하고 화려한 인터랙션을 직접 구현하는 것보다 훨씬 쉽게 구현할 수 있게 해줬다.

시간이 흘렀음에도 아직 마음에 든다.
시간이 흘렀음에도 아직 마음에 든다.

이 프로젝트도 Public API를 통해서 만든 애플리케이션이었는데, React-query를 이용한 캐싱 전략으로 서버의 트래픽은 줄이면서 사용자 경험은 향상시키는 훌륭한 스킬도 알게 되었다.

사소하지만 작품을 클릭했을 때 트레일러 영상이 있다면 포스터만 보는 너무 정적인 모달보다는, 보다 동적으로, 영상으로 볼 수 있게끔 하는 플레이어도 만들었었다.

그리고 한창 기술과 기술을 사용하는 방법에 대한 관심이 싹트는 때였는데, 리디 유튜브에서 본 아토믹 디자인 시스템 — 그때는 이것이 정확히 무엇인지 몰랐다 — 이 너무 괜찮아 보여서 이 아키텍처의 구조도 차용했던 기억이 있다.

또한 평소 관심이 있기도 했고, 해당 회사의 게임도 나름 즐겨 했던 전적이 있던 P 회사의 인턴 공고를 보며, 위의 ‘앳-플릭스’ 프로젝트를 배포한 후에 지원하려 했다.

그렇지만, 한 번 눈을 뜨고 두 번의 해를 보는 것을 반복하며 호흡을 길게 참아온 탓인지 이때 드디어 탈이 났다. 이번에 걸린 편도선염은 너무나도 독했고, 거의 보름 가까이 40도를 넘나드는 열에 정신은 온전하지 못했다.

이 때는 이 스노우볼이 구를 줄 몰랐다.
이 때는 이 스노우볼이 구를 줄 몰랐다.

그래도 절실했기에, 잠깐의 약 기운에 온전해질 때면 그 잠깐을 이용해 기능이나 UI를 하나씩 구현하고, 자기소개서와 이력서를 써 내려가는 것을 반복하며 결과적으로 프로젝트도 애플리케이션 배포까지 해냈고, 제출도 성공했다.

스스로의 실력에 대한 의심과 앞으로의 갈피를 잡기 어려울 때 도착한 소식.
스스로의 실력에 대한 의심과 앞으로의 갈피를 잡기 어려울 때 도착한 소식.

거짓말 같았다. 부상을 인내했던 불굴이 담당자에게 동하기라도 한 걸까? 어쨌거나, 이렇게 되었으니 다음 챕터를 준비할 차례였다.

연이은 프로젝트에 우선순위가 밀려있던 알고리즘 문제를 풀며 남은 기간이 얼마 없었지만 감을 끌어올리기 시작했고, 8월의 마지막 날을 하루 앞두고 응시했다. 최선은 다했지만 가능성은 희박하다고 생각했다.

9월, 큰 숨을 들이마시며

혹시 하는 마음이 들기 시작했다.
혹시 하는 마음이 들기 시작했다.

이럴 리 없었다. 최선은 다했다만, 최선이 항상 최고가 될 수는 없지 않나. 여태까지의 참아온 긴 숨에 대한 보상을 받는 기분이었다.

다음은 면접이었지만, 나는 이 분야에서 면접을 본 적이 없다. 그래서 열심히 찾아보며, 스크립트를 써보기도 하고, 자기 PR 연습도 하면서 면접을 위한 주문을 걸었다.

하지만 엄청난 압박감에 여기까지 오게 해준 것만 해도 감사하다는 생각도 하게 되었고, 어서 붙던 떨어지던 빨리 쳐냈으면 좋겠다고 생각했었다. 그리고 결전의 순간은 다가왔다.

그래도 아쉽다.
그래도 아쉽다.

여러 개가 왔으면 하는 메일은 단 한 통이 도착했고, 결과는 불 보듯 뻔했다. 물론, 면접 보면서도 알고 있었지만, 공식적인 결과로 보게 되니 아쉬움이 커졌다.

이 글을 쓰는 지금도 아쉬운 건 여전하지만, 생각은 달라졌다. 그때의 면접관 두 분이 이 글을 보실 리 없겠지만, 혹여나 보신다면 매우 감사하다고 전해드리고 싶다.

사용하는 도구는 같을지언정 내가 하려던 직무가 아니었다. 그때는 ‘그럼 어떤가, 결국 내가 할 수 있는 부분이고, 일하면서 내가 다른 부분의 역량도 홀로 키워나가면 되지 않을까?’ 라고 생각했었는데 긴 호흡을 참아오며 지쳐서 드는 생각이 아니었나 싶다.

하지만, 결과가 이러해도 괜찮았다. 이 덕분에 스스로의 가능성의 희미하다고 판단하려 하던 나에게 다시 긴 호흡을 참기 위한 산소가 되어주었다.

그리고 보다 나은 실력을 위해 클라이언트가 아닌 서버의 역할도 이해해야 한다고 생각했고, 노드와 익스프레스는 마침 리액트의 풀스택 프레임워크인 넥스트가 인기 있다는 것이 드러나기 시작했던 것으로 기억한다.

그렇게 넥스트를 배워서 풀스택으로 무언가를 해보고자 했고, 다시 알고리즘 문제도 잡았다.

10월, 선택과 집중

넥스트로 D 회사와 B 회사 같은 거래 서비스를 만들어보고 싶었지만, 한창 대기업들의 하반기 공개 채용이 시작되던 시기였다. 놓치기 아쉬운 귀한 경험이라 생각해 이력서와 자기소개서를 다듬어 기라성 같은 회사들에 지원하고, 서류 합격도 경험해 보고, 실제로 코딩 테스트도 거의 매주 보게 되었다.

하지만 이력서와 자기소개서를 작성하고, 작성했던 것을 개선하고, 코딩 테스트 준비에 매진했지만, 결과는 전부 도착과 완성이라는 키워드와는 거리가 있었다.

큰 폭풍이 지나가고 나서 확실히 여러 가지를 동시에 하기란 현실적으로 어려움을 깨닫고, 알고리즘 문제는 추후에 제대로 준비하기로 하고, 공채 지원과 코딩 테스트 준비로 인해서 내려놓았던 넥스트 기반의 프로젝트로 선택과 집중을 하기로 했다.

11월, 대회전

그렇게 프로젝트로 선택과 집중을 한 결과, 잡다한 수정을 조금 하면, 배포할 수 있는 단계까지 이르렀다.

그렇지만 아키텍처가 깔끔한 것은 아니었기 때문에, 레이지 로딩과 서스펜스를 적용하기 위해서는 대규모의 리팩터링이 필수적이었고, 또다시 일주일의 시간 동안, 대부분의 취미와 사치를 포기하며 그나마 평소 즐겨 하던 운동마저 내려두고, 전부를 리팩터링으로 보냈다.

진즉 해볼 걸 그랬다.
진즉 해볼 걸 그랬다.

이때 라이트하우스 측정 도구도 처음 써봤는데, 어떤 부분에서 크래시나 지연이 발생하는지 쉽게 알 수 있어 정말 괜찮았다.

시답잖은 버그 픽스를 위해 넥스트 공식 기술 문서를 매일같이 읽으며, 리팩터링한 코드 베이스가 여전히 임시방편에 불과하며 복잡하고 더럽다고 생각하여 이대로 배포하기보다는 한 번 더 엎고 싶다는 고민을 하던 와중에, NHN Toast UI의 아토믹 디자인 시스템에 대한 포스팅을 보게 되었다.

너무 신선한 패러다임이었고, 아키텍처였다. 정말 나에게 딱 필요한 시스템이었지만, 이 프로젝트의 애플리케이션이 실제 유저의 트래픽을 확보하며 실제 상용 애플리케이션의 레벨까지 도달하긴 어렵겠다고 생각했다.

하지만, 겉으로 드러나는 것도 중요하지만, 지금 내가 뻗어가야 할 방향은 보이는 코드도 중요한 포지션이라고 생각했다.

내가 프로젝트 총책임자로 일하지 않을 수도 있고, 진행 중인 프로젝트를 맡아야 할 수도 있으며, 내가 맡던 프로젝트를 누군가에게 인계해 줘야 할 때도 있는데, 이렇게 나만 이해하고 있는 코드는 코딩 스타일에는 정답이 없다지만 스스로 부적절하다는 판단을 내렸다.

그렇게 대규모로 리팩터링 한지 이틀 만에, 아예 아키텍처를 갈아 끼우기로 결정했다. 또 편도선염이라는 탈이 났지만 말이다.

12월, 크리스마스의 불꽃 놀이는 콘솔에서

회복한지 얼마 지나지도 않았지만 한 달간 정상적인 시간에 자본 적이 거의 없었다. 물론 평소에도 그랬지만, 평소보다 더. 여전히 운동은 꾸준히 나갔지만, 빈도는 확실히 줄었다.

아토믹 디자인 시스템에 대한 이해를 올리기 위한 노력들을 하고, 레퍼런스들을 찾아보고, 기존의 더티한 코드 베이스에 적용하면서 생기는 차이에 의한 트러블슈팅도 해야 했다.

그리고 이때, 자료를 찾다가 카카오 웹툰에서 작성한 Tailwind CSS를 CSS Module 스타일로 적용해서 성능을 비교한 포스트를 봤다. 마침 이 프로젝트에서도 Tailwind CSS를 사용하고 있었지만, Tailwind CSS의 클래스 네임이 길어지는 것도 그렇고, 재사용성도 떨어져 컴포넌트 코드의 가독성이 아쉬웠다고 생각했던 참이라, CSS Module 스타일도 함께 적용시키는 방향으로 수정했다.

이 밖에도, 전체적으로 일관성 있는 인터페이스 디자인 기준과 조금 더 사용자 경험을 개선할 수 있는 모멘트를 찾아서 변경한 부분들이 많았다.

코드와 코드가 만들어낸 것 모두 마음에 들게 된 프로젝트.
코드와 코드가 만들어낸 것 모두 마음에 들게 된 프로젝트.

그렇게 한 달 여의 시간이 흐르고, 2022년의 마지막 날, 배포에 성공했다. 물론 그 후 1월에도 자잘한 버그 픽스 같은 것들이나, 소소한 기능의 추가 같은 것들이 있긴 했지만, 사실상 그 날이 릴리스라고 보는 것이 맞을 것이다.

Boom!
Boom!

배포 후, 개발 환경이 아닌 프로덕션 환경에서의 라이트하우스 측정도 그야말로 대성공이었다. 이것이 곧 웹페이지의 퀄리티의 전부를 대변할 수는 없겠지만, 어쨌거나 어느 정도의 퀄리티는 보장된다는 것이라고 해석할 수는 있으니 아키텍처를 갈아 끼우는 실험에 대한 썩 괜찮은 성적표를 얻게 된 것 같았다. 전부 다 100점을 달성하면 폭죽이 터진다는 깨알 같은 위트도 알게 되었다.

11월 중순부터 대규모의 리팩토링을 두 번을 연달아 하며, 알게 된 지식들이 너무 많았다. 비약이겠지만, 이때를 기점으로 이전에 배워온 것들보다 이때 느낀 것이 많다고 느낄 정도였고, 1년 동안 배워온 것들을 모조리 연결하고, 총망라하는 느낌도 같이 들었다. 그래서 리팩토링에 집중하며 얻은 지식과 떠올랐던 생각들은 추후에 업로드할 심산으로 따로 기록하고, 정리하고, 레퍼런스들을 모아두었고, 얼마 전에 모두 업로드했다.

끝?

5월부터 기록을 시작한 것이 아쉽다 by Github
5월부터 기록을 시작한 것이 아쉽다 by Github

VS Code 안에서, 나의 1년은 흘러갔다. 1,000개에 달하는 깃허브 커밋을 했고, 70개의 미디엄 포스팅을 작성했다. 6개의 크고 작은 프로젝트를 해냈고, 320개가 넘는 알고리즘 문제를 풀었다. 깃허브에 기록하지 않은 문제들이나 코딩 테스트에서 풀어본 문제도 경험이라고 이야기한다면 400개는 훌쩍 넘을 것이다.

그 속에서, 가능하면 유수의 대기업들과 IT 회사들에 지원하며 더 나은 자기소개서, 코딩 테스트 경험, 면접 결과에 대한 데이터를 쌓기도 했다.

Public API에 의존하는 프론트엔드 애플리케이션이 아닌, 풀스택 애플리케이션을 시작부터 배포까지 홀로 만들어보기도 했고, 이 과정 속에서 아키텍처를 바꾸며 삽질도 하고, 성능 향상도 경험해 보았다. 다른 모르는 개발자에게 깃허브 스타를 받는 기쁨도 느꼈다.

2022년의 기록들 by wakatime
2022년의 기록들 by wakatime

그리고 그렇게 지금, 숨가쁘게, 멀리도 왔다. 이제 어딜 가서 지망생이라고 어림해서 이야기하는 것 쯤은 괜찮지 않을까.

HTML과 CSS는 직접 그리지 않아도 코드라는 텍스트로서 웹 페이지가 완성되는 희열을 알 수 있게 해주었고, 자바스크립트는 그런 웹 페이지가 반응할 수 있게끔 만들어 재미를 배가시켜줬다.

React.js는 더 복잡하지만 아름다운 웹 애플리케이션을 쉽게 작성할 수 있도록 만들어주었다. 사실 React.js를 배우기 전에, 쉽다는 이야기에 현혹되어 Vue.js를 먼저 접해봤지만 문법이 너무 어렵다고 느낀 바람에 리액트를 선택해 익히게 되었다. 지금은 React.js를 이용한 프로젝트 경험이 충분히 생겼고, React.js가 Virtual DOM을 이용해 브라우저의 레이아웃 계산 비용을 줄인다는 획기적인 원리도 알았다. 하지만 역설적으로 그렇기에 이 기술은 보이는 것보다 훨씬 복잡하다고 생각하고, 내가 이 기술을 정확히 알고 쓰는 걸까에 대한 의구심이 작게나마 항상 있다.

Redux를 비롯한 상태 관리 도구들은 접했을 당시에는 너무 어려웠다. 스토어, 액션, 리듀서, 블라블라, 그나마 Recoil이 React hooks와 유사해서 사용하기 편리했었다. 그래도 지금은 React Context API도 그렇고 소위 ‘프로처럼’은 아니지만 곧잘 쓰곤 한다. 이걸 몰랐다면 React 앱 컴포넌트의 가독성은 저 세상으로 가지 않았을까? 하지만 스스로는 여전히 엄청나게 유용하게 활용하고 있지는 못한다고 생각해서 잘 쓰고 싶은 기술 중 하나이다.

타입스크립트 또한 좋은 개발 경험을 주었다. 물론 자바스크립트를 좋아하지만, 나도 사람인지라 런타임 시에 에러가 생기지 않는다고 완전히 배제할 순 없다. 그런 나에게 타입스크립트는 가비지 컬렉터마냥 안전성을 엄청나게 올려주었다. 제네릭 같은 것 외엔, 문법도 거의 동일해서 익숙해지는데 그리 오래 걸리지도 않았다.

Styled-Components도 빼놓을 수 없다. CSS를 자바스크립트로, 자바스크립트 파일에 작성할 수 있다니. 말 그대로 UI 컴포넌트를 모듈처럼 다룰 수 있다는 점은 정말 신기했고, 덕분에 UI와 로직을 처음으로 분리해보는 경험도 해볼 수 있었다.

React.js 다음 익힌 Next.js는 내게 있어서 혁신이었다. 라우팅도 너무 편리했고, 같은 React.js 기반의 프레임워크라서 이전에 React.js 프로젝트에서 이용했던 라이브러리를 이용하던 대로 이용할 수도 있었다. 지금에야 React.js도 서버 컴포넌트 기능이라는 이름으로 SSR을 지원하지만, 그 때는 CSR, SSR, SSG를 전부 지원하기 때문에 배울 것도 많고 복잡하기도 했지만 그만큼 강력함도 알게 되었다. Vercel을 통한 빌드 및 배포 자동화까지, 정말 만족스러운 개발 경험을 얻었다고 느낀다. 언젠가는 Svelte, SolidJS, Astro, Qwik 같은 기술이 메인스트림이 될 수도 있지만, 그 전까지는 아마 계속 이 Next.js를 사랑할 것 같다.

추신

한 해를 돌아보는 글이다 보니 최대한 눌러 담아 쓰려 했음에도 불구하고 긴 글이 되었는데, 여기까지 읽어준 모든 분들께 소소한 감사의 마음을 전합니다.

올해도 행복한 한 해를 보내시길 바랍니다.


원문: Medium