State of JS 2023 결과가 발표되었습니다!

sejin·2024년 6월 23일
post-thumbnail

들어가며

며칠 전인 6월 21일, State of JS 2023의 결과가 발표되었습니다. 지난 23년 11월 22일에 시작해 12월 12일까지 진행되었던 설문조사였는데, 이미 올해의 절반이 지난 지금에서야 결과가 발표된 것입니다. 이에 대해 그동안 꽤나 이런저런 이야기들이 많았는지, 발표 서문에서는 '이전 대비 많은 비정형 데이터들을 수집하고, 데이터를 시각화하는 코드베이스를 재작성하는 등의 작업을 수행하느라 늦어졌다'며 지연 사유를 해명하기도 했습니다.


여기서 잠시 State of JS가 무엇인지 잘 모르시는 분들이 계실 수 있어 간단히 설명하자면, 전 세계의 JavaScript 개발자들을 대상으로 공개 온라인 설문조사를 실시하여 응답 데이터를 취합, 분석한 결과 자료를 발표하는 프로젝트입니다.

설문조사는 메일링 리스트, SNS 등을 통한 자발적인 참여로 진행되기 때문에, 표본의 크기가 절대적으로 큰 것은 아닐 수 있으나 결과적으로는 충분히 유의미한 수준이고(이번 설문조사에서의 총 응답자 수는 23,540명이었습니다), 설문 문항에 대해서는 Github 등지에서 피드백이 이루어지며, Google 등으로부터의 지원(스폰서)을 받고 있는 등 2016년 이래로 많은 관심을 받고 있어 매년 웹 개발, JavaScript 생태계의 동향과 추이를 살펴볼 수 있는 영향력 있는 프로젝트라고 할 수 있습니다.

또한 State of React, State of CSS 등 다른 기술에 대한 설문조사도 존재하니 관심이 있으시다면 살펴보시는 것을 추천드립니다.


아래에서 이어지는 내용에서는, 이번 설문조사의 항목별 결과들 중 JavaScript 개발자로서 주목해볼 만한 몇 가지 내용들을 추려 간단히 살펴보고자 합니다. 전체 설문 문항들은 다음의 링크에서 살펴볼 수 있으며, 응답 결과 또한 링크에서 직접 확인해보실 수 있습니다. 한국어 번역은 여러 기여자분들이 참여하고 계신 것으로 보이나 아직 글 작성 시점에서는 완전하지 않은 것으로 확인되고 있습니다.






설문 결과 살펴보기

정적 타이핑

(이미지가 렌더링되는 사이즈가 작아 글자를 알아보기에 다소 어려우실 수 있는데, 이 경우 원본 이미지를 함께 확인해 주시길 부탁드리겠습니다)


JavaScript 개발자들이 손꼽는 언어의 주요한 결점은 '정적 타이핑(Static typing)'인 것으로 나타났습니다. 2위인 모듈 시스템(ESM & CJS)와 3위인 날짜(Dates) 역시 크게 공감이 가는 부분이기는 하지만, TypeScript가 괜히 대세가 된 것이 아니듯 정적 타이핑에 대한 요구가 크다는 사실이 두드러지고 있습니다. 특히 이러한 결과는 이번 2023년도에 처음 나타난 것이 아니고, 지난 몇 년 동안 항상 일관되게 1위였다는 점에서 거의 이견의 여지가 없을 만큼 확고한 경향이라고 할 수 있습니다.

과거 TypeScript 도입 시기 초반에는 정적 타이핑에 대한 회의적인 의견도 적지 않았으며 나름의 합당한 근거도 존재하는 것이 사실이었습니다. 요컨대 동적이고 유연한 패러다임이 특장점인 언어에서 굳이 그것을 퇴색시키는 경직된 솔루션을 도입하려 한다는 것이 그것입니다. 어떤 문제가 있을 때, 그것을 그저 강제하거나 제한하는 방법으로만 해결하려는 것은 '개발자다운' 접근법이 아니라는 의견도 존재했습니다.

