AWS Lambda 해부: C++와 CMake로 실전 파워

발행: (2025년 12월 13일 오전 03:42 GMT+9)
9 min read
원문: Dev.to

Source: Dev.to

Cuando pensamos en Serverless y AWS Lambda, nuestra mente suele irse automáticamente a lenguajes interpretados: Python, TypeScript. Son geniales, productivos y fáciles de editar en la consola.
Pero, ¿son la única opción? Definitivamente no. Y más importante aún: ¿son siempre la mejor opción? Tampoco.

Korean translation:
서버리스와 AWS Lambda를 생각하면 우리는 자동으로 인터프리터 언어인 Python, TypeScript를 떠올립니다. 이들은 훌륭하고 생산적이며 콘솔에서 쉽게 편집할 수 있습니다.
하지만 이것이 유일한 선택일까요? 절대 그렇지 않습니다. 더 중요한 것은, 항상 최선의 선택일까요? 그렇지도 않죠.

Hoy vamos a romper el mito de que las Lambdas son solo para scripts ligeros y veremos cómo C++ entra en juego para ofrecernos un rendimiento brutal y tiempos de ejecución predecibles. Analizaremos la pieza clave que a menudo asusta a los desarrolladores: el sistema de construcción con CMake.

Korean translation:
오늘은 Lambda가 가벼운 스크립트 전용이라는 신화를 깨고, C++가 어떻게 뛰어난 성능과 예측 가능한 실행 시간을 제공하는지 살펴보겠습니다. 개발자들을 종종 겁먹게 하는 핵심 요소인 CMake 기반 빌드 시스템도 함께 분석합니다.

Lambda en binario compilada vista desde consola

La Lambda no es una caja negra: El rol del Runtime

Korean translation:

Lambda는 블랙박스가 아니다: 런타임의 역할

A veces vemos a AWS como una caja mágica donde subes código y “simplemente funciona”. Pero AWS es ingeniería pura, y entenderla nos da poder.

Korean translation:
때때로 AWS를 코드를 올리면 “그냥 동작한다”는 마법 상자처럼 생각합니다. 하지만 AWS는 순수한 엔지니어링이며, 이를 이해하면 힘을 얻을 수 있습니다.

Las Lambdas no ejecutan tu código por arte de magia. Necesitan un Runtime. En Python o Node, AWS te da el runtime pre‑cocinado. Pero en C++, Go o Rust, tú puedes controlar ese entorno.

Korean translation:
Lambda는 마법처럼 코드를 실행하지 않습니다. 런타임이 필요합니다. Python이나 Node에서는 AWS가 미리 준비된 런타임을 제공합니다. 하지만 C++, Go, Rust에서는 직접 그 환경을 제어할 수 있습니다.

¿Qué hace realmente el Runtime? No es más que un bucle infinito que hace peticiones HTTP a una API interna de AWS:

  1. Pregunta: “¿Hay trabajo nuevo?”
  2. Si sí: ejecuta tu función.
  3. Envía la respuesta de vuelta a AWS.
  4. Repite.

Korean translation:
런타임이 실제로 하는 일은 무엇일까요? AWS 내부 API에 HTTP 요청을 보내는 무한 루프에 불과합니다:

  1. “새 작업이 있나요?” 라고 물음
  2. 있다면: 함수를 실행
  3. 응답을 AWS에 반환
  4. 다시 반복

Al usar C++, no estamos “hackeando” Lambda; estamos usando el Custom Runtime API. Y para no tener que escribir ese bucle HTTP nosotros mismos, usamos la librería aws-lambda-runtime.

Korean translation:
C++를 사용할 때 우리는 Lambda를 “해킹”하는 것이 아니라 Custom Runtime API를 이용하는 것입니다. 직접 HTTP 루프를 구현하지 않기 위해 aws-lambda-runtime 라이브러리를 사용합니다.

El código: simpleza en C++

Korean translation:

코드: C++의 간결함

Para demostrar que esto no es ciencia de cohetes, mira este main.cpp. Es todo lo que necesitas para una Lambda funcional:

Korean translation:
이것이 로켓 과학이 아니라는 것을 보여주기 위해, 아래 main.cpp를 보세요. 작동하는 Lambda를 만들기 위해 필요한 전부입니다:

#include <aws/lambda-runtime/runtime.h>

using namespace aws::lambda_runtime;

// Tu lógica de negocio va aquí
invocation_response my_handler(invocation_request const& request)
{
    return invocation_response::success("Hello, World!", "application/json");
}

int main()
{
    // Aquí inicia el bucle infinito del Runtime que mencionamos antes
    run_handler(my_handler);
    return 0;
}

run_handler es el puente que conecta tu función my_handler con la infraestructura de Amazon.

Korean translation:
run_handlermy_handler 함수를 Amazon 인프라와 연결해 주는 다리 역할을 합니다.

El arquitecto: explicando el CMakeLists.txt

Korean translation:

설계자: CMakeLists.txt 설명

