타입스크립트(Typescript)퇴출?(feat 레알) | 매거진에 참여하세요

인사이트/로그개발 관련
작성일 : 24.01.26

타입스크립트(Typescript)퇴출?(feat 레알)

#타입스크립트퇴출 #TS퇴출 #ECMAScript #코드오염? #타입스크립트미래 #타입스크립트공부 #바닐라자바스크립트 #스벨트제거 #드리즐제거 #명시적컴파일

👉 본문을 50%이상을 읽으면 '여기까지다' 퀘스트가 완료됩니다(로그인 필수)

2023년 9월부터 타입스크립트를 퇴출을 결정한 큰 오픈소스 프로젝트들이 생겨, 실제 공부하시는 분들이 상당히 걱정하시고 계신데요.

이에 대한 내용 저도 궁금하기도 해서, 한번 정리해봤습니다.

우선 타입스크립트를 모르는 분들이 계셔서 이에 대한 설명과 히스토리 먼저 짚고 가야겠네요

1. 자바스크립트 vs 타입스크립트

저처럼 바닐라스크립트로 시작하여, 제이쿼리, 리액트 이렇게 자바스크립트를 넘어온 사람들은, 타입스크립트에 거부감이 있습니다.

더이상 배우기 싫은 것들도 있지만, 자바스크립트만의 특유의 자유로움이 있거든요.

혹자는 근본없는 언어? 아니 스크립트기 때문에, 그냥 언어가 아니다 라고 이야기도 하시죠

모든 언어는 빌드라는 중요단계가 있는데, 자바스크립트는 스크립트기 때문에 빌드하지 않습니다.

이 빌드를 하셨다면 사실상, 여러가지 프레임워크에서 추가된것에 가깝습니다.

그렇기 때문에 , 오류 탐지 등이 전혀안됩니다. 일단 실행하다가 안되면, 오류다라고 뱉어내는게 스크립트의 한계이기도합니다.

(스크립트가 그런 의미니까요)

그러나 길거리 출신같이, 막 굴러다니는 애인데, 좀 매력적이다고 할까나?

2. 타입스크립트 많이 쓰나?

2023년 프로그래밍 언어순위에 보시면, 가장 많이 쓰는 언어 5위입니다.

그만큼 웹개발자들에게 환영을 받고 있습니다.

그래서 더더욱이 타입스크립트의 퇴출이슈가 충격적으로 다가오는것 같습니다.

3. 타입스크립트는 왜 나왔는가? 자바스크립트와 어떻게 다른가?

1) 역사적 관점

1995년에 만들어진 JavaScript는 역동적이고 유연한 특성으로 빠르게 웹 개발의 초석이 되었습니다.

이는 대화형 및 반응형 웹 애플리케이션을 만드는 데 필수적이었습니다.

Microsoft가 2012년에 출시한 TypeScript는 JavaScript를 기반으로 구축되도록 설계되었으며 정적 타이핑 및 기타 객체 지향 기능을 도입하여

특히 대규모 프로젝트의 한계를 해결했습니다.

2) TypeScript 및 JavaScript

JavaScript의 동적 타이핑 및 최고 수준의 기능은 프론트엔드 및 백엔드 개발 모두에서 비교할 수 없는 유연성을 제공하여 개발자들에게 인기를 끌었습니다.

클로저 및 프로토타입 기반 상속과 같은 고유한 기능으로 유명하며 널리 채택되는 데 기여하고 있습니다.

JavaScript의 다양성은 Node.js와 같은 환경 덕분에 단순한 웹페이지 개선부터 복잡한 서버측 애플리케이션까지 확장됩니다.

JavaScript의 상위 집합인 TypeScript는 정적 타이핑 및 향상된 도구와 같은 추가 기능을 도입하여 대규모 애플리케이션에 이상적입니다.

인터페이스 및 제네릭과 같은 기능으로 JavaScript의 기능을 향상시켜 코드 품질과 유지 관리성을 향상시킵니다.

TypeScript와 JavaScript의 원활한 통합은 개발자의 원활한 전환과 기존 JavaScript 프로젝트와의 호환성을 보장합니다.

3) TypeScript와 JavaScript의 주요 차이점

TypeScript와 JavaScript의 주요 차이점은 코드 구조와 오류 관리를 향상시키는 정적 타이핑 및 인터페이스와 같은 TypeScript의 추가 기능에 있습니다.

TypeScript는 특히 대규모 프로젝트에 유용한 더욱 구조화된 코드베이스를 제공하지만 속도 측면에서는 JavaScript보다 성능이 뛰어나지는 않습니다.

이러한 추가 기능으로 인해 TypeScript를 배우는 것이 더 어려울 수 있지만 프로젝트 개발에서는 JavaScript를 잘 보완합니다.

TypeScript는 JavaScript를 대체할 것으로 예상되지 않으며 오히려 복잡한 프로젝트에 특히 유용한 강력한 확장 기능을 제공합니다.

4) TYPESCRIPT VS.의 비교 분석. 자바스크립트

구문, 성능 및 확장성을 자세히 비교하면 각 언어의 고유한 장점과 응용 프로그램이 드러납니다.

TypeScript는 개발 중 오류 감지에 도움이 되는 구문 기능을 도입합니다.

이는 JavaScript의 보다 유연한 구문과의 주요 차이점입니다.

JavaScript는 소규모 애플리케이션의 신속한 개발에 탁월하지만 TypeScript의 정적 유형 지정 기능은 대규모 프로젝트 관리에 더 적합합니다.

4. 진짜 퇴출되는건가요?! 우리 어떻하나요?

이 논쟁에 불을 지핀것은 Turbo라는 프레임워크에서 TS를 금지했기 때문인데요.

