본문으로 바로가기

안녕하세요. 오늘은 지난 Serverless에 이어서 Serverless를 좀 더 쉽게 배포할 수 있는 방법에 대해 써보고자 합니다.


배포의 어려움

지난 Serverless 포스트에서 AWS를 사용하여 FaaS를 직접 배포하고 서비스하는 방법에 대해 알아봤습니다. 하지만 코드를 작성하는 것은 둘째치고 한 번 코드를 업로드하여 서비스를 배포하는 데 많은 절차가 필요합니다. 


게다가 코드 하나를 수정할 때마다 바로 배포가 되는 것은 좋은 경우지만, 직접 AWS Console에서 코드를 수정해야만 하고, 심지어 코드의 크기가 일정 크기를 초과할 경우 AWS Console에서 수정할 수 없는 상황을 초래하기도 합니다.


뭔가 더 쉽게 배포할 수 있는 방법은 없을까?


저는 실제로 AWS를 사용하여 작은 형태의 카카오톡 플러스친구 API 서버를 운영하고 있습니다. REST API 개발 이후 이를 운영해보고자 적은 비용으로 운영하기 좋은 곳을 알게 되었고, 그 중 하나가 바로 AWS였습니다. 처음에는 당연히 IaaS로 운영하고자 하였고, 그러기에는 너무나 많은 비용을 감수해야 했습니다.


그 비용을 조금 감수함과 동시에 새로운 것을 공부하고자 FaaS를 시작하게 되었고, 그를 통해 느꼈던 최대의 단점 중 하나는 바로 이런 배포 문제였습니다. 코드 한 줄을 수정하더라도 다시 첨부해서 파일을 업로드해야 하는 불편함이 있었고, 그들은 함수 단위로 움직이기 때문에 만약 이들 함수가 종속적이라면 코드 두 개를 동시에 수정하여 올려야 하기 때문에 서비스가 갑자기 돌변하는 가정도 생각해야 했습니다.



Serverless Platform

Serverless Platform은 이러한 배포 문제를 완화시켜 줄 아주 최적의 프로그램입니다. 이 프로그램은 CLI 환경에서 간단한 설정 이후 명령어 하나로 쉽게 배포할 수 있습니다. 이런게 가능한 이유는 바로 AWS에서 제공하는 IAM 덕분인데, 이는 외부에서도 간단한 API 호출로 서버를 배포하고 관리할 수 있기 때문입니다.


하지만 이러한 방법이 분명히 좋은 것은 사실이지만 치명적일 수도 있습니다. 이를테면 이러한 운영을 위해 일부 비용을 지불해야 할 수도 있다는 것입니다. 하지만 이를 누군가가 악용하거나 관리가 제대로 되어 있지 않다면 요금 폭탄 맞기 쉽겠지요. 반드시 중요한 사항이기 때문에 이 부분에 대해서 절대적으로 숙지해야 할 필요가 있습니다.



Serverless Framework 설치

 $ npm -g install serverless 

Serverless Platform은 npm / yarn 패키지 매니저를 이용해서 설치할 수 있습니다. 리눅스/유닉스의 경우 위의 명령어를 사용하여 global 설치를 진행합니다.

(혹시 Permission 등의 권한 관련 오류가 발생할 경우, 관리자 계정에서 진행해주시기 바랍니다.)


 $ serverless login 

Serverless 플랫폼에 로그인 합니다. 왜 로그인해야 하고, 이것은 무엇인가요? 우리가 Serverless를 배포하기 위해서 반드시 이 프레임워크에 로그인 해야 할 필요는 없습니다 .하지만 이 로그인을 포스트에 적으면서 권장하는 이유는 앞으로 여러분들이 배포할 코드들에 대한 문서 작업이나 그 동안에 배포한 함수에 대한 기록이 남겨지기 때문입니다.


어차피 AWS에서도 비슷한 유형으로 남긴 하지만 차이점이 있다면 Serverless 프레임워크에서는 마크다운 형태로 문서를 남길 수 있다는 점에서 메리트가 존재합니다.

그럼 과정을 진행하면서 살펴보도록 하죠.


Serverless Framework를 사용하기 위해서는 Github 계정이 존재해야 합니다. 여러분들의 Github 계정에 로그인하면 Serverless framework 공간이 생기게 됩니다.



IAM 생성

AWS Console 외부에서 자유롭게 서버를 배포하고 생성하도록 하는 방법을 이용하기 위해서는 자신의 AWS 공간을 외부에서도 자유로이 사용할 수 있도록 권한을 주는 것이 필요합니다. 


AWS Console에서 IAM 항목에 접속하게 되면 왼쪽 사이드쪽에 사용자라는 것이 보일 것입니다. 서버리스 프레임워크를 위한 사용자를 한 번 만들어보도록 하겠습니다.


