🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

AWS Lambda 함수 생성 완벽 가이드 - 슬라이드 1/7
A

AI Generated

2025. 12. 19. · 10 Views

AWS Lambda 함수 생성 완벽 가이드

AWS Lambda 함수를 처음 만드는 분들을 위한 완벽 가이드입니다. 콘솔에서 함수를 생성하고, 코드를 작성하고, 테스트까지 실전처럼 진행해봅니다. 서버 관리 없이 코드만으로 서비스를 운영하는 방법을 배워봅니다.


목차

  1. Lambda란_무엇인가
  2. 콘솔에서_함수_생성
  3. 코드_작성과_배포
  4. 테스트_이벤트_생성
  5. 실행_결과_확인
  6. 로그_확인하기

1. Lambda란 무엇인가

신입 개발자 김개발 씨는 회사에서 간단한 API를 만들라는 업무를 받았습니다. 그런데 선배 박시니어 씨가 이렇게 말합니다.

"서버 띄우지 말고 Lambda로 만들어봐요. 훨씬 간단해요."

AWS Lambda는 서버를 직접 관리하지 않고도 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다. 필요할 때만 코드가 실행되고, 실행된 시간만큼만 비용을 지불합니다.

EC2처럼 서버를 24시간 켜둘 필요가 없어서 비용과 관리 부담을 크게 줄일 수 있습니다.

다음 코드를 살펴봅시다.

# Lambda 함수의 기본 구조
def lambda_handler(event, context):
    # event: 함수 호출 시 전달되는 입력 데이터
    # context: 실행 환경 정보를 담은 객체

    print("Lambda 함수가 실행되었습니다!")

    # 간단한 응답 반환
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }

김개발 씨는 처음에는 선배의 말이 이해가 되지 않았습니다. 서버 없이 어떻게 코드가 실행된다는 걸까요?

모든 프로그램은 서버에서 돌아가는 것 아닌가요? 박시니어 씨가 친절하게 설명해줍니다.

"물론 실제로는 AWS의 서버에서 실행되는 거예요. 하지만 우리가 그 서버를 관리할 필요가 없다는 게 핵심이죠." Lambda가 필요한 이유 전통적인 방식으로 API를 만든다면 어떻게 해야 할까요?

먼저 EC2 인스턴스를 생성해야 합니다. 운영체제를 선택하고, 보안 설정을 하고, 웹 서버를 설치해야 합니다.

그다음 애플리케이션을 배포하고, 모니터링을 설정하고, 자동 스케일링을 구성해야 합니다. 서버가 다운되지 않도록 헬스체크도 설정해야 하죠.

더 큰 문제는 사용자가 거의 없는 시간에도 서버는 24시간 돌아간다는 것입니다. 새벽 2시에 접속자가 없어도 서버는 켜져 있고, 그만큼 비용이 청구됩니다.

마치 손님이 없는 심야 시간에도 24시간 편의점을 운영하는 것과 같습니다. Lambda의 작동 방식 Lambda는 이런 고민을 한 방에 해결합니다.

마치 택시를 부르는 것과 같습니다. 자동차를 소유하고 관리할 필요 없이, 필요할 때만 택시를 부르면 됩니다.

Lambda도 마찬가지입니다. 누군가 API를 호출하면 그때 Lambda가 실행되고, 작업이 끝나면 자동으로 종료됩니다.

구체적으로는 이렇게 작동합니다. 사용자가 API Gateway를 통해 요청을 보내면, AWS는 Lambda 함수를 실행할 컨테이너를 준비합니다.

그 안에서 우리가 작성한 코드가 실행되고, 결과를 반환하면 컨테이너는 다시 회수됩니다. 이 모든 과정이 몇 초 안에 일어납니다.

비용 구조의 혁신 Lambda의 가장 큰 장점은 사용한 만큼만 지불한다는 것입니다. 매달 100만 건의 요청까지는 무료입니다.

각 요청이 평균 100밀리초만 실행된다면, 월 10만 건 정도의 트래픽은 거의 무료로 처리할 수 있습니다. 스타트업이나 개인 프로젝트에는 완벽한 선택입니다.

실제로 계산해보겠습니다. 하루에 1,000번 호출되고, 각 실행이 200밀리초 걸리는 API가 있다면, 한 달 비용은 1달러도 안 됩니다.