결론적으로는 일부 프로젝트 팀에서 진행되거나 논의중에 있다.

1) Turbo에서 더 이상 타입스크립트를 지원하지 않음

Heinemeier Hansson은 Ruby on Rails를 만든 사람이고 ,

  • 이런 사람이 운영하는 오픈소스 Turbo에서, 갑자기 안쓰기로 결정을 해버렸으니까요

중요한 것은 작성자가 유명한 사람이라는 겁니다. 그만큼 영향력이 큰거겠죠.

  • 배우시던 분들이 난리가 난 상황이구요.

  • 이미 기여자와 상관없이 코드를 배포해버려서, 더이상 업데이트된 버전에서는 더이상 사용할 수가 없습니다.

  • 강력한 빌드 툴이었기 때문에 여러가지 프로젝트에 영향이 예견되는 상황입니다.

https://turbo.hotwired.dev/

“주된 이유는 명시적 컴파일관리하는 것이, 너무 코드를 더럽게 만든다.”

사실 타입스크립트가 “ type gymnastics”으로 상당히 유명합니다.

타입을 오만가지에 다 넣어야하고, 어떤 타입이 맞는지 불명확한 경우도 많구요.

타입만 치다가 시간 낭비한다는 이야기가 많습니다.

자바스크립트을 지속적으로 만져온 사람으로서는, 이렇게 더럽도 힘든 과정의 프로세스가 있다는것이 정말 짜증스럽겠죠

특히 오픈소스 커뮤니티에서는 , 기여자들이 짜증낼 정도면, 일반적으로 배우는 사람들도 짜증이 많이 나겠죠.

2) 웹 프레임워크인 스벨트(Svelte)에서 타입스크립트를 제거

이게 사실은 타입스크립트를 제거하진 않았지만, 제거의 수순을 밟고 있는것은 맞습니다.

타입스크립트를 대체할 수 있는 모드등을 넣어서, 점점 바닐라 자바스크립트에서도 돌아갈 수 있게 만든다는 거죠.

“스벨트의 메인개발자인 Harris의 비디오와 트윗에서 설명했듯이 Typescript는 버려지지는 않습니다.

대신, Svelte 컴파일러 코드는 JSDoc Typescript로 변경되고 있습니다.

JSDoc TS는 Typescript 컴파일러가 이해하는 특수 문서 주석 주석을 사용하여 Typescript 유형 검사의 이점을 대부분 표준 JavaScript 코드에 추가합니다.

Harris가 선택한 주된 이유인 주요 이점은 Typescript를 제거하고 코드를 다시 JavaScript로 전환하는 데 필요한 빌드 단계 없이

Typescript의 풍부한 유형 검사 보장을 얻을 수 있다는 것입니다.”

3) 드리즌 ORM에서 타입스크립트를 제거

ORM은 SQL을 배우지않고서도, Database에 기록할 수 있게 해주는 도구라고 보시면됩니다.

DrizzleORM에서 , 여러가지 언어들을 지원하고 있는데, 2023년 9월부터 공식적으로 제거하고 있다고 발표했습니다.

https://orm.drizzle.team/

gymnastics”이 정말 짜증났나봅니다.ㅎㅎㅎ

https://twitter.com/DrizzleORM/status/1699497381824201074

We're removing TypeScript from Drizzle We fully recognize that TypeScript offers some people some advantages,

but to our eyes, the benefits are evident.

The code not only reads much better, it's also freed of the type wrangling and gymnastics needed to please the TS compiler

4) ECMA Script에서 Type Annotation을 지원논의중

보시면 아시겠지만, 타입지정에 대한 니즈가 상당히 많습니다. 어느 요구사항보다 많죠.

missing-features-js

아래와 같은 방식으로 바닐라 자바스크립자체에 기능을 포함할지 고민하고 있습니다.

물론 이방식이 타입스크립트의 장점을 다 가지고올수있을지는 확실하지 않습니다.

다만 타입지정의 일부기능을 , 자바스크립트 자체 기능으로 가지고 가겠다라고 선언한것과 동일하긴 합니다.

이런 부분이 계속 늘어나가된다면, 누가 타입스크립트 깔아서 사용하게 될까요?

https://github.com/tc39/proposal-type-annotations

/**
 * @param {string}  p1 - A string param.
 * @param {string=} p2 - An optional param (Closure syntax)
 * @param {string} [p3] - Another optional param (JSDoc syntax).
 * @param {string} [p4="test"] - An optional param with a default value
 * @return {string} This is the result
 */
function stringsStringStrings(p1, p2, p3, p4="test") {
    // TODO
}

팩트는, 현재의 타입스크립트 방식은 무언가 수정이 필요하다.

자바스크립트의 한계점때문에 , 타입스크립트를 만들었지만, 너무 비대하고 느려지고 있는 상황에서

자바스크립트 본연의 빠름과 가벼움을 추구하기위해서는, 지금 이대로 가면 안된다고 논의되고 있습니다.

이런 영향때문에 ECMA Script에서 기능 포함하는 것을 검토하고 있는거구요

확실히 아니다/맞다라고 이야기하기보다는, 해당 언어에 대한 학습은 신중히 고민을 할 필요가 있어보입니다.

타입스크립트의 장점만 빼내서, 자바스크립트에서 흡수한다면 지금의 시장점유율은 가파르게 떨어지지 않을까 예상해봅니다.


글보다는 영상으로 보기를 원하시는 분은 아래 영상 참고해주세요

참고문서

https://www.codemotion.com/magazine/frontend/typescript-10-years-after-release/

https://stateside.agency/insights/is-typescript-replacing-javascript/