Faas 이해하기(with 서버리스)
- 4. Serverless/FaaS
- 2020. 5. 15.
Faas란?
안녕하세요.
이번 포스팅에서는 Faas와 서버리스에 대해 간략하게 설명드리고자 합니다. 크게 어려운 개념은 없지만 개인적으로 흥미있는 분야라고 생각되어 한 번 정리해 보았습니다. FaaS는 Function as a Server의 약자로 말 그대로 "함수를 서비스로 제공한다"라는 의미입니다. 여기서 함수가 뜻하는 바는 프로그래밍 수준에서 Function 혹은 메소드등을 의미합니다. 사용자는 Rest API와 같은 HTTP 요청을 통해 함수를 호출하고 원하는 파라미터를 전달하여 함수가 리턴 값이 있다면 리턴 값을 받거나 혹은 함수의 동작 시작 이벤트를 발생시킬 수 있습니다.
서버리스 컴퓨팅은 이러한 FaaS를 기반으로 새로운 인프라 서비스를 제공하는 것입니다. 서버리스 컴퓨팅은 특정 기능을 수행하는 프로그래밍 함수 즉 데이터베이스로부터 데이터 가져오기, 백엔드 요청 전달과 같은 기능을 개발하기 위해 IT 조직의 S/W 개발자들은 더 이상 불필요하게 데이터베이스와 같은 서버를 직접 구축하고 유지보수해야할 필요가 없습니다.
정해진 로직에 맞게 코드 내에서 함수를 호출하기만 하면, 원하는 프로그램을 개발할 수 있습니다. 따라서 서버리스는 실제로 서버가 없다는 의미가 아닌 개발자 입장에서 구축 및 관리가 필요한 서버가 없기 때문에 프로그래밍 개발에만 집중 할 수 있습니다.
FaaS의 동작원리
FaaS는 단일 서비스 즉 어플리케이션 자체를 제공하는 것이 아닌 프로그래밍 수준에서 함수(메소드) 단위로 쪼개어 클라우드에 업로드합니다. 이후 Rest API와 같은 HTTP 호출을 통해 함수를 이벤트 방식으로 실행시킬 수 잇습니다. 만약 데이터베이스의 읽기 / 쓰기등을 위한 함수 구문을 클라우드에 업로드해둔다면, 어느 프로그램에서도 단순히 함수 호출을 통해 데이터베이스로부터 입출력이 가능할 수 있습니다. 따라서 S/W 개발자와 IT 업계가 프로그래밍 로직에만 집중 할 수 있도록 하는것이 바로 FaaS와 서버리스의 주요한 개념입니다.
그림 1에서는 FaaS의 생성 단계를 나타냅니다. 사용자는 자신의 프로그램 내부에서 FaaS 함수를 호출하는 구문을 삽입하고 프로그램을 실행하게 되면, FaaS에게 Rest API 형식의 HTTP 요청이 가게 됩니다. 그럼 FaaS는 해당 함수를 저장소로 부터 읽어오게 되고 해당 함수를 컨테이너 혹은 가상머신으로 생성하게 됩니다.
다음 함수를 포함하고 있는 컨테이너 혹은 가상머신이 생성이 완료되면 함수를 실행하고 결과를 반환하거나 함수가 수행해야하는 동작을 수행하게 됩니다. 이후 일정시간 동안 함수의 호출이 없다면 함수를 포함하는 컨테이너 혹은 가상머신은 FaaS 시스템에 의해 삭제 됩니다.
Cold와 Warm Start
위에서 언급한 FaaS의 생성 주기에 따르면 한가지 의문이 생길 수 있습니다. 바로 사용자로부터 함수를 요청하면 컨테이너나 가상머신을 생성하여 함수의 기능을 제공하고, 일정 시간 동안 사용하지 않을 시 함수를 포함하는 컨테이너나 가상머신을 삭제하게 됩니다. 이는 리소스의 효율적인 활용을 위해서입니다.
따라서 다른 서비스와 다르게 FaaS는 각각 Cold와 Warm Start라는 특징을 가지고 있습니다. 이러한 특징은 회전 방식의 기관총 동작에 비유하게 되는데, 기관총이 발사하기전에는 회전이 멈춰있고 발사가 시작 되면 일정 시간 동안 회전후 기관총이 발사되기 시작합니다. 발사하기 위해 일정시간 회전하는 기관총처럼 함수 호출 시 생성 되어 있지 않은 함수를 호출하게 되면 함수를 생성하는 동안의 시간이 발생하기 때문에 이러한 특징을 Cold Start라고합니다.
반대로 회전하는 기관총이 회전을 멈추기 전에 총알을 발사하게 된다면 즉각적으로 총알이 나가는 것을 영화에서 많이 보셨을 것 같습니다. 이처럼 함수가 생성되면 일정시간 대기하게 되는데 이렇게 일정시간 대기 중인 함수를 호출할 경우 별도의 함수 생성 과정이 필요 없기 때문에 즉각적으로 요청에 응답할 수 있습니다. 이러한 상태를 Warm Start라고 합니다.
결론
대표적인 FaaS 프로젝트로 오픈소스 프로젝트 뿐만 아니라 AWS의 Lambda등이 있습니다. 그렇다면 이러한 FaaS 서비스를 제공한느 업체들은 어떻게 과금을 책정할까요? 바로 가상머신, 컨테이너의 사용 리소스 혹은 할당 리소스 만큼 과금을 책정하는 방식이 아닌 함수의 호출 횟수에 따라 과금을 책정하게 됩니다. 따라서 항상 서비스를 제공할 필요가 없고, 불특정하게 이벤트가 발생한다면 FaaS 방식이 과금 측면에서 유리할 수 있습니다.
긴글 읽어 주셔서 감사합니다.
인용글
-------------------------------------------------------------------------------------------------------------------------
업데이트로그
-------------------------------------------------------------------------------------------------------------------------
해당 글은 스스로 연구한 내용을 통한 주관적인 이해를 바탕으로 작성 되었습니다. 수정 할 부분이 있거나, 다른 의견이 있으시다면 언제든지 말씀해주시면 반영하도록 하겠습니다. 읽어 주셔서 감사합니다. 끝으로 불법으로 복제하는 것은 금합니다.