같은 서비스를 EC2로 운영하면 최소 월 10달러 이상은 나옵니다. Lambda 함수의 구조 위의 코드를 보면 Lambda 함수는 매우 간단합니다.

모든 Lambda 함수는 lambda_handler라는 이름의 함수로 시작합니다. 이것이 진입점입니다.

두 개의 매개변수를 받는데, event에는 함수를 호출할 때 전달된 데이터가 들어있고, context에는 실행 환경에 대한 정보가 담겨 있습니다. 반환값은 딕셔너리 형태입니다.

statusCode는 HTTP 상태 코드이고, body는 실제 응답 내용입니다. 이 구조만 지키면 어떤 로직이든 Lambda에서 실행할 수 있습니다.

언제 Lambda를 사용해야 할까 Lambda는 모든 상황에 완벽한 해결책은 아닙니다. 간단한 API, 이미지 처리, 로그 분석, 예약된 작업 같은 경우에 적합합니다.

반대로 15분 이상 실행되는 작업이나, 대용량 메모리가 필요한 작업, 항상 떠 있어야 하는 웹소켓 서버 같은 경우는 적합하지 않습니다. 김개발 씨는 이제 이해가 됩니다.

자신이 만들 API는 하루에 몇 번만 호출되는 간단한 기능입니다. 서버를 24시간 켜둘 필요가 전혀 없죠.

Lambda가 완벽한 선택입니다.

실전 팁

💡 - Lambda는 월 100만 건 요청까지 무료이므로 소규모 프로젝트에 적합합니다

  • 실행 시간이 15분을 넘는 작업은 Lambda 대신 ECS나 Batch를 고려하세요

2. 콘솔에서 함수 생성

김개발 씨는 이제 실제로 Lambda 함수를 만들어보기로 했습니다. AWS 콘솔에 로그인하고 Lambda 서비스를 찾았는데, 옵션이 너무 많아서 어디서부터 시작해야 할지 막막합니다.

AWS 콘솔에서 Lambda 함수를 생성하는 과정은 매우 직관적입니다. 함수 이름런타임만 선택하면 기본 함수가 만들어집니다.

처음에는 기본 설정으로 시작하고, 나중에 필요에 따라 메모리나 타임아웃 같은 옵션을 조정할 수 있습니다.

다음 코드를 살펴봅시다.

# AWS 콘솔에서 생성되는 기본 Lambda 함수
import json

def lambda_handler(event, context):
    # TODO: 여기에 비즈니스 로직을 작성하세요
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

박시니어 씨가 옆에서 화면을 보며 알려줍니다. "걱정 마세요.

생각보다 훨씬 간단해요." Lambda 콘솔 찾기 AWS 콘솔에 로그인하면 수많은 서비스가 보입니다. 검색창에 "Lambda"라고 입력하면 바로 찾을 수 있습니다.

또는 서비스 메뉴에서 "컴퓨팅" 카테고리를 펼치면 Lambda가 있습니다. Lambda 대시보드에 들어가면 주황색 버튼이 눈에 띕니다.

"함수 생성" 버튼입니다. 이것을 클릭하면 함수 생성 화면으로 넘어갑니다.

세 가지 생성 옵션 함수 생성 화면에는 세 가지 옵션이 있습니다. 첫 번째는 **"새로 작성"**입니다.

완전히 빈 상태에서 시작하는 방법입니다. 대부분의 경우 이것을 선택합니다.

두 번째는 "블루프린트 사용"인데, AWS가 미리 만들어둔 템플릿을 사용하는 방법입니다. 세 번째는 "컨테이너 이미지"로, 도커 이미지를 사용하는 고급 옵션입니다.

김개발 씨는 박시니어 씨의 조언대로 "새로 작성"을 선택합니다. 함수 이름 정하기 함수 이름은 AWS 계정 내에서 고유해야 합니다.

마치 변수명을 짓듯이 의미 있는 이름을 사용하는 것이 좋습니다. 예를 들어 사용자 정보를 조회하는 API라면 "getUserInfo"나 "user-info-api" 같은 이름을 사용합니다.

