클라우드 컴퓨팅이 애플리케이션 혁명을 초래했다. 클라우드 컴퓨팅은 외부 공급자에 아웃소싱을 의뢰하는 컴퓨터 모델에 불과하다고 생각하지 말기 바란다. 잘못된 생각이다. 이런 생각을 하고 있다면 스스로 세운 가정과 생각을 뒤집어야 하는 '뼈아픈' 전환기를 거치게 된다.
클라우드 환경에 내재된 인프라 기능과 차세대 애플리케이션 요건이 이런 변화를 초래한다. 그 결과물은 지금껏 생각해온 '애플리케이션'을 기준으로 했을 때, 일정 부분 기존 그 특성을 유지하고 있지만 설계와 운영 방법이 크게 다른 '새로운 애플리케이션'이다.
전통적인 애플리케이션과 클라우드를 기반으로 구현되는 새로운 애플리케이션의 특징을 비교하면 '상전벽해' 같은 차이를 알 수 있다. 다음은 전통적인 애플리케이션과 클라우드 애플리케이션을 비교한 표다.
표를 보면 클라우드 애플리케이션이 몇몇 중요한 특징을 갖고 있음을 알 수 있다. 전통적인 애플리케이션에는 사전에 예측을 할 수 있는 부분이 있다. 사용자의 수, 사용하는 장치, 장치 실행에 필요한 기반의 종류와 수를 알 수 있다.
클라우드 애플리케이션은 엘라스틱 기반
반면 현대의 애플리케이션은 과거와는 아주 크게 다르다. 로드를 예측할 수 없다. 사용자의 수도 알기 어렵다. (과거 사용자의 대다수를 차지한) 직원만 사용자가 아니기 때문이다. 고객, 파트너, 기타 이해관계자의 수도 모른다. 이들은 순수한 또는 나쁜 의도에서 기업 애플리케이션에 접근하는 외부 사용자들이다.
더 나아가, 과거 IT 부문이 승인한 장치로 애플리케이션을 이용했던 것과 달리 다양한 장치를 이용해 애플리케이션에 접속한다. PC, 태블릿, 스마트폰 등 점차 다양한 장치로 애플리케이션을 이용하는 사례가 증가하고 있다. 미래에는 의료기기 등 특수 장치는 물론 스마트워치와 기타 특정 용도의 하드웨어 등 과거에는 컴퓨팅 장치로 생각되지 않았던 장치들이 애플리케이션에 접속하는 비중이 더욱 늘어날 것이다.
또 지정된 인프라에서만 애플리케이션을 운용하지도 않는다. 아마존 웹 서비스, 구글, 마이크로소프트 등 외부 공급자가 제공한 인프라에 상주한다. 이 밖에 지정된 전용 하드웨어에 기반을 두지도 않는다. 클라우드 공급자는 고객의 워크로드를 필요에 따라 옮길 수 있는 공유 인프라를 사용해야 경제성을 실현할 수 있기 때문이다.
애플리케이션 인프라가 고정돼 있지도 않다. 로드에 따라 쉽게 확장 또는 축소된다. 자원 사용만큼 요금을 지불하는 과금 체계가 정립되고 있기 때문이다.
전통적인 애플리케이션 설계에서는 얼마나 많은 인프라가 필요한지 예상해 자본 지출 운용 계획에 따라 이를 조달한다. 애플리케이션 운용에 필요한 자원을 예측하기 어렵지만, 지출 자본을 일관되게 감가상각 할 수 있다. 이는 자원 사용량과는 상관 없는 감가상각이다.
그러나 클라우드 애플리케이션의 경우 자원 소비 자체가 비용 항목으로 계산이 된다. 자원을 낭비할 경우 비용이 발생한다는 의미다.
일부에서는 아주 비싼 퍼블릭 클라우드 환경을 도입한다. 대다수 IT 애플리케이션의 로드를 예상할 수 있기 때문에 고정된 인프라나 다름 없는 이런 클라우드 환경을 이용할 수 있다고 생각해서다. 그러나 클라우드 컴퓨팅 애플리케이션 아키텍처 과정을 피하려는 목적에서 이런 가정을 하지는 말아야 한다.
전통적인 인프라는 고정돼 있고, 조정이 아주 어렵고, 따라서 신속하게 조정하기가 어렵다. 즉 전통적인 IT 환경은 그리스 신화 속의 프로크루테스의 침대(Procrustean beds)라 할 수 있다. '침대'길이를 조정하지 않고, 사람의 다리, 즉 애플리케이션을 억지로 맞춰 넣는 그런 환경을 의미한다. 그러나 이는 차세대 애플리케이션에서는 수용되지 않을 환경이다.
클라우드로 이런 인위적인 제한이 없어지면 개발자는 탄력적인 인프라를 사용하겠다고 고집할 것이다. 개발자들은 인프라란 쉽게 구하고 확장할 수 있는 것이라고 생각을 하게 된다. 그러면 결국 클라우드 환경이 요구되는 새 애플리케이션에 착안을 한다. 이 상황에서는 과거의 안정적인 애플리케이션 기반에 대한 고정관념이 사라진다.
과거의 방식이 미래에 소용없게 되는 것이다. 간단히 말해, 미래의 애플리케이션은 모두 클라우드 애플리케이션이다. 따라서 여기에 맞게 설계 및 운영을 할 필요가 있다.
애플리케이션 관리 역량 향상
이 점을 염두에 두면, 지금부터 소개하는 4가지 가정과 방식이 미래의 애플리케이션을 설계 및 도입할 때 도움이 될 것이다.
애플리케이션은 역동적이다. 가상 머신의 구현과 애플리케이션의 유입유출이 잦아진다. 따라서 애플리케이션이 자원을 쉽게 유입 및 유출할 수 있도록 만들어야 한다. 이런 역동적인 애플리케이션을 구현하려면 다음과 같다.
코드와 스테이트(state) 분리시키기. 모든 세션 대화를 단일 서버로 통합하기 위해 로드 밸런서(load balancer)에 스테이트 설정(state setting)을 유지하기 쉽다. 그러나 이렇게 하면 서버 로드의 불균형이 초래된다. 더 나아가 서버가 붕괴되면 사용자 스테이트를 잃어버리는 '재앙'이 초래될 위험도 있다.
따라서 스테이트를 일종의 데이터 베이스인 별개의 스토리지 장소로 이전하는 것이 올바른 방법이다. 이렇게 하면 이중화가 구현되고, 어떤 서버에서든 스테이트를 불러와 세션 대화를 계속 유지할 수 있다. 물론 이 경우 데이터베이스 병목 현상이 발생한다. 다음은 이에 관한 대비책이다.
스테이트를 캐시로 옮긴다. 캐시 티어(tier)는 고속 RAM에 세션 데이터를 유지한다. 디스크 액세스에 시간을 잡아먹을 필요가 없고, 세션 데이터를 더 쉽게 회수함으로써 애플리케이션 성능을 향상시킨다. 일반적으로 캐시 솔루션에는 자원 실패 시 데이터 손실을 방지할 수 있는 이중화 기반이 구축되어 있다. 다이나믹한 앱에는 2개 이상의 캐시 티어를 확보하는 것이 일반적이다.
이 때 또 다른 도전에 직면한다. 다이내믹한 자원과 여러 티어를 관리해야 한다는 도전이다. 다음은 이에 관한 방법이다.
첨단 애플리케이션 관리 솔루션을 활용한다
애플리케이션을 하나의 자원으로 처리하고, 다이나믹하게(자동으로) 추가 또는 제거하고, 항상 자원을 확보해 놓는 솔루션이다. 자동화 관리는 애플리케이션 실패의 가장 큰 원인 중 하나인 사람의 실수로 인한 오류 발생을 없애준다.
마지막으로 다이나믹하게 적정 자원을 애플리케이션에 할당해 사용자 로드에 맞는 자원 비용만 발생시킨다. 이렇게 하면 비용/가치의 균형을 도모할 수 있다.
클라우드 애플리케이션 개발자의 기대
마지막으로 앞선 내용으로 되돌아가 보자. "클라우드로 이런 인위적인 제한이 없어지면 개발자는 탄력적인 기반을 사용하겠다고 고집할 것이다."
새로운 개발자의 기대가 시사하는 함의를 생각하는 것이 중요하다. IT 역사를 돌아보면, 새 플랫폼으로 새로운 애플리케이션이 발생하고, 이 애플리케이션의 비중이 높아지는 것이 일반적이다. 동시에 애플리케이션 포트폴리오가 커진다. 애플리케이션마다 비용/편익 효과가 다르기 때문이다.
그러면 퍼블릭 클라우드 컴퓨팅 환경에 개발자가 기대하는 바는 뭘까?
- 몇 시간이나 며칠이 아닌 단 몇 분 만에 자원을 활용할 수 있다는 것이다.
- 온디맨드 가상 머신과 방화벽 변경에 몇 주가 소요되는 것을 용인할 수 없다.
- 또 확장 가능한 객체 스토리지, 이중화 데이터베이스, 큐(Queu), 이메일 등 지원 서비스도 늘어난다.
- 비용은 자원 사용과 관련이 있다.
필자는 지금이 IT에는 가장 흥분된 시기라고 생각한다. 10년 후의 IT는 지금과는 아주 다른 모습을 하고 있을 것이다. IT 분야는 애플리케이션을 이해하고 중시해야 한다. 환경과 프로세스, 현실에 맞는 사고방식을 준비할 때다.