

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

AWS Lambda에서 Java 코드를 실행할 수 있습니다. Lambda는 이벤트 처리를 위해 코드를 실행하는 Java를 위한 [런타임](lambda-runtimes.md)을 제공합니다. 코드는 사용자가 관리하는 AWS Identity and Access Management(IAM) 역할의 AWS 자격 증명이 포함된 Amazon Linux 환경에서 실행됩니다.

Lambda는 다음과 같은 Java 런타임을 지원합니다.<a name="java-runtimes"></a>


| 이름 | 식별자 | 운영 체제 | 사용 중단 날짜 | 블록 함수 생성 | 블록 함수 업데이트 | 
| --- | --- | --- | --- | --- | --- | 
| Java 25 | `java25` | Amazon Linux 2023 |  2029년 6월 30일  |  2029년 7월 31일  |  2029년 8월 31일  | 
| Java 21 | `java21` | Amazon Linux 2023 |  2029년 6월 30일  |  2029년 7월 31일  |  2029년 8월 31일  | 
| Java 17 | `java17` | Amazon Linux 2 |  2027년 6월 30일  |  2027년 7월 31일  |  2027년 8월 31일  | 
| Java 11 | `java11` | Amazon Linux 2 |  2027년 6월 30일  |  2027년 7월 31일  |  2027년 8월 31일  | 
| Java 8 | `java8.al2` | Amazon Linux 2 |  2027년 6월 30일  |  2027년 7월 31일  |  2027년 8월 31일  | 