심지어 종종 이 문제가 조금 이상한 방향으로(?) 심화되면, 청사진을 그리고 방향타를 잡는 리더 포지션들의 절대 다수가 과거부터 Java 같은 정적 타이핑 언어에만 익숙한 '백엔드' 개발자였기 때문에, JavaScript와 같은 '프론트엔드' 개발에서도 그것만이 진리라고 생각해 논의와 타협의 여지 없이 TypeScript만이 절대선인 패러다임이 형성된 것이 아니냐는 정치적인 문제로까지 번지기도 했습니다.



그러나 그동안 많은 경험과 논의를 거쳐온 현재는, 위의 TypeScript의 사용률 및 비중에서도 알 수 있다시피 많은 JavaScript 개발자들이 이제는 TypeScript를 자연스럽고 당연한 것으로 받아들이고 있는 상황이라고 해석할 수 있습니다. 또한 이번 설문조사와는 별개의 내용이지만, 이미 TC39 프로세스를 통해 ECMAScript 표준 명세에 TypeScript의 타입 주석을 흡수하려는 제안 등이 지속적으로 논의되고 있는 것처럼, TypeScriptJavaScript의 표준에 포함되려는 움직임이 있다는 점도 이러한 해석에 근거를 더할 수 있을 것입니다.





누락된 기능들

'현재 JavaScript에서 어떤 점이 부족하다고 생각되시나요?' 에 대한 응답 역시 1위로 '정적 타이핑'이 꼽혔습니다. TypeScript가 필수가 된 현재도 계속 이러한 요구가 존재하는 것은, 근본적으로 TypeScript 역시 타이핑을 컴파일(트랜스파일) 단계에서 구현할 뿐이고 결과적으로는 JavaScript 코드로 변환되는 만큼, 결국은 런타임에도 타이핑이 구현되는 것이 궁극적으로는 더 확실한 방향이라는 점, 그리고 그렇게 되기 위해서는 슈퍼셋 언어 같은 것이 아니라 네이티브 스펙으로 구현이 되어야 한다는 판단이 바탕하고 있는 것으로 보입니다.

한편, 이외에도 표준 라이브러리, 더 나은 날짜 관리, 불변 자료 구조, 반응형 데이터(Observable/Signals) 등도 꽤 높은 비중을 보이는데, 각각 모두 현재로서는 별도의 라이브러리나 아직 제안 단계인 실험적 기능 등을 통해서 해소되고 있는 문제들이라는 점을 알 수 있습니다.





페인 포인트

JavaScript 개발에 있어 가장 큰 고통은 'Code Architecture', 즉 코드베이스의 구조를 설계, 유지보수하고 분석하는 일인 것으로 나타났습니다. 다만, 유독 다른 설문 항목들에 비해 상위 응답들이 고루 높은 비중을 차지하고 있어, 단순히 한두 가지가 문제가 아니라 여러모로 불편한 점들이 많이 꼽히고 있다는 점을 시사하고 있습니다.

비슷한 비중으로 위에서 언급한 타이핑을 포함해 상태 관리, 빌드 도구, 의존성 관리, 성능, 디버깅, 날짜 관리 등이 나열되고 있는데, 이는 역시 모두 하나같이 거대한 담론들을 형성하고 있는 주제들이기도 합니다.

흔히 JavaScript 생태계를 이야기할 때 '변화가 빠른', '새로운 도구들이 끊임없이 등장하는' 등의 수식을 하는데, 이는 생태계가 그만큼 건강하고 역동적이라는 사실을 나타내기는 하지만, 동시에 그만큼 '해결해 나가야 할 문제들이 적지 않다'고 볼 수도 있는 것인데, 이러한 특징이 잘 드러나고 있는 부분이라고 할 수 있겠습니다.





라이브러리

