코로나19로 디지털 서비스에 대한 수요가 급증하면서, 기업들의 디지털 전환(Digital Transformation)이 가속화되었습니다.
기존 온프레미스 시스템으로는 빠르게 변화하는 비즈니스 요구에 대응하는 데에 한계가 있기 때문인데요.
디지털 전환에 성공하기 위한 기반 인프라로 ‘클라우드’가 떠오르면서, 최근 많은 기업이 시스템을 클라우드로 전환하기 시작했습니다.
인프라만 클라우드로 전환하면 끝일까?
하지만 대부분의 기업은 서버와 스토리지 같은 인프라 자원만 클라우드로 전환했을 뿐, 고객과 접점이 되는 애플리케이션은 기존 시스템 그대로 클라우드에 ‘옮겨둔’ 채 운영하고 있습니다.
기존 애플리케이션은 디지털 경험을 고려하지 않고 설계된 경우가 많아, 모든 기능이 하나의 애플리케이션에 통합된 형태로 구축되어 있습니다. 다양한 애플리케이션 서비스, 데이터 액세스 코드 및 기타 구성 요소들이 기술 환경에 상관없이 단일 애플리케이션으로 결합한 것입니다.
이러한 전통적인 구조의 애플리케이션을 클라우드에 적용한다면, 애플리케이션을 개발·실행·관리하는 데에 클라우드 컴퓨팅 장점을 제대로 활용하기 어렵습니다.
클라우드 컴퓨팅 장점을 모두 활용하기 위해서는 애플리케이션의 실행 환경부터 구성까지 전반적인 변화가 필요한데요. 이러한 변화를 위한 매뉴얼로 ‘클라우드 네이티브’가 등장했습니다.
클라우드를 110% 활용하기 위한 ‘클라우드 네이티브’
클라우드 네이티브(Cloud Native)란 넓은 의미로 클라우드 컴퓨팅의 장점을 최대한 활용할 수 있도록 애플리케이션을 개발하고 운영하는 방법론입니다.
클라우드 구축 후 기존 인프라에 만든 애플리케이션을 그대로 적용하는 것이 아닌, 처음부터 클라우드 환경을 고려해 애플리케이션을 만드는 기술과 방법들을 포괄하는 개념입니다.
‘Cloud Native’라는 용어는 2015년, 리눅스에서 처음 사용했는데요. CNCF(Cloud Native Computing Foundation) 재단을 만들어 클라우드 네이티브로 전환할 수 있는 오픈소스 기술들을 추진/관리하고 있습니다.
CNCF에서 정의하는 클라우드 네이티브
클라우드 네이티브 기술은 조직이 퍼블릭, 프라이빗, 그리고 하이브리드 클라우드와 같은 현대적이고 동적인 환경에서 확장 가능한 애플리케이션을 개발하고 실행할 수 있게 해준다.
컨테이너, 서비스 메쉬, 마이크로서비스, 불변(Immutable) 인프라, 그리고 선언형(Declarative) API가 이러한 접근 방식의 예시들이다.
이 기술은 회복성, 관리 편의성, 가시성을 갖춘 느슨하게 결합된 시스템을 가능하게 한다. 견고한 자동화 기능을 함께 사용하면, 엔지니어는 영향이 큰 변경을 최소한의 노력으로 자주, 예측 가능하게 수행할 수 있다.
출처: CNCF Cloud Native Definition v1.0
그렇다면 클라우드 네이티브를 실현하기 위한 요소들은 무엇이 있을까요? 다양한 방법들과 기술들이 존재하지만, 그중 4가지를 소개해드리겠습니다.
클라우드 네이티브 주요 구성 요소 4가지
- 마이크로서비스 아키텍처
마이크로서비스 아키텍처(MicroService Architecture, MSA)는 애플리케이션을 독립적인 작은 기능들로 분해하여 구축하는 기술입니다.
기존 애플리케이션은 모놀리식(Monolithic) 형태로, 하나의 거대한 덩어리처럼 애플리케이션의 모든 기능이 단일 소스로 통합되어 있습니다. 이렇게 하나의 배포 단위로 구성된 경우, 기능 하나를 변경하기 위해 전체 애플리케이션을 재배포해야 하는 비효율성을 가집니다.
마이크로서비스 아키텍처는 이러한 문제를 해결하는 대안으로, 작은 데이터베이스와 작은 서비스가 서로 묶여 있어 하나하나가 완벽하게 독자적으로 작동합니다.
하나의 애플리케이션 내에 작은 서비스 단위로 구성되어 필요한 기능 단위만 수정 및 추가할 수 있고, 자원의 상태와 사용량에 따라 자동으로 동적 자원이 할당되어 확장성이 보장됩니다. 또한 서비스 단위 별로 적합한 언어 및 미들웨어를 활용하여 최적화된 아키텍처를 구성할 수 있습니다.
마이크로서비스 아키텍처는 프로그래밍 언어에 구속받지 않는 API(Application Programming Interface)를 통해 통신하며, 이는 개발자가 새로운 애플리케이션 구성 요소를 기존 아키텍처에 통합하는 방식을 간소화합니다.
- 컨테이너 기술
컨테이너 기술은 마이크로서비스 방법론으로 개발한 애플리케이션을 효과적으로 배포·활용할 수 있는 기술입니다. 가상화 기술 중 하나로, 시스템을 가상화하는 것이 아닌 애플리케이션을 구동할 수 있는 컴퓨팅 작업을 패키징하여 가상화한 것입니다.
기존 애플리케이션은 많은 이질적인 서비스들을 하나의 배포 패키지로 구성하여 종속성을 가집니다. 이에 반해 컨테이너 기술은 종속성 없는 애플리케이션 실행을 지원합니다.
이는 애플리케이션이 느슨하게 결합하여 다른 서비스에 영향을 주지 않고 독립적으로 관리/운영이 가능하기 때문인데요. 도커(Docker)와 같은 컨테이너 엔진이 설치된 환경이라면 퍼블릭, 프라이빗 및 하이브리드를 포함한 다양한 환경 및 인프라 전체에서 동일하게 작동합니다.
이러한 IT 이식성과 유연성을 가진 컨테이너 기술은 앞서 CNCF의 정의로 언급한 “조직이 퍼블릭, 프라이빗, 하이브리드 클라우드와 같은 현대적이고 동적인 환경에서 확장할 수 있는 애플리케이션을 개발하고 실행할 수 있게 해주는 방식”을 구현하기 위한 핵심 요소라 할 수 있습니다.
- DevOps
DevOps는 Development(개발)와 Operation(운영)을 합친 말로, 개발자와 엔지니어의 협업을 강조하는 개발 문화를 의미합니다. 개발과 운영 간의 프로세스를 통합하여 개발에서 배포에 이르는 프로세스의 속도를 높이는 데 초점이 맞춰져 있습니다.
과거에는 애플리케이션 계획, 개발, 테스트, 릴리즈, 운영 등의 각 단계가 별도의 팀과 역할, 기능 영역으로 분리되어 있어 애플리케이션을 개발하고 배포하는 데에 많은 공수와 시간이 투입되었습니다.
현재는 서비스 출시 속도가 빠르고 업데이트 주기가 빈번해지면서 ‘애플리케이션 개발 및 배포 속도’가 하나의 비즈니스 경쟁력이 되었습니다. 시스템의 안정성을 유지하면서 고객에게 빠르게 제공될 수 있어야 하는 것인데요. 이에 따라 애플리케이션 개발 및 배포의 업무 사이클을 자동화된 단일 워크플로우로 통합하기 위한 DevOps의 필요성이 증대되었습니다.
DevOps는 개발에서 운영까지를 하나의 파이프라인으로 형성하여 배포가 필요할 때 즉시 반영되는 게 목표입니다. 이를 위해 개발, 테스트, 릴리즈, 운영 등 모든 업무를 한 팀에서 유기적으로 진행하여 의사소통과 의사결정을 위한 시간과 비용을 절감합니다. 또한 원하는 시점에 즉시 서비스를 배포할 수 있어 비즈니스 변화에 빠르게 대응할 수 있습니다.
- CI/CD
CI(Continuous Integration)/CD(Continuous Delivery)는 지속적인 통합과 배포를 통해 애플리케이션 개발 단계를 자동화하여 고객에게 더욱 짧은 주기로 서비스 제공하고 개선하는 방법입니다.
CI/CD는 DevOps 문화를 성공적으로 구축하기 위해 필요한 요건 중 하나로 개발과 운영 간 업무 속도를 향상하는 데에 기여합니다. 고도화된 CI/CD 구축 시, 다운타임 없이 실행 중인 애플리케이션에 대한 변경 사항을 배포하고, 비즈니스 민첩성, 소프트웨어 품질 및 고객 반응성 등을 신속하게 개선할 수 있습니다.
- 지속적인 통합(Continous Intergration)
애플리케이션 코드의 새로운 변경 사항이 정기적으로 빌드 및 테스트를 거쳐 공유 리포지토리에 병합되는 것 - 지속적인 배포(Continuous Delivery)
애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리에 자동으로 업로드되는 것
클라우드 컴퓨팅 효과를 최대화하는 클라우드 네이티브
클라우드 네이티브 애플리케이션 | 기존 엔터프라이즈 애플리케이션 |
(예측 가능) 작은 단위의 서비스를 자동화된 체계를 통해 배포하여 오류 가능성을 줄임 | (예측 불가능) 빌드시간이 오래 걸리고 큰 용량의 실행 파일을 배포하여 예상하지 못한 오류 발생 가능성이 큼 |
(다양한 기술) 서비스 단위별로 적합한 언어 및 미들웨어를 활용하여 최적화된 아키텍처를 구성 | (단일 기술 기반) 하나의 언어 또는 미들웨어에 의해 아키텍처 구성 |
(적정 용량) 마이크로 서비스 단위로 구성되어 필요한 기능 단위만 용량을 확장할 수 있어 자원을 효율적으로 활용 | (용량 비효율) 하나의 거대한 실행 파일 형태인 모닐리식 형태로 구성되어 특정 기능만 용량을 확장할 수 없고 전체를 확장해야 함 |
(공동작업) 개발자와 운영자 간의 긴밀한 협업 환경 | (사일로 방식) 개발자가 완성한 코드를 운영자에게 이관하여 실행 |
(지속적인 전달) 지속적해서 통합되고 배포되는 환경 | (폭포수형 개발) 분석설계, 개발, 테스트 후에 릴리즈 과정을 거쳐서 배포 |
(독립성) 애플리케이션이 느슨하게 결합하여 다른 서비스에 영향을 주지 않고 독립적으로 관리/운영 | (종속성) 많은 이질적인 서비스들을 하나의 배포 패키지로 구성 |
(자동화된 확장성) 자원의 상태와 사용량에 따라 자동으로 동적 자원 할당 | (수동 크기 조정) 운영자에 의해서 조정 |
(빠른 복구) 오류가 발생한 기능 단위만 수정하고 빌드/배포하면 되므로 대응이 빠름 | (느린 복구) 오류 수정 후에 전체 애플리케이션을 통합하고 빌드/배포 과정을 거쳐야 하므로 대응이 느림 |
클라우드 네이티브 사례 ‘넷플릭스’
넷플릭스는 데이터센터 환경을 클라우드로 옮기기 위해 클라우드 네이티브 방식을 채택했습니다. 클라우드 보안성과 내구성을 오랜 시간 살피고, 회사 운영 방침도 클라우드 환경에 맞게 바꿨는데요. 넷플릭스는 7년간의 노력 끝에 2016년 1월, 모든 컴퓨팅 인프라를 AWS 클라우드로 전환하는 데 성공했습니다.
당면했던 문제
넷플릭스의 기존 애플리케이션은 모놀리식 구조로 개발 및 개선 속도가 느렸고, 하나의 데이터베이스만 가지고 있어 서비스 중단에 대한 리스크가 컸습니다. 24시간 운영되는 서비스인 만큼 서비스 점검을 위한 대기 시간도 적용하기 쉽지 않았는데요. 서비스가 성장하면서 데이터센터가 비대해지는 문제도 발생했습니다.
클라우드 네이티브 도입
먼저, 마이크로서비스 아키텍처(MSA)를 도입하였습니다. 빠르게 성장하는 서비스를 실시간으로 관리/운영하기 위함인데요. 트래픽이 몰리면 하드웨어가 자동으로 할당량을 늘려 탄력적으로 운영하고, 이용자가 서비스를 이용하는 도중에도 테스트 적용이 가능해 서비스 중단에 대한 리스크가 감소했을 뿐 아니라 서비스 가용성 역시 증가했다고 합니다.
다음은, DevOps 환경 구축입니다. 넷플릭스는 만든 사람이 직접 운영하고 문제가 발생하면 직접 고치는 ‘풀 사이클 개발자’라는 개념으로 자사만의 DevOps를 구축했습니다.
넷플릭스 클라우드&플랫폼 엔지니어링 부사장, 유리 이즈라일레브스키는 “넷플릭스는 클라우드 네이티브로 기술을 재구축하면서 회사 운영 방식까지 근본적으로 바꿨다. 느슨하게 연결된 DevOps로 각 팀이 독립적으로 의사결정을 하며 혁신을 가속했다.”
“데이터 센터일 때 하던 방식을 AWS로 옮겨놓기만 한다면 이전부터 겪던 문제와 한계를 그대로 가져오는 것일 뿐이다.” 라고 말하며 클라우드 네이티브를 위한 기술적인 전환뿐만 아니라 조직의 구성, 일하는 방식 등 기업 자체의 변화도 중요하다는 것을 강조했습니다.
넷플릭스는 2021년 기준, 2008년 대비 스트리밍 서비스 이용 회원 수가 8배 증가하고, 월간 스트리밍 시간이 1천 배 증가했음에도 무리 없이 시스템을 운영하고 있습니다. 이렇듯 넷플릭스는 가장 성공적인 클라우드 네이티브 사례로 뽑히며, 실제로 많은 회사가 도입에 활용하고 있습니다.
클라우드 네이티브 도입 효과
클라우드 네이티브를 통해 구축된 애플리케이션은 클라우드 컴퓨팅을 활용하도록 설계되어 빠른 속도와 유연성을 가지면서 애플리케이션 배포 위험은 낮습니다. 끊임없이 새로운 애플리케이션이 등장하고 비즈니스 요구사항도 빠르게 변화하는 디지털 시장에 맞춰, 혁신적인 서비스를 신속하게 개발하고 배포할 수 있는 것인데요.
이처럼 클라우드 네이티브의 접근 방식으로 시스템을 설계 및 구축하면 고객 요구 사항 같은 작은 변화뿐만 아니라 기술 발전, 시대 변화와 같은 큰 변화에도 대응할 수 있습니다. 빠르게 변화하는 비즈니스 요구에 신속하고 유연하게 대응함으로써 경쟁 우위를 확보하고, IT 서비스의 목표를 비용 절감에서 비즈니스 성장 엔진으로 바꿀 수 있습니다.
또한 IT 운영을 자동화함으로써 운영 효율성을 높일 수 있습니다. Acornsoft의 자료에 따르면, 컨테이너 기술과 DevOps 운영 방식을 이용했을 때, 개발부터 테스트 검증, 운영까지 애플리케이션 배포 속도가 160% 향상한다고 합니다. 서버 자원 사용량은 80% 감소하고 서비스 롤백/장애 복구 시간도 1/3로 줄어들며, 개발과 테스트, 운영 담당자 간 커뮤니케이션 비용은 70% 줄어드는 것으로 나타났습니다.
출처: Acornsoft, Cocktail Cloud Use Cases White Paper, 2018
정리하며
글로벌 시장 조사 기관 가트너는 클라우드 네이티브 플랫폼이 2022년 40% 미만 수준에 머무르지만, 2025년까지 디지털 비즈니스 운영을 위한 기반의 95%를 차지할 것으로 전망했습니다.
특히 최근 멀티 클라우드, 하이브리드 클라우드 등 다양한 형태의 클라우드 수요가 증가하면서 클라우드 네이티브의 중요성이 더욱 강조되고 있는데요. 애플리케이션 경쟁력을 확보하기 위한 기업 비즈니스 전략에서 필수 요소로 부각되고 있습니다.
성공적인 클라우드 네이티브를 구축하기 위해서는 기업에 적합한 클라우드 네이티브 전략을 세우는 것이 중요합니다. 클라우드 네이티브 애플리케이션 구현을 위한 과정은 조직별로 달라질 수 있는데요.
클라우드 네이티브를 통한 디지털 전환은 ‘IT 인프라에서 조직이 일하는 구조까지 모두 재설계하는 과정’이라고 정의할 수 있을 정도로 기술, 조직 등 기업의 전반적인 변화가 필요합니다. 기술, 업무 프로세스, 사고방식 등이 모두 결합할 때 성공적인 클라우드 네이티브 결과를 기대할 수 있습니다.
“대개 시스템 아키텍처에 문제가 발생하는 것은 비즈니스를 위한 해법보다 조직의 현재 구조를 먼저 고려하기 때문이다.
– 넷플릭스 前 디렉터, 조쉬 에반스 –
넷플릭스는 클라우드 네이티브 기업이 된 후 지금 조직의 구조보다 비즈니스 해결이 먼저라는 걸 배웠다. 조직이 기술에 맞춰 변신해야 한다는 것이다. 조직에 변화를 주는 것을 두려워해선 안 된다.”
클라우드 도입의 필요성은 느끼고 있지만 어떻게 해야 할지 막막하다면?
성공적인 디지털 혁신의 가장 좋은 파트너,
가비아 클라우드와 함께해 보세요!
클라우드 네이티브란?
클라우드 네이티브(Cloud Native)란 넓은 의미로 클라우드 컴퓨팅의 장점을 최대한 활용할 수 있도록 애플리케이션을 개발하고 운영하는 방법론입니다. 클라우드 구축 후 기존 인프라에 만든 애플리케이션을 그대로 적용하는 것이 아닌, 처음부터 클라우드 환경을 고려해 애플리케이션을 만드는 기술과 방법들을 포괄하는 개념입니다.
마이크로서비스 아키텍처란?
마이크로서비스 아키텍처(MicroService Architecture, MSA)는 애플리케이션을 독립적인 작은 기능들로 분해하여 구축하는 기술입니다. 기능 하나를 변경하기 위해 전체 애플리케이션을 재배포해야 하는 모놀리식 형태와 달리, 마이크로서비스 아키텍처는 작은 데이터베이스와 작은 서비스가 서로 묶여 있어 하나하나가 완벽하게 독자적으로 작동합니다.
컨테이너 기술이란?
컨테이너 기술은 마이크로서비스 방법론으로 개발한 애플리케이션을 효과적으로 배포·활용할 수 있는 기술입니다. 가상화 기술 중 하나로, 시스템을 가상화하는 것이 아닌 애플리케이션을 구동할 수 있는 컴퓨팅 작업을 패키징하여 가상화한 것입니다. 도커(Docker)와 같은 컨테이너 엔진이 설치된 환경이라면 퍼블릭, 프라이빗 및 하이브리드를 포함한 다양한 환경 및 인프라 전체에서 동일하게 작동합니다.
데브옵스(DevOps)란?
DevOps는 Development(개발)와 Operation(운영)을 합친 말로, 개발자와 엔지니어의 협업을 강조하는 개발 문화를 의미합니다. 개발과 운영 간의 프로세스를 통합하여 개발에서 배포에 이르는 프로세스의 속도를 높이는 데 초점이 맞춰져 있습니다. 애플리케이션 개발 및 배포 속도가 비즈니스 경쟁력이 되면서 DevOps의 필요성이 증대되었습니다.
CI/CD란?
CI(Continuous Integration)/CD(Continuous Delivery)는 지속적인 통합과 배포를 통해 애플리케이션 개발 단계를 자동화하여 고객에게 더욱 짧은 주기로 서비스 제공하고 개선하는 방법입니다. DevOps 문화를 성공적으로 구축하기 위해 필요한 요건 중 하나로 개발과 운영 간 업무 속도를 향상하는 데에 기여합니다.