

# Lambda 컨텍스트 객체를 사용하여 Java 함수 정보 검색
<a name="java-context"></a>

Lambda는 함수를 실행할 때 컨텍스트 객체를 [핸들러](java-handler.md)에 전달합니다. 이 객체는 호출, 함수 및 실행 환경에 관한 정보를 제공하는 메서드 및 속성들을 제공합니다.

**컨텍스트 메서드**
+ `getRemainingTimeInMillis()` – 실행 시간이 초과되기까지 남은 시간(밀리초)을 반환합니다.
+ `getFunctionName()` – Lambda 함수의 이름을 반환합니다.
+ `getFunctionVersion()` – 함수의 [버전](configuration-versions.md)을 반환합니다.
+ `getInvokedFunctionArn()` – 함수를 간접 호출할 때 사용하는 Amazon 리소스 이름(ARN)을 반환합니다. 간접 호출자가 버전 번호 또는 별칭을 지정했는지 여부를 나타냅니다.
+ `getMemoryLimitInMB()` – 함수에 할당된 메모리의 양을 반환합니다.
+ `getAwsRequestId()` – 호출 요청의 식별자를 반환합니다.
+ `getLogGroupName()` – 함수에 대한 로그 그룹을 반환합니다.
+ `getLogStreamName()` – 함수 인스턴스에 대한 로그 스트림을 반환합니다.
+ `getIdentity()` – (모바일 앱) 요청을 승인한 Amazon Cognito 자격 증명에 대한 정보를 반환합니다.
+ `getClientContext()` – (모바일 앱) 클라이언트 애플리케이션이 Lambda에게 제공한 클라이언트 컨텍스트를 반환합니다.
+ `getLogger()` – 함수에 대한 [로거 객체](java-logging.md)를 반환합니다.

다음 예제에서는 컨텍스트 객체를 사용하여 Lambda 로거에 액세스하는 함수를 보여 줍니다.

**Example [Handler.java](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/java-basic/src/main/java/example/Handler.java)**  

```
package example;

import [com.amazonaws.services.lambda.runtime.Context](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/Context.java);
import [com.amazonaws.services.lambda.runtime.LambdaLogger](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/LambdaLogger.java);
import [com.amazonaws.services.lambda.runtime.RequestHandler](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/RequestHandler.java);

import java.util.Map;

// Handler value: example.Handler
public class Handler implements RequestHandler<Map<String,String>, Void>{

  @Override
  public Void handleRequest(Map<String,String> event, Context context)
  {
    LambdaLogger logger = context.getLogger();
    logger.log("EVENT TYPE: " + event.getClass());
    return null;
  }
}
```

이 함수는 `null`을 반환하기 전에 수신 이벤트의 클래스 유형을 기록합니다.

**Example 로그 출력**  

```
EVENT TYPE: class java.util.LinkedHashMap
```

컨텍스트 객체에 대한 인터페이스는 [aws-lambda-java-core](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-core) 라이브러리에서 사용할 수 있습니다. 이 인터페이스를 구현하여 테스트용 컨텍스트 클래스를 만들 수 있습니다. 다음 예제에서는 대부분의 속성 및 작업 테스트 로거에 대해 더미 값을 반환하는 컨텍스트 클래스를 보여 줍니다.

**Example [src/test/java/example/TestContext.java](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/java-basic/src/test/java/example/TestContext.java)**  

```
package example;

import [com.amazonaws.services.lambda.runtime.Context](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/Context.java);
import [com.amazonaws.services.lambda.runtime.CognitoIdentity](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/CognitoIdentity.java);
import [com.amazonaws.services.lambda.runtime.ClientContext](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/ClientContext.java);
import [com.amazonaws.services.lambda.runtime.LambdaLogger](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/LambdaLogger.java);

public class TestContext implements Context{

  public TestContext() {}
  public String getAwsRequestId(){
    return new String("495b12a8-xmpl-4eca-8168-160484189f99");
  }
  public String getLogGroupName(){
    return new String("/aws/lambda/my-function");
  }
  public String getLogStreamName(){
    return new String("2020/02/26/[$LATEST]704f8dxmpla04097b9134246b8438f1a");
  }
  public String getFunctionName(){
    return new String("my-function");
  }
  public String getFunctionVersion(){
    return new String("$LATEST");
  }
  public String getInvokedFunctionArn(){
    return new String("arn:aws:lambda:us-east-2:123456789012:function:my-function");
  }
  public CognitoIdentity getIdentity(){
    return null;
  }
  public ClientContext getClientContext(){
    return null;
  }
  public int getRemainingTimeInMillis(){
    return 300000;
  }
  public int getMemoryLimitInMB(){
    return 512;
  }
  public LambdaLogger getLogger(){
    return new TestLogger();
  }

}
```

로깅에 대한 자세한 내용은 [Java Lambda 함수 로깅 및 모니터링](java-logging.md) 단원을 참조하세요.

## 샘플 애플리케이션의 컨텍스트
<a name="java-context-samples"></a>

이 안내서의 GitHub 리포지토리에는 컨텍스트 객체의 사용을 보여주는 샘플 애플리케이션이 들어 있습니다. 각 샘플 애플리케이션에는 간편한 배포 및 정리를 위한 스크립트, AWS Serverless Application Model(AWS SAM) 템플릿 및 지원 리소스가 포함되어 있습니다.

**Java의 샘플 Lambda 애플리케이션**
+ [example-java](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/example-java) – Lambda를 사용하여 주문을 처리하는 방법을 보여주는 Java 함수입니다. 이 함수는 사용자 지정 입력 이벤트 객체를 정의 및 역직렬화하고 AWS SDK를 사용하며 로깅을 출력하는 방법을 보여줍니다.
+ [java-basic](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/java-basic) – 단위 테스트 및 변수 로깅 구성을 사용하는 최소한의 Java 함수 모음입니다.
+ [java](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/java-events) - Amazon API Gateway, Amazon SQS 및 Amazon Kinesis와 같은 다양한 서비스의 이벤트를 처리하는 방법에 대한 스켈레톤 코드가 포함된 Java 함수 모음입니다. 이러한 함수는 최신 버전의 [aws-lambda-java-events](java-package.md) 라이브러리(3.0.0 이상)를 사용합니다. 이러한 예는 AWS SDK를 종속 항목으로 요구하지 않습니다.
+ [s3-java](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/s3-java) – Amazon S3의 알림 이벤트를 처리하고 JCL(Java Class Library)을 사용하여 업로드된 이미지 파일의 썸네일을 생성하는 Java 함수입니다.
+ [layer-java](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/layer-java) - Lambda 계층을 사용하여 코어 함수 코드와 별도로 종속성을 패키징하는 방법을 보여주는 Java 함수입니다.