프론트엔드 프레임워크/라이브러리

프론트엔드 프레임워크의 경우 당연히 React가 가장 높은 사용률(Usage)을 보이며 계속 조금씩 상승하고 있는 것으로 나타납니다. Angular의 경우 확실한 감소 추세에 있으나 절대적으로 낮은 수치는 아니며, Vue는 꽤나 급성장한 편이기는 하지만 일정 수준 이상은 뛰어넘지 못하고 있는데, 이에 대해서는 Vue 3로의 전환에 너무 많은 시간이 소요되었기 때문이라는 등의 의견이 존재하고 있습니다. Svelte 같은 경우는 아직까지는 확실히 '마이너'이긴 하지만, 워낙 긍정적인 평가가 많기 때문인지 꾸준한 상승세를 보이고 있습니다. 다만, 이는 어디까지나 서구권에서의 경향인지라, 상대적으로 기술 편향이 강한 국내의 상황과는 다소 차이가 있을 수 있다는 점은 유의해야 합니다.


주목할 만한 점은, Interest(관심/흥미), Retension(잔존/유지), Positivity(긍정) 측면에서 React가 뚜렷한 감소 추세를 보이고 있다는 점입니다. 물론 다른 프레임워크에 비하면 여전히 최상위권이므로, 이런저런 한계나 문제가 없는 것은 당연히 아니지만 그렇다고 다른 대안들이 이를 완벽하게 해소하거나 압도할 수 있는 정도는 아니라는 사실을 나타낸다고 할 수 있습니다.



메타 프레임워크

메타/렌더링 프레임워크의 경우에는 단연 React 진영의 Next.js가 확고한 우위를 점하는 모습이 나타납니다. 다만 2023년을 기점으로 Interest, Retension, Positivity 측면에서 10% 이상 급감하는 모습이 나타나는데, Next 13 ~ 14에서 릴리즈된 App RouterReact Server Components(RSC) 기능에 대한 호불호나 버그 이슈 등으로 인한 페인 포인트 유발, 점점 백엔드에 치중하려는 기조(소위 '과거 PHP로 되돌아가려고 하느냐' 는 비판으로 대표되는) 등이 개발자들에게 있어 다소 부정적으로 받아들여졌기 때문일 가능성이 있습니다만, 이는 통계에서는 알 수 없는 내용이므로 앞으로의 추이에 주목할 필요가 있겠습니다.

Next.js와 흡사한 개발자 경험을 제공하는 Vue 진영의 Nuxt.js 같은 경우는 Usage가 25% 수준까지 상승하긴 했지만 절대적인 기준에서 높은 수치는 아니라는 사실을 알 수 있으며, React에 비하면 VueNuxt까지는 채택하지 않는 비중(SPA)이 약간 더 높다는 사실도 간접적으로 추론할 수 있습니다. 참고로 글 작성 시점 최근 Nuxt의 경우 3.12 버전이 마지막으로 릴리즈되면서 Nuxt 4로의 마이그레이션을 준비하고 있는 단계에 있으며, Next.js 못지 않게 활발한 개발이 이루어지고 있는 상황입니다.



테스팅

테스팅 도구의 경우 Jest가 역시 가장 많이 사용되는 도구라는 사실을 알 수 있습니다. 하지만 Vitest가 다른 모든 도구들에 비해 Usage, Retension, Positivity 등 모든 측면에서 압도적으로 높은 상승세를 보이고 있다는 점이 두드러지고 있습니다.

Vitest는 빌드 도구/번들러인 Vite를 통해 구동되기 때문에, Vite의 높은 인기에 힘입어 함께 견인된 수치라고 볼 여지가 있습니다. 후술하겠지만, Vite의 경우 현재 JavaScript 생태계에서 가장 두드러지는 강세를 보이고 있는 도구 중 하나이기도 합니다.

