AWS Lambda 해부: C++와 CMake로 실전 파워
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 기반 빌드 시스템도 함께 분석합니다.

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:
- Pregunta: “¿Hay trabajo nuevo?”
- Si sí: ejecuta tu función.
- Envía la respuesta de vuelta a AWS.
- Repite.
Korean translation:
런타임이 실제로 하는 일은 무엇일까요? AWS 내부 API에 HTTP 요청을 보내는 무한 루프에 불과합니다:
- “새 작업이 있나요?” 라고 물음
- 있다면: 함수를 실행
- 응답을 AWS에 반환
- 다시 반복
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_handler는 my_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:
- Toma tu ejecutable.
- Busca las dependencias compartidas necesarias.
- 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 라이브러리가 제공하는 이 함수는 다음을 수행합니다:
- 실행 파일을 가져옴
- 필요한 공유 라이브러리 의존성을 찾음
- 모두 압축해
hello.zip을 생성, AWS 콘솔에 업로드하거나 Terraform/CDK로 배포 가능
수동 Bash 스크립트를 작성해 zip을 만들 필요가 없어집니다.

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