개발을 파헤치다/서버 인프라
AWS Lambda란 무엇인가?
개발자_H
2019. 4. 8. 16:19
반응형
근래의 서비들은 대다수 Client - Server 구조로 되어 있습니다. 네트워크를 통해 다양한 데이터를 주고 받고, 사용자에게 맞춤형 데이터를 제공하기 위해서는 Server라는 존재가 필수적입니다.
Server는 Client의 요청에 따라 데이터베이스에서 사용자가 원하는 데이터를 가공하여 보내줍니다. 이렇게 Sever는 서비스에서 중추역할을 하기 때문에 만약 Server가 제대로 동작하지 않으면 서비스 운영에 큰 타격을 입게 됩니다.
Server를 직접 운영하는데에는 꽤나 번거로운 작업이 필요합니다. 개발 언어에 따른 환경 설정이 번거롭고 여러 패키지들이 얽히고 섥힘에 따라 알 수 없는 에러가 발생하기도 합니다. 또한, 사용자 요청 수가 많아짐에 따라 그에 따른 환경 설정도 해주어야 합니다.
만약 물리 Server에 운영체제 설치 및 개발 환경 설정을 모두 직접 한다면 꽤나 많은 시간과 인력 비용이 들 수 있습니다.
기존의 On-Premise 환경에서 Cloud 환경으로 넘어오면서 직접 Server 환경울 구성하는 번거로움이 많이 줄게 되었습니다.
하지만 AWS Lambda는 직접 운영하는 Server 없이 사용자의 요청을 처리할 수 있는 환경을 제공합니다.
즉, 개발자가 Back-end 로직만 개발하면 AWS Lamba를 통해 직접 서버에 소스코드를 올리거나 다른 설정을 할 필요 없이 서비스가 운영되도록 할 수 있다는 의미가 됩니다.
이와 같은 Server 환경 구성을 Serverless Architecture라고 합니다.
그렇다면 AWS Lambda는 내부적으로 어떻게 동작할까요?
Serverless Architecture라고 해서 AWS Lambda가 서버 없이 소스코드를 실행시켜준다는 오해를 해서는 안됩니다.
당연히, 개발자가 구현산 소스 코드는 내부적으로 개발환경 구성이 완료된 OS 위에서 실행되게 됩니다.
위의 그림은 사용자가 이미지를 업로드 했을 때, 어떤 형식의 이미지를 올렸는지 Server 쪽에서 알아내는 코드를 Lambda를 통해 구현한 것입니다.
Lambda에서 지원하는 언어(Python, GO, Kotlin, Node.js)로 이미지 형식을 판별하는 소스코드를 구현합니다.
이를 zip 파일로 압축하여 AWS Lambda에 업로드하면 특정 조건(이를 Trigger라고 부릅니다)이 만족되었을 때 구현한 소스코드가 실행되게 됩니다.
개발자는 그 어떤 서버 환경도 구성하지 않았지만 구현한 로직이 동작하는 것을 확인할 수 있습니다.
내부적으로는 아래와 같이 동작합니다.
- 사용자가 이미지를 AWS S3 저장소에 업로드한다.
- S3에 이미지가 업로드 되면 이것이 Trigger가 되어 Lambda를 실행한다.
- 이미지 판별 로직을 수행할 OS Container를 실행한다.
- 요청이 많아지면 로직을 수행할 OS Container를 더 많이 실행한다.
- 로직 수행이 끝나면 OS Container를 종료시킨다.
Lambda를 사용하면 아래와 같은 장점이 있습니다.
- 특별한 환경 구성이 필요 없으므로 개발자가 Back-end Logic 개발에만 몰두할 수 있다.
- 특정 조건에만 Lambda가 실행되므로 기존의 서버 유지 비용에 비해 합리적이다.
- 다수의 사용자 요청이 있을 시 Scale up을 복잡한 설정없이 할 수 있다.
- Lambda에서 지원하는 다양한 언어로 개발할 수 있다. 즉, 어떤 로직은 GO로 다른 로직은 Python으로 개발할 수 있다.
AWS에서 제공하는 AWS API Gateway와 Lambda를 사용하면 특별히 서버환경을 구축하지 않아도 REST API를 만들 수 있습니다.
Lambda는 이런 장점을 가지고 있지만 한계도 물론 존재합니다.
- 실행시간이 최대 5분이다. 이런 제한으로 인해 시간이 오래걸리는 작업(e.g. 비디오 트랜스코딩)을 수행하기에는 적합하지 않다.
- 로컬환경에서처럼 디버깅이 쉽지 않다.
- 위에서 얘기했듯이 소스코드가 내부적으로 지정된 OS Container 위에서 실행되기 때문에 제한적인 환경에서 코드를 수행할 수 밖에 없다. 예를 들어, 필요한 Package가 설치된 환경을 사용할 수 없다.
이렇게 AWS Lambda가 어떤 것인지, 어떻게 동작하는지 그리고 어떤 장단점을 가지고 있는지 파악하고 사용한다면 자신의 상황에 맞게 최대한 유용하게 사용할 수 있을 것이라 생각합니다.
반응형