김개발 씨는 "myFirstLambda"라고 입력했습니다. 함수 이름에는 영문자, 숫자, 하이픈, 밑줄만 사용할 수 있습니다.

대소문자를 구분하므로 주의해야 합니다. 런타임 선택 런타임은 함수가 실행될 프로그래밍 언어 환경을 의미합니다.

Python, Node.js, Java, Go, Ruby, .NET 등 다양한 언어를 지원합니다. 각 언어마다 여러 버전이 있는데, 최신 버전을 선택하는 것이 좋습니다.

김개발 씨는 Python을 잘 알고 있어서 "Python 3.12"를 선택했습니다. 런타임은 나중에 변경할 수 없습니다.

언어를 바꾸고 싶다면 새 함수를 만들어야 합니다. 권한 설정 함수가 다른 AWS 서비스를 사용하려면 권한이 필요합니다.

기본적으로 Lambda는 실행 역할을 자동으로 만들어줍니다. 이 역할에는 CloudWatch Logs에 로그를 쓸 수 있는 권한만 포함되어 있습니다.

나중에 S3나 DynamoDB 같은 서비스를 사용하려면 권한을 추가해야 합니다. 처음에는 기본 설정을 그대로 사용하는 것이 안전합니다.

"기본 Lambda 권한을 가진 새 역할 생성"을 선택하면 됩니다. 고급 설정 아래쪽을 보면 "고급 설정"이라는 펼침 메뉴가 있습니다.

여기서는 VPC, 환경 변수, 태그 같은 옵션을 설정할 수 있습니다. 하지만 처음 만들 때는 건드리지 않아도 됩니다.

모든 옵션은 나중에 함수 설정에서 변경할 수 있습니다. 김개발 씨는 고급 설정은 그냥 넘어갑니다.

함수 생성 완료 모든 설정을 마치고 "함수 생성" 버튼을 클릭합니다. 몇 초 후 화면이 바뀌면서 함수 코드 편집기가 나타납니다.

위쪽에 "myFirstLambda 함수가 생성되었습니다"라는 녹색 배너가 보입니다. 성공입니다!

코드 편집기에는 이미 기본 코드가 작성되어 있습니다. AWS가 자동으로 만들어준 샘플 코드입니다.

이 코드는 그대로 실행할 수 있는 완전한 Lambda 함수입니다. 김개발 씨는 신기한 마음에 코드를 살펴봅니다.

json 모듈을 import하고, lambda_handler 함수가 있고, statusCode와 body를 반환합니다. 딱 아까 배운 구조 그대로입니다.

실전 팁

💡 - 함수 이름은 나중에 변경할 수 없으므로 신중하게 정하세요

  • 처음에는 Python이나 Node.js 런타임을 추천합니다. 학습 자료가 많습니다

3. 코드 작성과 배포

이제 김개발 씨는 자신만의 코드를 작성해보고 싶어졌습니다. 기본 코드 대신 실제로 동작하는 의미 있는 로직을 넣어보기로 합니다.

박시니어 씨가 말합니다. "간단한 계산기 API를 만들어보는 게 어때요?"

Lambda 함수의 코드는 AWS 콘솔의 코드 편집기에서 바로 작성할 수 있습니다. 코드를 수정한 후에는 반드시 Deploy 버튼을 눌러야 변경사항이 반영됩니다.

배포는 몇 초 안에 완료되며, 배포가 끝나면 즉시 새 코드로 함수가 실행됩니다.

다음 코드를 살펴봅시다.

import json

def lambda_handler(event, context):
    # event에서 두 숫자와 연산자를 받습니다
    num1 = event.get('num1', 0)
    num2 = event.get('num2', 0)
    operation = event.get('operation', 'add')

    # 연산 수행
    if operation == 'add':
        result = num1 + num2
    elif operation == 'subtract':
        result = num1 - num2
    elif operation == 'multiply':
        result = num1 * num2
    elif operation == 'divide':
        result = num1 / num2 if num2 != 0 else 'Error: Division by zero'
    else:
        result = 'Error: Invalid operation'

    # 결과 반환
    return {
        'statusCode': 200,
        'body': json.dumps({
            'num1': num1,
            'num2': num2,
            'operation': operation,
            'result': result
        })
    }

김개발 씨는 코드 편집기 화면을 보고 있습니다. 마치 VSCode 같은 익숙한 편집기 화면입니다.

