[Serverless] Serverless와 AWS Lambda

김상웅·2022년 7월 17일
0

[Infra]

목록 보기
3/3

✅ Serverless


📌 개념

Serverless란 서버리스 (server + less), 즉 서버가 없다는 것을 의미하는데요.

백엔드에 서버가 없다는 것을 가리키는 것은 아닙니다.

이렇게 이해하면 될 것 같습니다.

백엔드에서 직접 서버를 관리하지 않는다


📌 왜?

serverless라는 개념이 등장한 이유를 알아보려면,

어떻게 어플리케이션을 배포했는지를 알아야합니다.

지난번 포스팅에서 과거 서버를 운영 방식에 대해 언급한 적이 있습니다.

물리적인 서버를 가동하면서 차고, 전산실 등의 장소를 활용했습니다.

즉 서버의 하드웨어(기계)와 소프트웨어(코드)를 직접 관리했다는 것을 가리키죠.

이런 물리적인 서버를 관리하는 것의 문제는 클라우드 컴퓨팅으로 보완되기 시작했습니다.

AWS의 EC2가 대표적인 사례죠.

하지만 AWS의 EC2 역시 과거의 하드웨어를 대체해주는 클라우드 서버일 뿐입니다.

내부에 서버를 가동하는 코드는 우리가 직접 관리해주어야 합니다.

보안성 문제, 버전 업데이트, 데이터 관리 등 개발자가 해야하는 수많은 일이 남아있는 것이죠.

함수로 분리된 코드를 관리하여 요청이 있을 때에만 함수를 실행한다


📌 장점

24시간 가동되는 서버보다 저렴한 비용, 우수한 퍼포먼스

서버를 직접 운영하면 앞서 언급한 바와 같이 개발자가 직접 관리해야하는 일들이 많아집니다.

또한 트래픽의 수가 적든 많든 우리는 클라우드를 계약한 만큼 돈을 지불해야하는데요.

Serverless는 그렇지 않습니다.

작동 개념은 다음과 같습니다.

  • 코드의 함수를 쪼개어 관리합니다.

  • 요청이 있을 때에 해당 함수를 동작시킵니다.

  • 요청이 없을 때엔 함수를 가동하지 않습니다.

즉 10번의 동일한 요청이 있으면, 해당 코드를 10개를 만들어 처리하고, 요청의 수에 따른 비용을 지불하기 때문에 비용 측면에서도 유리합니다.


📌 단점

코드를 깨우는 시간... 느린 요청 처리

요청이 있을 때에만 해당 코드를 실행한다고 설명드렸습니다.

그렇기 때문에 24시간 운영이되면서 요청을 대기하는 서버보다 요청 처리 시간이 상대적으로 느릴 수 밖에 없습니다.

시간차를 허용해서는 안되는 서비스라면 serverless를 선택해서는 안되겠죠.

AWS의 Lambda는 이런 문제점을 보완하기 위해 자주 사용되는 함수를 파악해놓습니다.

그 함수들은 가동을 중지하는 것이 아니라 언제든 요청이 있을 때 빠른 대응을 할 수 있도록 대기시켜놓는다고 합니다.

큰 차이는 아니지만 서버가 응답하는 시간이 걸릴 수 있다는 것은 특정 서비스에서는 단점으로 작용할 수 있겠습니다.

서버 제공자에 과한 의지

만약 AWS Lambda에 백엔드 서버를 배포하게 되면,

즉 서버리스로 어플리케이션을 운영하게 되면 그 구조자체가 바뀌게됩니다.

우선 내가 서버를 통제한다는 생각은 더 이상 유효하지 않으며

구조가 바뀌기 때문에 다른 서버리스로 이동하는 것은 간단하지 않을 수도 있습니다.



✅ AWS Lambda


Serverless를 설명하면서 중간중간 언급했던 AWS lambda에 대해 알아보겠습니다.

AWS Lambda는 쉽게 말해 함수를 가리킵니다.

어떤 이벤트가 발생했을 때 동작할 함수를 지정할 수 있습니다.

이벤트는 쉽게 말해 클라이언트에서 하는 요청이 예로 될 수 있습니다.

기존에는 웹에 서버를 붙여서 사용했다면,

그냥 소스코드(함수)를 적어두고 요청(이벤트)에 따른 함수를 실행하여 서버를 가동하게 됩니다.


📌 구성

구성은 다음과 같습니다.

클라이언트 ㅊ API게이트웨이 → AWS람다 (함수 동작) → DB or 응답처리

함수 역할을 수행하기 때문에 API게이트웨이를 이용해 공인 주소를 설정해주어야 합니다.


📌Lambda 사용해보기

우선 AWS에 접속하여 Lambda 서비스를 검색해주세요.

아무런 함수를 작성하지 않았다면, 다음과 같은 화면이 보일 것입니다.

아래 화면에서 함수 생성을 클릭해주세요

다음으로 함수를 생성해줍니다.

아래 화면에서 원하는 함수 이름, 런타임을 설정하고 함수 생성을 클릭해주세요

RDS, EC2는 프리티어를 선택하여 과금을 막을 수 있습니다.

람다는 일정 사용량부터 요금을 내기 때문에 사용량이 적다면 과금에 대한 걱정은 안해도 됩니다.

다음으로 코드를 작성하는 란을 확인해보겠습니다.

아래 화면에서 작성된 코드는 어떤 트리거가 발생했을 때 실행되는 코드라고 생각하면 되겠습니다.

이 코드를 실행하는 방법은 테스트 콘솔트리거를 이용하는 두가지 방법이 있습니다.

  1. 테스트 콘솔을 이용한 실행

테스트 이벤트를 구성합니다.

새 이벤트를 생성할 수도 있고 기존의 이벤트를 수정할 수도 있습니다.

이벤트의 값인 Json 형식에는 현재 우리가 따로 지정할 값이 없으므로 빈 중괄호만 남겨줍니다.

생성 혹은 저장을 누르고, 수정된 내용을 Deploy 한 다음 Test버튼을 누르면,

아래와 같은 화면을 볼 수 있을 것입니다.

  1. 트리거를 이용한 실행

구성에 대해 설명할 때 API Gateway에 대해 말씀드렸습니다.

특정 url로 접근을 하였을 때 우리가 작성한 코드가 실행되는 것입니다.

우선 트리거를 생성해줍니다.

아래의 화면처럼 설정해주세요!

그러면 아래 화면과 같이 트리거에 API Gateway가 추가된 것을 확인할 수 있습니다.

API Gateway 엔드포인트는 아래의 url주소로 되어 있으며,

클라이언트가 해당 엔드포인트로 접속을 하거나 어떤 요청을 할 때

우리가 Lambda에 작성한 함수를 실행할 수 있는 것입니다.

해당 엔드포인트에 접속을 하였을 때의 화면은 아래와 같습니다:


[참고자료]
https://www.youtube.com/watch?v=t8sjTFM_tfE
https://www.youtube.com/watch?v=7uEDep9DFJs
https://www.youtube.com/watch?v=ufLmReluPww

profile
누구나 이해할 수 있도록

0개의 댓글