서버를 쓴다는 건 10배, 100배의 비용을 지급한다는 의미
https://brunch.co.kr/magazine/cloud-finops
저는 클라우드 네이티브라는 단어를 기술적으로 설명하는 것보다는 단순하게 "클라우드 답게 IT 시스템을 개발하고 운영한다"라는 literally 단어 그대로의 의미를 봐야 한다고 생각합니다.
더 풀어서 이야기해 보면 클라우드 없던 시절에는 다른 옵션이 없었습니다.
제가 30대 초반에 삼성SDS에서 스타트업(당시에는 벤처)으로 스핀오프했을 때 가장 먼저 진행한 큰 투자는 사무실 임대와 서버 구매였습니다. 몇 달을 기다려 받은 몇대의 서버와 랙을 밤새워 조립하고 OS, WAS, DB 등 개발에 필요한 프로그램들을 설치한 후, 사무실 한쪽에서 시끄럽게 돌아가는 쿨링팬 소리와 정신없이 깜박이는 네트워크 허브의 LED 불빛에 뿌듯했었고, 서비스를 본격적으로 시작되는 단계로 접어들면서 데이터 센터에 서버와 랙을 옮겨놓고, '우리 서버 잘 있을까'하는 쓸데 없는 걱정과 별 문제도 아닌데 데이터 센터로 뛰어가는 그러한 모습이 거의 유일한 옵션이었습니다.
그 때는 서버에 대한 가장 중요한 기준은 언제가 될지 모르지만 다음 서버를 살 때까지 버텨 주어야 한다는 것이었습니다. 일단 서버가 죽으면.... 당연히 서비스 중단이기 때문에 여벌 CPU, 메모리, 랜카드, 하드디스크를 소중하게 보관하고 있었지요. 그래도 꼭 대비 못한 부분이 문제가 생겨서 이리저리 부품을 수배하던 기억들이 짠하게 남아 있네요. ^^
재부팅없이 일년 내내 켜 놓을 수 있는 서버라고 불리던 장비들을 사려면 당시에도 최소 거의 1천만원, 좀 사양을 올리면 2~3천만원을 쉽게 넘어가 버렸고, WEB 서버, WAS 서버, DB 서버, 이중화 감안해서 주문하면 몇 천 만원 이상 지급해야 하는데, 주문을 하더라도 한달은 기달려야 비행기타고 배타고 물건너 오던 시절이니 어쩔 수 없이 큰맘먹고 진행해야 하는 엄청난 투자였던거죠. 아이고.. ㅎㅎ
오늘 서론이 "라떼는 말이야~" 이렇게 길어지는 이유는 클라우드를 이렇게 쓰시는 분이 은근히 많다는 거.... ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ 진짜에요!!! 이 글을 읽으시면서 "에이 누가 클라우드를 그렇게 써"라고 하시면서 필요할 때 스케일업/다운하고 오토스케일링 걸어놓고, 스케쥴러 걸어놓고, 태그 붙여놓고, 알람 걸어놓고 계시는 분들은 정말 잘 쓰고 계시는거여요. 제가 이전에 작성한 "클라우드 비용 절감 안하는 이유가 뭘까요? (https://brunch.co.kr/@cebi750/20)" 참조해 주세요. 저희 FinOps 컨설팅팀이 기업들의 클라우드 비용절감 방안 분석해 보면, 통계적으로 지금 월비용의 평균 20~30%는 줄일 수 있는 것으로 나오고 있습니다. 물론 정말 타이트하게 관리하는 회사도 있어서 4~5% 정도밖에 절감 여지가 없는 회사도 있지만, 50%에 가깝게 절감방안이 나오는 회사도 있습니다.
주제로 다시 돌아가서 "클라우드 네이티브"를 "클라우드 답게 클라우드를 쓰는 것"으로 본다면 최상위 클라우드 네이티브 단계는 "서버리스"를 "최대한 적용"하는 것이 됩니다. 그 이유는 서버리스가 내가 비용을 지급해야 하는 구매 대상을 가장 최소로 하는 방법이기 때문입니다.
서버리스는 "서버가 없다"는 의미가 아니고, "서버를 관리할 필요가 없다"는 의미입니다.
내가 만든 프로그램을 돌릴 때 필요한 서버를 내가 관리하지 않고, 클라우드 서비스 제공자가 알아서 필요한 만큼만 필요한 시간동안 제공하고 비용을 받는 방식입니다.
저렴한 서버가 필요한 프로그램이건 큰 메모리와 cpu를 요구하는 프로그램이건 그 요건에 맞추어서 구동된 시간과 처리된 데이터만큼만 비용을 지급한다는 것입니다. 집안에 있는 전자제품으로 치면 내가 영화를 볼 때는 100인치 어마무시 삐까뻔쩍한 텔리비전을 2시간동안 사용하고 시간당 5천원씩 내고, 인강을 볼 때는 24인치 보급형 텔리비전을 필요한 수업시간만큼 사용하고 시간당 1백원씩 낸다는 것이지요.
제가 서버리스를 극강의 비용 절감 방법(https://brunch.co.kr/@cebi750/5)이라고 반복해서 설명드리는 이유입니다. 아무리 싼 서버라도 구매를 하게 되면, 이 서버에 할당된 CPU, Memory, 디스크공간 등에 대하여 사용하건 말건 비용을 지불해야 합니다. 하지만, 서버리스 상품들은 쓰는 시간만큼 쓰는 사양만큼 지불을 하는 구조이기 때문에 극강의 비용 절감 방법이고, 클라우드 답게 클라우드를 쓰는 방법이 됩니다.
비용 비교를 해 보겠습니다. (원래는 아키텍처도 그리고, 여러가지 그래프와 표도 만들어서 비교해 드리려고 했는데, 제가 요즘 정말 일이 많아서.. 글도 오래간만에 쓰는 상황이라... 나중에 이쁘게 업데이트 해 보겠습니다. ^^ )
산출 가정은 뭔지 모르지만 아주 일반적인 정보를 제공하는 기본적인 웹 사이트를 기준으로 했습니다. 사용자는 10,000명이고, 월 평균 100번을 로그인하고, 한번 로그인하면 10개 정도의 페이지를 이동한다고 가정했습니다. (사실 이정도 되는 사이트로 성장하기도 쉽지 않죠? ㅎㅎㅎㅎㅎ )
아주 간단한 일반적인 정보를 제공하기 때문에 아키텍처는 아주 간단하게 구성하겠습니다.
잘 아시는 서버 구조에서는 AWS EC2 를 이용해서 Web 서버, Was 서버를 구축하고, AWS RDS로 데이터베이스를 구축했습니다. 서비스는 당연히 중단되면 안되니까 Web, Was 를 이중화하여 총 4대의 EC2를 사용하였고, 각 EC에는 필요한 서비스 설치와 데이터 저장에 사용할 100GB EBS를 붙였습니다.
이렇게 산출을 하니 서버 구조에서는 월 약 40만원의 비용이 발생하게 됩니다. 비용을 줄이기 위하여 4대의 EC2에 3년 약정할인을 적용하면 월 15만원 정도 발생하게 됩니다. 그리고, 약정을 걸었을 때는 해당 인스턴스를 스케일업이나 스케일다운을 할 수 없고, 사용을 하지 않더라도 3년간은 무조건 해당 비용이 꼬박꼬박 지불되어야 합니다. 사용자가 없어도 비용을 고정적으로 나가고, 사용자가 많아져서 서버를 늘려야 하는 상황이 되더라도 약정이 골치 아프게 하게 됩니다.
서버 사양도 t3.large 2 vCPU, 8GB Memory 로 잡았습니다. 아주 아주 일반적으로 집에서 사용하는 노트북 정도의 CPU와 메모리를 갖춘 사양입니다. 사양을 2배, 4배로 올리면 그 비용이 그대로 2배, 4배로 올라갑니다. 아마도 EC2를 사용하는 대부분의 회사에서 최소사양으로 서비스를 제공하지 않고, 사용자 peak 에 대비하여 오버사이징을 해 놓고 있습니다. 월 40만원이 아니고, 100만원을 넘어가게 되는 이유입니다.
서버리스 구조에서는 클라우드프론트(HTTP 호출 처리) --> API 게이트웨이 --> 람다 --> RDS 로 연결되게 구축합니다. 이렇게 구축을 했을 때, 만명의 사용자가 한달에 100번씩 방문하는 서비스를 제공하더라도 월 비용이 약 5만 7천원 정도 발생할 것으로 예상이 됩니다. 더 중요한 것은 슬프게도 사용자가 한 명도 방문하지 않으면, 비용이 거의 zero가 된다는 것 입니다. 그리고, 너무나도 행복하게 우리 서비스가 빠르게 성장하여 많은 사람들이 방문을 하더라도 우리는 할 일이 하나도 없습니다. 서비스의 가용성, 안정성 보장되고, 우리는 산술적으로 증가하는 비용만 체크하고 지불하면 됩니다.
물론 람다의 약점은 여러가지가 있습니다. 기본적으로 호출을 받았을 때 컨테이너에 구동되기 때문에 프로세스를 상시 올려놓고 있는 EC2의 서비스 보다 반응 속도가 느릴 수 있습니다. 이 부분도 개별 호출에 대해서는 느리지만, 동시호출이 일어날 때 EC2에서는 병목이 걸릴 수 있다는 점을 고려해야 합니다. 또한 람다는 구동 시간이 최대 15분의 제한이 있기 때문에 배치성 프로그램에는 제한이 있습니다. 또한 실행 후 바로 종료되기 때문에 데이터를 메모리에 저장해서 다음 단계로 넘겨야 하는 경우에는 구현이 어렵습니다.
클라우드를 클라우드 답게 잘 쓰고, 싸게 쓰기 위해서 적절한 부분에 서버리스 구조를 적용해 보시지요~ ^^;;
* 서버나 서버리스나 실제 서비스를 위한 아키텍처에는 RDS, Cloudfront, S3, Load Balancer, Route53 등 각종 서비스 들이 추가되어야 하는데 이런 내용을 모두 포함하여 산출하지는 않았습니다. ^^;;
* 계산에 반영은 안했지만, 람다 호출은 100만회까지 무료 등의 Free tier 도 있고, 회수나 데이터량 모두 사용량이 많으면 단가가 낮아지는 계단형 요금제가 적용됩니다.
- 서버리스 구조의 예상 비용 (2021.03 AWS Seoul 리전 가격 기준)
1. API Gateway 의 API 호출비용 계산
. API Gateway에서 Rest API 호출 100만건당 3.5 USD
. 월 예상 호출회수 = 10,000 사용자 X 월 100회 로그인 X 로그인시 10개 페이지뷰 = 1천만회 호출
. 예상 호출비용 = 1천만회 X 3.5 USD / 100만회 = 35 USD
2. API Gateway 의 데이터 전송 비용 계산
. 호출당 평균 데이터 전송량 : 10KB
. GB 당 데이터 전송 비용 : 0.09 USD
. 예상 데이터 전송량 : 1천만회 X 10KB = 1GB
. 예상 데이터 전송비용 = 1GB X 0.09 USD / 1GB = 0.09 USD
3. Lambda 호출 비용 계산
. Lambda 100만건당 호출비용 : 0.2 USD
. 월 예상 호출회수 = 1천만회
. 예상 호출비용 = 1천만회 X 0.2 USD / 100만회 = 2 USD
4. Lambda 사용 비용
. 128MB Lambda 1ms 동안 사용 비용 : 0.0000000021 USD (람다 최소 사양)
. 실행건수 : 1천만회
. 평균 실행 : 시간 500 ms
. 예상 사용 비용 = 1천만회 X 500 ms X 0.0000000021 USD / 1 ms = 10.5 USD