AWS

AWS Lambda

cwchoiit 2024. 3. 3. 12:28
728x90
반응형
SMALL
728x90
SMALL

AWS Lambda

Lambda는 AWS에서 제공해주는 서버리스 서비스이다. 서버리스(Serverless)란 말 그대로 서버가 없다는 의미고 그 말은 진짜 서버가 아예 없다는게 아니라 관리할 서버가 없다. 즉, 관리할 필요가 없다란 의미가 된다.

 

개발자는 서버를 관리할 필요없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델을 서버리스 아키텍트라고 한다. 이 구조의 장점은 항상 대기하고 있는 전용 서버가 없어서 실행이 끝나면 자원을 반납하고 사용할 때만 자원을 가져다가 사용하는 구조라고 할 수 있다. 그러나 장점만 있는 구조는 없다. 장점과 단점을 둘 다 알아보자.

 

  • 장점
    • 서버 관리(자동 확장, 장애 방지)가 불필요
    • 관리보다 개발에 집중이 가능
    • 사용한 만큼 과금
    • 급격한 트래픽 변화에 유연
  • 단점
    • 다른 클라우드 컴퓨팅 자원보다 비쌈
    • 느림(호출과 동시에 서버가 세팅되기 때문)
    • 장기적인 작업에는 적합하지 않음
    • 함수의 처리 결과에 따라 상태를 따로 저장

 

단점 중 장기적인 작업에는 적합하지 않다라고 되어 있는데 이 말은 한 작업이 1시간, 2시간 또는 그 이상의 시간을 소요하는 작업이라면 그 시간만큼 과금이 되기 때문에 다른 클라우드 컴퓨팅 자원보다 비싼 과금을 내는 서버리스보단 온프레미스나 클라우드 컴퓨팅 서버를 사용하는게 더 유리할 수 있다는 소리다. 

 

서버리스의 2가지 서비스 형태

  • BaaS(Backend As a Service)
    • 클라우드 공급자가 제공하는 서비스를 이용해 백엔드 기능들을 쉽게 구현
    • Customizing이 어렵다
    • Google Firebase
  • FaaS(Function As a Service)
    • FaaS는 기능을 하나의 함수로 구현
    • 함수가 실행할 때마다 서버 자원을 할당받아 사용
    • 로직을 개발자가 작성하므로 Customizing이 가능
    • AWS Lambda

 

AWS Lambda 구축하기

이제 람다가 어떤것인지 알았으니 한번 만들어보고 사용해보자.

우선 AWS Console에 "Lambda"를 입력하고 나온 서비스를 클릭한다.

 

Create a function 버튼 클릭

 

설정화면은 다음과 같이 설정한다.

 

- Author from scratch

- Function name: cwchoiit-first-lambda

- Runtime: Python 3.12

Runtime은 어떤 환경을 사용할 것인지를 의미한다. NodeJS, Java 등등 다양하게 있다. 본인은 Python을 선택했다.

 

이 상태로 Create function 버튼을 클릭하면 Lambda가 만들어지면서 다음 화면이 노출된다.

 

아래 코드를 보자. 간단한 파이썬 코드로 된 함수 하나가 있다. 이 코드가 곧 하나의 람다 함수가 된다. 이 소스를 실행하기 위해 "Test" 버튼을 클릭해보자.

 

그럼 이러한 화면이 보여지는데 우선 Event name만 입력해보고 "Save" 버튼을 클릭해보자.

 

그러면 이렇게 내가 만든 이벤트 하나가 리스트에 보여진다. 이 이벤트를 클릭하면 아까 구성한대로 이벤트가 트리거될 준비가 된 상태이고 "Test" 버튼을 클릭하면 그 이벤트가 실행된다.

 

다음은 테스트 실행 결과다. 이벤트 이름, 응답 등등이 보여지고 코드에서 리턴하는 내용처럼 응답에는 statusCodebody값이 있다.

 

그럼 아까 이벤트를 만들 때 이 부분이 무엇인지 알아보자.

 

람다 함수는 이 함수로 들어오는 데이터 같은 것들을 이벤트로 받아준다. 그 이벤트를 출력해보자.

 

이렇게 소스를 변경하면 Deploy 버튼을 클릭해서 새롭게 소스를 배포해야 한다.

 

배포가 끝나면 다시 테스트 버튼을 클릭해보자. 이 이벤트에 대한 내용이 출력될 것이다.

 

이렇게 이벤트를 출력하면 테스트 구성시에 작성했던 데이터가 담겨있는 것을 알 수 있다. 이렇듯 람다 함수에 뭔가를 전달할 때 이벤트라는 파라미터안에 그 데이터들이 담긴다고 생각하면 된다.

 

그리고 이 실행에 대한 로그를 볼 수 있는데 로그는 CloudWatch에 기록된다. 한번 확인해보자. 위에 탭 중에 Monitor 탭이 있다. 해당 탭을 누르면 다음 화면이 보이는데 여기서 View CloudWatch logs 버튼을 클릭하자.

 

그럼 이러한 화면이 보여진다. 내가 만든 람다 함수에 대한 로그가 기록되어있다. 그리고 저 아래 빨간 표시로 해둔것은 배포 버전별로 다르게 기록되는 로그이다. 처음 람다함수를 만들면 그게 최초 배포버전이고 내가 중간에 이벤트를 찍어보겠다고 소스를 변경하고 배포를 다시했기 때문에 저렇게 두 개의 다른 로그가 쌓인다고 보면된다. 배포를 새로 또 하면? 3개가 된다.

 

안으로 들어가보면 다음처럼 화면이 보여진다. 내가 찍은 "print(event)" 역시 로그로 남게 된다. 이렇게 로그도 확인이 가능하다.

 

이렇게 간단하게 AWS Lambda 함수를 생성해서 서버리스 서비스를 구현해보았다. 이 서버리스를 API Gateway에 붙여서 실제 서버가 있는것처럼 실행하게 만들수도 있다. 그 부분을 다음 포스팅에서 해보자.

728x90
반응형
LIST