TS퇴출?

최근에 회사 동료분이 나한테 충격적인 얘기를 하셨다.

TypeScript가 퇴출되고 있다는데 아세요??

엉? 이게 무슨 소리지? 싶었다. 동료분도 정확히 기억은 안나고 다른 지인분께 들었는데 유명 라이브러리에서 TS를 안 쓰겠다고 했단다.

일단 의아했다. TS로 바꾼다면 모를까 TS를 안 쓴다는 건 퇴보하는 거 아닌가...??
만약 진짜라면 생각나는 이유는 하나다.

"작업 시간이 오래 걸린다."

그래 솔직히 위 이유면 이해가 간다. 최근 회사에선 TS를 쓸 일이 없었지만(거의 JS, TS를 써도 기본), 사이드 프로젝트에서 TS를 만지는데 딥하게 들어갈수록 역시 꽤나 빡셌다.

애초에 TS는 말 그대로 type에 대한 설정을 하는 것이고, 실 로직은 따로 또 진행되니(물론 가벼운 로직은 같이 슥슥 하겠지만) 어떻게 보면 작업 시간이 늘어난.. 아니 늘어난다 분명.

근데 이게 퇴출까지 시킬 이유가 되나??

그래서 이후에 소식을 정확히 알고 싶어 찾아봤다.


Turbo에서 TS 제거 작업 merging

Turbo의 PR

무려 TypeScript를 제거하고 머징해버린 어마어마한 사건(?)

알고보니 꽤나 이슈가 됐던 일이었다. 약 3달전에 Turbo에서 TS가 제거된 뒤 merging이 되어 버린것.

대중 반응은 이미지에 보이는 것처럼 좋지 않다. 싫어요가 압도적으로 많은 상황. 무려 좋아요의 약 5배 이상이다.

Turbo에서 TS는 왜 지웠는가?

David Heinemeier Hansson의 입장문

PR의 내용은 자신이 TS를 제거한 이유를 적은 본인 블로글 링크 단 하나.
들어가서 본 뒤 요약해보자면 다음과 같다.

  1. 난 애초에 TS 좋아한 적 없어
  2. JavaScript로 작성하면 컴파일 없이 브라우져에서 실행할 수 있다.
  3. 즉, 2번의 이유로 TS를 쓰면 컴파일 단계가 늘어나고, 코드가 지저분해진다.

3줄 간단 요약이라 다소 생략이 많지만 딱 저 내용이다.
한손씨는 'TypeScript는 JavaScript의 완전한 대체가 될 수 없을 것이다'라고 보는 것 같다.

앞서 말했듯이 반응은 좋지 않다. 바로 다음 PR이 아래인데 ...ㅋㅋㅋㅋ

TS내놔

고오오급 유우머

한손의 입장문(?)글과 비교해보면 알겠지만 똑같은 양식과 말투, 어미를 가져와 정확히 반대로 '난 JS가 싫어요 TS를 씁시다.'를 말하고 있다.

해당 PR의 내용도 TS를 제거한 커밋을 되돌리는 것이었다.
물론 거절당했다.


근데 라이브러리 하나에서 TS지운게 대수야?

대수다.

누군가는 "뭐 라이브러리 하나에서 TS 없어진게 문제가 되나?'라고 할 수도 있지만 이렇게 이슈가 된대는 이유가 있다.

작성자가 David Heinemeier Hansson이고, 라이브러리가 Turbo이기 때문이다.

  • David Heinemeier Hansson은 Ruby on Rails를 만든 사람이기에 파급력이 있다.
  • Turbo라는 모노레포에 강력한 빌드 툴이었기 때문에 사용자와 기여자가 많다.

게다가 앞서 말했듯이 merging을 고냥 해버렸다. PR한지 2시간 정도 뒤에, 기여자들과 상관없이 해버린게 아주 큰 논란이 된 모양이다. 뭐 당연히 논란이 될 수 밖에 기여자들에 대한 존중없이 독단 판단하에 해버린거니 논란이 안되는 것도 이상하다.

Vercel의 Turbo와 Hotwire의 Turbo를 혼동해 작성하였습니다. 혼란을 드려 죄송합니다🙏(240129)


댓글들을 보면 다들 우려가 크다.
이런 대규모 프로젝트에서 TS를 안 쓰는 것은 많은 문제를 야기할 것이란 것이다. 내 생각도 그렇다.

당장 JS의 Top10에러 중 8개가 TypeError라고 하는데(Top 10 JavaScript errors from 1000+ projects (and how to avoid them)) 이 에러들을 방지할 수 있는 TS를 이런 큰 프로젝트에서 제거한다? 리스크가 너무 커보인다.



TS 대체 방법 없어?

JSDocs