사용자 추가 버튼을 이용하여 위와 같이 적절한 사용자 이름과 프로그래밍 방식 액세스 유형을 주도록 합니다.


이 과정은 권한을 주는 과정입니다. 실제로 Serverless framework에서는 Lambda, API Gateway, CloudFoundation 이렇게 3개의 서비스에 대한 권한이 필요한데, 처음 사용해보시는 분들을 위해서 편의상 AdministratorAccess라는 전체 권한을 주도록 하겠습니다.


사용자 생성이 완료되면 위와 같이 액세스 키 ID와 비밀 액세스 키가 생성됩니다. Serverless framework를 사용할 때 사용해야 할 키이므로 잘 메모해두도록 합시다.


비밀 액세스 키는 개인 정보와 같은 중요한 정보입니다. 서버리스 프레임워크를 사용할 때만 사용하시고 절대 다른 사용자에게 이 키를 보여주지 마세요. 심지어 이 글에서는 전체 액세스 권한을 준 것이기 때문에 과금에 대한 부분도 건드릴 수 있다는 것입니다. 반드시 비밀 액세스 키는 본인만 아시고, Github, 블로그 등에 배포하는 실수는 없기 바랍니다.



Serverless framework 설정

이제 권한에 대한 부분도 완료하였으니 로컬에 배포할 수 있는 환경을 설정하기만 하면 됩니다.


 $ serverless config credentials --provider aws --key 액세스키ID --secret 비밀액세스키

위 명령어를 사용하여 Serverless framework 설정을 진행합니다. 이 명령어를 통해 생성되는 설정 파일은 ~/.aws/credentials 파일에 저장됩니다.



Serverless 배포 

이제 배포가 제대로 이루어지는지 직접 실행 해보도록 하겠습니다. 간단하게 Serverless framework에서 제공하는 템플릿을 사용해볼 것입니다.


 $ serverless create -t aws-python3 -p nk-serverless

AWS Lambda는 Node.js, Python, C#, Java 등 여러가지 언어를 사용할 수 있는데, 서버리스 프레임웍에서도 python3 뿐만 아니라 다양한 언어의 템플릿을 제공합니다. t 옵션을 이용해서 원하는 언어의 템플릿을 받아보실 수 있습니다.


여기서 여러분들이 원하는 옵션을 골라주시면 됩니다. 또한 현재는 Serverless framework에서 AWS 뿐만 아니라 Azure 등의 타사 클라우드 서비스에서도 함수 배포 서비스를 제공하고 잇으니 다른 클라우드 서비스에 대한 배포도 고려해보시기를 추천해봅니다.


템플릿을 생성하면 handler.py 라는 파일을 보실 수 있습니다. 해당 코드에는 statusCode 200과 클라이언트에서 요청하는 JSON 데이터를 반환하는 코드가 담겨져 있습니다. 


serverless.yml 파일이 중요한데, 이 부분이 바로 배포와 관련된 부분입니다. 여러분들의 코드를 수정한 후, 배포 명령을 수행하면 프레임웍에서는 이 설정 파일을 보고 AWS의 배포 방식을 결정하게 됩니다.


배포 방식은 리전과 S3, IoT 등 여러 AWS의 컴포넌트를 연동할 수 있는 옵션들이 존재하는데, 이 글에서는 간단히 stage와 리전, 그리고 각 API의 entry point에 대해서만 다뤄보도록 하겠습니다.


service는 Lambda에서 표시할 Prefix(접두사)입니다. 실제로 서버리스가 배포되면 nk-serverless-nkTistory-hello 라는 이름으로 함수가 배포됩니다. 

stage는 API Gateway의 지점입니다.

region은 해당 함수를 배포하고자 하는 지역입니다.


function의 경우 첫 부분에 함수 이름을 handler 부분에 API의 시작 함수를 적어주시면 됩니다.


 $ serverless deploy

이제 이런 설정 파일을 바탕으로 앞으로는 위 명령어만 입력해주시면...


이렇게 서버리스 프레임웍에 템플릿 서비스가 올라가게 되고 이 디렉터리에 마크다운 문서를 추가하면 쉽게 문서를 열람하실 수도 있습니다.


각 함수별로 마크다운 문서를 작성하여 매뉴얼처럼 사용할 수 있습니다.


AWS에도 잘 배포가 되었습니다.



마치며...

여기까지 Serverless를 쉽고 빠르게 배포할 수 있는 방법에 대해 알아봤습니다. 


아마 서버리스를 얼마 사용하지 않다가 적용하실 경우에는 헷갈리실 수도 있을 것입니다만 계속 사용했던 분들은 이 과정을 축약하면서 큰 이점이 되었다는 것을 느끼실 수 있었을 것입니다. 


comments powered by Disqus

티스토리 툴바