코드 편집기 살펴보기 화면 중앙에 큰 코드 편집기가 있습니다. 왼쪽에는 파일 트리가 보이고, 오른쪽에는 코드가 표시됩니다.

기본적으로 "lambda_function.py"라는 파일이 열려 있습니다. 편집기는 문법 강조 기능을 지원합니다.

키워드는 파란색으로, 문자열은 초록색으로 표시됩니다. 들여쓰기도 자동으로 맞춰집니다.

브라우저에서 코딩하는 것이지만 생각보다 쾌적합니다. 계산기 로직 작성 김개발 씨는 기존 코드를 지우고 새로운 코드를 작성하기 시작합니다.

먼저 event 객체에서 데이터를 추출합니다. event.get() 메서드를 사용하면 키가 없을 때 기본값을 반환할 수 있어 안전합니다.

num1과 num2는 숫자이고, operation은 어떤 연산을 할지 나타내는 문자열입니다. 다음으로 operation 값에 따라 분기합니다.

'add'면 덧셈, 'subtract'면 뺄셈, 'multiply'면 곱셈, 'divide'면 나눗셈을 수행합니다. 나눗셈에서는 0으로 나누는 경우를 체크하는 것이 중요합니다.

실수하기 쉬운 부분입니다. JSON으로 응답하기 계산 결과를 그냥 문자열로 반환할 수도 있지만, JSON 형태로 반환하면 더 체계적입니다.

**json.dumps()**를 사용하면 Python 딕셔너리를 JSON 문자열로 변환할 수 있습니다. 클라이언트는 이 JSON을 파싱해서 각 필드를 사용할 수 있습니다.

API를 만들 때는 항상 구조화된 응답을 반환하는 것이 좋습니다. 박시니어 씨가 코드를 보고 고개를 끄덕입니다.

"좋아요. 이제 배포해볼까요?" Deploy 버튼의 중요성 코드를 수정했다고 해서 바로 반영되는 것이 아닙니다.

코드 편집기 위쪽을 보면 "Deploy"라는 주황색 버튼이 있습니다. 이것을 클릭해야 비로소 변경사항이 저장되고 배포됩니다.

배포하지 않으면 테스트할 때 이전 코드가 실행됩니다. 초보자가 흔히 하는 실수입니다.

김개발 씨는 Deploy 버튼을 클릭합니다. 버튼 옆에 작은 로딩 아이콘이 돌아갑니다.

몇 초 후 "Changes deployed"라는 녹색 메시지가 나타납니다. 배포 과정 배포할 때 AWS는 무엇을 할까요?

우리가 작성한 코드를 압축해서 S3에 저장합니다. 그리고 Lambda 서비스가 이 새로운 코드를 사용하도록 설정을 업데이트합니다.

다음번에 함수가 호출되면 새 코드가 실행됩니다. 배포는 보통 5초 이내에 완료됩니다.

대규모 패키지를 포함한 복잡한 함수도 1분을 넘지 않습니다. 전통적인 서버 배포에 비하면 놀라울 정도로 빠릅니다.

코드 버전 관리 배포할 때마다 Lambda는 자동으로 새 버전을 만들어줍니다. 함수 화면 위쪽에 "버전" 탭이 있습니다.

여기서 이전 버전으로 롤백할 수도 있습니다. 실수로 버그가 있는 코드를 배포했다면, 클릭 몇 번으로 이전 버전으로 되돌릴 수 있습니다.

다만 기본적으로는 모든 호출이 $LATEST 버전을 사용합니다. 이것은 항상 가장 최신 코드를 가리킵니다.

로컬 개발 vs 콘솔 개발 브라우저에서 코드를 작성하는 것이 불편하다면 로컬에서 개발할 수도 있습니다. AWS SAM이나 Serverless Framework 같은 도구를 사용하면 로컬 환경에서 코드를 작성하고 테스트한 후 배포할 수 있습니다.

하지만 간단한 함수라면 콘솔에서 바로 작성하는 것이 가장 빠릅니다. 김개발 씨는 이제 자신만의 Lambda 함수 코드를 완성했습니다.

배포도 성공했습니다. 이제 실제로 작동하는지 테스트해볼 차례입니다.

