AWS 실전 가이드
AWS의 핵심 개념과 실무 활용
학습 항목
본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
이미지 로딩 중...
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