20년 넘게 웹 개발을 해온 저자가 React를 깊이 배우는 대신 진짜 커리어에 도움이 되는 실용적이고 전이 가능한 기술에 시간을 투자하라고 조언합니다.
저는 20년 넘게 웹사이트를 만들어왔습니다. 2000년대 초, 10대 때부터 XHTML, CSS, PHP로 프리랜서 웹사이트 개발을 시작했죠. 꽤 오랜 시간입니다. (이게 자랑은 아닙니다. 저보다 더 오래 일한 분들도 많고, 더 짧은 시간에 저보다 훨씬 더 뛰어나신 분들도 많으니까요.) 어쨌든 한 가지 일을 참 오래 해왔고, 그만큼 실력을 다듬는 데 많은 시간을 썼습니다. 앞으로 20년을 더 할 수도, 그 이상 할 수도, 그보다는 덜 할 수도 있지만 이제 커리어의 절반쯤은 온 게 아닐까 싶습니다. PHP 파일은 2012년쯤을 마지막으로 더이상 만지지 않았어요.
지난주, 어떤 지원자와 면접을 보는데 그분이 PHP로 코딩 시험을 봤습니다. 제가 2000년대에 쓰던 PHP와는 완전히 달라져서 알아볼 수도 없더라고요. 분명 좋은 일이겠지만, 이걸 계기로 제가 지금까지 배운 수많은 기술들, 그리고 어느새 잊혀진 기술들을 떠올리게 되었습니다. 어떤 기술이 커리어의 기반을 만들어줬고, 어떤 건 그냥 잠깐 왔다 사라졌는지 말이죠. 그리고 앞으로 남은 시간 동안 어떻게 시간을 써야 더 가치있게 커리어를 이어갈 수 있을지도 고민하게 됐습니다.
2011년부터 2017년까지는 컨설팅 위주로 일하면서 프론트엔드 실무에 좀 더 성숙한 문화를 심어주는 데 집중했습니다. 예를 들어 유닛 테스트 도입 같은 것이죠. 이때 Chai라는 아주 인기 있는 JS assertion 라이브러리의 핵심 유지보수자(core maintainer)로 활동하기도 했습니다. 요즘에는 Jest, @web/test-runner
, Deno나 Node의 내장 테스트 도구들이 있지만, 핵심은 크게 다르지 않다고 느낍니다. Chai를 관리하며 JS의 내부 뿐 아니라 '테스트란 무엇인가', '코드를 어떻게 검증하는가'를 깊이 배울 수 있었습니다. 다양한 실패 상황, 경계, 불변조건 등을 고민하게 됐죠. 이런 경험은 커리어 전체를 성장시켰고, 다양한 프로젝트로 확장할 수 있는 ‘전이 가능한’ 지식이었습니다.
컨설팅할 때 테스트만 한 게 아니라 프론트엔드 전반 — Backbone, Angular, Ember, 그리고 내가 컨설팅을 떠나기 전엔 React까지 다 다뤘습니다. React로 여러 대형 프로젝트를 런칭하는 걸 도왔고, 그중 하나로 Economist의 React 도입 초기 작업을 리드했습니다. 하지만 2017년부터는 컨설팅이 지겨워져서 GitHub에 합류했고, 거기서 2023년까지 React는 거의 손대지 않고 Ruby랑 "바닐라" JS로 개발했죠. 그런데 최근 다시 React 코드와 마주하게 됐습니다. 6~7년 React와 거리를 뒀던 그 사이에 React는 완전히 달라져 있었습니다. 불과 10년 전쯤 만든 앱과는 전혀 다른 느낌이었죠. "hooks"의 등장 덕분에 2024년의 React는 2018년의 React와도 완전히 다릅니다. 예전 React로 만든 앱에서 배웠던 것들 중에 지금 이 새로운 React에서 쓸 만한 ‘전이 가능한 지식’이 별로 없는 것 같습니다.
그래서 고민이 생겼습니다. 이 ‘새로운’ React를 다시 제대로 배울 가치가 있을까요? 제 동료들 중엔 hooks의 규칙을 정말 잘 아는 분들도 있는데, 이게 너무 React만의 독특한 생태계 같아요. 다른 프레임워크나 툴은 명백히 "React를 따라하겠다" 할 때만 채택할 뿐, 고유성만 강하지 다른 데서는 통하지 않는 기술입니다. 저는 이 전이 불가능한 기술에 시간을 쏟고 싶지 않습니다.
React 지지자들은 새로운 React가 "함수형" 패러다임을 가르쳐준다고 할지 모르겠습니다. 저도 함수형 언어들을 조금 만져봤지만 monad 같은 패러다임과 React 사이에 닮은 점을 못 느끼겠더라고요. React는 함수형 프로그래밍(FP)이 아닙니다. React 컴포넌트에서 hook을 사용하면 프레임워크 런타임에서 실행하지 않으면 Invalid hook call
오류가 나요. 겉은 함수형처럼 보여도 결국은 글로벌 상태(global state)에 코트만 걸친 셈이죠. 커리어의 남은 시간에 이런 가짜 함수형 패러다임에 시간을 허비할 바엔, Haskell이나 Elixir 같은 진짜 함수형 언어를 배우는 게 낫다고 봅니다.
React 지지자들은 React가 현대적인 UI를 가르쳐준다고도 합니다. 근데 제가 보기엔 오히려 현대적인 UI에 제대로 대응하지도 못합니다. autofocus
도 제대로 안 되고, 커스텀 엘리먼트도 실험적 버전 빼고는 안 되고, <dialog>
나 popover 같이 "최신" 기능을 쓰려면 반드시 useEffect
를 써야만 하고, React의 synthetic event 시스템은 DOM이 실제로 어떻게 작동하는지 거의 가르쳐주지 않습니다. 이런 건 현대적인 UI가 아니라 딱 React가 처음 나온 2013년 수준의 UI에 가깝죠. 오바마가 대통령이던 시절에서 별로 진화하지도 않은 UI 패러다임을 배울 시간, 제게는 없습니다.
초년 개발자들에게 멘토링을 하다보면 "무엇을 배워야 하냐"는 질문을 듣습니다. 저는 React를 배우라고 권하지 못하겠어요. 시간이 부족합니다. 물론 React를 살짝 배워서 연봉 나오는 일자리를 얻는 건 괜찮다고 봅니다. 하지만 그 이상으로 더 나은 개발자가 되는 데 React는 큰 도움이 되지 않습니다. 5천~1만 불만 있어도 누구나 부트캠프를 거쳐 기본은 배울 수 있고, 어찌저찌 면접도 통과할 수 있습니다. 하지만 이 업계는 너무 경쟁이 치열하고, 부트캠프 출신인지 아닌지는 보통 면접 때 금방 드러납니다. 차별화하려면 이런 기본기를 익히세요:
JavaScript를 TypeScript나 React 없이, 또는 Ruby나 Python 같은 또다른 동적 언어를 익히세요. 가능한 적은 의존성으로 시작해보세요. 그런 건 나중에 익혀도 늦지 않으니, 초보자에겐 오히려 셋업만 더 어렵게 하고 진도를 방해할 뿐입니다. Node로 서버를 만들고 express 하나만 추가하거나, Rails 앱에 덕지덕지 붙여보거나, Web Components나 바닐라 JS로 프론트엔드를 뚝딱 만들어보세요. 원하는 분은 jQuery를 써도 됩니다. 이렇게 앱을 만들 수 있는 정보는 차고 넘치고, 번들러나 수많은 상태관리 라이브러리 고르다가 쓸데없는 고민에 빠질 일도 없습니다. 프레임워크를 피하고 범용적인 핵심기술을 익히면 어떤 UI 프레임워크로 옮겨가도 두루두루 쓸 수 있는 전이 가능한 실력을 갖추게 됩니다.
강타입 시스템 언어 하나쯤은 익혀보세요. 가능하면 최신 문법을 지원하는 언어로요. 아직도 많은 컴퓨터공학 수업에서 Java나 C++를 가르치지만, 배우기도 답답하고 채용시장에서도 경쟁력이 예전보다 약합니다. Golang, Zig, Rust를 추천합니다. 이 언어들로 CLI(command line app)를 하나 만들어 보세요. 강타입 언어를 배우면 TypeScript처럼 의외로 실용적인 타입 시스템을 가진 언어도 훨씬 수월하게 익힐 수 있습니다. 시스템 언어를 배우는 건 메모리 관리의 기본을 이해하게 해주고, 동적 언어의 내부가 어떻게 돌아가는지도 감 잡는데 큰 도움이 됩니다.
스펙(specification, 명세서)을 꼭 읽어보세요! HTTP 1.1, HTML, CSS, 데이터베이스, WiFi 같은 명세를 실제로 읽고 이해하는 것만으로 주변 동료보다 훨씬 앞서 나갈 수 있습니다. 명세를 읽으면 실무에 바로 쓸 수 있는 알짜팁도 얻을 수 있어요. MQTT 명세는 분량도 적당하면서도 정말 잘 정리된 효율적인 명세서로 읽는 재미가 있습니다. 명세서를 너무 지루하게 느낀다면 HIG(휴먼 인터페이스 가이드라인)도 읽어보세요. Apple HIG, Gnome HIG 등은 인간과 컴퓨터의 상호작용에 대해 실용적으로 배울 수 있는 자료입니다. ARIA APG, WCAG Guidelines도 꼭 읽어보세요. 접근성 높은 UI를 만드는 법을 알려주고, 실무에서 엄청나게 강한 무기가 됩니다. RTFM, 정말 통합니다.
오픈소스에 기여하세요. 멘토링과 학습 환경이 좋은 훌륭한 프로젝트들이 많아요. 고객에게 실제로 출시하는 경험만큼 전이 가능한 스킬은 드뭅니다. 오픈소스는 네트워크 구축에도 아주 좋습니다.
제 생각엔, 위에 있는 과정 중 일부(또는 전부)를 해본다면 시간을 더 효율적으로 썼다고 자신있게 말할 수 있을 겁니다. React를 배울 시간 없습니다(연봉 받으려면 조금은 익히셔도 좋지만!). 대신 여러분 커리어에 진짜 도움이 될 무언가를 배우세요.