실전 팁

💡 - 코드를 수정한 후 반드시 Deploy 버튼을 눌러야 반영됩니다

  • 복잡한 로직은 로컬에서 개발하고 SAM CLI로 배포하는 것을 추천합니다

4. 테스트 이벤트 생성

코드를 배포했지만 김개발 씨는 궁금합니다. 실제로 작동하는지 어떻게 확인할까요?

아직 API Gateway를 연결하지 않았는데 말이죠. 박시니어 씨가 웃으며 말합니다.

"테스트 이벤트로 바로 테스트할 수 있어요."

Lambda 콘솔에서는 테스트 이벤트를 만들어 함수를 즉시 실행해볼 수 있습니다. 테스트 이벤트는 JSON 형태로 작성하며, 실제 호출 시 전달될 데이터를 시뮬레이션합니다.

여러 개의 테스트 이벤트를 저장해두고 다양한 시나리오를 테스트할 수 있습니다.

다음 코드를 살펴봅시다.

{
  "num1": 10,
  "num2": 5,
  "operation": "add"
}

화면 위쪽에 "Test" 탭이 보입니다. 김개발 씨는 그것을 클릭합니다.

테스트 탭 이해하기 테스트 탭으로 이동하면 큰 JSON 편집기가 나타납니다. 여기에 event 객체에 전달될 데이터를 작성하면 됩니다.

마치 함수를 직접 호출하는 것과 같습니다. 다만 실제 API Gateway나 S3 같은 트리거 대신, 우리가 수동으로 데이터를 만들어 전달하는 것입니다.

개발 중에 매우 유용한 기능입니다. 첫 번째 테스트 이벤트 만들기 "새 이벤트 생성"을 선택합니다.

이벤트 이름을 입력하라는 필드가 나타납니다. 김개발 씨는 "addTest"라고 입력합니다.

덧셈을 테스트하는 이벤트라는 의미입니다. 이벤트 이름은 여러 테스트를 구분하는 용도로 사용됩니다.

아래쪽 편집기에는 기본 템플릿이 보입니다. 복잡한 구조의 JSON인데, 우리 함수에는 필요 없습니다.

전부 지우고 간단한 JSON을 작성합니다. JSON 구조 작성 우리 함수는 num1, num2, operation 세 개의 값을 받습니다.

JSON에서는 문자열은 큰따옴표로 감싸고, 숫자는 그냥 씁니다. num1에 10을, num2에 5를 넣고, operation에는 "add"를 넣습니다.

이렇게 하면 10 + 5를 계산하는 테스트가 됩니다. JSON 문법을 틀리면 에러가 발생하므로 주의해야 합니다.

마지막 항목 뒤에 쉼표를 붙이면 안 됩니다. 중괄호와 대괄호도 정확히 맞춰야 합니다.

다양한 테스트 케이스 준비 하나의 테스트만으로는 부족합니다. 여러 상황을 테스트해야 합니다.

박시니어 씨의 조언대로 김개발 씨는 여러 테스트 이벤트를 만들기로 합니다. "subtractTest"는 뺄셈을 테스트하고, "divideByZeroTest"는 0으로 나누는 예외 상황을 테스트합니다.

"invalidOperationTest"는 잘못된 연산자를 입력했을 때 어떻게 되는지 확인합니다. 각 테스트 이벤트를 저장하면 드롭다운 메뉴에 추가됩니다.

나중에 필요할 때 선택해서 바로 실행할 수 있습니다. 템플릿 활용하기 AWS는 다양한 이벤트 템플릿을 제공합니다.

"템플릿" 드롭다운을 열면 API Gateway, S3, DynamoDB 등 여러 서비스의 샘플 이벤트가 있습니다. 예를 들어 S3 템플릿을 선택하면, S3에 파일이 업로드될 때 Lambda로 전달되는 실제 이벤트 구조를 볼 수 있습니다.

처음에는 이런 템플릿을 보고 각 서비스가 어떤 형태로 데이터를 전달하는지 공부하는 것도 좋습니다. 테스트 이벤트 저장 JSON 작성을 마치고 "저장" 버튼을 클릭합니다.

화면 위쪽의 드롭다운 메뉴에 "addTest"가 추가되었습니다. 이제 언제든지 이 테스트를 실행할 수 있습니다.