이외에는 StorybookPlaywright 역시 높은 상승세를 보인다는 점, CypressPuppeteer 같이 익숙한 도구들은 여전히 꽤 사용되고는 있지만 점차 관심과 재유입이 감소하는 추세에 있다는 점, 그리고 2023년부터 Mocking에 유용하게 활용할 수 있는 도구인 Mock Service Worker(MSW)가 통계에 포함되기 시작했다는 점 등을 꼽을 수 있겠습니다.



빌드 도구

빌드 도구/번들러에서 가장 주목할 만한 부분은 역시 webpackVite일 것입니다. 일단 Usage 측면에선 webpack이 당연히 최상위권이긴 하지만, Vite의 경우 2021년 처음 통계에 포함될 시기에는 28%에 불과했으나 2023년에는 무려 73%으로 폭발적인 증가폭을 보이면서 webpack을 바짝 추격하고 있는 상황입니다.


반면 webpackInterest, Retension, Positivity 측면에서 다른 모든 통계 항목들을 통틀어 해를 거듭할수록 가장 큰 폭으로 감소하는 모습을 보여주고 있습니다. 오랜 시간 발목을 잡았던 성능이나 복잡도 문제가 부정적으로 작용한 것으로 보이며, 예단할 수는 없으나 사실상 '앞으로 새롭게 착수하는 프로젝트에서는 더 이상 webpack을 채택하지 않게 될 것'으로 볼 수 있는 수준에 이르렀다고 해석할 수 있습니다.


도구에 대한 사용 경험(Experience)과 감정(Sentiment)을 나타낸 위 그래프를 보면, webpack의 경우 90%의 '사용해 본 적 있음' 중 42%가 '다음에도 또 사용할 것'으로, 48%가 '부정적인 경험이었다'고 응답한 반면, Vite72%의 '사용해 본 적 있음' 중 71%가 '다음에도 또 사용할 것'으로, 나머지 1%만이 부정적인 경험이었다고 응답했습니다.

esbuildRollupVite에서 채택한 도구이기도 하지만, 스탠드얼론으로도 적지 않은 비중(약 50%)으로 사용 경험이 있다는 응답이 확인되고 있으며, Next.js(Vercel) 진영의 SWCTurbopack은 개발자들에게 인지와 관심의 대상은 되고 있으나 실제 사용 경험 비중은 아직 그렇게 높지 않은 것으로 나타나고 있습니다.


그렇다면 빌드 도구를 사용할 때의 주요 페인 포인트는 무엇일까요? 응답자 수가 상대적으로 많지는 않고, '기타' 답변의 비중도 높긴 하지만 일단은 '설정(Configuration)'이 가장 큰 문제인 것으로 나타나고 있습니다. 이어지는 '성능(Performance)', '과도한 복잡도(Excessive complexity)', 'Webpack issues' 등의 항목들로 미루어볼 때, 여러모로 webpack이 집중적으로 겨냥되고 있다는 사실을 알 수 있습니다.





기타 도구들

라이브러리

위 라이브러리들은 응답자가 '평소에 꾸준하게 사용하는 도구' 로 꼽은 것들입니다.

예상대로 그 유명한 lodash가 가장 대표적인 지위를 나타내고 있으며, 날짜 라이브러리의 경우 잘 알려진 것처럼 date-fns가 가장 인기가 높고, moment.js 같은 경우 이미 과거에 개발이 중단된 상태이고 꽤나 무겁다는 문제가 있음에도 불구하고, 워낙 친숙해서인지 여전히 비중이 높아 대안인 Day.js를 상회하고 있습니다.

AxiosReact Query(TanStack Query), Zustand 같은 경우는 실제 인지도나 사용률에 비해 응답 수가 과도하게 낮게 나타나고 있는 것으로 보입니다만, 정확히 어떤 맥락에서 응답이 진행, 분석되었는지 알 수 있는 자료가 없어 판단이 어려운 부분입니다.



그래픽 & 애니메이션

