

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# TypeScriptAL2023에서 사용
<a name="typescript"></a>

**참고**  
 이 문서는 TypeScript 및 Node.js 기반 실행 환경에 대한 필수 정보를 제공합니다. 또한 일반적인 개발 워크플로를 다루고 TypeScript가 AL2023에 패키징되어 일관되고 재현 가능한 개발 환경을 제공하는 방법을 설명합니다.

 [https://www.typescriptlang.org/](https://www.typescriptlang.org/)(TS)는 모든 JS의 기능을 제공하고 [유형 시스템으로 확장](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html)하는 JavaScript(JS) 기반 프로그래밍 언어입니다. 일반적인 시나리오에서 TS로 작성된 프로그램은 먼저 JS 코드로 변환된 다음 Node.js에 의해 다른 일반 JS 프로그램으로 실행됩니다. TS의 특정 용어에서 이 번역 프로세스를 ['컴파일'](https://www.typescriptlang.org/docs/handbook/typescript-tooling-in-5-minutes.html)이라고 하며 *tsc*라는 '컴파일러'에 의해 수행됩니다. *tsc* 컴파일러 자체는 JS로 작성되므로 실행하려면 Node.js 같은 JS 런타임 환경도 필요합니다. 일부 다른 JS 런타임 환경과 달리 Node.js는 현재 실험적인 경량 TS만 지원합니다. 유형 확인을 포함한 전체 TS 지원에는 여전히 [typescript](https://www.npmjs.com/package/typescript) 같은 타사 패키지를 사용해야 합니다. Node.js 런타임 환경에 대한 *tsc*(TS 컴파일러)를 가져오는 예상 방법은 typescript 노드 모듈을 설치하는 것입니다. 이는 일반적으로 *npm*이라는 패키지 관리자 중 하나를 사용하여 수행할 수 있습니다. *npm*을 사용하여 TS 컴파일러를 설치하는 방법에는 글로벌 및 프로젝트 등 두 가지가 있습니다. [공식적으로 권장되는 방법은 프로젝트별로 TS 컴파일러를 설치](https://www.typescriptlang.org/download/)하여 프로젝트의 장기 일관성과 재현성을 보장하는 것입니다. 그러나 TS 컴파일러를 글로벌로 설치하는 것은 전체 호스트 및 JS 런타임에 대해 동일한 버전을 제공하므로 로컬에 TS 컴파일러가 설치되지 않은 프로젝트에도 여전히 유용할 수 있습니다. 이는 `nodejs20-typescript` 또는 `nodejs22-typescript` 같이 Amazon Linux에서 사용할 수 있는 RPM 패키지가 시스템 수준에서 글로벌로 지원되는 각 Node.js 버전에 대해 별도로 TS 컴파일러를 설치하는 정확한 방법입니다.

 *tsc*는 어떤 Node.js 버전에도 직접 종속되지 않습니다. 컴파일러는 [target](https://www.typescriptlang.org/tsconfig/#target) 및 [lib](https://www.typescriptlang.org/tsconfig/#lib)와 같은 옵션을 통해 특수 파일(*tsconfig.json*)에 정의된 특정 수준의 런타임 기능을 기대합니다. 이러한 옵션의 값은 JS 런타임 환경에서 지원할 수 있는(또는 지원하지 않을 수 있는) [ECMAScript](https://en.wikipedia.org/wiki/ECMAScript_version_history)(ES) 표준의 버전을 나타냅니다. Node.js 버전에 따라 지원되는 ES 표준 버전이 다릅니다. Node.js 버전이 최신일수록 지원되는 ES 표준 버전이 더 높고 더 나은 완전성을 가집니다. *tsconfig.json*이 프로젝트의 루트 디렉터리에 없는 경우 기본 구성 옵션 세트가 사용됩니다. Node.js의 다양한 버전에 대한 호환성 테이블과 다양한 ES 표준 버전의 지원되는 기능은 [node.green](https://node.green/) 섹션에서 확인할 수 있습니다. *tsc*에는 *tsconfig.json*에 정의할 수 있는 100개 이상의 다양한 옵션이 있습니다. 일부 구성 옵션이 다른 파일에 정의된 다음 기본 파일에 포함된 경우에도 구성 체인이 지원됩니다. 이 접근 방식을 사용하면 특정 버전의 Node.js와 호환되는 [기본 TS 구성](https://github.com/tsconfig/bases)을 설치한 다음 프로젝트별 옵션으로 확장할 수 있습니다. 다행히 Node.js용 기본 TS 구성은 *npm*을 사용하여 프로젝트 폴더에 설치할 수 있는 노드 모듈로 사용할 수 있습니다. 다음은 Node.js 버전 [18](https://github.com/tsconfig/bases/blob/main/bases/node18.json), [20](https://github.com/tsconfig/bases/blob/main/bases/node20.json) 및 [22](https://github.com/tsconfig/bases/blob/main/bases/node22.json)에 대한 구성의 소스 코드입니다.

 Node.js 기반 런타임 설계에는 특정 약점이 있습니다. 즉, 호스트에서 하나의 런타임 버전만 지원하며 프로젝트 수준에서 모든 종속성의 재현성과 일관성이 필요합니다. 이로 인해 TypeScript를 사용하는 다음과 같은 일반적인 접근 방식이 생겼습니다. TS 컴파일러, 현재 Node.js 버전의 TS 기본 구성, 모든 소프트웨어 종속성이 프로젝트 내에 로컬로 설치됩니다. 글로벌로 설치된 노드 모듈은 *npm* 같은 CLI 도구일 것으로 예상되지만, CLI 도구이기도 한 *tsc*가 글로벌로 설치되는 경우는 거의 없습니다. 다행히 *tsc*의 글로벌(시스템 전체) 및 로컬(프로젝트 내) 설치는 문제 없이 공존할 수 있으며 독립적으로 사용되는 다른 버전일 수도 있습니다. 로컬로 설치된 *tsc*는 *npm*과 함께 설치되는 *npx* 도구를 사용하여 실행해야 합니다. 따라서 시스템 TS 컴파일러를 사용하더라도 사용자는 Node.js(대체를 통해 활성 버전을 전환), TS 컴파일러(로컬 또는 글로벌로 설치 후 대체를 통해 활성 버전 전환) 등 런타임 구성 요소의 버전하고 특정 요구 사항에 맞게 구성할 수 있습니다.

 Amazon Linux는 *npm* 같이 글로벌로 설치된 다른 노드 모듈과 동일한 방식으로 Node.js 버전별로 TS 컴파일러를 패키징합니다. 패키지 및 바이너리는 네임스페이스가 지정되며 이름의 일부로 Node.js의 메이저 버전을 포함합니다. 컴파일러의 기본 실행 파일 이름인 *tsc*는 대체 도구에 의해 런타임 시 관리되며 설치되어 실행될 Node.js의 현재 활성 버전을 가리킵니다. 이 선택은 현재 Node.js 런타임 버전에 종속되지 않습니다. *노드* 실행 파일이 Node.js 20을 가리키고 *tsc*가 Node.js 22로 해석되도록 구성할 수 있습니다. TS 컴파일러의 네임스페이스 이름(예: *tsc-\$1MAJOR\$1VERSION\$1*)을 기본 *tsc* 이름 구성과 독립적으로 사용할 수도 있습니다.

**TS 컴파일러의 활성 버전을 관리하는 데 유용한 몇 가지 명령**

1. 다음에 대해 구성된 *대체* 확인

   ```
   alternatives --list
   ```

1. *tsc*의 현재 구성 확인

   ```
   alternatives --display tsc
   ```

1. 대화형으로 tsc 버전 변경

   ```
   alternatives --config tsc
   ```

1. 수동 모드로 전환하고 특정 버전 선택

   ```
   alternatives --set tsc /usr/bin/tsc-{MAJOR_VERSION}
   ```

1. 자동 버전 선택 모드로 다시 전환

   ```
   alternatives --auto tsc
   ```

 여러 버전의 노드와 TS 컴파일러를 동일한 시스템에 설치하고 사용하는 예제: 

```
# Check the AL2023 release
$ cat /etc/amazon-linux-release
Amazon Linux release 2023.9.20250929 (Amazon Linux)

# Install a TypeScript compiler for Node.js 20 and 22
# Node.js 20 and 22 will be installed automatically
$ sudo dnf install -qy nodejs20-typescript nodejs22-typescript

# Check what was installed
$ rpm -q nodejs20 nodejs20-typescript nodejs22 nodejs22-typescript
nodejs20-20.19.5-1.amzn2023.0.1.x86_64
nodejs20-typescript-5.9.2-1.amzn2023.0.1.noarch
nodejs22-22.19.0-1.amzn2023.0.1.x86_64
nodejs22-typescript-5.9.2-1.amzn2023.0.1.noarch

# Check the active version of Node.js - it is version 20
$ alternatives --display node
node - status is auto.
 link currently points to /usr/bin/node-20
/usr/bin/node-20 - priority 100
 slave npmrc: /usr/lib/nodejs20/lib/node_modules/npm/npmrc
 slave npm: /usr/bin/npm-20
 slave npx: /usr/bin/npx-20
 slave node_modules: /usr/lib/nodejs20/lib/node_modules
/usr/bin/node-22 - priority 100
 slave npmrc: /usr/lib/nodejs22/lib/node_modules/npm/npmrc
 slave npm: /usr/bin/npm-22
 slave npx: /usr/bin/npx-22
 slave node_modules: /usr/lib/nodejs22/lib/node_modules
Current 'best' version is /usr/bin/node-20.

# Check the active JS runtime version for TypeScript
# Currently, the tsc compiler will be executed by Node.js 22
$ alternatives --display tsc
tsc - status is auto.
 link currently points to /usr/bin/tsc-22
/usr/bin/tsc-22 - priority 100
 slave tsserver: /usr/bin/tsserver-22
/usr/bin/tsc-20 - priority 100
 slave tsserver: /usr/bin/tsserver-20
Current 'best' version is /usr/bin/tsc-22.

# Check versions printed by executables
$ node -v
v20.19.5

$ tsc -v
Version 5.9.2

# while the node is 20, tsc is executed by node 22 anyway
$ head -1 /usr/bin/tsc
#!/usr/bin/node-22

# However, instead of default executable names, e.g. node or tsc,
# we can use namespaced names to target any installed version
$ node-20 -v
v20.19.5

$ node-22 -v
v22.19.0

$ tsc-20 -v
Version 5.9.2

$ tsc-22 -v
Version 5.9.2

$ head -1 /usr/bin/tsc-20
#!/usr/bin/node-20

$ head -1 /usr/bin/tsc-22
#!/usr/bin/node-22
```