코드를 수정할 때마다 저장된 테스트로 빠르게 확인할 수 있어서 매우 편리합니다. 실행 준비 완료 테스트 이벤트가 준비되었습니다.

이제 "Test" 버튼을 누르면 함수가 실행됩니다. 김개발 씨는 설레는 마음으로 버튼을 바라봅니다.

자신이 작성한 코드가 정말 작동할까요? 결과는 어떻게 표시될까요?

박시니어 씨가 격려합니다. "한번 눌러보세요.

걱정 마세요. 테스트는 실제 서비스에 영향을 주지 않아요."

실전 팁

💡 - 정상 케이스뿐만 아니라 에러 케이스도 꼭 테스트하세요

  • 테스트 이벤트는 여러 개 만들어두고 상황에 맞게 선택해서 사용하세요

5. 실행 결과 확인

김개발 씨가 떨리는 마음으로 "Test" 버튼을 클릭했습니다. 화면에 로딩 아이콘이 잠깐 돌더니 결과 창이 나타났습니다.

초록색 배경에 "Execution result: succeeded"라는 메시지가 보입니다!

테스트를 실행하면 Lambda는 즉시 함수를 실행하고 결과를 화면에 표시합니다. 실행 결과에는 함수가 반환한 값, 실행 시간, 메모리 사용량 등의 정보가 포함됩니다.

성공하면 초록색으로, 실패하면 빨간색으로 표시되어 한눈에 상태를 파악할 수 있습니다.

다음 코드를 살펴봅시다.

# 실행 결과 예시 (Lambda가 반환하는 응답)
{
  "statusCode": 200,
  "body": "{\"num1\": 10, \"num2\": 5, \"operation\": \"add\", \"result\": 15}"
}

# 실행 요약 정보
Duration: 1.23 ms
Billed Duration: 2 ms
Memory Size: 128 MB
Max Memory Used: 38 MB

김개발 씨는 신기한 표정으로 결과 화면을 살펴봅니다. 여러 섹션으로 나뉘어 있습니다.

실행 상태 확인 가장 위쪽에 큰 초록색 박스가 있습니다. "Execution result: succeeded"라고 쓰여 있습니다.

성공했다는 의미입니다. 만약 코드에서 에러가 발생했다면 빨간색으로 "Execution result: failed"가 표시됩니다.

색깔만 봐도 성공 여부를 바로 알 수 있어서 편리합니다. 함수 응답 보기 "Response" 섹션에는 함수가 반환한 값이 JSON 형태로 표시됩니다.

statusCode는 200이고, body에는 계산 결과가 들어 있습니다. body를 자세히 보면 "result": 15라고 되어 있습니다.

10 + 5 = 15, 정확합니다! 김개발 씨는 자신의 코드가 제대로 작동하는 것을 확인하고 뿌듯함을 느낍니다.

body가 문자열로 이스케이프되어 있는 것을 주의해야 합니다. json.dumps()를 사용했기 때문입니다.

실제 API를 호출하는 클라이언트는 이것을 파싱해서 사용합니다. 실행 시간 분석 "Summary" 섹션을 보면 흥미로운 정보들이 있습니다.

Duration은 함수 실행에 걸린 실제 시간입니다. 1.23밀리초라고 표시됩니다.

엄청나게 빠릅니다. 하지만 Billed Duration은 2밀리초입니다.

AWS는 1밀리초 단위로 반올림해서 과금합니다. 간단한 계산을 해보겠습니다.

2밀리초는 0.002초입니다. 이 함수를 100만 번 실행해도 2,000초, 약 33분 정도밖에 안 됩니다.

Lambda의 무료 티어가 월 40만 GB-초이므로, 메모리 128MB로 이 함수를 실행하면 사실상 무료입니다. 메모리 사용량 Memory Size는 128MB로 설정되어 있습니다.

이것은 함수에 할당된 최대 메모리입니다. Max Memory Used는 38MB입니다.

실제로 사용한 메모리입니다. 간단한 계산 로직이라 메모리를 거의 사용하지 않았습니다.

만약 사용량이 할당량에 가깝다면 메모리를 늘려야 할 수도 있습니다. 메모리를 늘리면 비용도 올라가지만, CPU 성능도 함께 향상됩니다.