그래프, 차트 같은 데이터 시각화 및 애니메이션을 구현할 때 사용하는 도구에 대한 응답 결과입니다. '기타' 응답들을 제외한 모든 도구들 중 가장 높은 응답 비중을 보여준 도구는 3D 그래픽 라이브러리인 Three.js로 나타났습니다. 데이터 시각화의 경우에는 일반적인 인식처럼 D3.js가 가장 인기 있는 도구로 나타났으며, 필자의 경험에 한정해서 보자면 Chart.js의 응답 수가 매우 낮게 나타난 것은 다소 의아한 부분입니다.

애니메이션의 경우에는 실제 체감되는 인기와 부합하듯 Framer Motion이 가장 많은 선택을 받는 도구인 것으로 나타났으며, 이어서 Lottie, GreenSock, React Spring, Anime.js 등도 못지 않은 비중을 차지하고 있어 다른 사례에 비해 상대적으로 대안이 많고 두루 채택되는 경향이 있다는 사실을 알 수 있습니다.

PixiJS의 경우 벤치마크 데이터에 의하면 여러 캔버스 엔진 중 최상위권의 렌더링 성능을 보여주는 것으로 알려진 훌륭한 2D 그래픽 라이브러리입니다만, 통상적인 웹 개발에서는 사용할 만한 상황이 없거나 한정적이어서인지 응답 비중은 매우 낮은 수준으로 나타나고 있습니다.



자바스크립트 런타임

Deno의 경우 Node.js의 개발자인 Ryan dahl이 기존 Node.js에서의 여러 결함이나 실수를 보완하여 Rust로 야심차게 개발한 후속작이지만, 아쉽게도 아직까지는 그렇게 많은 선택을 받지 못하고 있는 상황으로 보입니다. 게다가 Bun이라는 강력한 경쟁자도 존재하기 때문에, '시간이 걸릴 뿐 Deno가 자연스럽게 Node.js를 대체할 수는 있을 것'이라는 예상에도 불확실성이 더해지고 있습니다.






마치며

이번 State of JS 2023에서 가장 존재감이 크게 드러난 도구는 단연 Vite라고 할 수 있었습니다. 전년 대비 사용량이 가장 많이 증가한 기술(+25%p)이자, 가장 높은 재유입(98%)은 물론, 88.7%의 응답자들로부터 긍정적인 평가를 받은 '3관왕'으로, 확실한 대세를 굳힌 것으로 보입니다. Vitest 또한 그 뒤를 잇고 있기 때문에, Jest 역시 webpack처럼 자리를 내주게 될 가능성이 있다는 점도 주목할 만한 부분입니다.

ReactNext.js는 가장 많은 코멘트를 통해 활발하게 논의가 이루어진 라이브러리였으며, 이는 생태계 내에서 독보적인 규모와 위상을 가지고 있다는 사실을 증명하고 있습니다. 다만 그런 만큼 최근 React의 방향성이나 행보에 대한 우려 또한 유발되고 있는 상황으로 보입니다.

다만 이러한 몇 가지 기술이나 도구의 흥망 같은 지엽적인 사실보다는, 일련의 변화로부터 흐름을 읽고 예측할 수 있는 통찰과 혜안을 얻는 것이 가장 중요한 것이라고 할 수 있을 것입니다. 개발자로서 기술적인 판단과 의사결정을 해야 하는 순간은 반드시 찾아오기 마련이고, 그때마다 스스로의 가치 판단으로 최선의 결론을 내리기 위해서는 평소 자신을 둘러싼 세계에 대한 충분한 이해가 뒷받침되어야 할 것이기 때문입니다. 많은 사람들이 이야기하듯, 생태계의 변화에 그저 압도되거나 휩쓸리는 것이 아니라, 뚜렷한 주관을 가지는 것이 중요하다고 할 수 있겠습니다.

profile
퇴고를 좋아하는 웹 개발자입니다.

0개의 댓글