Chatbot 에서의 Serverless & Kubernetes

Harrison Jung
3 min readMar 14, 2021

--

Serverless( 이하 서버리스 )는 서버를 직접 관리하는것이 아닌, 클라우드 벤더가 서버에 관련된 부분을 전부 관리하고 사용자는 간단히 코드만 올린뒤, 그 코드에 관련된 사항만 직접 관리하는 시스템을 의미한다.
즉, 물리적인 서버가 실제로 없다는것이 아니라, 관리할 서버가 없다는 의미에서의 Server+Less 인것이다.

일반적으로 서버리스의 장점은 사용량이 불규칙적이고, 사용량이 적을 경우 상대적으로 낮은 비용을 들 수 있다.

사용량이 많지는 않으나 반드시 동작은 해야 하는 경우가 있다. 예를들면, 챗봇의 경우 하루에 약 100명 가량의 사용자가 방문을 하는 경우 하루에 HTTP Request는 불과 수백회에 불과할것이다. 한달이라고 해봐야 1만회가 안될것이다. 그런데, 일반적인 서버를 사용하게 될 경우 한달 내내 사용한 비용을 지불해야 하나, 서버리스를 사용하게 될경우 1만회에 대한 비용, 1원이 채 안될것이다.

서버리스는 장점만 있는것이 아니다. 일반적으로 서버리스의 가장 큰 단점으로 꼽는것은 “Cold Start” 이다. 요즘은 많은 클라우드 벤더들이 그 콜드 스타트의 시간을 지속적으로 단축시키고 있긴 하나, 그럼에도 불구하고 최초 반응속도는 일반적으로 수 ms가 아닌 수 초에 이른다.

그런데, 일반적으로 챗봇이라는 특수한 경우는 그에 따른 큰 문제가 생긴다.

챗봇은 사용자의 반응에 즉각적으로 반응해야 하며, 일부 챗봇 플랫폼들은 서버의 응답 시간 제한을 3초 이내로 제한하고 있다.

예를들면, 카카오 챗봇을 만들경우 서버에서의 응답이 3초가 넘어갈 경우 해당 요청에 대한 것은 실패로 간주하게 된다.

이것은 매우 큰 문제이다. 사용자는 챗봇 서버가 응답하지 않은것으로 알게 되기 때문이다.

결론적으로, 챗봇에서는 적은 비용에도 불구하고 Serverless 를 사용할 수가 없다.

( 우리는 그래서 GCP에서 Cloud Functions을 사용하고 있지 않다. )

그럼에도 불구하고 비용 절감에 대한 니즈는 꽤 크다.

우리회사의 경우 고객사들의 챗봇을 포함해서, 자체적인 서버 프로그램 까지 수백개의 프로그램이 실행되고 있기 때문이다.

그래서 도입하게 된것이 Docker 이다.

Docker를 이용하면, 하나의 VM위에서 많은 프로그램들이 동시에 돌아가게 되도, 독립적인 머신들 처럼 운용할 수 있다.

그런데, 문제는 그 Docker 컨테이너들을 직접적으로 관리하는것이 꽤 힘들다.

우선 갯수가 매우 많다. 앞에서 언급했듯이 수백개의 Docker컨테이너들을 관리해야 하고, 엄청나게 복잡한 네트워크들을 직접 관리를 해야 하게 된다.

그래서 다시 도입하게 된것이 Kubernetes.

완벽하지는 않지만, Docker 컨테이너들을 대신 관리해주고, 필요한 부분들을 조금만 관리하면 나머지는 자동으로 다 해줄 수 있는 시스템.

특히 사용량이 많지 않은 일부 챗봇들을 관리하는데는 더할나위 없이 좋은 시스템이다.

현재 회사에서 사용하고 있는 GKE ( Google Kubernetes Engine )위에서 돌아가고 있는 컨테이너만 약 500개에 달한다.

만약에 GKE 가 없었다면 이것들을 다 수동으로 관리해야 했을것이다. ( 물론 자체적인 스크립트를 만들어서 관리를 했겠지만 )

현재는 기본적으로 GKE에서 제공해주는 기능+ 자체적으로 만든 Node.js 스크립트를 활용하여 관리를 하고 있는데 올해는 이 시스템을 전면적으로 업그레이드 해볼 생각이다. 물론 사람을 추가로 채용해야 할듯 하고…

당장 채용 포지션이 열려 있진 않은데, 곧..오픈.

--

--

Harrison Jung
Harrison Jung

Written by Harrison Jung

꿈많은청년들의 CTO / Node.js 개발자

No responses yet