물론 대체할 방법이 없진 않다. JSDocs이 있다. 근데 굳이..?란 생각이다.
JSDoc쓸거면 걍 편하게 TS쓰는게 맞지 않나 싶다.
(물론 컴파일 비용이 들겠지만 그래도 DX측면에선 이게 더 생산성을 늘리지 않겠는가)

그러면 제대로 된 대체 방법이 없는가? 결국 저 판단은 잘못됐는가? 결국 표준은 TS인것인가?

음... 또 장기적으로 보면 TS가 영원할 것이라고 보는 것도 오만일 수 있을 것 같단 생각도 든다.

"결국 JS로 돌아갈 것이다. 아니 돌아가야만 한다."

어쩌면 이게 맞는 말이고 결국 JS로 모든게 가능할 것이란 의견도 있는 것 같다.
왜냐고? 다음을 보자


ECMAscript의 type annotation

현재 ECMAscript에서도 type annotation을 지원 가능하도록 하는게 제안 사항으로 올라와 있다는 것이 하나의 이유이다.

TC39

ECMA에서 TS를 표준으로 합치는 것을 염두에 두고 있다면, 그리고 그게 진짜 이뤄진다면 대체가 될 수도 있지 않을까...??

저 제안 자체는 몇년전에 올라왔었고, stage1단계에는 2022년에 진입했다고 한다.
진행을 보면 물론 아직 실 도입까지는 시간이 많이 남았을 것이다. 하지만 몇년 TS를 쓰다보면 결국 JS로 저 제안이 완전 통합되고, 실제 사용이 된다면, 결국 TS도 입지를 잃게 될지도 모르겠단 생각이 든다.


내 결론

개발 시장은 워낙 흐름이 빠르게 바뀌고, 특히 FE쪽에선 언어가 폭포수처럼 쏟아지는데 왜 TS라고 영원할 것이란 생각을 할까. 앞서 언급했듯이 오만아닐까?
React가 주류가 된지도 어찌보면 고작 10년 안팍인데. 얘가 또 강력한게 나오면 바뀔지 우째알까.

물론 이 과정이 좋다는 것은 아니다. Turbe의 기여자들 입장에선 저런 행동자체에 실망하고 분노할만 하며, TS를 걷어낸 것에 의아할 수 있다.

다만 마냥 저 행동이 진짜 미친짓이 될지 아닐지는 두고 봐야하지 않을까가 내 결론이다.



덤) 대형 유튜버들의 반응

난 조코딩님과 제로초님의 영상을 봤는데 영상 골자는 다음과 같다.

조코딩님

영상은 소식을 전하는 위주였다. Turbo외에도 소식을 알 수 있었는데 Svelte에서도 TS가 퇴출됐다고 한다.
물론 사용자에게 영향이 갈 건 아니고 개발팀에서 더 이상 개발에 TS가 아닌 JS를 사용하겠다고 했단다.

TS를 쓰는 것이 생산성에 방해가 되기에 내린 결정으로 보이는데, 역시 퇴출 이유는 비슷한갑다.

요 소식은 조코딩님 영상을 통해 확인했다. 궁금하신 분들은 한 번 직접 봐도 좋을 것 같다.
TS퇴출 소식 외에도 다른 정보도 담겨있다.

  • 난 잘 모르는 건데 Drizzle에서도 제거하고 있다는데..?

제로초님

제목부터 자극적이다ㅋㅋㅋ 헛소리.
제로초님은 TS의 퇴출은 어불성설이라는 입장이다. 대형 프로젝트에서의 TS는 안정적 개발 환경 구축에 필수적이라는 것.

맞는 말이다. 근데 또 개인적으론 앞서 설명한 것들로 인해 먼 미래엔 진짜 퇴출될 가능성도 있지 않을까? 그럼 미리 퇴출시킨 이 사람들이 선구자가 되는건가..

그리고 시발점이 되었다고 할 수 있는 한손의 저 Merging과 블로그 글도 큰 신경을 쓸 것이 아니라 보고 있다.
왜냐하면 한손이 과거 TDD는 사라질 것이란 얘기를 했었는데 TDD도 멀쩡히 살아있기 때문이란 것.

그치. 유명인이 했다고 다 옳은 말일 순 없지. 단지 이유가 있을 것으로 보고 한번 짚고 넘어가는 것. 그게 유의미한 과정이 될 것같다. 이 과정에서 혹시란 가능성도 보았으니까.



Reference

Article

Youtube

profile
2년차 응애 FE 개발자입니다👶

7개의 댓글

comment-user-thumbnail
2023년 12월 27일

2개의 turbo를 혼용해서 알고계신 것 같습니다.

vercel의 turbo는 rust로 작성되었으며 repository도 다릅니다.
https://github.com/vercel/turbo
https://github.com/hotwired/turbo

2개의 답글
comment-user-thumbnail
2023년 12월 29일

대수맞긴합니다 라이브러리개발자라서 지운거에요

1개의 답글
Powered by GraphCDN, the GraphQL CDN