데이터이야기

DB 노하우, 데이터직무, 다양한 인터뷰를 만나보세요.

Andrew 의 클라우드 이야기 #1

데이터 이야기
작성자
dataonair
작성일
2015-04-10 00:00
조회
7044


Andrew 의 클라우드 이야기 #1



안녕하세요, 앤드류 입니다.

저는 현재 모 인터넷 회사에서 개발과 서비스용 클라우를 개발하고 있고, 가끔씩 기술 책을 쓰는것과 기술관련 자료를 만드는것을 취미로 하고 있습니다.

이 컬럼에서는 클라우드와 관련된 기술, 업계 동향 그리고 개인적으로 생각하는 바에 대해서 써보려고 합니다.

여러분은 '클라우드'를 뭐라고 생각하시나요 클라우드라는 단어가 한국에 소개된것은 2009~10년 정도 였던것 같습니만, 당시 사람들에게 클라우드가 뭐냐고 물어봤을때 대부분은 모르셨고 그나마 대답을 좀 하셨던 분들은 인터넷 디스크 같은거라고 생각하셨던것 같습니다.

위키피디아는 클라우드를 아래와 같이 정의하고 있습니다.

?클라우드 컴퓨팅은 IT 관련된 기능들이 서비스 형태로 제공되는 컴퓨팅 스타일이다. 사용자들은 지원하는 기술 인프라스트럭처에 대한 전문 지식이 없거나 제어할 줄 몰라도 인터넷으로부터 서비스를 이용할 수 있다."

간단하게 말해서 필요한 서버들을 그때 그때 마다 생성하고, 더군다나 클라우드 서비스 사업자가 이 자원에 대해서 관리를 해주기 때문에 큰 지식이나 경험이 없어도 대규모 서비스를 손쉽게 만들수 있다고 정의하고 있고, 많은 분들도 동의 하시는것 같습니다. 보통은 웹브라우저를 통해 클라우드 사업자가 제공하는 '가상머신(물리 머신이 아닌 프로그램이 서버처럼 동작하는 프로세스의 일종)'을 생성해서 접근합니다. 이전에 서버 호스팅과 큰 차이 없이 클라우드를 사용할수 있고 그리고 더 많은 종류의 IT 자원들(서버, 데이터 베이스, 케쉬, DNS, 로드밸런서같은)을 선택만 하면 바로 생성이 됩니다.

클라우드 서비스 이던, 아니면 다른것이든 사용하는 바에 대해서 옳다 그르다를 말 할 순 없지만, 단계는 말할 수 있을것 같습니다. 사람들은 항상 익숙한것을 그대로 하려고 하지요, 개발자나 엔지니어도 동일합니다. 하던것을 그리고 하던 방식을 그대로 유지하는게 편하고 한동안은 생산성도 높아지기도 합니다. 그런 면에서 볼때 한국에서 클라우드를 사용하는것은 이전 경험을 그대로 확장하는 수준인것 같습니다. 이전 처럼 서버를 사서, 자신의 프로그램을 설치하고 서비스를 시작하는 것을 '클라우드 호스팅'회사에서 서버를 '생성'하는 형태로만 사용하는 것이지요. 그리고 위의 위키피디아에서 정의했던것처럼 서비스업체에서 관리(manage)를 해주기 때문에 안정적인 서비스를 운영할 수 있다고 생각합니다.

이렇게 사용하는 것은 클라우드의 가장 큰 특징인 자동화(Automation 또는 Programmable) 과 단명성(volatile 또는 ephemeral )부분을 이용하지 못하는 것입니다. 클라우드 서비스는 자동으로 리소스를 관리할 수 있도록 API를 제공합니다.

먼저 클라우드가 가진 자동화라는 특성은 무엇일까요 이전에는 서버를 사용하거나, 반대로 사용하던 것을 중지하려면 호스팅 업체에 전화를 걸거나 웹에서 신청을 했지만, 이제는 프로그램을 사용해서 언제든 서버를 만들거나 중지시키고 없앨 수 있는 것이지요. 그래서 사용자는 자신의 서비스를 모니터링 하는 스크립트나 프로그램을 만들어 두고, 시스템에 문제가 생기거나 갑자기 사용자가 폭발적으로 늘어날 경우 이것을 감지해서 새로운 컴퓨팅 리소스를 만들어 채워 넣음으로써 서비스 자체에는 지장이 없게 하는것입니다. 반대로 더이상 컴퓨팅 리소스가 필요없다고 모니터링 프로그램이 판단할 경우, 최소한의 리소스만 남겨두는 것이지요.

