AWS Lambda + API Gateway: HTTP API 생성 실습

2025. 1. 15. 17:10Project Log/학부 졸업프로젝트

온프레미스 (On-Premise)

온프레미스(On-Premise) 방식으로 서버를 구축하는 방법은 다음과 같다. 서버용 컴퓨터 구매, 인터넷 · 보안 · 네트워크 등 인프라 환경 구축, 개발 환경에 맞는 OS 설치, 런타임 환경 구성, 백엔드 서비스 설치를 한다. 그리고 DB 서버, 파일 서버, 이미지 서버 등 다양한 서버를 구축해야 한다. 구축 시간과 비용이 많이 들며, 서비스 규모가 커지고 트래픽이 증가하면 서버를 확장해야 한다.

 

클라우드 컴퓨팅 (Cloud Computing)

온프레미스 환경에서는 서버를 확장하는 것이 매우 어렵기 때문에, 클라우드 컴퓨팅이 등장했다. 인터넷을 통해 다른 서버의 자원을 빌려서 사용하는 기술이다. 가상 컴퓨터를 할당받아서 OS와 런타임 환경을 구성하고 백엔드 어플리케이션을 설치하여 운영할 수 있다. AWS, Google Cloud Platform, Microsoft Azure, Naver Cloud Platform이 서비스를 운영하고 있다.

 

서버 리스 (Server Less)

서버 리스(Server Less) '서버가 없는 것'이 아니라, '인프라 엔지니어나 개발자가 관리해야 할 서버가 없는 것'이다. 서버를 제공하는 기업에서 모두 관리를 한다. 따라서 서버 리스 방식을 사용하면, 서비스 개발자는 서버 준비나 관리를 할 필요가 없다. 트래픽에 따른 서버 자원이 자동으로 확장 및 축소하며, 서버 가용성이나 장애 걱정을 하지 않아도 된다. 

 

서버 리스의 단점도 존재한다. 함수를 오랫동안 실행하지 않는 경우 Cold start로 인해 응답 속도가 느려질 수 있다. 이런 문제는 Warmer를 통해 일정 주기로 강제 실행시키거나, Provisioned Concurrency (예약된 동시성)를 통해 해결한다.

 

서버 리스의 꽃🌻, Lambda 함수

람다 함수는 특정 이벤트가 발생하면 실행된다. 람다로 HTTP 서버를 만든다고 가정하면, API Gateway가 호출되었을 때 람다를 실행하도록 연결할 수 있다. S3에 이미지 업로드 시 해당 이미지의 썸네일을 만들고 싶다면, 이미가 업로드되었을 때 람다를 실행할 수도 있다. 

AWS Lambda 로고 (좌) / AWS Lambda Best Practices and Event-driven Architecture (우)

 

Lambda 콘솔 및 람다 함수 기본 사용법

기본적인 Lambda 사용 방법부터 알아보겠다.

 

🧡 람다 함수 생성 & Deploy & Test

 

Lambda 콘솔에서 함수 생성을 클릭한다.

 

먼저 [함수 이름]을 지정한다. [런타임]은 Node.js, Python, Java 등 다양한 언어를 지원한다. 람다 함수가 DynamoDB나 S3에 접근하려면 권한이 필요하다. 이러한 권한들을 역할로 묶어서 리소스에 부여한다. [기본 실행 역할 변경]에서 이를 설정할 수 있다. 설정 후 [함수 생성]을 클릭한다.

 

기본으로 index.mjs 파일에 handler 함수가 생성된다. handler 함수는 람다 함수 실행 시 진입점이라고 볼 수 있으며, event를 파라미터로 받는다. 

 

진입점이 되는 함수로 handler 말고 다른 이름을 사용하고 싶다면, 런타임 설정 편집에서 수정할 수 있다. 핸들러에는 '파일명.함수명'을 적으면 된다.

 

[Deploy] - [Test]를 진행한다.

 

🧡 이벤트 생성

 

Test를 누르면 이벤트가 없다고 나온다. 아래처럼 새로운 이벤트를 생성한다. 'Template-optional'에는 매우 다양한 옵션이 있다. JSON 파일도 수정해 주고, [Save] 버튼을 누른다.

 

handler 함수에 console.log('event: ', event)를 추가하고, [Deploy]-[Test]를 실행하였다. Response와 이벤트 로그가 정상적으로 출력된다.

 

테스트 탭에서 이벤트를 저장하지 않고, [테스트] 버튼을 눌러 함수를 호출하며 디버깅할 수도 있다. 이벤트를 수정하고 싶으면 [저장(덮어쓰기)]를 하면 된다.

 

테스트 탭에서도 로그를 확인할 수 있다.

 

링크를 클릭하면 Cloud Watch 콘솔로 이동한다.

 

🧡 CloudWatch 로그 스트림

 

Cloud Watch에서 로그 스트림을 확인할 수 있다. 로그 스트림을 클릭하면 상세 로그 이벤트도 확인할 수 있다.

 

🧡 람다 함수 구성 편집

 

구성 탭에서 [편집]을 클릭한다. 

 

설정한 메모리에 비례하는 CPU가 람다 함수에 할당된다. 람다 함수는 설정된 제한 시간 이상으로 동작하면 에러를 발생시킨다. 제한 시간은 최대 15분이다. 

 

🧡 람다 함수 vscode에서 편집하기

 

Vscode에서 람다 함수를 편집한 후에 파일 시스템에서 .zip 파일로 압축한다.

 

.zip 압축 파일을 람다 콘솔 코드 탭에서 업로드 하면 바로 업데이트된다.

 

람다 기반 HTTP API 서버 만들기

이제 람다 함수에 API Gateway를 연결하여 HTTP API 서버를 만들어보겠다.

 

[트리거 추가]를 클릭한다.

 

다양한 종류의 트리거 소스를 추가할 수 있다. 우선 이 실습에서는 API Gateway를 선택하겠다. 소스 목록 아래쪽에 EventBridge와 MongoDB도 있었다. [새 API 생성] - [HTTP API] - [보안 설정]을 진행했다.

 

트리거로 추가된 API Gateway를 클릭하고, API 엔드포인트를 복사해서 인터넷으로 접속해 보았다. API Gateway와 Lambda 함수만으로 HTTP API 서버가 실행된다. 

 

 

* 참고 사이트

 

- 서버리스란 무엇인가! | 스타트업에게 추천하는 서버리스아키텍처

https://youtu.be/VrLV6Mjd28g

- 서버리스 컴퓨팅 (FaaS) - AWS Lambda

https://youtu.be/YQVG4CVF_aA?feature=shared

- AWS Lambda Best Practices and Event-driven Architecture
https://medium.com/aws-serverless-microservices-with-patterns-best/aws-lambda-best-practices-and-event-driven-architecture-d6b897d9c96e

- AWS Lambda - 람다란 무엇인가? | HTTP API 서버 만들기 튜토리얼 | 서버리스 아키텍처 핵심 Lambda 소개
https://www.youtube.com/watch?v=o3Y-9-NCbE8