AWS 람다에 대해 알아보자

로건·2022년 12월 16일
0

Serverless

목록 보기
2/2
post-thumbnail

이제는 람다라는 이름이 익숙하게 들려온다. 그만큼이나 여러곳에서 유용하게 쓰이고 있다고 생각한다.
실제로 람다를 이용한 서버리스도 만들어 운영해보았지만 지식이 제대로 정리가 되어 있지 않아 이번 기회에 정리해본다.
서버리스에 대한 이해, 람다의 특장단점, 람다의 단점을 해결하기 위해 나온 확장기능에 대해 알아보자.


서버리스란

람다는 서버리스 컴퓨팅 서비스이다. 서버리스란 뭘까?
서버리스란 개발자가 서버를 관리할 필요없이 클라우드에게 서버 관리를 맡기는 것이다. 이로 인해 개발자는 서버관리에 시간을 쏟지 않고 코드에만 집중할 수 있게된다.


서버리스 종류

서버리스는 개발자가 서버를 관리하지 않을 뿐 결국 클라우드 서비스가 처리하는 서버를 관리한다.
서버리스 컴퓨팅 기술은 클라우드가 어떤 방식으로 관리를 하는지를 기준으로 BaaS와 FaaS로 나눌 수 있다.

💡 BaaS(Backend as a Service)
보통의 서버 개발을 할때 서버뿐만이 아니라 데이터 저장을 위한 데이터베이스, 유저인증기술, 이미지를 저장할 공간 등도 함께 구성해야한다.
BaaS는 위처럼 서버 개발에 필요한 데이터베이스, SNS로그인 연동, 객체 저장소 등을 자체 API로 제공을 해주는 서비스이다. 대표적으로 Firebase와 같은 서비스가 있다.

💡 FaaS(Function as a Servcie)
프로그래밍에서 사용하는 메서드와 같이 함수를 서비스로 제공하는 것을 말한다.
다시 말해 실행가능한 코드 덩어리 자체가 서비스이다.
어떠한 이벤트를 받게 되면 등록된 함수를 실행하는 구조이다.
AWS의 람다와 구글의 클라우드 펑션 등이 있다.


그래서 람다는?

위에서 보았듯이 람다는 AWS가 제공하는 FaaS 서버리스 기술이다.
여러가지 함수들을 등록할 수 있으며 특정 이벤트로 인해 각각의 함수들이 실행된다.
현재는 Go, Java, JavaScript, Python, Ruby 등 다수의 언어로 람다함수를 만들 수 있다.




람다의 특징

람다 실행하기

람다는 이벤트를 기반하여 즉시 실행된다. 곧바로 람다를 실행시킬 수도 혹은 이벤트를 구독하여 비동기적으로 람다를 실행시킬수도 있다. 대표적으로 아래와 같은 방법으로 lambda 함수를 사용한다.

  • CloudWatch + Lambda
    • AWS CloudWatch에 로그이벤트(특정 패턴 등록도 가능)에 대응
  • S3 + Lambda
    • AWS S3의 특정이벤트(이미지 업로드 등)에 대응
  • API Gateway + Lambda
    • AWS API Gateway로 들어오는 HTTP 요청을 람다 함수를 사용해 응답처리
  • SQS + Lambda
    • AWS SQS 등으로 들어온 이벤트를 확인 후 비동기로 람다 함수를 이용해 작업처리

장점

  • 사용한 만큼만 돈을 냄(비용 절감)
    • 지속적으로 돌아가는 서버에 비해 사용할때만 실행하는 람다는 실행횟수에 비례하여 비용을 청구
    • 100만번 실행당 0.2달러로 매우 쌈
  • 자동 스케일업, 높은 가용성
    • 요청이 들어올때 동적으로 자원을 할당하고 스케일링을 처리함
    • 많은 요청이 들어오면 그만큼 요금이 더 청구되기도 함
  • 빠른 제품 출시
    • 서버 관리에 신경쓸 필요없이 코드에만 집중할 수 있음

단점

  • cold start(람다가 깰때 걸리는 시간)
    • 람다는 평소에 잠자고 있다 실행될때 깨서 일을 처리함.
    • 이때 지연시간이 최대 1초까지 발생함
    • 지연이 허용되지 않는 서비스일 경우(실시간 서비스) 적합하지 않음
  • 서버 제공자(aws, google 등)에 의존
    • 플랫폼에 의존하기 때문에 플랫폼을 옮겨기 쉽지 않음.
  • 긴 시간을 소요하는 작업에 불리(동영상 업로드)
    • 람다함수 호출 시 사용할 수 있는 메모리 및 시간에 제한이 있음.
    • 큰 기능이라면 잘게 나누어 구현해야함
  • 코드 재사용이 어려움
    • 각 함수가 독립적이기 때문에 공통으로 사용하는 로직도 중복해서 작성하게 됨




람다의 효율을 위한 확장 기능

위에서 보았듯 람다는 cold start로 인한 지연문제, 서버 제공자에 대한 의존 문제 등 몇몇가지 고질적인 문제를 가지고 있다. 하지만 역시 이러한 문제들을 해소하기 위해 여러기술들이 나왔다. 뿐만 아니라 람다를 더 편리하게 개발하고 활용한 기술들도 등장하였다.


람다 레이어

위에서 살펴본 단점 중 코드 재사용이 어렵다는 문제가 있다. 이를 해소하기 위한 기술이다.
공통된 부분을 레이어로 만들고 람다 함수들이 이를 공유해서 사용할 수 있다.
같은 계정뿐 아니라 다른 계정들 사이에서도 서로 공유할 수 있다.

람다 레이어 살펴보기


프로비저닝 컨커런시

람다의 cold start의 문제점을 해소하기 위한 기술이다.
미리 람다함수를 실행할 수 있도록 준비해두는 기술로 동시 호출과 지연시간이 중요할 경우 사용할 수 있다.


스텝 펑션

람다 함수들을 조합해서 하나의 워크플로우를 구성할 수 있는 기술이다.
SNS, SQS, 다이나모 DB 등 여러 서비스와 통합해서 사용할 수 있다.


RDS 프록시

RDS 데이터베이스 사이에서 커넥션을 관리해준다.
서버의 경우 커넥션의 수를 자체적으로 관리하지만 람다의 경우는 그렇지 않다.
이를 위해 RDS와 람다 사이에 RDS 프로시를 두고 RDS 프록시로 커넥션을 관리한다.


Serverless Framework

람다 설정, 배포 등의 작업을 할때 일일이 AWS 콘솔로 업로드하기에는 힘들다.
코드로 명시하고 명령어로 작업할 수 있도록 도와주는 IaC(Infrastructure as Code) 도구이다.
AWS SAM과 같은 도구들도 있다.

서버리스 프레임워크 살펴보기


람다 엣지

람다 엣지는 AWS CloudFront에서 제공해주는 기능이다.
CloudFront는 파일을 전송해주는 캐시 서버이지만 람다엣지를 활용하여 이미지 업로드, 변환 등의 처리 기능도 추가할 수 있다.




참고자료

profile
Life Designer

0개의 댓글