

# TypeScript를 사용하여 Lambda 함수 빌드
<a name="lambda-typescript"></a>

Node.js 런타임을 사용하여 AWS Lambda에서 TypeScript 코드를 실행할 수 있습니다. Node.js 는 기본적으로 TypeScript 코드를 실행하지 않으므로 먼저 TypeScript 코드를 JavaScript로 트랜스파일해야 합니다. 그런 다음 JavaScript 파일을 사용하여 함수 코드를 Lambda에 배포합니다. 코드는 사용자가 관리하는 AWS Identity and Access Management(IAM) 역할의 자격 증명을 사용하여 JavaScript용 AWS SDK가 포함된 환경에서 실행됩니다. Node.js 런타임에 포함된 SDK 버전에 대해 자세히 알아보려면 [런타임에 포함된 SDK 버전](lambda-nodejs.md#nodejs-sdk-included) 섹션을 참조하세요.

Lambda는 다음과 같은 Node.js 런타임을 지원합니다.


| 이름 | 식별자 | 운영 체제 | 사용 중단 날짜 | 블록 함수 생성 | 블록 함수 업데이트 | 
| --- | --- | --- | --- | --- | --- | 
| Node.js 24 | `nodejs24.x` | Amazon Linux 2023 |  2028년 4월 30일  |  2028년 6월 1일  |  2028년 7월 1일  | 
| Node.js 22 | `nodejs22.x` | Amazon Linux 2023 |  2027년 4월 30일  |  2027년 6월 1일  |  2027년 7월 1일  | 
| Node.js 20 | `nodejs20.x` | Amazon Linux 2023 |  2026년 4월 30일  |  2026년 8월 31일  |  2026년 9월 30일  | 

**Topics**
+ [TypeScript 개발 환경 설정](#typescript-dev)
+ [Lambda에 대한 유형 정의](#typescript-type-definitions)
+ [TypeScript에서 Lambda 함수 핸들러 정의](typescript-handler.md)
+ [.zip 파일 아카이브를 사용하여 Lambda에 트랜스파일된 TypeScript 코드 배포](typescript-package.md)
+ [컨테이너 이미지를 사용하여 Lambda에 트랜스파일된 TypeScript 코드 배포](typescript-image.md)
+ [Lambda 컨텍스트 객체를 사용하여 TypeScript 함수 정보 검색](typescript-context.md)
+ [TypeScript Lambda 함수 로깅 및 모니터링](typescript-logging.md)
+ [AWS Lambda에서 TypeScript 코드 추적](typescript-tracing.md)

## TypeScript 개발 환경 설정
<a name="typescript-dev"></a>

로컬 통합 개발 환경(IDE) 또는 텍스트 편집기를 사용하여 TypeScript 함수 코드를 작성합니다. Lambda 콘솔에서는 TypeScript 코드를 생성할 수 없습니다.

[esbuild](https://esbuild.github.io/) 또는 Microsoft의 TypeScript 컴파일러(`tsc`)를 사용하여 TypeScript 코드를 JavaScript로 트랜스파일할 수 있습니다. [AWS Serverless Application Model(AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started.html)와 [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) 모두 esbuild를 사용합니다.

esbuild를 사용할 경우 다음을 고려하세요.
+ [TypeScript 경고](https://esbuild.github.io/content-types/#typescript-caveats)에는 여러 종류가 있습니다.
+ 사용하려는 Node.js 런타임과 일치하도록 TypeScript 변환 설정을 구성해야 합니다. 자세한 내용은 esbuild 설명서의 [Target(대상)](https://esbuild.github.io/api/#target)을 참조하세요. Lambda에서 지원하는 특정 Node.js 버전을 타겟팅하는 방법을 보여주는 **tsconfig.json** 파일의 예는 [TypeScript GitHub 저장소](https://github.com/tsconfig/bases/blob/main/bases/node14.json)를 참조하세요.
+ esbuild는 유형 검사를 수행하지 않습니다. 유형을 확인하려면 `tsc` 컴파일러를 사용합니다. 다음 예에 표시된 대로 `tsc -noEmit`을 실행하거나 **tsconfig.json** 파일에 `"noEmit"` 파라미터를 추가합니다. 이렇게 하면 `tsc`를 구성하여 JavaScript 파일을 방출하지 않습니다. 유형을 확인한 후 esbuild를 사용하여 TypeScript 파일을 JavaScript로 변환합니다.

**Example tsconfig.json**  

```
 {
  "compilerOptions": {
    "target": "es2020",
    "strict": true,
    "preserveConstEnums": true,
    "noEmit": true,
    "sourceMap": false,
    "module":"commonjs",
    "moduleResolution":"node",
    "esModuleInterop": true, 
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true, 
    "isolatedModules": true, 
  },
  "exclude": ["node_modules", "**/*.test.ts"]
}
```

## Lambda에 대한 유형 정의
<a name="typescript-type-definitions"></a>

[@types/aws-lambda](https://www.npmjs.com/package/@types/aws-lambda) 패키지는 Lambda 함수에 대한 유형 정의를 제공합니다. 함수가 다음 중 하나를 사용하는 경우 이 패키지를 설치합니다.
+ 다음과 같은 일반적인 AWS 이벤트 소스:
  + `APIGatewayProxyEvent`: [Amazon API Gateway 프록시 통합](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html)용 
  + `SNSEvent`: [Amazon Simple Notification Service 알림](with-sns.md)용
  + `SQSEvent`: [Amazon Simple Queue Service 메시지](with-sqs.md)용
  + `S3Event`: [S3 트리거 이벤트](with-s3.md)용
  + `DynamoDBStreamEvent`: [Amazon DynamoDB Streams](with-ddb.md)용
+ Lambda [컨텍스트](typescript-context.md) 객체
+ [콜백](typescript-handler.md#typescript-handler-callback) 핸들러 패턴

함수에 Lambda 유형 정의를 추가하려면 `@types/aws-lambda`를 개발 종속성으로 설치합니다.

```
npm install -D @types/aws-lambda
```

그런 다음 `aws-lambda`에서 유형을 가져옵니다.

```
import { Context, S3Event, APIGatewayProxyEvent } from 'aws-lambda';

export const handler = async (event: S3Event, context: Context) => {
    // Function code
};
```

`import ... from 'aws-lambda'` 문은 유형 정의를 가져옵니다. 관련 없는 타사 도구인 `aws-lambda` npm 패키지는 가져오지 않습니다. 자세한 내용은 DefinitelyTyped GitHub 리포지토리의 [aws-lambda](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/aws-lambda)를 참조하세요.

**참고**  
자체 사용자 지정 유형 정의를 사용할 때는 [@types/aws-lambda](https://www.npmjs.com/package/@types/aws-lambda)가 필요 없습니다. 이벤트 객체에 대한 자체 유형을 정의하는 함수 예제는 [예제 TypeScript Lambda 함수 코드](typescript-handler.md#typescript-example-code) 섹션을 참조하세요.