AWS는 Java 함수를 위한 다음 라이브러리를 제공합니다. 이 라이브러리는 [Maven Central Repository](https://search.maven.org/search?q=g:com.amazonaws)를 통해 사용할 수 있습니다.
+ [com.amazonaws:aws-lambda-java-core](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-core)(필수) – 핸들러 메서드 인터페이스와 런타임이 핸들러에 전달하는 컨텍스트 객체를 정의합니다. 고유한 입력 유형을 정의하는 경우 이 라이브러리만 필요합니다.
+ [com.amazonaws:aws-lambda-java-events](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-events) – Lambda 함수를 간접 호출하는 서비스의 이벤트 입력 유형입니다.
+ [com.amazonaws:aws-lambda-java-log4j2](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-log4j2) – 현재 호출의 요청 ID를 [함수 로그](java-logging.md)에 추가하는 데 사용할 수 있는 Apache Log4j 2용 appender 라이브러리입니다.
+ [AWS SDK for Java 2.0](https://github.com/aws/aws-sdk-java-v2): Java 프로그래밍 언어용 공식 AWS SDK입니다.
+ [Java용 AWS Lambda 지속성 실행 SDK](https://github.com/aws/aws-durable-execution-sdk-java) - 진행 상황을 확인하고, 장애로부터 자동으로 복구하며, 실행을 일시 중지하는 안정적인 여러 단계의 애플리케이션 및 AI 워크플로를 구축합니다. 자세한 내용은 [Lambda 지속성 함수](durable-functions.md)를 참조하세요.

다음과 같이 빌드 정의에 이러한 라이브러리를 추가하세요.

------
#### [ Gradle ]

```
dependencies {
    implementation 'com.amazonaws:aws-lambda-java-core:1.2.2'
    implementation 'com.amazonaws:aws-lambda-java-events:3.11.1'
    runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.5.1'
    implementation 'software.amazon.lambda.durable:aws-durable-execution-sdk-java:1.0.1'
}
```

------
#### [ Maven ]

```
  <dependencies>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-core</artifactId>
      <version>1.2.2</version>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-events</artifactId>
      <version>3.11.1</version>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-log4j2</artifactId>
      <version>1.5.1</version>
    </dependency>
    <dependency>
      <groupId>software.amazon.lambda.durable</groupId>
      <artifactId>aws-durable-execution-sdk-java</artifactId>
      <version>1.0.1</version>
    </dependency>
  </dependencies>
```

------

**중요**  
프라이빗 필드, 메서드 또는 클래스와 같은 JDK API의 프라이빗 구성 요소를 사용하지 않습니다. 퍼블릭 API가 아닌 API 구성 요소는 변경되거나 업데이트 시 제거될 수 있으며, 이로 인해 애플리케이션이 중단될 수 있습니다.

**Java 함수를 만들려면**

1. [Lambda 콘솔](https://console.aws.amazon.com/lambda)을 엽니다.

1. **함수 생성**을 선택합니다.

1. 다음 설정을 구성합니다:
   + **함수 이름**: 함수의 이름을 입력합니다.
   + **런타임**: **Java 25**을 선택합니다.

1. **함수 생성**을 선택합니다.

콘솔은 `Hello`라는 핸들러 클래스를 사용하여 Lambda 함수를 만듭니다. Java는 컴파일된 언어이므로 Lambda 콘솔에서 소스 코드를 보거나 편집할 수 없지만 구성을 수정하고 간접 호출하고 트리거를 구성할 수 있습니다.

**참고**  
로컬 환경에서 애플리케이션 개발을 시작하려면 이 가이드의 GitHub 리포지토리에서 사용할 수 있는 [샘플 애플리케이션](java-samples.md) 중 하나를 배포하세요.

`Hello` 클래스에는 이벤트 객체와 컨텍스트 객체를 취하는 `handleRequest`라는 이름의 함수가 있습니다. 이는 함수가 간접 호출될 때 Lambda가 간접 호출하는 [핸들러 함수](java-handler.md)입니다. Java 함수 런타임은 Lambda에서 호출 이벤트를 가져와 핸들러로 전달합니다. 함수 구성에서 핸들러 값은 `example.Hello::handleRequest`입니다.

함수의 코드를 업데이트하려면 함수 코드가 포함된 .zip 파일 아카이브인 배포 패키지를 작성합니다. 함수 개발이 진행되면 소스 제어에 함수 코드를 저장하고 라이브러리를 추가하며 배포를 자동화할 필요가 있습니다. 먼저 [배포 패키지를 생성](java-package.md)하고 명령줄에서 코드를 업데이트하세요.

함수 런타임은 호출 이벤트 외에도 컨텍스트 객체를 핸들러에 전달합니다. [컨텍스트 객체](java-context.md)에는 호출, 함수 및 실행 환경에 관한 추가 정보가 포함되어 있습니다. 자세한 내용은 환경 변수에서 확인할 수 있습니다.

Lambda 함수는 CloudWatch Logs 로그 그룹을 함께 제공됩니다. 함수 런타임은 각 호출에 대한 세부 정보를 CloudWatch Logs에 보냅니다. 호출 중 [함수가 출력하는 로그](java-logging.md)를 전달합니다. 함수가 오류를 반환하면 Lambda은 오류에 서식을 지정한 후 이를 간접 호출자에게 반환합니다.

**Topics**
+ [Java에서 Lambda 함수 핸들러 정의](java-handler.md)
+ [.zip 또는 JAR 파일 아카이브를 사용하여 Java Lambda 함수 배포](java-package.md)
+ [컨테이너 이미지로 Java Lambda 함수 배포](java-image.md)
+ [Java Lambda 함수를 위한 계층 작업](java-layers.md)
+ [Lambda Java 함수의 직렬화 사용자 지정](java-custom-serialization.md)
+ [Lambda 함수의 Java 런타임 시작 동작에 대한 사용자 지정](java-customization.md)
+ [Lambda 컨텍스트 객체를 사용하여 Java 함수 정보 검색](java-context.md)
+ [Java Lambda 함수 로깅 및 모니터링](java-logging.md)
+ [AWS Lambda에서 Java 코드 계측](java-tracing.md)
+ [AWS Lambda용 Java 샘플 애플리케이션](java-samples.md)