JavaScript와 그 에코시스템: 추상화 레이어가 많은 골칫거리
Source: Dev.to
소개
솔직히 말하자, 누구도 감싸지 않는다. JavaScript는 너무 과대평가돼서 웃음거리이기도 하고, 경우에 따라 안타까움이 되기도 한다.
생태계 문제
문제는 JavaScript가 나쁘다는 것이 아니라, 마치 “아니오”라고 말하지 못하는 그 친구와 같다:
- 백엔드 하고 싶어? “응, 내가 할 수 있어”.
- 프론트엔드? “그것도”.
- 모바일 앱? “물론, React Native 봐”.
- 머신러닝? “TensorFlow.js, 뭐 이런 거”.
- 운영체제? “곧 NodeOS 나와, 기다려”.
최악인 건 시도 자체가 아니라, 커뮤니티가 그걸 믿고 통째로 삼켜버린다. 존재하지 않아도 될 문제를 해결한다는 새로운 도구마다 환호를 받으며, 누군가 비판하면 무리들은 “반응성을 이해 못한다”, “생태계가 성숙했다”, 혹은 “State Management, Mongo, 마이크로서비스, 블록체인, NFT 강의 팔아줄게” 같은 말을 퍼붓는다.
대부분의 웹 페이지는 HTML, CSS, 몇 개의 alert만 있으면 충분하지만 우리는 머리 1000개짜리 괴물을 만든다. JavaScript가 문제를 해결할 때마다 세 개의 새로운 문제가 생기고, 그 문제들을 해결하기 위해 또 다른 세 개의 프레임워크가 등장한다. 그 프레임워크는 내년이면 사라질 것이다. 하나를 배우면 이미 구식이고, 당신의 경험은 2005년 PHP “Hello World”보다 가치가 떨어진다.
이 사이클은 당신을 계속 끌어들이기 위해 설계된 것이다: 언어가 쉽고 효율했다면 누가 강의를 살까? 인플루언서를 따랐을까? 8주짜리 부트캠프에 돈을 냈을까? 아무도 아니다.
품질과 성능
품질은 방 안의 코끼리다. 언제 마지막으로 500 MB RAM을 잡아먹지 않는 JS 애플리케이션을 본 적이 있나? 혹은 번들이 성경보다 무거워서 3 초가 걸리는 페이지를 본 적이 있나? 사용자는 이제 익숙해져서 부드러움이 뭔지 모른다. 우리는 스켈레톤 로더와 예쁜 스피너를 넣고 끝낸다. 그 사이 모바일 CPU는 조용히 울부짖는다.
JS 옹호자들은 “하지만 구글, 페이스북, 넷플릭스가 쓰잖아”라고 말한다. 물론, 그들은 C++, Rust, 수천 명의 팀을 동원해 JS가 못하는 부분을 패치한다. 그 얘기는 유튜브 영상에선 절대 나오지 않는다. 팔리지 않는다.
현실과 대안
이제 나는 JavaScript를 미워하지 않는다; 오히려 안쓰게 된다. 마치 자기 그림자에게 짖는 개처럼, 꼬리를 쫓으며 문제의 원인이 자신임을 모른다. 말을 걸면 물어뜯고, 더 나빠서 약속을 하고, 그 다음엔 callback hell을 보여주고, 마지막엔 Internet Explorer 11용 polyfill을 건넨다. IE11은 이제 존재도 하지 않는다.
실질적인 대안은 없다. 웹에서 일한다면 이미 함정에 빠진 것이다. 무거운 작업은 TypeScript나 WebAssembly를 쓸 수 있지만, 결국 JS는 그곳에 있다. 당신의 useEffect가 한 번 더 실행되길 기다리며, 당신의 앱은 이유 없이 세 번 렌더링된다.
결론
우리는 10일 만에 탄생한, 정수와 소수를 구분하지 못하고, "1" + 1은 "11"이 되고, "1" - 1은 0이 되는 언어로 코딩한다. 일관성은 약자들의 특권이다.
언젠가 이 모든 것이 바뀔지도… 아니면 그렇지 않을지도 모른다. 그때까지 나는 커피를 만든다… JavaScript로, 왜냐하면 이제 커피 메이커도 자체 API를 가지고 있거든.
추신 (누군가가 불쾌해 할 경우)
이건 블랙 유머다, 맞지만 유머다. 상처받았다면, 아마도 당신이 문제의 일부일 것이다. 그리고 웃었다면, 황제가 벌거벗었다는 걸 아는 사람들의 클럽에 온 것을 환영한다.