요즘 클라우드에 대해서 많이 접하고, 사용 하고있다.
지금 회사에서 운영하는 서버들 조차 온프레미스 환경에서 모두 클라우드로 이관 되었거나 이관 되고있다.
직접 클라우드와 부딪히면서 단순히 클라우드의 장점이나 특징들을 글로만 학습 했던 과거와 달리 온프레미스와 비교 하면서 무엇이 장, 단점인지를 많이 깨닫고 있는 요즘이다.
이번 글에서는 일반적인 클라우드 개념과 더불어 현업에서 들어볼만한 용어 및 내가 직접 겪으면서 얻은 것들에 대해서 전반적으로 다루고자 한다.
그러면서 최종적으로는 아래와 같은 질문에 대해 답을 하는 방향으로 진행 하겠다.
왜 우리는 클라우드를 사용하는가?
클라우드에 대해서 알아보기 전에 클라우드는 왜 클라우드일까??
먼저 클라우드의 어원에 대해서는 2가지 이야기가 있는데, 첫번째로는 서버 클러스터의 모양을 닮았다는 이유로부터 비롯 되었다.
닮았나…?
서버 클러스터란 네트워크를 이용해 마치 하나의 컴퓨터처럼 동작하도록 여러 대의 컴퓨터를 위 사진과 같이 연결하여 구성하는 기술을 의미한다.
두번째로는 엔지니어들이 데이터의 전달 과정을 도식화 하는 과정에서 네트워크의 Source와 Destionation의 중간 과정을 구름 모양으로 표시 하였다는 이야기이다.
갑작스럽게 어원에 대해서 이야기 한 이유는 특정 개념에 대해 쉽게 정의를 내릴 수 있는 방법 중 하나가 개념의 어원을 아는 것이기 때문이다.
위 어원들을 기억하며, 위키피디아에서는 클라우드에 대해서 어떻게 설명 하고 있나 알아보자.
클라우드 컴퓨팅은 사용자의 직접적인 활발한 관리 없이 특히, 데이터 스토리지와 컴퓨팅 파워와 같은
컴퓨터 시스템 리소스를 필요시 바로 제공
하는 것을 말하며, 일반적으로는 인터넷 기반 컴퓨팅의 일종으로 정보를 자신의 컴퓨터가 아닌클라우드에 연결된 다른 컴퓨터
로 처리하는 기술을 의미한다.
클라우드 기술은 서버 클러스터를 사용하여 클라우드에 연결된 다른 컴퓨터
로 처리하는 기술을 제공하며, 네트워크가 연결 된 곳이라면 컴퓨터 시스템 리소스를 필요시 바로 제공
하는 기술을 제공한다.
이러한 클라우드의 장점은 구글에 검색만 해도 주르륵 나온다.
그렇기에 짬찌 1년차 개발자의 눈으로 본 클라우드의 장점에 대해서 이야기 해보고자 한다.
클라우드로 이관 하기 이전에 관리하던 서버 렉이 있었다.
이 때 우리가 영화나 매체를 보듯 엄청난 개수의 서버렉이 있는 것이 아니라 단 한개의 서버 렉이 존재했다.
물론 운영의 목적은 아니었고, 테스트의 목적이었지만 도메인 특성 상 장시간 테스트를 요했기에 기본적으로 장시간 테스트를 버틸 수 있어야 했다.
그렇기에 서버의 일정 상태를 유지하고, 모니터링 하는 것이 중요했다.
우리 회사에서는 별도 서버실이 있는게 아니라 개발팀 내에 서버 렉이 있었기 때문에 해당 서버만을 위한 별도 냉방 시스템이 없었다.
그래서 여름 날 같이 무더워지는 날이나 장시간 테스트로 인해 서버가 과부화 되었을 때는 집중적으로 냉방을 시켜주기도 하였고, 모니터링을 꾸준히 해주는 등 리소스가 많이 투자 되었다.
지금 생각하면 공주가 따로 없었다..
그러나 클라우드로 이관 후 위의 스트레스들은 당연스럽게 사라졌다.
물론 전문 서버실을 갖추기 있는 온프레미스 환경이라면 위 스트레스를 안받을 수 있었겠지만, 나에게 클라우드란 내가 냉방을 시켜줄 필요도 없고, 신경 써줄 필요도 없으며 인스턴스 자체를 끄고 켜는 것도 너무나 편리하게 느껴졌다.
서버의 스펙이 좋았던 편이 아니라 일정 이상의 요청이 들어올 경우 서버의 프로세스가 다운되는 경우가 많았다.
이렇게 다운되는걸 방지 하기 위해 서버의 스펙을 늘리고자 할 때도 고민이 많았다.
서두에 설명 된 것처럼 테스트 목적으로 사용되는 서버였기에 이 만을 위해 스펙 업을 하는데는 반대가 많았다.
테스트는 많아야 두 달에 한번인데, 이 때를 위해 서버의 스펙을 굳이 늘려야 하는 윗선의 판단이었다.
또한 서버가 불능이 될 경우를 위해 서버 렉 한 대를 더 두어 이중화를 하자는 의견도 나왔는데, 그에 대한 결말은 이미 아실거라 생각된다.
이 또한 클라우드로 이관 후 너무나 편리함을 겪었다.
클라우드에는 Auto Scaling
이라는 기술이 존재한다.
이는 클라우드의 유연성을 대표하는 핵심 기술로 CPU, Memory, Disk, Network Traffic과 같은 시스템 자원들을 모니터링 하며 서버의 스펙을 자동으로 조절하는 서비스를 일컫는다.
예를 들어 테스트 기간 갑작스럽게 트래픽이 많아진 경우, 자동으로 스케일링
을 진행 인스턴스를 증가해서 부하에 효과적으로 대응할 수 있다.
그리고 트래픽이 다시 정상화 되면 자동으로 증대한 인스턴스를 스케일 인
을 통해 다시 줄일 수 있다.
클라우드를 사용한다는 것은 해당 클라우드 업체의 가용성
을 신뢰 한다는 것으로도 이야기 할 수 있을 것 같다.
가용성이란 서버와 네트워크 또는 프로그램 등 다양한 정보 시스템이 정상적으로 사용 가능한 정도를 의미한다.
AWS와 같이 대형 클라우드 업체일수록 더 높은 가용성을 제공한다.
클라우드를 사용 해봤으면 알겠지만 내 서버(인스턴스)가 외부의 영향(화재, 지진, 정전 등)으로 인해 종료될 것이라는 생각을 거의 안하게된다.
이는 클라우드의 고가용성
이라는 특징 덕분이다.
고가용성이란 서버와 네트워크, 프로그램 등의 시스템이 오랜기간 동안 지속적으로 정상 운영이 가능한 성질을 말하며, 고장나도 바로 복구해서 서비스를 지속할 수 있는 능력을 의미한다.
이러한 특징은 물리적인 서버를 직접 관리 해보았다면 더더욱 중요하게 여길만한 부분이다.
위에서 알아봤던 클라우드는 서비스 관리 주체와 수준에 따라서 아래와 같이 구분할 수 있다.
‘서비스로서의 인프라’를 뜻하는 IaaS는 AWS의 EC2가 대표적인데, 이는 인프라 수준의 클라우드 컴퓨팅을 제공해 사용자가 서버 OS 부터, 미들웨어, 런타임, 데이터, 애플리케이션까지 직접 구성하고 관리할 수 있다.
AWS와 같은 클라우스 서비스 제공 업체(CSP, Cloud Service Provider)는 데이터 센터를 구축해 다수의 물리 서버를 가상화 해서 제공하며 네트워크, 스토리지, 전력 등 서버 운영에 필요한 모든 것을 책임진다.
‘서비스로서의 플랫폼’을 뜻하는 PaaS는 Heroku나 클라우드 타입이 대표적이며, 가상화된 클라우드 위에 사용자가 원하는 서비스를 개발할 수 있도록 개발 환경을 미리 구축해 서비스 형태로 제공하는 것을 의미한다.
PaaS는 운영체제, 미들웨어, 런타임을 미리 구축한 상태로 제공하기에 클라이언트 입장에서 자유도는 낮지만 오히려 해당 부분들을 신경 써도 되지 않기에 리소스를 절약 할 수 있다.
그래서 나는 빠른 개발 속도가 관건인 해커톤 같은 대회에서 클라우드 타입을 애용하였다.
‘서비스로서의 소프트웨어’를 의미하는 SaaS는 클라우드 서비스 형태 중 가장 완성된 형태의 클라우드 서비스이다.
SaaS는 클라우드 인프라 위에 SW를 탑재해서 제공하는 형식이며, IT 인프라 자원 뿐만 아니라 SW에 대한 유지보수 자체를 업체가 맡아서 개발한다.
이러한 대표적인 예로 Slack, Discord 같은 완성형 프로그램이 있다.