이런 상황을 프로그램이 판단해서 작동해야하는것이지요. 그래서 클라우드를 사용하려면 인프라쪽 사람들도 프로그램을 만들어야 하는것 입니다. 이전에는 간단한 스크립트언어로 만 충분했다면, 이제는 멀티 프로세스나 쓰레드(Thread)를 사용하고, 네트워크 프로그램을 사용해서 API를 사용할 정도의 실력은 되어야 되는것이지요. 그래서 서버관리자와 일반 서버 프로그램 개발자사이에 스펙이나 기술적인 차이가 거의 없어지게 됩니다.

클라우드가 가진 두번째 특징인 단명성은 좀 과대 포장된 부분입니다. 흔히들 오토스케일이라는 용어를 사용하고 있으며, 이는 리소스 용량을 마음대로 늘였다, 줄이기도 생성할 수도 있는 것으로 리소스의 총량에는 제한이 없다고 이야기 합니다. 즉 리소스가 존재했다가 없어지는게 아주 쉽다는것이지요. 그런데 문제는 이 '있다가 없어지는' 상황이 사용자의 의도가 아니라, 클라우드 공급자의 상황이나 자연재해에 의해서도 가능하다는 것입니다. 클라우드 공급자가 자신들의 서비스 유지보수를 위해 시스템을 꺼버리기도 하고, 홍수나 태풍등으로 인해 공급자의 데이터 센터에 문제가 생겨서 사용자의 컴퓨팅 리소스가 사라지기도 합니다. 일례로 2012년도에 큰 홍수 때문에 아마존의 데이터센터중 하나가 작동 불능 상태에 빠지기도 했습니다.

그 일을 계기로, 클라우드 컴퓨팅 사용자들은 그동안 클라우드에 가지고 있던 달콤한 환상에서 벗어 나오게 되었습니다. 클라우드 인프라가 절대로 24x7(24시간 7일 가동) 형태로 늘 살아있지 않다는것을 알게된 것이지요. 실제로 클라우드 인프라를 사용해보면, 생각보다 가상머신이 잘 죽는것을 알게됩니다. 그래서 클라우드에서 개발을 할때에는 자신의 컴퓨팅 리소스가 사라질 수 있다는 가정을 반드시 해야합니다. 그래서 최대한 정적인 정보들을 프로그램에서 제거 해야합니다. 이를 테면 서버끼리 연동하기위해서 입력했던 IP 주소나 DNS 등은 코드에 넣는 것은 거의 죄악에 가깝습니다. 당장 1시간뒤에 그 주소는 쓸모 없어질 수 있기 때문이죠. 서버가 사라질 수 있다는 가정은 꼭 클라우드에만 적용되는것이 아니라 대규모 서비스를 개발 운영할때는 필수적입니다. 대개의 경우 이런상황을 해결하기 위해 내부적으로 코디네이터(coordinaotr)나 서비스 디스커버리(Discovery)를 중앙에 두고 다른 서버끼리는 이것을 통해 필요한 서버나 서비스의 정적인 정보를 조회하도록 되어 있습니다.

그래서 클라우드의 단명성을 극복하고, 서비스 자체의 안정성을 올리려면 결국 사용자의 프로그램에서 모든것을 처리해 줘야 하는것이지요. 이전에는 안정적인 인프라로 서비스가 가능했다면, 클라우드는 안정성을 확장가능성과 맞바꾼 형태이기 때문에 사용자가 알아서 처리해줘야합니다. 그래서 어플리케이션 개발자가 이젠 인프라나 리소스 쪽도 알아야 하는것이지요.

결국, 클라우드가 확장되면 될 수록 그것을 사용하는 사용자의 개발 역량도 같이 올라가야 합니다. 그래서 사용자의 프로그램이나 서비스가 아주 커졌을때도 규모대비 적은 비용으로 유지가 가능합니다.

그렇다면, 왜 사람들은 이렇게 안정하지도 않고 가격도 싸지 않은 클라우드를 사용하라고 하는걸까요

이 이야기는 다음회에 또 하도록 하겠습니다.






출처 : 한국DB진흥원

제공 : 데이터 전문가 지식포털 DBguide.net