Lambda는 메모리에 비례해서 CPU를 할당하기 때문입니다. 다른 테스트 실행해보기 박시니어 씨가 제안합니다.

"다른 테스트도 실행해보세요." 김개발 씨는 드롭다운에서 "divideByZeroTest"를 선택하고 Test 버튼을 클릭합니다. 이번에도 성공 메시지가 나타나고, result 부분에 "Error: Division by zero"라는 문자열이 보입니다.

에러 처리가 제대로 작동하는 것입니다. 이처럼 여러 테스트를 빠르게 실행하면서 코드의 모든 경로를 검증할 수 있습니다.

실패 케이스 확인 만약 코드에 버그가 있다면 어떻게 될까요? 예를 들어 코드에서 num2를 num3으로 잘못 썼다고 가정해봅시다.

테스트를 실행하면 빨간색 박스가 나타나고, "KeyError: 'num3'"라는 에러 메시지가 표시됩니다. 스택 트레이스도 함께 표시되어 어느 줄에서 에러가 발생했는지 정확히 알 수 있습니다.

이런 즉각적인 피드백 덕분에 디버깅이 매우 빠릅니다. 결과 데이터 복사 결과 창 오른쪽 위에 작은 복사 아이콘이 있습니다.

이것을 클릭하면 응답 JSON을 클립보드로 복사할 수 있습니다. 문서를 작성하거나 다른 팀원과 결과를 공유할 때 유용합니다.

김개발 씨는 이제 확신을 가졌습니다. 자신의 Lambda 함수는 완벽하게 작동합니다.

모든 테스트 케이스를 통과했습니다. 이제 실전에 투입할 준비가 되었습니다.

실전 팁

💡 - 실행 시간이 타임아웃에 가깝다면 함수 설정에서 타임아웃을 늘리세요

  • 메모리 사용량이 할당량의 80% 이상이면 메모리를 증가시키는 것을 고려하세요

6. 로그 확인하기

테스트는 성공했지만 박시니어 씨가 한 가지 더 알려줍니다. "함수 안에 print 문을 넣으면 어디서 볼 수 있을까요?" 김개발 씨는 잠시 생각합니다.

콘솔? 터미널?

아니면 어딘가 다른 곳?

Lambda 함수의 모든 로그는 CloudWatch Logs에 자동으로 저장됩니다. print 문이나 에러 메시지, 실행 정보가 모두 기록됩니다.

Lambda 콘솔에서 바로 로그를 확인할 수도 있고, CloudWatch 콘솔에서 더 자세한 분석을 할 수도 있습니다.

다음 코드를 살펴봅시다.

import json

def lambda_handler(event, context):
    # 로그에 기록됩니다
    print(f"받은 이벤트: {event}")

    num1 = event.get('num1', 0)
    num2 = event.get('num2', 0)
    operation = event.get('operation', 'add')

    print(f"계산 시작: {num1} {operation} {num2}")

    if operation == 'add':
        result = num1 + num2

    print(f"계산 결과: {result}")

    return {
        'statusCode': 200,
        'body': json.dumps({'result': result})
    }

박시니어 씨가 설명을 이어갑니다. "Lambda는 서버가 없잖아요.

그럼 로그는 어디에 남을까요?" CloudWatch Logs란 AWS에는 CloudWatch라는 모니터링 서비스가 있습니다. 마치 모든 AWS 서비스의 로그를 모아두는 거대한 도서관 같습니다.

Lambda 함수가 실행될 때마다 발생하는 모든 출력이 여기에 저장됩니다. print 문, 에러 메시지, 실행 시작과 종료 메시지까지 모두 기록됩니다.

Lambda 함수를 만들 때 자동으로 생성된 실행 역할에는 CloudWatch Logs에 쓸 수 있는 권한이 포함되어 있습니다. 따라서 별도 설정 없이 로그가 자동으로 기록됩니다.

Lambda 콘솔에서 로그 보기 테스트 결과 화면을 다시 보겠습니다. 아래쪽에 "Logs" 섹션이 있습니다.

여기에 함수 실행 중 발생한 모든 로그가 시간순으로 표시됩니다. 각 줄 앞에 타임스탬프가 붙어 있어서 언제 출력되었는지 알 수 있습니다.

