엔드포인트는 API(Application Programming Interface)에서 특정 기능을 수행하기 위해 접근할 수 있는 URL 주소를 말합니다. 클라이언트(예: 웹 브라우저, 모바일 앱, 다른 서버)가 백엔드 서버의 특정 기능을 사용하려면, 해당 기능과 연결된 엔드포인트로 요청을 보내야 합니다.
간단한 비유를 들자면,
웹사이트에서 특정 페이지(예: www.example.com/products)에 접속하는 것처럼, API에서는 특정 데이터나 기능을 요청하는 주소(예: /api/products 또는 /users/123)가 엔드포인트입니다.
"제품 목록 조회"라는 기능을 제공하려면 /products라는 엔드포인트가 있을 수 있고, "특정 사용자 정보 조회"라는 기능을 제공하려면 /users/{user_id}와 같은 엔드포인트가 있을 수 있습니다.
API 엔드포인트는 보통 HTTP 메서드(GET
, POST
, PUT
, DELETE
등)와 결합하여 특정 작업을 정의합니다.
엔드포인트에 POST 요청이 들어왔을 때 이 handler 함수가 실행되도록 정의됩니다.
즉, 클라이언트가 POST /projects로 요청을 보내면 "새로운 프로젝트를 생성하겠다"는 의미가 됩니다.
AWS Lambda는 서버리스(Serverless) 컴퓨팅 서비스입니다.
즉, 개발자가 서버를 직접 관리할 필요 없이 코드만 업로드하면 AWS가 대신 서버를 프로비저닝하고 관리해 줍니다.
여기서 "각 파일이 하나의 Lambda 함수에 매핑된다"는 것은 일반적인 Lambda 배포 모델 중 하나를 의미합니다.
하나의 Lambda 함수 = 하나의 특정 역할/엔드포인트: 전통적인 웹 서버에서는 하나의 서버 애플리케이션이 모든 API 엔드포인트(예: /users, /products, /orders 등)를 처리합니다.
하지만 Lambda에서는 효율성을 위해 각 엔드포인트나 특정 기능별로 별도의 Lambda 함수를 만드는 경우가 많습니다.
예를 들어, create.py 파일은 create_project_lambda라는 Lambda 함수로 배포되고, 이 함수는 /projects
에 대한 POST 요청만 처리하도록 설정될 수 있습니다.
delete.py 파일은 delete_project_lambda라는 다른 Lambda 함수로 배포되고, 이 함수는 /projects/{id}
에 대한 DELETE 요청만 처리하도록 설정될 수 있습니다.
이렇게 하면 각 Lambda 함수가 독립적으로 배포되고 스케일링되며, 한 함수에서 문제가 발생해도 다른 함수에는 영향을 미치지 않는다는 장점이 있습니다 (마이크로서비스 아키텍처와 유사).
"여러 경로를 라우팅한다"는 것은 하나의 Lambda 함수가 여러 개의 API 엔드포인트 또는 경로를 처리하는 방식을 의미합니다.
위 2번의 "하나의 Lambda 함수 = 하나의 특정 역할/엔드포인트" 방식과는 대조적입니다.
이 방식은 보통 API Gateway와 Lambda Proxy Integration을 함께 사용하여 구현됩니다.
API Gateway는 모든 들어오는 HTTP 요청을 받고, 요청의 경로(path)와 HTTP 메서드를 확인합니다.
그리고 모든 요청을 하나의 Lambda 함수로 전달합니다.
전달받은 Lambda 함수 내부에서는 aws_lambda_powertools의 APIGatewayRouter와 같은 라우팅 라이브러리를 사용하여, 실제 요청된 경로와 메서드에 따라 어떤 코드를 실행할지 결정합니다.
AWS Lambda Powertools의 APIGatewayRouter는 이 "여러 경로를 라우팅"하는 기능을 쉽게 구현하도록 돕는 도구입니다.
APIGatewayRouter를 통해 하나의 Lambda 함수가 여러 경로를 라우팅하는 방식도 가능하다.