Aquí es donde muchos se detienen. C++ requiere compilación, y en el mundo de AWS necesitamos empaquetar todo (binario + dependencias) en un archivo .zip. Afortunadamente, el SDK de C++ para Lambda nos facilita la vida.

Korean translation:
여기가 많은 사람들이 멈추는 지점입니다. C++는 컴파일이 필요하고, AWS 환경에서는 바이너리와 의존성을 모두 .zip 파일로 패키징해야 합니다. 다행히도 Lambda용 C++ SDK가 이를 쉽게 만들어 줍니다.

cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
project(hello LANGUAGES CXX)

find_package(aws-lambda-runtime REQUIRED)
add_executable(${PROJECT_NAME} "main.cpp")
target_link_libraries(${PROJECT_NAME} PUBLIC AWS::aws-lambda-runtime)
aws_lambda_package_target(${PROJECT_NAME})

Desglose paso a paso

Korean translation:

단계별 설명

Configuración básica

cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
project(hello LANGUAGES CXX)

Define el proyecto y establece C++11 como estándar.

Korean translation:
프로젝트를 정의하고 C++11 표준을 사용하도록 설정합니다.

Encontrando el “pegamento” (el Runtime)

find_package(aws-lambda-runtime REQUIRED)

Le dice a CMake que busque la librería aws-lambda-runtime. Debes haberla instalado previamente en tu entorno de compilación (o en el contenedor Docker de CI/CD).

Korean translation:
CMake에 aws-lambda-runtime 라이브러리를 찾도록 지시합니다. 빌드 환경(또는 CI/CD Docker 컨테이너)에 미리 설치해 두어야 합니다.

Creando el ejecutable

add_executable(${PROJECT_NAME} "main.cpp")

Compila main.cpp y crea un binario llamado hello.

Korean translation:
main.cpp를 컴파일하여 hello라는 실행 파일을 생성합니다.

Enlazado

target_link_libraries(${PROJECT_NAME} PUBLIC AWS::aws-lambda-runtime)

Une tu código con la librería de AWS, inyectando la funcionalidad necesaria para que run_handler se comunique con la API de Lambda.

Korean translation:
코드를 AWS 라이브러리와 연결해 run_handler가 Lambda API와 통신할 수 있도록 필요한 기능을 주입합니다.

Empaquetado automático

aws_lambda_package_target(${PROJECT_NAME})

Esta función, provista por la librería de AWS, realiza lo siguiente:

  1. Toma tu ejecutable.
  2. Busca las dependencias compartidas necesarias.
  3. Lo comprime todo en hello.zip, listo para subir a la consola de AWS o desplegar vía Terraform/CDK.

Te ahorra escribir scripts de Bash manuales para crear el zip.

Korean translation:
AWS 라이브러리가 제공하는 이 함수는 다음을 수행합니다:

  1. 실행 파일을 가져옴
  2. 필요한 공유 라이브러리 의존성을 찾음
  3. 모두 압축해 hello.zip을 생성, AWS 콘솔에 업로드하거나 Terraform/CDK로 배포 가능

수동 Bash 스크립트를 작성해 zip을 만들 필요가 없어집니다.

Configuración con custom runtime Amazon Linux 2023

Reflexión: AWS te hace productivo, no ciego

Korean translation:

성찰: AWS는 생산성을 높여 주지만 눈을 가리지는 않는다

Este ejemplo de C++ nos enseña algo valioso sobre la filosofía de AWS. A menudo, la “nube” se siente como una abstracción que nos quita control a cambio de comodidad. Pero herramientas como el Runtime API y este SDK de C++ demuestran que AWS no es una caja negra hermética.

Korean translation:
이 C++ 예제는 AWS 철학에 대해 중요한 교훈을 줍니다. 클라우드는 편리함을 대가로 제어권을 빼앗는 추상처럼 느껴질 때가 많지만, Runtime API와 C++ SDK 같은 도구는 AWS가 완전한 블랙박스가 아니라는 것을 보여줍니다.

Nos dan las herramientas para ser productivos (como aws_lambda_package_target que automatiza el zip), pero nos dejan la puerta abierta para bajar al nivel del sistema operativo, gestionar la memoria manualmente y optimizar cada milisegundo de ejecución si nuestro negocio lo requiere.

Korean translation:
aws_lambda_package_target처럼 zip을 자동화해 주는 도구를 제공해 생산성을 높여 주지만, 운영체제 수준으로 내려가 메모리를 직접 관리하고 비즈니스 요구에 따라 실행 시간을 미세하게 최적화할 수 있는 자유도 남겨 둡니다.

Usar C++ en Lambda no es solo por “velocidad”; es por tener control total de lo que sucede en tu infraestructura, pagando solo por los milisegundos que realmente usas.

Korean translation:
Lambda에서 C++를 사용하는 이유는 단순히 “속도” 때문이 아니라, 인프라에서 일어나는 모든 것을 완전히 제어하고 실제 사용한 밀리초만큼만 비용을 지불하기 위해서입니다.

Back to Blog

관련 글

더 보기 »