AWS 실전 가이드
AWS의 핵심 개념과 실무 활용
학습 항목
이미지 로딩 중...
AWS Lambda 최신 기능 완벽 가이드
AWS Lambda의 최신 기능들을 실전 예제와 함께 소개합니다. 함수 URL, 스냅스타트, 레이어 등 실무에서 바로 활용 가능한 기능들을 다룹니다.
들어가며
이 글에서는 AWS Lambda 최신 기능 완벽 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- Lambda_Function_URLs
- Lambda_SnapStart_for_Java
- Lambda_Response_Streaming
- Lambda_Layers_활용
- 환경변수_암호화
- Lambda_Extensions
- 동시_실행_제어
- Lambda_Container_Images
- EventBridge_통합
- Lambda_Powertools
- Lambda_Destinations
- Lambda_Insights
1. Lambda_Function_URLs
개요
API Gateway 없이 Lambda 함수를 직접 HTTP 엔드포인트로 노출할 수 있는 기능입니다.
코드 예제
export const handler = async (event) => {
const { body, headers, requestContext } = event;
return {
statusCode: 200,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message: 'Hello from Lambda URL!' })
};
};
설명
Function URL을 통해 Lambda를 간단한 API로 즉시 사용할 수 있으며, CORS 설정도 콘솔에서 쉽게 가능합니다.
2. Lambda_SnapStart_for_Java
개요
Java Lambda 함수의 콜드 스타트 시간을 최대 10배 단축시키는 기능입니다.
코드 예제
// Lambda Handler (Java)
public class Handler implements RequestHandler<Map<String,String>, String> {
private static final MyService service = new MyService();
static {
// 초기화 로직 - SnapStart에 의해 캐시됨
service.initialize();
}
public String handleRequest(Map<String,String> event, Context context) {
return service.process(event);
}
}
설명
함수 초기화 상태를 스냅샷으로 저장해두어 후속 호출 시 빠르게 시작하며, 추가 비용 없이 사용 가능합니다.
3. Lambda_Response_Streaming
개요
대용량 데이터를 스트리밍 방식으로 반환하여 응답 시간과 메모리 사용을 최적화합니다.
코드 예제
import { Readable } from 'stream';
export const handler = awslambda.streamifyResponse(
async (event, responseStream, context) => {
for (let i = 0; i < 1000; i++) {
responseStream.write(JSON.stringify({ chunk: i }) + '\n');
await new Promise(resolve => setTimeout(resolve, 10));
}
responseStream.end();
}
);
설명
6MB 페이로드 제한을 우회하고 실시간으로 데이터를 전송할 수 있어 대용량 파일이나 스트리밍 데이터 처리에 적합합니다.
4. Lambda_Layers_활용
개요
공통 코드나 라이브러리를 레이어로 분리하여 여러 함수에서 재사용할 수 있습니다.
코드 예제
// Layer 구조: /opt/nodejs/node_modules
const utils = require('/opt/nodejs/utils');
const moment = require('moment'); // Layer에 포함된 패키지
export const handler = async (event) => {
const formatted = utils.formatDate(moment());
return {
statusCode: 200,
body: JSON.stringify({ date: formatted })
};
};
설명
함수 배포 크기를 줄이고 공통 의존성을 중앙 관리할 수 있어 개발 효율성이 크게 향상됩니다.
5. 환경변수_암호화
개요
AWS Secrets Manager나 Parameter Store와 통합하여 민감한 정보를 안전하게 관리합니다.
코드 예제
import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager';
const client = new SecretsManagerClient();
export const handler = async (event) => {
const command = new GetSecretValueCommand({ SecretId: 'my-secret' });
const response = await client.send(command);
const secret = JSON.parse(response.SecretString);
// 비밀 정보 사용
return { statusCode: 200, body: 'Success' };
};
설명
환경변수 대신 Secrets Manager를 사용하면 자동 로테이션과 버전 관리가 가능하여 보안성이 향상됩니다.
6. Lambda_Extensions
개요
모니터링, 보안, 거버넌스 도구를 Lambda 함수에 통합할 수 있는 확장 기능입니다.
코드 예제
// Lambda Extension (Node.js)
const axios = require('axios');
async function register() {
const response = await axios.post(
`http://${process.env.AWS_LAMBDA_RUNTIME_API}/2020-01-01/extension/register`,
{ events: ['INVOKE', 'SHUTDOWN'] },
{ headers: { 'Lambda-Extension-Name': 'my-extension' } }
);
return response.headers['lambda-extension-identifier'];
}
설명
함수 코드 수정 없이 로깅, APM, 보안 스캔 등의 기능을 추가할 수 있어 관찰성과 보안성을 높일 수 있습니다.
7. 동시_실행_제어
개요
함수별로 예약된 동시 실행 수를 설정하여 리소스를 안정적으로 관리합니다.
코드 예제
// AWS SDK로 동시성 설정
import { LambdaClient, PutFunctionConcurrencyCommand } from '@aws-sdk/client-lambda';
const client = new LambdaClient();
const command = new PutFunctionConcurrencyCommand({
FunctionName: 'my-function',
ReservedConcurrentExecutions: 100
});
await client.send(command);
// 이제 최대 100개의 동시 실행만 허용됨
설명
다운스트림 시스템 보호, 비용 제어, 중요 함수의 리소스 보장 등에 활용할 수 있습니다.
8. Lambda_Container_Images
개요
Docker 컨테이너 이미지를 Lambda 함수로 배포하여 최대 10GB까지 지원합니다.
코드 예제
# Dockerfile
FROM public.ecr.aws/lambda/nodejs:18
COPY package*.json ./
RUN npm ci --production
COPY . .
CMD ["index.handler"]
# Handler (index.js)
exports.handler = async (event) => {
return { statusCode: 200, body: 'Container Lambda!' };
};
설명
대용량 의존성, ML 모델, 복잡한 빌드 프로세스가 필요한 경우 컨테이너 이미지 방식이 적합합니다.
9. EventBridge_통합
개요
EventBridge와 통합하여 이벤트 기반 아키텍처를 쉽게 구현할 수 있습니다.
코드 예제
import { EventBridgeClient, PutEventsCommand } from '@aws-sdk/client-eventbridge';
const client = new EventBridgeClient();
export const handler = async (event) => {
await client.send(new PutEventsCommand({
Entries: [{
Source: 'my.app',
DetailType: 'UserSignUp',
Detail: JSON.stringify({ userId: '123', email: 'user@example.com' })
}]
}));
return { statusCode: 200 };
};
설명
느슨한 결합의 마이크로서비스 아키텍처를 구축할 수 있으며, 이벤트 필터링과 라우팅이 자동으로 처리됩니다.
10. Lambda_Powertools
개요
AWS에서 제공하는 공식 라이브러리로 로깅, 트레이싱, 메트릭을 쉽게 구현합니다.
코드 예제
import { Logger } from '@aws-lambda-powertools/logger';
import { Tracer } from '@aws-lambda-powertools/tracer';
import { Metrics } from '@aws-lambda-powertools/metrics';
const logger = new Logger();
const tracer = new Tracer();
const metrics = new Metrics();
export const handler = async (event) => {
logger.info('Processing request', { event });
metrics.addMetric('SuccessCount', 'Count', 1);
return { statusCode: 200 };
};
설명
구조화된 로깅, X-Ray 트레이싱, CloudWatch 메트릭을 자동으로 생성하여 운영 효율성을 크게 향상시킵니다.
11. Lambda_Destinations
개요
비동기 호출의 성공/실패 결과를 자동으로 다른 서비스로 라우팅합니다.
코드 예제
// Lambda 함수 설정에서 Destination 구성 후
export const handler = async (event) => {
// 비즈니스 로직 처리
if (event.shouldFail) {
throw new Error('Processing failed');
// 실패 시 자동으로 onFailure Destination으로 전송
}
return { success: true };
// 성공 시 자동으로 onSuccess Destination으로 전송
};
설명
에러 처리와 재시도 로직을 간소화하고, 실패한 이벤트를 DLQ나 다른 Lambda로 자동 전송할 수 있습니다.
12. Lambda_Insights
개요
CloudWatch Lambda Insights로 성능 메트릭과 진단 정보를 자동으로 수집합니다.
코드 예제
// Lambda 레이어로 추가 후 별도 코드 없이 사용
export const handler = async (event) => {
// 일반 비즈니스 로직
const result = await processData(event);
return {
statusCode: 200,
body: JSON.stringify(result)
};
};
// CloudWatch에서 자동으로 수집되는 메트릭:
// - CPU/메모리 사용률, 콜드 스타트, 네트워크 I/O 등
설명
별도 코드 없이 상세한 성능 메트릭을 수집하여 병목 지점을 빠르게 파악하고 최적화할 수 있습니다.
마치며
이번 글에서는 AWS Lambda 최신 기능 완벽 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#AWS #Lambda #Serverless #FunctionURL #SnapStart