예를 들어 "받은 이벤트: {'num1': 10, 'num2': 5, 'operation': 'add'}"라는 로그가 보입니다. 코드의 첫 번째 print 문이 출력한 내용입니다.

그다음 줄에는 "계산 시작: 10 add 5"가 있고, 마지막에 "계산 결과: 15"가 있습니다. 로그로 디버깅하기 로그는 디버깅의 핵심 도구입니다.

김개발 씨가 만약 계산 결과가 이상하다면, 각 단계에서 변수 값을 print로 출력해볼 수 있습니다. "num1이 제대로 전달되었나?

operation 값이 맞나?" 이런 식으로 추적할 수 있습니다. 실제 서버 환경에서는 디버거를 붙일 수 없습니다.

하지만 로그가 있으면 코드의 실행 흐름을 추적할 수 있습니다. 마치 타임머신을 타고 과거로 돌아가 무슨 일이 있었는지 보는 것과 같습니다.

CloudWatch 콘솔로 이동 Lambda 콘솔의 로그는 최근 몇 개만 보여줍니다. 더 많은 로그를 보려면 CloudWatch로 가야 합니다.

화면 위쪽에 "CloudWatch에서 로그 보기" 링크가 있습니다. 클릭하면 CloudWatch Logs 콘솔로 이동합니다.

여기서는 모든 로그를 시간대별로 검색하고, 필터링하고, 다운로드할 수 있습니다. 로그 그룹과 로그 스트림 CloudWatch에서는 로그가 계층적으로 구성됩니다.

로그 그룹은 "/aws/lambda/myFirstLambda"처럼 함수 이름으로 만들어집니다. 그 안에 여러 로그 스트림이 있는데, 각 스트림은 함수의 개별 실행 인스턴스를 나타냅니다.

함수가 동시에 여러 번 실행되면 여러 스트림이 생성됩니다. 각 스트림 안에 실제 로그 메시지들이 시간순으로 저장됩니다.

로그 검색과 필터링 CloudWatch에서는 강력한 검색 기능을 사용할 수 있습니다. 예를 들어 "ERROR"라는 단어가 포함된 로그만 찾고 싶다면, 필터 패턴에 "ERROR"를 입력하면 됩니다.

특정 시간대의 로그만 보고 싶다면 시간 범위를 지정할 수 있습니다. 수백만 개의 로그 중에서 원하는 것만 찾아낼 수 있습니다.

로그 보관 기간 기본적으로 로그는 영원히 저장됩니다. 하지만 비용이 발생합니다.

로그 그룹 설정에서 보관 기간을 지정할 수 있습니다. 예를 들어 "7일"로 설정하면 7일이 지난 로그는 자동으로 삭제됩니다.

개발 환경에서는 짧게 설정하고, 프로덕션에서는 길게 설정하는 것이 일반적입니다. 구조화된 로깅 박시니어 씨가 팁을 하나 더 줍니다.

"로그를 JSON 형태로 출력하면 나중에 분석하기 쉬워요." 예를 들어 print(json.dumps({"level": "INFO", "message": "계산 완료", "result": result}))처럼 작성하면, CloudWatch Insights에서 JSON 필드를 기준으로 쿼리할 수 있습니다. 대규모 서비스에서는 이런 구조화된 로깅이 필수입니다.

실무에서의 로그 활용 김개발 씨는 이제 이해했습니다. 로그가 왜 중요한지 말입니다.

실제 서비스에서 사용자가 에러를 신고하면, 가장 먼저 할 일은 로그를 확인하는 것입니다. 언제 에러가 발생했는지, 어떤 입력이 들어왔는지, 어느 지점에서 실패했는지 로그를 보면 알 수 있습니다.

로그는 과거를 기록하는 타임캡슐이자, 미래의 문제를 예방하는 안전망입니다. Lambda 개발에서 로그 확인은 선택이 아니라 필수입니다.

실전 팁

💡 - 중요한 변수값은 print로 로그에 남겨서 디버깅을 쉽게 하세요

  • 프로덕션 환경에서는 로그 보관 기간을 설정해서 비용을 관리하세요

이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!

#AWS#Lambda#Serverless#FunctionAsService#CloudComputing

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.