나에겐 등산스틱이 2개 있다.

 

몇년 전 한라산을 등반할 때 친구에게 선물받는 것과,

'23년 지리산 등반을 위해 구매한 것이 있다.

 

친구에게 선물받은 건, 당해년도의 한라산 등반과 지리산 등반 때 사용했고,

올해 구매한 스틱은 올해 지리산 등반을 위해 좀 더 가볍고 편리한 것을 구매해서 사용했다.

 

 

-- '23년도 스틱의 사용내역 --

'23. 5. (지리산) 성삼재 - (세석대피소 1박) - 천왕봉 - 장터목 - 중산리, 51.70km, 16시간 28분

'23. 6. (한라산) 관음사 - 성판악, 20.03km, 6시간 17분

'23. 6. (한라산) 영실 - 어리목, 누나들이 하나 씩 사용, 9.50km, 3시간 9분

'23. 6. 24. (설악산) 오색 - 대청 - 희운각 - 공룡능선 - 마등령 - 비선대 - 설악동, 22.53km, 9시간 46분

'23. 7. 12. (하남 검단산) 안내소 - 헬기장 - 정상 - 유길준 묘 - 안내소, 7Km, 2시간 15분.  끝.

반응형

'새로울 것 없는 일상' 카테고리의 다른 글

지리산행 정보(성삼재-중산리)  (0) 2023.11.06

반응형

전략이라 거창한 이름이 좀 부담스럽긴 하지만,

 

동서울에서 성삼재로 가는 버스는 지리산의 봄철 산불조심 기간이 종료되는 4월 말부터 시작되고 한겨울에는 운행하지 않는다.

[여행 전]

1. (버스예매) 성삼재 버스를 이용해 지리산에 가려면 버스 승차권 예매 시작일을 잘 확인하여 1개월 전에 예매해야 한다.

2. (대피소 신청) 대피소는 2주 전에 선착순으로 신청할 수 있다.

[여행]

1. (코스) 성삼재 - 노고단 - 반야봉 - 세석대피소(1박) - 장터목대피소 - 천왕봉 - 중산리

2. (서울복귀 팁)

  가. 천왕봉 일출을 본다면, 중산리에서 10:30 버스를 타고 원지로 이동할 수 있도록 하산할 수 있다면,

      원지에서 서울남부터미널로 오는 11:20 버스를 이용할 수 있다.

      ** 중산리에서 원지로 가는 버스는 직행이 아니고 시내버스처럼 여기저기 들렀다 가는데, 11:20까지는 간신히 맞출 수 있다.

  나. 하산시간을 맞추지 못한다면 원지에서 15:35에 남부터미널로 가는 버스도 있다.

  다. 아니면, 진주로 이동하여 고속버스를 타야 하는데

  ** 모든 버스편은 주말일 경우 매진되는 경우가 많으니 미리 예매해야 한다.

반응형

행정안전부에서 공공부문 정보자원 클라우드 네이티브 전환 추진계획을 수립한 모양이다.

클라우드 네이티브란 무엇인가?


CNCF Cloud Native Definition v1.0

Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.

These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.

The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone.

클라우드 네이티브 기술은 조직이 퍼블릭, 프라이빗, 그리고 하이브리드 클라우드와 같은 현대적이고

동적인 환경에서 확장 가능한 애플리케이션을 개발하고 실행할 수 있게 해준다. 컨테이너, 서비스 메쉬, 마이크로서비스, 불변(Immutable) 인프라, 그리고 선언형(Declarative) API가 이러한 접근 방식의 예시들이다.

이 기술은 회복성, 관리 편의성, 가시성을 갖춘 느슨하게 결합된 시스템을 가능하게 한다. 견고한 자동화 기능을 함께 사용하면, 엔지니어는 영향이 큰 변경을 최소한의 노력으로 자주, 예측 가능하게 수행할 수 있다.

Cloud Native Computing Foundation은 벤더 중립적인 오픈 소스 프로젝트 생태계를 육성하고 유지함으로써 해당 패러다임 채택을 촉진한다. 우리 재단은 최신 기술 수준의 패턴을 대중화하여 이런 혁신을 누구나 접근 가능하도록 한다.


 

(AWS) 클라우드 컴퓨팅 환경에서 현대적 애플리케이션을 구축, 배포 및 관리할 때의 소프트웨어 접근 방식

(Oracle)  클라우드 제공 모델에서 제공하는 분산 컴퓨팅을 활용하기 위해 애플리케이션을 구축 및 실행하는 개념을 의미합니다. 클라우드 네이티브 앱은 클라우드가 제공하는 확장성, 탄력성, 복원성, 유연성을 활용하도록 설계 및 구축되었습니다.

(Column) 클라우드의 이점을 최대로 활용할 수 있도록 애플리케이션을 구축하고 실행하는 방식

(Microsoft) 클라우드 네이티브 아키텍처 및 기술은 클라우드에서 빌드된 워크로드를 디자인, 생성 및 운영하는 접근 방식으로, 클라우드 컴퓨팅 모델을 최대한 활용합니다

(NUTANIX)애플리케이션이 구축, 배포, 관리되는 방식을 혁신하는 전용 기술, 툴, 프로세스와 더불와 새로운 수준의 소프트웨어 추상화를 수반합니다.

(HPE) 클라우드 네이티브 애플리케이션은 애플리케이션에서 클라우드 환경을 활용하여 생산성을 높이는 최신 애플리케이션 개발 방식입니다. 전체 애플리케이션은 이러한 방식으로 작성, 개발, 배포되며 지속적으로 업데이트될 수 있습니다.

(ITWORLD) 클라우드 네이티브 애플리케이션은 클라우드의 동적이면서 확장적이고 매우 가용적인 속성을 지도 원칙으로 하여 구축된 소프트웨어 시스템이다. 클라우드 네이티브 애플리케이션 아키텍처는 소프트웨어 개발자가 기존 접근 방식을 사용할 때 직면하는 과제에 대한 대응이다. 특히 클라우드 네이티브 애플리케이션은 다음과 같다. 

(AWS) 클라우드 네이티브 애플리케이션은 마이크로서비스라는 여러 개의 상호 의존적인 소규모 서비스로 구성된 소프트웨어 프로그램입니다


AWS - 클라우드 네이티브란 무엇입니까?

클라우드 네이티브는 클라우드 컴퓨팅 환경에서 현대적 애플리케이션을 구축, 배포 및 관리할 때의 소프트웨어 접근 방식입니다. 현대적인 회사는 고객의 요구를 충족하기 위해 신속하게 업데이트할 수 있는 확장성, 유연성 및 복원력이 뛰어난 애플리케이션을 구축하고자 합니다. 이를 위해 클라우드 인프라에서 애플리케이션 개발을 기본적으로 지원하는 현대적인 도구와 기술을 사용합니다. 이러한 클라우드 네이티브 기술은 서비스 제공에 미치는 영향 없이 애플리케이션을 빠르게 자주 변경할 수 있도록 지원하여 혁신 역량과 경쟁력을 제공합니다.

 

클라우드 네이티브 접근 방식은 기업에 어떤 이점을 제공하나요?

조직은 클라우드 네이티브 소프트웨어 애플리케이션을 구축할 때 다양한 방법으로 경쟁력을 확보할 수 있습니다.

효율성 증가

클라우드 네이티브 개발은 DevOps 및 지속적 전달(CD)과 같은 애자일 방식을 지원합니다. 개발자는 자동화된 도구, 클라우드 서비스 및 현대적 설계 문화를 활용하여 확장 가능한 애플리케이션을 신속하게 구축합니다.

비용 절감

기업이 클라우드 네이티브 접근 방식을 도입하면, 비용이 많이 드는 물리적 인프라를 조달하고 유지 관리하는 데 투자할 필요가 없습니다. 결과적으로, 운영 비용을 장기적으로 절감할 수 있습니다. 클라우드 네이티브 솔루션 구축 비용을 절감하면 고객에게도 이익이 될 수 있습니다.

가용성 보장

기업이 클라우드 네이티브 기술을 활용하면 복원력이 뛰어나고 가용성이 높은 애플리케이션을 구축할 수 있습니다. 기능 업데이트로 인한 가동 중지 시간이 발생하지 않으며, 사용량이 급증하는 기간 동안 앱 리소스를 확장하여 긍정적인 고객 경험을 제공할 수 있습니다. 

클라우드 네이티브 애플리케이션이란 무엇인가요?

클라우드 네이티브 애플리케이션은 마이크로서비스라는 여러 개의 상호 의존적인 소규모 서비스로 구성된 소프트웨어 프로그램입니다. 기존에는 개발자가 필요한 모든 기능을 포함하는 단일 블록 구조로 모놀리스 애플리케이션을 구축했습니다. 소프트웨어 개발자는 클라우드 네이티브 접근 방식을 사용하여 기능을 더 작은 마이크로서비스로 나눕니다. 이러한 마이크로서비스는 최소한의 컴퓨팅 리소스만 사용하여 독립적으로 작동하고 실행되므로 클라우드 네이티브 애플리케이션의 민첩성이 향상됩니다. 

클라우드 네이티브 애플리케이션과 기존 엔터프라이즈 애플리케이션 비교

기존의 엔터프라이즈 애플리케이션은 유연성이 떨어지는 소프트웨어 개발 방식을 사용하여 구축되었습니다. 개발자는 일반적으로 대량의 소프트웨어 기능을 작업한 후에야 테스트를 위해 릴리스했습니다. 따라서 기존 엔터프라이즈 애플리케이션은 배포하는 데 시간이 오래 걸리고 확장이 불가능했습니다.  

반면 클라우드 네이티브 애플리케이션은 협업 접근 방식을 사용하며 다양한 플랫폼에서 확장성이 뛰어납니다. 개발자는 소프트웨어 도구를 사용하여 클라우드 네이티브 애플리케이션의 프로시저를 구축, 테스트 및 배포하는 작업을 대폭 자동화합니다. 마이크로서비스를 단시간에 설정, 배포 또는 복제할 수 있는데, 이는 기존 애플리케이션에서는 불가능합니다. 

CNCF란 무엇인가요?

Cloud Native Computing Foundation(CNCF)은 조직들이 클라우드 네이티브 여정을 시작하는 데 도움이 되는 오픈 소스 기반입니다. 2015년에 설립된 CNCF는 Kubernetes를 비롯한 주요 클라우드 네이티브 구성 요소를 개발하는 오픈 소스 커뮤니티를 지원합니다. Amazon은 CNCF 회원사입니다

클라우드 네이티브 애플리케이션 아키텍처란 무엇인가요?

클라우드 네이티브 아키텍처는 개발 팀이 확장 가능한 클라우드 네이티브 애플리케이션을 구축하고 실행하는 데 사용하는 다양한 소프트웨어 구성 요소를 결합합니다. CNCF는 변경 불가능한 인프라, 마이크로서비스, 선언형 API, 컨테이너 및 서비스 메시를 클라우드 네이티브 아키텍처의 기술 블록으로 나열합니다. 

변경 불가능한 인프라

변경 불가능한 인프라는 클라우드 네이티브 애플리케이션을 호스팅하는 서버가 배포 후에도 변경되지 않은 상태로 유지된다는 것을 의미합니다. 애플리케이션에 더 많은 컴퓨팅 리소스가 필요한 경우 이전 서버는 폐기되고 앱은 새로운 고성능 서버로 이전됩니다. 변경 불가능한 인프라는 수동 업그레이드를 피함으로써 클라우드 네이티브 배포 프로세스의 예측 가능성을 높입니다. 

마이크로 서비스

마이크로서비스는 전체적으로 하나의 완전한 클라우드 네이티브 소프트웨어로 작동하는 소규모의 독립적인 소프트웨어 구성 요소입니다. 각 마이크로서비스는 소규모이며 구체적인 문제를 중점적으로 처리합니다. 마이크로서비스는 느슨하게 결합되어 있습니다. 즉, 마이크로서비스는 서로 통신하는 독립적인 소프트웨어 구성 요소입니다. 개발자는 개별 마이크로서비스 단위로 작업하면서 애플리케이션을 변경합니다. 따라서 마이크로서비스 중 하나에 장애가 발생하더라도 애플리케이션이 계속 작동합니다. 

API

애플리케이션 프로그램 인터페이스(API)는 둘 이상의 소프트웨어 프로그램이 서로 정보를 교환하는 데 사용하는 방식입니다. 클라우드 네이티브 시스템은 느슨하게 결합된 여러 마이크로서비스를 API를 사용하여 통합합니다. API는 결과를 달성하기 위한 단계를 지정하는 것이 아니라, 마이크로서비스에 필요한 데이터와 마이크로서비스가 제공하는 결과를 알려줍니다. 

서비스 메시

서비스 메시는 여러 마이크로서비스 간의 통신을 관리하는 클라우드 인프라의 소프트웨어 계층입니다. 개발자는 애플리케이션에 새 코드를 작성하지 않고도 서비스 메시를 사용하여 추가 기능을 도입할 수 있습니다. 

컨테이너

컨테이너는 클라우드 네이티브 애플리케이션에서 가장 작은 컴퓨팅 유닛입니다. 또한 클라우드 네이티브 시스템에서 마이크로서비스 코드 및 기타 필수 파일을 패키징하는 소프트웨어 구성 요소입니다. 클라우드 네이티브 애플리케이션은 마이크로서비스를 컨테이너화함으로써, 기반 운영 체제 및 하드웨어와 독립적으로 실행됩니다. 즉, 소프트웨어 개발자가 온프레미스, 클라우드 인프라 또는 하이브리드 클라우드에 클라우드 네이티브 애플리케이션을 배포할 수 있습니다. 개발자는 기본 애플리케이션에서 실행해야 하는 리소스 파일, 라이브러리, 스크립트 등의 해당 종속 구성 요소와 함께 마이크로서비스를 패키징하는 데 컨테이너를 사용합니다.

컨테이너의 이점

컨테이너의 이점은 다음과 같습니다.

  • 기존 애플리케이션 배포 방식보다 적은 컴퓨팅 리소스 사용
  • 거의 즉시 배포 가능
  • 애플리케이션에 필요한 클라우드 컴퓨팅 리소스를 보다 효율적으로 확장할 수 있음

클라우드 네이티브 애플리케이션 개발이란 무엇인가요?

클라우드 네이티브 애플리케이션 개발은 개발자가 클라우드 네이티브 애플리케이션을 구축하고 배포하는 방법과 위치를 설명하는 용어입니다. 클라우드 네이티브 개발에 있어서는 문화적 변화가 중요합니다. 개발자는 특정 소프트웨어 개발 방식을 도입하여 소프트웨어 제공에 소요되는 시간을 단축하고 변화하는 사용자 기대치를 정확하게 충족하는 기능을 제공합니다. 아래에는 몇 가지 일반적인 클라우드 네이티브 개발 방식이 나와 있습니다.

지속적 통합

지속적 통합(CI)은 개발자가 오류 없이 자주 변경 사항을 공유 코드 베이스에 통합하는 소프트웨어 개발 방식입니다. 소규모로 자주 변경하면 문제를 더 빠르게 식별하고 해결할 수 있으므로 개발 효율성이 높아집니다. CI 도구는 변경 사항이 있을 때마다 코드 품질을 자동으로 평가하므로 개발 팀이 보다 높은 신뢰도로 새로운 기능을 추가할 수 있습니다.

지속적 전달

지속적 전달(CD)은 클라우드 네이티브 개발을 지원하는 소프트웨어 개발 방식입니다. 개발 팀은 CD를 사용하여 언제든 마이크로서비스를 클라우드에 배포할 수 있도록 합니다. 소프트웨어 자동화 도구를 사용하여 새 기능을 도입하고 애플리케이션의 버그를 수정하는 등의 변경에 따른 위험을 줄입니다. CI와 CD는 유기적으로 작동하며 효율적인 소프트웨어 제공을 지원합니다.

DevOps

DevOps는 개발 및 운영 팀의 협업을 개선하는 소프트웨어 문화입니다. 이는 클라우드 네이티브 모델에 부합하는 설계 철학입니다. DevOps 방식을 통해 조직은 소프트웨어 개발 수명 주기를 단축할 수 있습니다. 개발자와 운영 엔지니어는 DevOps 도구를 사용하여 클라우드 네이티브 개발을 자동화합니다. 

서버리스

서버리스 컴퓨팅은 클라우드 제공업체가 기반 서버 인프라를 전적으로 관리하는 클라우드 네이티브 모델입니다. 클라우드 인프라가 애플리케이션 요구 사항에 맞게 자동으로 확장 및 구성되기 때문에 개발자는 서버리스 컴퓨팅을 활용합니다. 개발자는 애플리케이션에 사용되는 리소스에 대해서만 비용을 지불합니다. 서버리스 아키텍처는 앱 실행이 중지되면 자동으로 컴퓨팅 리소스를 제거합니다. 

클라우드 네이티브 애플리케이션 개발의 이점은 무엇인가요?

더 빠른 개발

개발자는 클라우드 네이티브 접근 방식을 사용하여 개발 시간을 단축하고 더 나은 품질의 애플리케이션을 실현합니다. 개발자는 특정 하드웨어 인프라에 의존하는 대신 DevOps 방식으로, 즉시 배포할 수 있는 컨테이너화된 애플리케이션을 구축합니다. 따라서 개발자가 변화에 신속하게 대응할 수 있습니다. 예를 들어 앱을 종료하지 않고 하루에 여러 번 업데이트할 수 있습니다. 

플랫폼 독립성

개발자는 클라우드에서 애플리케이션을 빌드하고 배포함으로써 운영 환경의 일관성과 신뢰성을 보장할 수 있습니다. 클라우드 제공업체가 알아서 처리하므로 하드웨어 호환성 문제에 대해 걱정할 필요가 없습니다. 따라서 개발자는 기반 인프라를 설정하는 작업이 아니라 앱에서 가치를 제공하는 데 집중할 수 있습니다. 

비용 효율적인 운영

애플리케이션에서 실제로 사용하는 리소스에 대해서만 비용을 지불하면 됩니다. 예를 들어 사용자 트래픽이 연중 특정 기간에만 급증하는 경우 해당 기간 동안만 추가 요금을 지불하면 됩니다. 즉, 1년 내내 유휴 상태로 유지되는 추가 리소스를 프로비저닝할 필요가 없습니다.

클라우드 네이티브 스택이란 무엇인가요?

클라우드 네이티브 스택은 개발자가 클라우드 네이티브 애플리케이션을 구축, 관리 및 실행하는 데 사용하는 클라우드 네이티브 기술 계층을 설명하는 용어로, 다음과 같이 분류됩니다.

인프라 계층

인프라 계층은 클라우드 네이티브 스택의 기반입니다. 서드 파티 클라우드 제공업체가 관리하는 운영 체제, 스토리지, 네트워크 및 기타 컴퓨팅 리소스로 구성됩니다. 

프로비저닝 계층

프로비저닝 계층은 클라우드 환경을 할당하고 구성하는 다양한 클라우드 서비스로 구성됩니다.

런타임 계층

런타임 계층은 컨테이너가 작동할 수 있는 클라우드 네이티브 기술을 제공합니다. 여기에는 클라우드 데이터 스토리지, 네트워킹 기능, 그리고 컨테이너화된 리소스와 같은 컨테이너 런타임이 포함됩니다. 

오케스트레이션 및 관리 계층

오케스트레이션 및 관리는 다양한 클라우드 구성 요소를 통합하여 하나의 유닛으로 작동하도록 하는 역할을 합니다. 이는 기존 컴퓨팅 환경에서 운영 체제가 작동하는 방식과 유사합니다. 개발자는 Kubernetes와 같은 오케스트레이션 도구를 사용하여 다양한 시스템에서 클라우드 애플리케이션을 배포, 관리 및 확장합니다. 

애플리케이션 정의 및 개발 계층

이 클라우드 네이티브 스택 계층은 클라우드 네이티브 애플리케이션을 구축하기 위한 소프트웨어 기술로 구성됩니다. 예를 들어 개발자는 데이터베이스, 메시징, 컨테이너 이미지, 지속적 통합(CI) 및 지속적 전달(CD) 도구와 같은 클라우드 기술을 사용하여 클라우드 애플리케이션을 구축합니다. 

관측성 및 분석 도구

관측성 및 분석 도구는 클라우드 애플리케이션의 시스템 상태를 모니터링 및 평가하고 개선합니다. 개발자는 도구를 사용하여 CPU 사용량, 메모리, 지연 시간 등의 지표를 모니터링함으로써 앱의 서비스 품질에 문제가 없는지 확인합니다. 

 

클라우드 컴퓨팅이란 무엇인가요?

클라우드 컴퓨팅은 외부 데이터 센터에서 호스팅되며, 사용자가 종량제 방식으로 사용할 수 있는 소프트웨어 인프라를 말합니다. 기업은 값비싼 서버 비용을 지불하거나 서버를 유지 관리할 필요가 없습니다. 대신 클라우드 제공업체가 제공하는 스토리지, 데이터베이스, 분석 등의 온디맨드 클라우드 네이티브 서비스를 이용할 수 있습니다.

클라우드 컴퓨팅과 클라우드 네이티브 비교

클라우드 컴퓨팅은 클라우드 제공업체가 온디맨드로 제공하는 리소스, 인프라 및 도구입니다. 반면 클라우드 네이티브는 클라우드 컴퓨팅 모델로 소프트웨어 프로그램을 구축하고 실행하는 접근 방식입니다.

클라우드 지원이란 무엇인가요?

클라우드 지원 애플리케이션은 기존에 온프레미스 데이터 센터에서 실행 중이지만 클라우드에서 실행되도록 수정된 레거시 엔터프라이즈 애플리케이션입니다. 여기에는 애플리케이션을 클라우드 서버로 마이그레이션하기 위해 소프트웨어 모듈의 일부를 변경하는 것이 포함됩니다. 따라서 원래 기능을 유지하면서 브라우저에서 애플리케이션을 사용할 수 있습니다.

클라우드 네이티브와 클라우드 지원 비교

클라우드 네이티브라는 용어는 처음부터 클라우드에 상주하도록 설계된 애플리케이션을 의미합니다. 클라우드 네이티브에는 마이크로서비스, 컨테이너 오케스트레이터, Auto Scaling과 같은 클라우드 기술이 포함됩니다. 클라우드 지원 애플리케이션에는 클라우드 네이티브 애플리케이션과 같은 유연성, 복원력 또는 확장성이 없습니다. 이는 클라우드 지원 애플리케이션이 클라우드로 마이그레이션되더라도 모놀리스 구조를 유지하기 때문입니다.

AWS에서 클라우드 네이티브 애플리케이션을 구축해야 하는 이유는 무엇인가요?

AWS는 기능적인 클라우드 네이티브 애플리케이션을 개발하는 데 필요한 기술, 도구 및 서비스를 제공합니다. 기반 인프라를 관리하는 데 시간을 허비하는 것이 아니라 소프트웨어 제품을 구축하는 데 집중할 수 있습니다. 

  • AWS의 관리형 컨테이너로 이전하여 운영을 간소화하고 관리 오버헤드 감소
  • AWS Lambda를 통해 서버리스 기술을 사용하고 Amazon DynamoDB를 통해 목적별 데이터베이스를 사용하여 새로운 애플리케이션 또는 기능 구축
  • AWS Amplify  AWS CDK와 같은 도구를 사용하여 민첩성을 극대화하고 개발을 가속화
  • 15개의 관계형 및 비관계형 목적별 AWS 데이터베이스 중에서 선택하여 마이크로서비스 아키텍처 및 현대적 애플리케이션의 요구 사항(예: 문서 및 키-값 페어 저장) 지원
  • DevOps 서비스 포트폴리오와 방대한 파트너 네트워크를 활용하여 애플리케이션을 더 빠르게 개발 및 실행하고 대규모로 애플리케이션을 구축

Oracle - 클라우드 네이티브란?

클라우드 네이티브 정의

클라우드 네이티브라는 용어는 클라우드 제공 모델에서 제공하는 분산 컴퓨팅을 활용하기 위해 애플리케이션을 구축 및 실행하는 개념을 의미합니다. 클라우드 네이티브 앱은 클라우드가 제공하는 확장성, 탄력성, 복원성, 유연성을 활용하도록 설계 및 구축되었습니다.

Cloud Native Computing Foundation(CNCF)이 정의한 바와 같이 클라우드 네이티브 기술은 조직이 퍼블릭, 프라이빗, 하이브리드 클라우드에서 확장 가능한 애플리케이션을 구축하고 실행할 수 있도록 지원합니다. 컨테이너, 서비스 메시, 마이크로 서비스, 변경 불가능한 인프라 및 선언형 API(애플리케이션 프로그래밍 인터페이스)와 같은 기능은 이러한 접근 방식을 가장 잘 보여줍니다.

이러한 기능은 탄력적이고 관리 가능하며 관찰 가능한 느슨하게 결합된 시스템을 사용할 수 있도록 해주며, 이를 통해 엔지니어는 최소한의 노력으로 자주 변경 사항을 적용할 수 있습니다.


사용자가 독보적인 응답성과 지속적인 혁신을 기대하는 최근의 복잡한 애플리케이션 환경에서는 비즈니스 시스템을 보다 전략적이고 유연하게 운영해야 합니다. 클라우드 네이티브의 관건은 민첩성을 유지하면서 빠르게 움직이는 것입니다.

클라우드 네이티브 서비스는 Kubernetes, Docker, 서버리스 함수, API 및 Kafka와 같은 기술을 사용하여 최신 애플리케이션 개발을 지원합니다. 업계 최고의 클라우드 제공업체를 통해 클라우드 툴과 서비스를 구현하므로 개발자가 운영 작업을 줄이고 애플리케이션을 더 빠르게 구축할 수 있습니다. 클라우드 네이티브 서비스는 개발자에게 마이크로서비스, 서버리스 함수와 같은 클라우드 네이티브 애플리케이션을 구축, 배포, 관리할 수 있는 종합적인 표준 기반 플랫폼을 제공합니다.

클라우드 네이티브 서비스를 사용하여 우수한 소프트웨어 제공

클라우드 네이티브의 잠재력을 최대한 활용하여 탄력 있고 관리 가능하며 확장 가능한 최신 클라우드 앱을 빠르고 쉽게 구축할 수 있는 방법을 알아보세요.


클라우드 네이티브 기술로 이전한 결과, 조직 플랫폼 전반에 걸쳐 고객 경험을 극대화할 수 있도록 하여 소프트웨어 개발 및 비즈니스 모델을 영구적으로 변경했습니다. 얼마 전까지만 해도 대다수 조직의 IT 인프라는 '클라우드 친화적'이었습니다. 클라우드로 전환한 IT 팀은 클라우드 네이티브 애플리케이션도 만들어 투자를 극대화하지 않으면 경쟁에서 크게 불리한 입장에 놓이게 됩니다. 기업이 경쟁사와 차별화되는 동시에 살아남기 위해서는 비즈니스 요구사항을 신속하게 조정하고 반복해야 합니다. 클라우드 인프라스트럭쳐는 탄력성과 온디맨드 기능을 갖추고 있어 모든 비즈니스를 클라우드 네이티브로 전환할 수 있습니다.

Cloud Native Computing Foundation(CNCF)

CNCF는 클라우드 네이티브 시스템을 채택하는 다양한 조직과 서비스에 대응하여 2015년에 설립되었습니다. 리눅스 재단이 설립한 프로젝트인 CNCF는 클라우드 네이티브 기술의 채택을 촉진하는 오픈 소스 소프트웨어 재단이다. CNCF는 퍼블릭 클라우드 공급업체, 엔터프라이즈 소프트웨어 기업, 기술 스타트업을 포함한 400명 이상의 회원을 보유하고 있습니다. Microsoft, Oracle, VMware, Intel은 CNCF의 플래티넘 멤버입니다.

CNCF은 클라우드 네이티브 기술의 접근성, 가용성, 신뢰성을 보장하는 것을 목표로 합니다. 또한 Kubernetes, Prometheus, CoreDNS와 같은 프로젝트 전용 커뮤니티를 육성하는 동시에 마이크로서비스 아키텍처 내에서 컨테이너를 통합 관리하는 지속 가능한 환경을 구축하는 조직을 지원합니다.

클라우드 네이티브를 향한 여정은 어려울 수 있지만 결국엔 그 가치를 느낄 수 있을 것입니다. 이러한 여정은 단순히 애플리케이션을 재구성하는 것만이 아니라 기업의 구조와 문화를 바꾸고 궁극적으로는 기업을 발전시키기 위한 노력에 해당합니다. CNCF Trail Map을 사용하면 클라우드 네이티브 기술을 점진적으로 도입할 수 있습니다. 예상했던 대로 '트레일'을 따라 진행하려면 마이크로서비스, 서버리스 함수, 이벤트 기반 스트림 및 다른 유형의 클라우드 네이티브 앱을 제공할 수 있는 보다 복잡한 소프트웨어를 채택해야 합니다.

클라우드 네이티브 애플리케이션의 이점

클라우드 네이티브 애플리케이션 또는 네이티브 클라우드 애플리케이션(NCA)은 클라우드 컴퓨팅 아키텍처용으로 설계된 프로그램으로 많은 장점을 가지고 있습니다.

  • 독립성: 이 아키텍처는 클라우드 네이티브 애플리케이션을 서로 독립적으로 구축할 수 있도록 해줍니다. 이는 각각의 애플리케이션을 개별적으로 관리하고 배치할 수도 있다는 의미입니다.
  • 복원성: 잘 설계된 클라우드 네이티브 애플리케이션은 인프라스트럭쳐가 중단되어도 온라인 상태를 유지할 수 있습니다.
  • 표준 기반: 상호 운용성과 작업 로드 이식성을 위해 클라우드 네이티브 서비스는 오픈 소스 및 표준 기반 기술에 기반하는 경우가 많습니다. 이를 통해 벤더 종속성이 줄어들고 이동성이 향상됩니다.
  • 비즈니스 민첩성: 클라우드 네이티브 애플리케이션은 네트워크에서 유연한 배포 옵션을 제공하며, 기존의 앱보다 작기 때문에 보다 쉽게 개발, 배포,반복 작업을 수행할 수 있습니다.
  • 자동화: 클라우드 네이티브 애플리케이션은 DevOps 자동화 기능을 사용하여 정기적으로 릴리스되는 소프트웨어 변경 사항을 지속적으로 전달 및 배포할 수 있습니다. 또한 개발자는 blue-green 및 카나리아 배포와 같은 방법을 사용하여 사용자 경험을 방해하지 않고 앱을 개선할 수 있습니다.
  • 작동 중지 시간 없음: Kubernetes와 같은 컨테이너 통합관리자 덕분에 기본적으로 다운타임 없이 소프트웨어 업데이트를 배포할 수 있습니다.

기술이 클라우드 네이티브가 된다는 것은 무슨 뜻일까요?

클라우드 네이티브 애플리케이션은 자체 내장형 경량 컨테이너로 패키징된 독립 서비스로 이동 가능하며 필요에 따라 빠르게 크기를 조정(확장 또는 축소)할 수 있습니다. 모든 항목을 컨테이너(예: Docker 컨테이너)에 캡슐화하면 애플리케이션과 종속성을 기본 인프라와 분리할 수 있으며, 이를 통해 컨테이너 런타임 엔진이 있는 모든 환경에서 컨테이너화된 애플리케이션을 배포할 수 있습니다. Kubernetes 컨테이너 통합관리는 컨테이너의 수명 주기를 관리한다는 점에서 중요한 부분입니다. 클라우드 네이티브 앱은 종종 CI/CD(Continuous Integration and Continuous Delivery) 툴 체인이 포함된 DevOps 파이프라인을 통해 제공됩니다. CI/CD 파이프라인은 클라우드 네이티브 애플리케이션의 구축, 테스트, 배포를 자동화하는데 있어 중요합니다.

클라우드 네이티브 아키텍처란?

클라우드 네이티브 아키텍처는 기존의 온프레미스 인프라가 아닌 클라우드에 존재하도록 특별히 설계된 애플리케이션 또는 서비스의 설계를 말합니다. 성공적인 클라우드 전용 아키텍처는 유지보수가 용이하고 차세대 클라우드의 지원을 받는 동시에 비용 효율적이고 자가 복구가 가능해야 합니다. 클라우드 네이티브 아키텍처는 레거시 시스템에 비해 물리적 서버에 의존하지 않고도 더 높은 수준의 유연성을 제공합니다.

마이크로서비스와 서버리스 함수는 클라우드 네이티브 아키텍처에서 중대한 역할을 수행할 수 있습니다. 마이크로서비스는 클라우드 전용 애플리케이션 아키텍처의 핵심이며 클라우드로 전환하는 기업의 필수 도구가 되었습니다. 마이크로서비스는 애플리케이션을 여러 개의 독립된 서비스로 배열하며 각 서비스는 특정 기능을 제공합니다. 많은 소프트웨어 회사들이 마이크로서비스를 사용하고 있는데 이는 마이크로서비스가 DevOps를 지원하고, 유연성을 제공하며, 확장성을 향상시키는 동시에 비용을 절감해주기 때문입니다. 클라우드 네이티브 마이크로 서비스는 API를 통해 서로 통신하며 이벤트 기반 구조를 사용하여 각 애플리케이션의 전반적인 성능을 향상시킵니다. Oracle Cloud Native 서비스는 CNCF 트레일 맵을 따라 여정을 간소화하고 기업이 모던 클라우드 전용 애플리케이션의 구축, 배포, 관리를 쉽게 시작할 수 있도록 합니다.

기능

서버리스 함수이라는 용어는 개발자의 생산성 향상에 중점을 두는 구조 스타일을 나타냅니다. 서버리스 애플리케이션을 사용하면 이벤트 기반 아키텍처 및 다양한 서비스형 백엔드(BaaS) 모델을 통해 서비스형 함수(FaaS) 기반 플랫폼에서 코드를 작성할 수 있으며, 프로비저닝, 패치 적용, 확장, 보안, 고가용성 등에 대해 걱정할 필요가 없습니다. Oracle Functions와 같은 FaaS 플랫폼을 사용하면 애플리케이션이 이벤트에 의해 트리거될 때 동적으로 예약되고 요청 시 실행되는 작은 코드 조각(나노서비스)으로 분할됩니다. 이러한 접근 방식의 장점은 필요할 때만 코드가 호출 및 실행되며 실행 기간 동안 사용한 리소스에 대해서만 비용을 지불한다는 것입니다. 이는 애플리케이션이 서버에 로드되고 대부분의 시간을 요청을 기다리며 유휴 상태로 보내는 기존 서버와는 다른 방식입니다. 따라서 서버리스 컴퓨팅의 경우 유휴 리소스에 대한 비용은 지불하지 않고 실제로 사용하는 컴퓨팅 리소스에 대해서만 비용을 지불합니다.

클라우드 네이티브 서비스란?

클라우드 네이티브 서비스는 디지털 혁신으로 가는 열쇠이며 고급 분석, 모바일 앱, 챗봇의 핵심입니다. DevOps 방식은 복잡한 소프트웨어 플랫폼의 구축, 운영, 유지 관리와 관련된 대부분의 관리 작업을 제거해줍니다. 소프트웨어 개발, 배포 및 테스트 활동은 그대로 클라우드에 남아있어 마음대로 확장하거나 축소할 수 있습니다. 애플리케이션, DevOps, 작업 로드를 클라우드 네이티브 아키텍처로 전환하는 것은 비즈니스 경쟁력을 유지하기 위한 필수 요소입니다.

Kubernetes란?

Oracle의 클라우드 네이티브 서비스는 Kubernetes, Docker, 서버리스 함수, API, Kafka와 같은 표준 기반 기술을 사용하여 모던 클라우드 네이티브 애플리케이션 개발을 지원합니다. 종종 '클라우드용 운영체제'로 설명되는 Kubernetes는 컨테이너화된 애플리케이션 및 서비스 클러스터를 관리하기 위한 오픈 소스 플랫폼입니다. Kubernetes의 주요 구성 요소는 클러스터, 노드 및 제어 영역입니다. 클러스터에는 노드가 포함됩니다. 각 노드는 하나 이상의 작업자 머신 세트로 구성됩니다. 노드는 배포된 애플리케이션의 요소를 포함하는 포드를 호스팅합니다. 제어 영역은 복원력과 고가용성을 위해 종종 많은 컴퓨터에서 클러스터의 노드 및 포드를 관리합니다.

Oracle은 이러한 서비스에 필요한 클라우드 도구 및 자동화를 제공하여 개발팀의 운영 업무를 줄이고 애플리케이션을 빠르게 구축할 수 있도록 합니다. 클라우드 네이티브 서비스는 다른 클라우드 공급업체에 비해 더 높은 성능과 낮은 비용으로 표준 기반 플랫폼을 제공하는 Oracle Cloud Infrastructure(OCI)에서 실행됩니다. OCI는 오픈 소스 및 개방형 표준을 기반으로 한 서비스를 활용하여 개발자가 리팩토링 없이 클라우드 또는 온프레미스 환경에서 애플리케이션을 실행할 수 있도록 지원하므로 개발자들이 자유롭게 구축 및 혁신에 집중할 수 있습니다.

Cloud native services

Container Registry

OCI Container Registry는 컨테이너 이미지를 안전하게 저장하고 공유하기 위한 Oracle이 관리하는표준 기반의 개방형 Docker 레지스트리 서비스입니다. 엔지니어는 익숙한 Docker 명령줄 인터페이스(CLI)와 API를 사용하여 Docker 이미지를 쉽게 푸시하고 가져올 수 있습니다. 컨테이너 레지스트리는 컨테이너 수명주기를 지원하기 위해 Container Engine for Kubernetes, Identity and Access Management(IAM), Visual Builder Studio, 타사 개발자 및 DevOps 도구와 함께 작동합니다.Oracle’s

통지

OCI 통지는 Slack, PagerDuty, ServiceNow를 비롯한 경보 및 메시지를 Oracle Cloud Functions, 이메일, SMS 및 메시지 전달 파트너에게 전송하는 고가용성의 저지연성 게시/구독(pub/sub) 서비스입니다. 이 서비스는 안전한 액세스를 위해 OCI Identity and Access Management와 통합되어 트래픽 폭주 중에도 각 메시지를 전달합니다. 통지는 확장 가능하고 신뢰할 수 있는 클라우드 전용 애플리케이션을 구축하는 데 도움이 됩니다.

Streaming

OCI Streaming service는 개발자와 데이터 과학자를 위한 실시간 서버 미사용 Apache Kafka 호환 이벤트 스트리밍 플랫폼입니다. 이 관리형 이벤트 스트리밍 서비스는 실시간 스트리밍 데이터를 대규모로 수집, 저장 및 처리하며 널리 사용되는 오픈 소스인 Kafka API와의 완벽한 호환을 통해 종속성 문제를 줄입니다.

Container Engine

Container Engine for Kubernetes(OKE)는 모던 클라우드 네이티브 애플리케이션을 구축하는 데 필요한 시간과 비용을 줄일 수 있는 Oracle이 관리하는 컨테이너 통합 관리 서비스입니다. 다른 대부분의 공급업체와는 달리 Oracle Cloud Infrastructure는 Container Engine for Kubernetes를 성능이 뛰어나고 비용이 저렴한 컴퓨팅 형태에서 실행되는 무료 서비스로 제공합니다. DevOps 엔지니어는 수정되지 않은 오픈 소스 Kubernetes를 사용하여 애플리케이션 워크로드 이동성을 지원하고 업데이트와 패치를 자동화하여 운영을 간소화할 수 있습니다.

기능

Oracle Cloud Functions는 개발자가 인프라를 관리하지 않고도 애플리케이션을 생성, 실행 및 확장할 수 있는 서버리스 플랫폼으로, OCI, 플랫폼 서비스 및 SaaS 애플리케이션과도 통합됩니다. Functions는 오픈 소스 Fn Project를 기반으로 하기 때문에 개발자가 다른 클라우드와 온프레미스 환경으로 쉽게 이식 할 수 있는 애플리케이션을 생성할 수 있습니다. 함수 기반 코드는 일반적으로 짧은 기간 동안 실행되며 고객은 사용한 리소스에 대해서만 비용을 지불하면 됩니다.

기업을 위한 클라우드 네이티브로 전환해야 하는 이유는?

클라우드 네이티브 애플리케이션 개발이 정말 기존 앱보다 훨씬 더 우수한 앱을 제공합니까? 네. 클라우드 네이티브 애플리케이션의 분명한 장점은 기능이 마이크로 서비스로 분할되어 개별 관리가 가능하기 때문에 확장할 수 있다는 것입니다. 또한 클라우드 네이티브 애플리케이션은 클라우드 인프라스트럭쳐의 영향을 받지 않으므로 고도로 분산된 방식으로 실행되어 독립성을 유지하고 애플리케이션 요구 사항에 따라 리소스를 할당할 수 있습니다. 클라우드 네이티브 애플리케이션은 프라이빗, 퍼블릭, 하이브리드 클라우드 전반에 걸쳐 일관된 경험을 제공할 수 있기 때문에 비즈니스 전략과 가치를 높이는 중요한 방법이 되었습니다. 또한 확장 가능하고 안정적인 응답형 클라우드 네이티브 앱을 실행하여 클라우드 컴퓨팅의 이점을 최대한 활용하고 위험을 줄일 수 있습니다.

클라우드 네이티브 기술을 활용해 차세대 애플리케이션을 개발하고, 이를 어디서든 실행할 수 있게 된 환경에 개발자들이 열광하는 이유를 확인해 보세요.

클라우드 네이티브 개발자 이벤트

Docker 컨테이너, Kubernetes, Terraform 및 그 밖의 클라우드 네이티브 기술을 사용하여 마이크로서비스와 서버리스 기능 같은 최신 애플리케이션을 구축, 관찰, 관리하는 방법을 알아보세요.

Cloud Free Tier 체험하기

Oracle Cloud에서는 애플리케이션 구축, 테스트, 배포를 무료로 체험할 수 있습니다.


Column - 클라우드 네이티브 정의

넓은 의미의 정의

넓은 의미로 정의해 본다면 클라우드의 이점을 최대로 활용할 수 있도록 애플리케이션을 구축하고 실행하는 방식을 말합니다.
기존 시스템에서의 애플리케이션은 클라우드의 이점을 100% 활용하지 못했다면, 마이크로서비스 아키텍처를 채택하고 컨테이너, 쿠버네티스와 같은 기술과 도구, DevOps, 애자일 방법론 등을 도입하여 개발자 생산성, 비즈니스 민첩성, 확장성, 가용성 및 비용 절감 효과를 크게 높일 수 있습니다.

그러기 위해서는 애플리케이션, 아키텍처, 인프라 및 개발 프로세스 등 전방위적 측면에서 변화가 필요한데요,
변화의 방향은 무엇이며 클라우드를 네이티브하게 사용한다는 뜻은 무엇인지 알아보겠습니다.

바로, 아래 리눅스 재단의 정의를 통해 참고해 볼 수 있습니다.

 

CNCF 정의

2015년 처음 Cloud Native라는 용어를 사용한 리눅스는 CNCF(Cloud Native Computing Foundation)재단을 만들어 클라우드 네이티브로 전환할 수 있는 오픈소스 기술들을 추진하고 관리합니다. 이 재단에는 550개가 넘는 여러 클라우드 공급자와 기술 기업들이 참여하여 운영되고 있는데 클라우드 네이티브에 대한 정의를 아래와 같이 하고 있습니다.

 

     • 퍼블릭, 프라이빗, 하이브리드 클라우드 환경에서 확장성 있는 애플리케이션을 만들고 운영할 수 있다.

     • 컨테이너, 서비스 메시, 마이크로서비스, 불변의 인프라스트럭처, 그리고 선언적 API가 전형적인 접근 방식에 해당한다.

     • 회복성이 있고, 관리 편의성을 제공하며, 가시성을 갖는 느슨하게 결합된 시스템을 사용할 수 있다.

     • 견고한 자동화와 함께 사용하면, 엔지니어는 최소한의 수고로 영향력이 크고 예측 가능한 변경을 할 수 있다.

CNCF 클라우드 네이티브 정의 참고 :  https://github.com/cncf/toc/blob/master/DEFINITION.md

 

클라우드 네이티브를 위한 주요 4가지 요소

위의 정의를 정리해 보면, 클라우드 네이티브로 가기 위한 주요 요소는 아래 4가지로 요약할 수 있습니다.

<그림 참고 : Chirag Jog’s Blog>

1. DevOps
애플리케이션 개발-운영 간의 협업 프로세스를 자동화하는 것을 말하며 결과적으로 애플리케이션의 개발과 개선 속도를 빠르게 합니다.

2. CI/CD
지속적인 통합(Continous Intergration)은 개발자가 작업한 코드를 자동으로 테스트하고 테스트에 통과하면 코드를 통합하여 저장합니다.
지속적인 배포(Continuos Deployment)는 작업한 코드 및 변경사항들은 테스트를 거쳐 리포지토리에 업로드되고 실 서비스 배포로 릴리즈까지 자동화하는 것을 말합니다.

3. 컨테이너 기반 인프라
가상화 기술 중 하나로, 시스템을 가상화하는 것이 아니라 애플리케이션을 구동할 수 있는 컴퓨팅 작업을 패키징하여 가상화한 것입니다.

4. Microservice
애플리케이션을 구성하는 서비스들을 독립적인 작은 단위로 분해하여 구축하고 각 구성 요소들을 네트워크로 통신하는 아키텍처로 서비스 안정성과 확장성(scaling)을 지원합니다.

위 4가지 요소들의 개념을 간단하게 적어보았는데요, 짧은 한 두 줄의 설명으로는 아직 와닿지 않습니다… 

 

클라우드 네이티브를 이해하기 위해서…

위의 4가지 요소 중 클라우드 네이티브 애플리케이션 개발의 구조적인 측면에서 주축이 되는 컨테이너와 마이크로서비스에 대해 알아보도록 하겠습니다.

컨테이너

IT 기술의 컨테이너도 물류 분야의 컨테이너처럼 이동성을 실현하기 위한 기술입니다.
즉, 어느 환경이나 어느 인프라로든 쉽게 이동할 수 있다는 말인데요, 컨테이너는 애플리케이션을 실행하기 위한 컴퓨팅 작업을 패키징하여 이미지로 만들기 때문에 경량화되어있고, 서버나 OS 환경에 종속적이지 않아 진정한 애플리케이션 이식성이 실현됩니다.

이해를 돕기 위해 컨테이너와 대조되는 하이퍼바이저 기반의 가상화와 비교해보겠습니다.

하이퍼바이저 기반의 가상화(VM 방식)는 애플리케이션이 돌아갈 수 있는 OS 환경이 포함됩니다. 그렇기 때문에 애플리케이션을 실행하기 위해서는 VM을 띄워 자원을 할당한 다음, OS를 부팅한 후 애플리케이션을 구동할 수 있기 때문에 시간이 오래 걸립니다.

반면, 컨테이너 기반의 가상화 방식은 프로세스 간 벽을 만들어 애플리케이션이 구동되는 환경이 격리(컨테이너화)되어 있기 때문에 각 각의 APP에 OS를 개별로 구성해줄 필요 없이 하나의 OS 커널*을 공유하여 사용합니다. OS가 필요하지 않음으로 더 가볍고 크기도 작아 복제와 배포에도 간편합니다.

따라서, 애플리케이션을 구동하기 위해서 OS가 필요하지 않아 가볍고, 애플리케이션 실행에 필요한 모든 것(라이브러리, 바이너리, 기타 구성 파일 등)을 패키지로 묶어 컨테이너 이미지를 만들어 사용하기 때문에 컨테이너가 작동하는 환경이라면 어디서든지 실행시킬 수 있다는 장점이 있습니다.

*커널이란?

: 운영 체제의 핵심으로 하드웨어의 자원(CPU, Memory, Devices)을 각 프로세스에 사용할 수 있도록 나눠주고, 프로세스 및 메모리 제어 등 시스템의 모든 것을 통제합니다.

특징을 정리해 보면,

     1. 경량화 – 앱 구동을 위해 게스트 OS가 포함되지 않습니다.

     2. 효율성 – 호스트 OS 커널을 공유하므로, 자원을 미리 할당하지 않고 애플리케이션 동작에 필요한 컴퓨팅 자원만 필요로 합니다.

     3. 이식성 – 컨테이너가 작동하는 환경이라면 어디든지 작동시킬 수 있습니다.

     4. 안정성 – 호스트 OS 커널을 공유하는 구조로 장애 발생 시, 다른 컨테이너들이 영향을 받을 수 있습니다.

 

마이크로서비스

마이크로서비스 아키텍처는 애플리케이션을 이루는 서비스들을 기능 단위로 쪼개서 구축하는 것을 말합니다. 서비스끼리는 프로그래밍 언어에 구속받지 않는 API(Application Programming Interface)를 통해서 통신하며 각 서비스는 각각 자체 DB를 가지게 됩니다.

모놀리식 아키텍처와 비교해 본다면,

<그림 참고 : Red Hat Site

모놀리식은 전체 애플리케이션이 하나의 통합된 패키지 형태로 구성되어 있고 구성 모듈들이 의존적으로 연결되어 있기 때문에 기능 하나를 변경하려면 전체 애플리케이션을 재배포해야 하는 번거로움이 있습니다. 같은 이유로 특정 모듈만 확장하기가 어렵고 애플리케이션을 담고 있는 서버 자체를 늘려야 하는 비효율적 구조입니다. 또한, 개발 초기에 사용한 기술 스택에 고정되어 사용 해야 한다는 제약이 있습니다.

반면, 마이크로서비스 아키텍처는 애플리케이션을 작은 기능으로 나누어 구축하기 때문에 개별 서비스들을 더 쉽게 변경하거나 확장할 수 있으며, 서비스마다 다른 언어, 프레임워크, 라이브러리를 사용할 수 있다는 장점이 있습니다. 하지만, 모놀리식 보다는 구조가 복잡하고 여러 서비스에 데이터가 분산되어 있어 데이터 관리가 어렵다는 단점이 있습니다.

특징을 정리해 보면,

     1. 확장성 – 전체 애플리케이션을 담고 있는 서버를 추가하거나 사양을 늘리는 것이 아니라, 리소스를 더 필요로 하는 모듈만 수평, 수직적으로 쉽게 확장할 수 있습니다.

     2. 생산성 – 개발자는 해당 기능(서비스)에만 집중하여 개발할 수 있으며 테스트/배포에 걸리는 시간도 줄일 수 있어 생산성을 높일 수 있습니다.

     3. 안정성 – 모놀리식 구조에서는 하나의 장애가 전체 애플리케이션에 영향을 줄 수 있으며 찾아내기도 어렵습니다. 반면 서비스들이 분리된 독립적인 구조에서는 장애를 그 서비스에 한정적으로 격리할 수 있습니다.

     4. 복잡성 – 여러 서비스가 분산되어 얽혀 있기 때문에 복잡성이 높으며, 분산시스템을 어떻게 구성할 것인지에 대한 어려움이 있습니다.

*수평 확장(Scale Out) : 서버 대수를 늘림

*수직 확장(Scale Up) : 서버 사양을 늘림

 

DevOps와 CI/CD

DevOps는 ‘개발과 IT 운영 간의 프로세스를 통합하여 궁극적으로는 고객에게 뛰어난 품질의 서비스를 빠르게 제공한다’는 개발 방법론입니다.
그렇다면 개발(Dev)과 운영(Ops)의 업무는 다른데 왜 통합하려고 하는가? 인데요,

과거 새로운 서비스를 출시하기 위해서 오랜 기간 작업 후 배포했던 것과 달리, 현재는 서비스 출시 속도가 빠르고 업데이트 주기 또한 빈번해졌습니다. 그렇기 때문에 개발된 소프트웨어가 시스템의 안정성을 유지하면서 사용자에게 빠르게 제공될 수 있도록 [개발-테스트-배포-운영]의 업무 사이클을 자동화된 단일 워크플로우로 통합할 필요성이 생긴 것입니다.

DevOps를 하려면,

     • 소스 코드 제어(SCM, Source Code Management)    
      서비스는 보통 팀 단위로 개발되는데, 서로 다른 팀에서 개발한 코드에 대한 버전과 이력을 관리해야 합니다.

      • CI/CD    
        CI/CD는 위에서 설명한 것 같이 지속적인 통합과 배포를 통해 애플리케이션 개발 단계를 자동화하여 고객에게 보다 짧은 주기로 서비스를
        제공하고 개선하는 방법입니다.

      • 모니터링
        업데이트 빈도가 늘어남에 따라 일반적으로 요구되는 엄격한 테스트를 매번 수행할 수가 없습니다. 따라서, 데브옵스 환경에서는 실시간으로
        앱 및 성능 모니터링을 통하여 오류, 개선사항을 찾아 해결하는 것이 중요합니다.

      • 문화   
        지난 컬럼에서도 이야기한 바와 같이 DevOps는 개발과 운영 방식을 너머 사일로(silo, 부서 이기주의)를 없앤 ‘협업 문화’라고 볼 수 있습니다.
       <참고 : DevOps를 하려면 무엇부터 해야 할까?>

 

넷플릭스 사례로 보는 클라우드 네이티브의 이점

2016년 ‘클라우드 네이티브 기업이 됐다’고 선언한 넷플릭스는 무려 7년 동안 IT인프라를 데이터센터에서 클라우드(AWS)로 이관하면서 있는 그대로 옮기는 것이 아닌 전체 시스템을 클라우드 네이티브 방식으로 재설계했습니다.

당면한 문제는 무엇이었을까?

• 모놀리식 구조로 인한 개발/개선 속도가 느림
변경이 발생할 때마다 모든 사람들이 한꺼번에 붙어서 작업을 해야 하고, 변경 시 문제가 발생되면 문제를 찾는 것 자체가 일이 되어버려 앱을 개발하고 개선하는 것이 비효율적이었습니다.

• 데이터베이스 의존적
거대한 하나의 오라클 데이터베이스를 사용했는데, 데이터베이스가 다운되면 모든 시스템이 다운되었으며, 매 2주마다 새 스키마를 적용하기 위해 적어도 10분의 가동 중지 시간이 생겼습니다.

• 데이터센터 비대화
트래픽이 몰리면 하드웨어를 추가해야 하며, 영상 스트리밍이라는 본질보다 데이터 센터가 더 커질 수 있는 상황이 되었습니다.

클라우드 네이티브 도입

• 마이크로서비스 아키텍처 도입
기능 하나를 고치거나 새 기능을 추가할 때 서비스를 통째 뜯어고칠 필요 없이 그 기능에 해당하는 애플리케이션만 손보면 되기 때문에 서비스를 빠르게 수정, 보안했습니다.

• DevOps 환경 구축
넷플릭스의 경우 풀 사이클 개발자라는 개념으로 자사만의 데브옵스를 실천했습니다. 즉, 만든 사람이 운영하고 문제가 발생하면 직접 고치는 구조인데요, 개발자들이 들으면 눈이 커질 이야기지만 어찌 됐든 애플리케이션을 개발하고 테스트, 배포, 운영, 지원의 사이클을 신속하게 처리할 수 있는 DevOps 환경을 구축했습니다.

• NoSQL 데이터 구조
무거운 관계형 데이터베이스에서 NoSQL 데이터베이스 구조로 변경하여 DB도 기능별로 나누어 사용하여 확장성, 고가용성을 확보했습니다.

• 회복성 있는 아키텍처
데이터센터든 클라우드든 인스턴스 장애는 일어나기 마련입니다. 따라서, 하드웨어 가용성에 의존하는 대신 자체 회복력을 가지는 아키텍처를 설계했습니다. 

넷플릭스는 하루아침에 클라우드 네이티브를 도입한 것이 아닙니다. 사실상 모든 기술을 재구축하고 조직과 운영 방식을 근본적으로 바꿨기 때문에 많은 시간과 노력이 필요했습니다. 새로운 기술과 도구를 테스트하는 과정에서 숱한 실패도 맛보았으나 문제점을 계속 발견하고 수정함으로써 결과적으로는 경쟁 업체보다 훨씬 뛰어난 시스템을 개발할 수 있었습니다.

 

정리하며…

이제 클라우드의 사용은 보편화 되었습니다.
그러나 아직 많은 사용자들이 클라우드를 인프라 중심으로 사용하고, 애플리케이션은 여전히 클라우드 이전 시대에 머물러 있다고 합니다.
넷플릭스가 클라우드로 이전하면서 애플리케이션 중심의 클라우드 네이티브로 전면 재설계한 이유는 인프라만 클라우드로 옮기게 된다면 기존에 지닌 모든 문제와 한계점을 그대로 옮기는 것밖에 되지 않는다는 것을 알았기 때문입니다.

클라우드 네이티브로 가기 위해서는 애플리케이션 중심의 설계가 필요하며 그것을 자동화하여 운영하는 것이 필요합니다.
그 방법으로는 다양한 기술과 도구, 방법론이 있으며 무엇보다 조직의 변화도 중요합니다. 조직의 현재 구조를 고려한 비즈니스 설계가 아닌, 기술에 맞춰 조직이 변화해야 하는 것입니다. 즉, 클라우드 네이티브로 간다는 것은 IT 인프라에서부터 조직이 일하는 구조와 방식까지 모두 재설계하는 과정이 될 것입니다.

읽어주셔서 감사합니다 🙂

<참고 도서 #1 : 클라우드 네이티브 – 보리스 숄, 트렌트 스완슨, 피터 야우쇼베츠 지음>
<참고 도서 #2 : 클라우드 네이티브 아키텍처 – 톰 라쥬스키, 카말 아로라, 에릭 파, 피윰 조누즈 지음>
<넷플릭스 사례 참고 : 티타임즈 포스트


Microsoft - 클라우드 네이티브란?

  • 아티클
  • 2023. 04. 08.
  • 기여자 17명
피드백

 

이 콘텐츠는 Azure용 클라우드 네이티브 .NET 애플리케이션 설계 전자책에서 발췌한 것으로, Docs 또는 오프라인에서 읽을 수 있는 다운로드 가능한 무료 PDF로 제공됩니다.NET.

수행 중인 작업을 중지하고 동료에게 "클라우드 네이티브"라는 용어를 정의하도록 요청합니다. 몇 가지 다른 답변을 얻을 수 있는 좋은 기회가 될 것입니다.

간단한 정의로 시작해 보겠습니다.

‘클라우드 네이티브 아키텍처 및 기술은 클라우드에서 빌드된 워크로드를 디자인, 생성 및 운영하는 접근 방식으로, 클라우드 컴퓨팅 모델을 최대한 활용합니다.’

Cloud Native Computing Foundation은 다음과 같은 공식 정의를 제공합니다.

클라우드 네이티브 기술을 통해 조직은 퍼블릭, 프라이빗 및 하이브리드 클라우드와 같은 최신 동적 환경에서 스케일링 가능한 애플리케이션을 빌드하고 실행할 수 있습니다. 이 방법의 예로 컨테이너, 서비스 메시, 마이크로 서비스, 변경할 수 없는 인프라 및 선언적 API를 들 수 있습니다.

이러한 기술을 통해 복원력 있고 관리 가능하며 관찰 가능한 느슨하게 결합된 시스템을 사용할 수 있습니다. 강력한 자동화와 결합되므로 엔지니어는 최소한의 수고로 자주 발생하며 예측 가능한 방식으로 높은 영향을 미치는 변경을 수행할 수 있습니다.

클라우드 네이티브는 ‘속도’ 및 ‘민첩성’에 관한 것입니다. 비즈니스 시스템은 비즈니스 역량을 활성화하는 측면에서 비즈니스 속도와 성장을 가속화하는 전략적 혁신 무기로 진화하고 있습니다. 새로운 아이디어를 즉시 출시하는 것이 필수적입니다.

동시에, 비즈니스 시스템은 더 많은 사용자 요구로 인해 점점 더 복잡해지고 있습니다. 빠른 응답성, 혁신적인 기능 및 제로 가동 중지 시간을 기대합니다. 성능 문제, 반복적인 오류 및 빠른 전환 능력 부족은 더 이상 허용되지 않습니다. 사용자들은 경쟁업체를 찾게 될 것입니다. 클라우드 네이티브 시스템은 빠른 변화, 더 큰 규모 및 복원력을 수용하도록 설계되었습니다.

다음은 클라우드 네이티브 기술을 구현한 일부 기업들입니다. 이러한 기업들이 달성한 속도, 민첩성 및 스케일링 기능에 대해 생각해 보세요.

회사환경
Netflix 프로덕션 환경에 600개 이상의 서비스가 있습니다. 매일 100번 배포합니다.
Uber 프로덕션에 1,000개 이상의 서비스가 있습니다. 매주 수천 번 배포합니다.
WeChat 프로덕션에 3,000개 이상의 서비스가 있습니다. 매일 1,000번 배포합니다.

여기서 볼 수 있듯이 Netflix, Uber 및 WeChat은 많은 독립 서비스로 구성된 클라우드 네이티브 시스템을 노출합니다. 이 아키텍처 스타일을 사용하면 시장 상황에 신속하게 대응할 수 있습니다. 전체 재배포 없이 복잡한 라이브 애플리케이션의 소규모 영역을 즉시 업데이트합니다. 필요에 따라 개별적으로 서비스를 스케일링합니다.

클라우드 네이티브의 핵심 요소

클라우드 네이티브의 속도와 민첩성은 여러 요인에서 파생됩니다. 가장 중요한 것은 ‘클라우드 인프라’입니다. 하지만 이것이 다가 아닙니다. 그림 1-3에 나와 있는 5개의 다른 기본 핵심 요소가 클라우드 네이티브 시스템의 기반이 됩니다.

그림 1-3. 클라우드 네이티브 기본 핵심 요소

각 핵심 요소의 중요성을 좀 더 잘 이해하는 시간을 좀 더 가져보겠습니다.

클라우드

클라우드 네이티브 시스템은 클라우드 서비스 모델을 최대한 활용합니다.

가상화된 동적 클라우드 환경에서 성장하도록 설계된 이러한 시스템은 PaaS(Platform as a Service) 컴퓨팅 인프라 및 관리형 서비스를 광범위하게 사용합니다. 자동화를 통해 기본 인프라를 몇 분 안에 프로비저닝하고 주문형으로 크기 조정, 스케일링 또는 소멸시키는 ’삭제 가능’ 인프라로 처리합니다.

널리 허용되는 DevOps의 애완 동물 대 가축 개념을 고려해보세요. 기존 데이터 센터에서 서버는 물리적 머신인 ‘애완동물’로 취급되어 의미 있는 이름을 지정하고 ‘관리’합니다. 동일한 머신에 더 많은 리소스를 추가하여 스케일링합니다(스케일 업). 서버가 아프면 건강해지도록 간호합니다. 서버를 사용할 수 없게 되면 모든 사용자가 알 수 있습니다.

가축 서비스 모델은 다릅니다. 각 인스턴스를 가상 머신 또는 컨테이너로 프로비저닝합니다. 각 인스턴스는 동일하며 Service-01, Service-02 등과 같은 시스템 식별자가 할당됩니다. 더 많은 인스턴스를 만들어 스케일링합니다(스케일 아웃). 사용할 수 없게 되어도 아무도 모릅니다.

가축 모델은 ‘변경할 수 없는 인프라’를 수용합니다. 서버는 복구되거나 수정되지 않습니다. 한 서버에서 발생하거나 업데이트가 필요한 경우 삭제되고 새 서버가 프로비저닝되며 이러한 모든 작업은 자동화를 통해 수행됩니다.

클라우드 네이티브 시스템은 가축 서비스 모델을 수용합니다. 실행 중인 머신과 관계없이 인프라가 스케일 인되거나 스케일 아웃될 때도 계속 실행됩니다.

Azure 클라우드 플랫폼은 자동 스케일링, 자체 복구 및 모니터링 기능을 사용하여 이러한 유형의 고도로 탄력적인 인프라를 지원합니다.

최신 디자인

클라우드 네이티브 앱을 디자인하려면 어떻게 해야 할까요? 아키텍처는 어떤 모습일까요? 어떤 원칙, 패턴 및 모범 사례를 준수할 것인가요? 어떤 인프라 및 운영 문제가 중요할까요?

12단계 응용

클라우드 기반 애플리케이션을 생성하기 위한 널리 허용되는 방법은 12단계 응용입니다. 이 방식은 개발자가 최신 클라우드 환경에 최적화된 애플리케이션을 생성하기 위해 따르는 일련의 원칙과 사례를 설명합니다. 환경 전반의 이식성과 선언적 자동화에 특히 유의합니다.

모든 웹 기반 애플리케이션에 적용할 수 있지만 많은 실무자는 12단계를 클라우드 네이티브 앱 빌드를 위한 견고한 토대로 간주합니다. 이러한 원칙을 기준으로 하는 시스템은 신속하게 배포 및 확장할 수 있으며, 시장 변화에 신속하게 대응할 수 있는 기능을 추가할 수 있습니다.

다음 표에서는 12단계 방법론을 중점적으로 보여 줍니다.

요인설명
1 - 코드베이스 자체 리포지토리에 저장된 각 마이크로 서비스에 대한 단일 코드베이스입니다. 버전 제어를 사용하여 추적되며 여러 환경(QA, 스테이징, 프로덕션)에 배포할 수 있습니다.
2 - 종속성 각 마이크로 서비스는 자체 종속성을 격리하고 패키징하여 전체 시스템에 영향을 주지 않으면서 변경 내용을 수용합니다.
3 - 구성 구성 정보는 마이크로 서비스 외부로 이동하며 코드 외부의 구성 관리 도구를 통해 외부화됩니다. 동일한 배포가 올바른 구성이 적용된 환경 간에 전파될 수 있습니다.
4 - 지원 서비스 보조 리소스(데이터 저장소, 캐시, 메시지 브로커)를 주소 지정 가능 URL을 통해 노출합니다. 이렇게 하여 리소스를 애플리케이션에서 분리하면 바꿔서 사용할 수 있습니다.
5 - 빌드, 릴리스, 실행 각 릴리스는 빌드, 릴리스, 실행 스테이지마다 엄격히 구분되어야 합니다. 각각에는 고유한 ID가 태그로 지정되고 롤백 기능을 지원해야 합니다. 최신 CI/CD 시스템은 이 원칙을 충족하는 데 도움이 될 수 있습니다.
6 - 프로세스 각 마이크로 서비스는 실행 중인 다른 서비스와 격리되어 자체 프로세스에서 실행되어야 합니다. 필요한 상태를 분산 캐시 또는 데이터 저장소와 같은 지원 서비스에 외부화합니다.
7 - 포트 바인딩 각 마이크로 서비스는 자체 포트에 노출되는 인터페이스 및 기능을 갖춘 자체 포함 서비스여야 합니다. 이러한 방식으로 다른 마이크로 서비스에서 격리합니다.
8 - 동시성 용량을 늘려야 하는 경우 사용 가능한 가장 강력한 머신에서 대규모 단일 인스턴스를 스케일 업하는 것이 아니라, 여러 동일한 프로세스(복사본)에서 수평으로 서비스를 스케일 아웃합니다. 애플리케이션을 동시 상태로 개발하여 클라우드 환경에서 원활하게 스케일 아웃할 수 있도록 합니다.
9 - 삭제 가능성 서비스 인스턴스는 삭제할 수 있어야 합니다. 속도 우선 시작을 적용하여 스케일링 기회와 정상적인 종료를 늘림으로써 시스템을 올바른 상태로 유지합니다. 오케스트레이터와 함께 Docker 컨테이너는 기본적으로 이 요구 사항을 충족합니다.
10 - 개발/프로덕션 패리티 애플리케이션 수명 주기 동안 환경을 가능한 한 비슷하게 유지하여 비용이 많이 드는 단축 작업 경로를 방지합니다. 여기서 컨테이너를 채택하면 동일한 실행 환경이 개선되므로 유용할 수 있습니다.
11 - 로깅 마이크로 서비스에서 생성된 로그를 이벤트 스트림으로 처리합니다. 이벤트 집계를 사용하여 처리합니다. 로그 데이터를 Azure Monitor 또는 Splunk와 같은 데이터 마이닝/로그 관리 도구로 전파하고 결국에는 장기 보관 상태로 유지합니다.
12 - 관리 프로세스 데이터 정리 또는 컴퓨팅 분석과 같은 운영/관리 작업을 일회성 프로세스로 실행합니다. 독립 도구를 사용하여 프로덕션 환경에서 이러한 작업을 호출하지만 애플리케이션과는 별도로 호출합니다.

Beyond the Twelve-Factor App(12단계 앱 그 이상) 책에서 저자인 Kevin Hoffman은 원래의 12가지 단계 각각에 대해 자세히 설명합니다(2011년 제작). 또한 오늘날의 최신 클라우드 애플리케이션 디자인을 반영하는 세 가지 추가 단계에 대해서도 설명합니다.

새 단계설명
13 - API 우선 모든 항목을 서비스로 만듭니다. 코드가 프런트 엔드 클라이언트, 게이트웨이 또는 다른 서비스에서 사용된다고 가정합니다.
14 - 원격 분석 워크스테이션에서 애플리케이션 및 해당 동작을 심층적으로 파악할 수 있습니다. 클라우드에서는 그렇지 않습니다. 디자인에 모니터링, 도메인별 및 상태/시스템 데이터 컬렉션이 포함되어 있는지 확인합니다.
15 - 인증/권한 부여 처음부터 ID를 구현합니다. 퍼블릭 클라우드에서 사용할 수 있는 RBAC(역할 기반 액세스 제어) 기능을 고려합니다.

이 장과 책 전반에서 12개 이상의 요인에 대한 다양한 측면을 살펴보겠습니다.

Azure Well-Architected 프레임워크

특히 클라우드 네이티브 아키텍처를 구현할 때 클라우드 기반 워크로드를 디자인하고 배포하는 것은 어려울 수 있습니다. Microsoft는 사용자와 팀이 강력한 클라우드 솔루션을 제공하는 데 도움이 되는 업계 표준 모범 사례를 제공합니다.

Microsoft Well-Architected Framework는 클라우드 네이티브 워크로드의 품질을 개선하는 데 사용할 수 있는 일련의 안내 테넌트를 제공합니다. 이 프레임워크는 다음과 같이 뛰어난 아키텍처의 5가지 핵심 요소로 이루어져 있습니다.

원리Description
비용 관리 지속적으로 증가하는 가치를 초기에 창출하는 데 중점을 둡니다. 빌드-측정-학습 원칙을 적용하여 자본 집약적인 솔루션을 피하면서 출시 시간을 단축합니다. 종량제 전략을 사용하여 대규모 투자를 선불로 제공하는 대신 스케일 아웃할 때 투자합니다.
운영 우수성 환경 및 작업을 자동화하여 속도를 높이고 인간의 오류를 줄입니다. 문제 업데이트를 신속하게 롤백하거나 롤포워드합니다. 처음부터 모니터링 및 진단을 구현합니다.
성능 효율성 워크로드에 대한 요구를 효율적으로 충족합니다. 수평 스케일링(스케일 아웃)을 우선적으로 적용하고 시스템으로 설계합니다. 성능 및 부하 테스트를 지속적으로 수행하여 잠재적인 병목 상태를 식별합니다.
신뢰성 복원 가능하고 사용 가능한 워크로드를 빌드합니다. 복원력을 통해 워크로드를 오류로부터 복구하고 계속 작동할 수 있습니다. 가용성을 통해 사용자는 항상 워크로드에 액세스할 수 있습니다. 오류를 예상하고 복구하도록 애플리케이션을 디자인합니다.
보안 디자인 및 구현에서 배포 및 운영에 이르는 애플리케이션의 전체 수명 주기에서 보안을 구현합니다. ID 관리, 인프라 액세스, 애플리케이션 보안, 데이터 주권 및 암호화에 보다 세심한 주의를 기울입니다.

시작하기 위해 Microsoft는 현재 클라우드 워크로드에서 잘 설계된 다섯 가지 핵심 요소를 평가하는 데 도움이 되는 일련의 온라인 평가를 제공합니다.

마이크로 서비스

클라우드 네이티브 시스템은 최신 애플리케이션을 생성하기 위한 인기 있는 아키텍처 스타일인 마이크로 서비스를 수용합니다.

공유 패브릭을 통해 상호 작용하는 소규모 독립 서비스의 분산 집합으로 빌드된 마이크로 서비스는 다음과 같은 특성을 공유합니다.

  • 각각은 더 큰 도메인 컨텍스트 내에서 특정 비즈니스 기능을 구현합니다.
  • 각각은 자율적으로 개발되며 독립적으로 배포할 수 있습니다.
  • 각각은 자체 데이터 스토리지 기술, 종속성 및 프로그래밍 플랫폼을 캡슐화하는 자체 포함형입니다.
  • 각각은 자체 프로세스에서 실행되며 HTTP/HTTPS, gRPC, WebSockets 또는 AMQP와 같은 표준 통신 프로토콜을 사용하여 서로 통신합니다.
  • 함께 애플리케이션을 구성합니다.

그림 1-4는 모놀리식 애플리케이션 접근 방식과 마이크로 서비스 접근 방식을 대조해서 보여 줍니다. 모놀리스가 단일 프로세스에서 실행되는 계층화된 아키텍처로 구성되는 방법을 확인합니다. 일반적으로 관계형 데이터베이스를 사용합니다. 그러나 마이크로 서비스 접근 방식은 기능을 각각 자체 논리, 상태 및 데이터를 갖는 독립적인 서비스로 분리합니다. 각 마이크로 서비스는 자체 데이터 저장소를 호스팅합니다.

그림 1-4. 모놀리식 대 마이크로 서비스 아키텍처

마이크로 서비스가 앞에서 설명한 12단계 응용에서 프로세스 원칙을 승격하는 방법을 확인합니다.

6단계는 “각 마이크로 서비스가 실행 중인 다른 서비스와 격리되어 자체 프로세스에서 실행되어야 함”을 지정합니다.

마이크로 서비스를 사용하는 이유는 무엇인가요?

마이크로 서비스는 민첩성을 제공합니다.

이 장 앞부분에서는 모놀리식으로 빌드된 전자 상거래 애플리케이션을 마이크로 서비스와 비교했습니다. 이 예제에서는 몇 가지 명확한 이점을 확인했습니다.

  • 각 마이크로 서비스에는 자율 수명 주기가 있으며 독립적으로 발전하고 자주 배포할 수 있습니다. 새 기능 또는 업데이트를 배포하기 위해 분기별 릴리스를 기다릴 필요가 없습니다. 라이브 애플리케이션의 작은 영역을 업데이트하여 전체 시스템을 중단할 위험을 줄일 수 있습니다. 애플리케이션을 완전히 다시 배포하지 않고도 업데이트를 수행할 수 있습니다.
  • 각 마이크로 서비스는 독립적으로 스케일링할 수 있습니다. 전체 애플리케이션을 단일 단위로 스케일링하는 대신, 원하는 성능 수준 및 서비스 수준 계약을 충족하기 위해 더 많은 처리 능력이 필요한 서비스만 스케일 아웃합니다. 세분화된 스케일링은 시스템을 보다 효율적으로 제어할 수 있도록 하며, 전체가 아니라 시스템의 일부를 스케일링함으로써 전반적인 비용을 줄이는 데 도움이 됩니다.

마이크로 서비스를 이해하기 위한 훌륭한 참조 가이드는 .NET 마이크로 서비스: 컨테이너화된 .NET 애플리케이션을 위한 아키텍처입니다. 이 책은 마이크로 서비스 디자인 및 아키텍처에 대해 자세히 설명합니다. Microsoft에서 무료로 다운로드할 수 있는 전체 스택 마이크로 서비스 참조 아키텍처의 부록에 해당합니다.

마이크로 서비스 개발

마이크로 서비스는 모든 최신 개발 플랫폼에서 만들 수 있습니다.

Microsoft .NET 플랫폼은 훌륭한 선택입니다. 무료 및 오픈 소스로 제공되는 이 플랫폼에는 마이크로 서비스 개발을 간소화하는 많은 기본 제공 기능이 있습니다. .NET 는 플랫폼 간입니다. 애플리케이션은 Windows, macOS 및 대부분의 Linux 버전에서 빌드하고 실행할 수 있습니다.

.NET 성능이 뛰어나고 Node.js 및 기타 경쟁 플랫폼에 비해 좋은 점수를 받았습니다. 흥미롭게도 TechEmpower는 많은 웹 애플리케이션 플랫폼 및 프레임워크에서 광범위한 성능 벤치마크 집합을 수행했습니다. .NET 상위 10위 안에 Node.js 및 기타 경쟁 플랫폼보다 훨씬 높은 점수를 받았습니다.

.NET 는 Microsoft 및 GitHub의 .NET 커뮤니티에서 유지 관리됩니다.

마이크로 서비스 문제

분산 클라우드 네이티브 마이크로 서비스는 엄청난 민첩성과 속도를 제공할 수 있지만 다음과 같은 많은 과제를 제시합니다.

통신

프런트 엔드 클라이언트 애플리케이션은 백 엔드 코어 마이크로 서비스와 어떻게 통신합니까? 직접 통신을 허용할까요? 또는 유연성, 제어 및 보안을 제공하는 게이트웨이 외관을 사용하여 백 엔드 마이크로 서비스를 추상화할 수 있나요?

백 엔드 코어 마이크로 서비스는 서로 어떻게 통신하나요? 결합을 높이고 성능과 민첩성에 영향을 줄 수 있는 직접 HTTP 호출을 허용할까요? 또는 큐 및 토픽 기술과 분리된 메시징을 고려할 수 있나요?

통신은 클라우드 네이티브 통신 패턴 장에서 다룹니다.

복원력

마이크로 서비스 아키텍처는 시스템을 In-Process에서 Out-of-process 네트워크 통신으로 이동합니다. 분산 아키텍처에서 서비스 B가 서비스 A의 네트워크 호출에 응답하지 않으면 어떻게 되나요? 또는 서비스 C를 일시적으로 사용할 수 없게 되고 서비스 C를 호출하는 다른 서비스가 차단되면 어떻게 되나요?

복원력은 클라우드 네이티브 복원력 장에서 다룹니다.

‘분산 데이터’

기본적으로 각 마이크로 서비스는 자체 데이터를 캡슐화하여 퍼블릭 인터페이스를 통해 작업을 노출합니다. 그렇다면 데이터를 쿼리하거나 여러 서비스에서 트랜잭션을 구현하려면 어떻게 해야 할까요?

분산 데이터는 클라우드 네이티브 데이터 패턴 장에서 다룹니다.

비밀

마이크로 서비스로 어떻게 비밀 및 중요한 구성 데이터를 안전하게 저장하고 관리할 수 있나요?

비밀은 클라우드 네이티브 보안에서 자세히 설명합니다.

Dapr을 사용하여 복잡성 관리

Dapr은 분산 오픈 소스 애플리케이션 런타임입니다. Dapr은 플러그형 구성 요소의 아키텍처를 통해 분산 애플리케이션의 내부 ‘배관’을 크게 간소화합니다. Dapr 런타임에서 미리 빌드된 인프라 기능 및 구성 요소와 애플리케이션을 바인딩하는 동적 글루를 제공합니다. 그림 1-5는 20,000피트 상공에서 바라본 Dapr을 보여 줍니다.

그림 1-5. 20,000피트 상공에서 바라본 Dapr

그림의 맨 위 행에서 Dapr이 인기 있는 개발 플랫폼에 언어별 SDK를 제공하는 방법을 확인합니다. Dapr v1에는 , Go, Node.js, Python, PHP, Java 및 JavaScript에 대한 .NET지원이 포함됩니다.

언어별 SDK는 개발자 환경을 향상시키지만 Dapr은 플랫폼에 구애받지 않습니다. 내부적으로 Dapr의 프로그래밍 모델은 표준 HTTP/gRPC 통신 프로토콜을 통해 기능을 노출합니다. 모든 프로그래밍 플랫폼은 네이티브 HTTP 및 gRPC API를 통해 Dapr을 호출할 수 있습니다.

그림의 가운데에 있는 파란색 상자는 Dapr 구성 요소를 나타냅니다. 각각은 애플리케이션에서 사용할 수 있는 분산 애플리케이션 기능에 대해 미리 빌드된 배관 코드를 노출합니다.

구성 요소 행은 애플리케이션에서 사용할 수 있는 미리 정의된 대규모 인프라 구성 요소 집합을 나타냅니다. 구성 요소를 작성할 필요가 없는 인프라 코드로 간주합니다.

아래쪽 행은 Dapr의 이식성과 실행할 수 있는 다양한 환경을 강조 표시합니다.

Microsoft는 Dapr을 학습하기 위한 개발자용 .NET 무료 전자책 Dapr을 제공합니다.

앞으로 Dapr은 클라우드 네이티브 애플리케이션 개발에 중대한 영향을 미칠 가능성이 있습니다.

컨테이너

모든 ‘클라우드 네이티브’ 대화에서 용어 ‘컨테이너’가 언급되는 것을 자주 듣게 될 것입니다. 클라우드 네이티브 패턴 책에서 저자인 Cornelia Davis는 “컨테이너가 클라우드 네이티브 소프트웨어의 뛰어난 활성화 요인”이라고 말합니다.” Cloud Native Computing Foundation은 클라우드 네이티브 여정을 시작하는 기업을 위한 지침인 클라우드 네이티브 트레일 맵의 첫 번째 단계로 마이크로 서비스 컨테이너화를 배치합니다.

마이크로 서비스를 컨테이너화하는 것은 간단합니다. 코드, 해당 종속성 및 런타임은 컨테이너 이미지라는 이진 파일로 패키지됩니다. 이미지는 이미지의 리포지토리 또는 라이브러리 역할을 하는 컨테이너 레지스트리에 저장됩니다. 레지스트리는 개발 컴퓨터, 데이터 센터 또는 퍼블릭 클라우드에 있을 수 있습니다. Docker 자체는 Docker Hub를 통해 퍼블릭 레지스트리를 유지 관리합니다. Azure 클라우드는 프라이빗 컨테이너 레지스트리를 사용하여 컨테이너 이미지를 실행할 클라우드 애플리케이션 가까이에 저장합니다.

애플리케이션이 시작되거나 스케일링되면 컨테이너 이미지를 실행 중인 컨테이너 인스턴스로 변환합니다. 인스턴스는 컨테이너 런타임 엔진이 설치된 모든 컴퓨터에서 실행됩니다. 필요한 수만큼 컨테이너화된 서비스의 인스턴스를 유지할 수 있습니다.

그림 1-6은 각각 자체 컨테이너에 있으며 모두 단일 호스트에서 실행되는 세 개의 서로 다른 마이크로 서비스를 보여 줍니다.

그림 1-6. 컨테이너 호스트에서 실행되는 여러 컨테이너

각 컨테이너가 서로 다를 수 있는 자체 종속성 및 런타임 집합을 유지 관리하는 방법에 유의하세요. 여기서는 동일한 호스트에서 실행되는 다양한 버전의 제품 마이크로 서비스를 볼 수 있습니다. 각 컨테이너는 기본 호스트 운영 체제, 메모리 및 프로세서의 조각을 공유하지만 서로 격리됩니다.

컨테이너 모델이 12단계 응용 종속성 원칙을 얼마나 잘 수용하는지 확인합니다.

2단계는 “각 마이크로 서비스가 자체 종속성을 격리하고 패키징하여 전체 시스템에 영향을 주지 않으면서 변경 내용을 수용한다”고 지정합니다.

컨테이너는 Linux 및 Windows 워크로드를 모두 지원합니다. Azure 클라우드는 두 가지 모두를 공개적으로 수용합니다. 흥미롭게도 Windows Server가 아닌 Linux는 Azure에서 더 인기 있는 운영 체제가 되었습니다.

여러 컨테이너 공급업체가 있지만 Docker가 시장에서 가장 큰 지분을 차지했습니다. 이 회사는 소프트웨어 컨테이너 이동을 추진하고 있습니다. 또한 클라우드 네이티브 애플리케이션을 패키징, 배포 및 실행하기 위한 사실상 표준이 되었습니다.

왜 컨테이너일까요?

컨테이너는 환경 전반에서 이식성을 제공하고 일관성을 보장합니다. 모든 항목을 단일 패키지로 캡슐화하여 기본 인프라에서 마이크로 서비스 및 종속성을 ‘격리’합니다.

Docker 런타임 엔진을 호스트하는 모든 환경에서 컨테이너를 배포할 수 있습니다. 또한 컨테이너화된 워크로드는 프레임워크, 소프트웨어 라이브러리 및 런타임 엔진을 사용하여 각 환경을 미리 구성하는 비용을 제거합니다.

기본 운영 체제 및 호스트 리소스를 공유하면 컨테이너의 공간이 전체 가상 머신보다 훨씬 더 작습니다. 크기가 작을수록 지정된 호스트가 한 번에 실행할 수 있는 마이크로 서비스 수 또는 ‘밀도’가 증가합니다.

컨테이너 오케스트레이션

Docker와 같은 도구는 이미지를 만들고 컨테이너를 실행하는 동안 이미지를 관리하는 도구도 필요합니다. 컨테이너 관리는 컨테이너 오케스트레이터라는 특수 소프트웨어 프로그램으로 수행됩니다. 많은 독립 실행 컨테이너를 사용하여 대규모로 작동하는 경우 오케스트레이션이 필수적입니다.

그림 1-7은 컨테이너 오케스트레이터가 자동화하는 관리 작업을 보여 줍니다.

그림 1-7. 컨테이너 오케스트레이터가 수행하는 작업

다음 표에서는 일반적인 오케스트레이션 작업에 대해 설명합니다.

작업설명
일정 계획 컨테이너 인스턴스를 자동으로 프로비저닝합니다.
선호도/반선호도 컨테이너를 서로 가까이 또는 멀리 떨어진 위치에 프로비저닝하여 가용성과 성능을 지원합니다.
상태 모니터링 오류를 자동으로 검색하고 수정합니다.
장애 조치 실패한 인스턴스를 정상 머신으로 자동으로 다시 프로비저닝합니다.
크기 조정 수요를 충족하기 위해 컨테이너 인스턴스를 자동으로 추가하거나 제거합니다.
네트워킹 컨테이너 통신을 위한 네트워킹 오버레이를 관리합니다.
서비스 검색 컨테이너가 서로를 찾을 수 있도록 설정합니다.
롤링 업그레이드 제로 가동 중지 시간 배포로 증분 업그레이드를 조정합니다. 문제가 있는 변경 내용을 자동으로 롤백합니다.

컨테이너 오케스트레이터가 어떻게 12단계 응용 삭제 가능성  동시성 원칙을 수용하는지 확인합니다.

9단계는 “서비스 인스턴스를 삭제할 수 있어야 하며, 빠른 시작을 선호하여 확장성 기회를 높이고 시스템을 올바른 상태로 유지하도록 정상적인 종료를 허용해야 함”을 지정합니다. 오케스트레이터와 함께 Docker 컨테이너는 기본적으로 이 요구 사항을 충족합니다.

8단계는 “서비스가 사용 가능한 가장 강력한 머신에서 단일 대규모 인스턴스를 스케일 업하지 않고, 많은 수의 동일한 소규모 프로세스(복사본)에서 스케일 아웃됨”을 지정합니다.

여러 컨테이너 오케스트레이터가 있지만 Kubernetes는 사실상 클라우드 네이티브 세계의 표준이 되었습니다. 컨테이너화된 워크로드를 관리하기 위한 이식 가능하고 확장 가능한 오픈 소스 플랫폼입니다.

Kubernetes의 고유한 인스턴스를 호스트할 수 있지만 리소스를 프로비저닝하고 관리하는 작업은 사용자가 담당합니다. 이러한 작업은 복잡할 수 있습니다. Azure 클라우드는 Kubernetes를 관리형 서비스로 제공합니다. AKS(Azure Kubernetes Service)  ARO(Azure Red Hat OpenShift)를 통해 Kubernetes를 설치하고 유지 관리할 필요 없이 해당 기능과 성능을 관리형 서비스로서 완전히 활용할 수 있습니다.

컨테이너 오케스트레이션은 클라우드 네이티브 애플리케이션 스케일링에 자세히 설명되어 있습니다.

지원 서비스

클라우드 네이티브 시스템은 데이터 저장소, 메시지 브로커, 모니터링 및 ID 서비스와 같은 다양한 보조 리소스에 의존합니다. 이러한 서비스를 지원 서비스라고 합니다.

그림 1-8에서는 클라우드 네이티브 시스템에서 사용하는 많은 일반적인 지원 서비스를 보여 줍니다.

그림 1-8. 공통 지원 서비스

사용자 고유의 지원 서비스를 호스트할 수 있지만 해당 리소스의 라이선스, 프로비저닝 및 관리를 담당하게 됩니다.

클라우드 공급자는 다양한 ‘관리형 백업 서비스’ 모음을 제공합니다. 서비스를 소유하는 대신 사용하면 됩니다. 클라우드 공급자는 대규모로 리소스를 운영하며 성능, 보안 및 유지 관리를 담당합니다. 모니터링, 중복성 및 가용성은 서비스에 기본 제공됩니다. 공급자는 서비스 수준 성능을 보장하고 관리형 서비스를 완벽하게 지원합니다. 즉, 티켓을 열고 문제를 해결합니다.

클라우드 네이티브 시스템은 클라우드 공급업체의 관리형 지원 서비스를 적용합니다. 시간과 작업량의 절감은 상당할 수 있습니다. 직접 호스팅하고 문제를 겪게 되는 운영 위험을 해결하는 데는 비용이 많이 들 수 있습니다.

지원 서비스를 외부 구성에 저장된 구성 정보(URL 및 자격 증명)를 사용하여 마이크로 서비스에 동적으로 바인딩된 연결된 리소스로 처리하는 것이 가장 좋습니다. 이 지침은 이 장 앞부분에서 설명한 12단계 응용에 설명되어 있습니다.

‘4단계’는 지원 서비스가 “주소 지정 가능한 URL을 통해 노출되어야 함을 지정합니다. 이렇게 하면 애플리케이션에서 리소스가 분리되며 바꿔서 사용할 수 있습니다.”

‘3단계’는 “구성 정보가 마이크로 서비스 외부로 이동하며 코드 외부의 구성 관리 도구를 통해 외부화됨”을 지정합니다.

이 패턴을 사용하면 코드 변경 없이 백업 서비스를 연결하고 분리할 수 있습니다. 마이크로 서비스를 QA에서 스테이징 환경으로 승격할 수 있습니다. 스테이징에서 지원 서비스를 가리키도록 마이크로 서비스 구성을 업데이트하고 환경 변수를 통해 설정을 컨테이너에 삽입합니다.

클라우드 공급업체는 고유한 지원 서비스와 통신하기 위한 API를 제공합니다. 이러한 라이브러리는 독점적인 배관 및 복잡성을 캡슐화합니다. 그러나 이러한 API와 직접 통신하면 코드를 해당 특정 지원 서비스와 긴밀하게 결합할 수 있습니다. 공급업체 API의 구현 세부 정보를 격리하는 것은 널리 허용되는 사례입니다. 서비스 코드에 제네릭 작업을 노출하고 내부 공급 업체 코드를 래핑하는 중간 계층 또는 중간 API를 도입합니다. 이 느슨한 결합을 사용하면 주요 서비스 코드를 변경하지 않고도 한 백업 서비스를 다른 백업 서비스와 교체하거나 코드를 다른 클라우드 환경으로 이동할 수 있습니다. 앞에서 설명한 Dapr은 미리 빌드된 빌딩 블록 집합을 사용하여 이 모델을 따릅니다.

최종적으로 지원 서비스는 이 장 앞부분에서 설명하는 12단계 응용 상태 비저장 원칙도 승격합니다.

‘6단계’는 “각 마이크로 서비스가 실행 중인 다른 서비스와 격리되어 자체 프로세스에서 실행되어야 하며, 필요한 상태를 분산 캐시 또는 데이터 저장소와 같은 지원 서비스에 외부화함”을 지정합니다.

지원 서비스는 클라우드 네이티브 데이터 패턴  클라우드 네이티브 통신 패턴에 설명되어 있습니다.

Automation

확인한 것처럼 클라우드 네이티브 시스템은 마이크로 서비스, 컨테이너 및 최신 시스템 디자인을 수용하여 속도와 민첩성을 달성합니다. 하지만 이는 일부에 불과합니다. 이러한 시스템이 실행되는 클라우드 환경을 어떻게 프로비저닝하나요? 앱 기능 및 업데이트를 신속하게 배포하려면 어떻게 해야 할까요? 전체적인 상황을 어떻게 설명할 수 있을까요?

Infrastructure as Code 또는 IaC의 널리 허용되는 사례를 입력합니다.

IaC를 사용하면 플랫폼 프로비저닝 및 애플리케이션 배포를 자동화할 수 있습니다. 기본적으로 DevOps 사례에 테스트 및 버전 관리와 같은 소프트웨어 엔지니어링 사례를 적용합니다. 인프라 및 배포는 자동화되고 일관되며 반복 가능합니다.

인프라 자동화

Azure Resource Manager, Azure Bicep, HashiCorp의 Terraform  Azure CLI와 같은 도구를 사용하여 필요한 클라우드 인프라를 선언적으로 스크립팅할 수 있습니다. 리소스 이름, 위치, 용량 및 비밀은 매개 변수화되며 동적입니다. 스크립트의 버전이 지정되고 프로젝트의 아티팩트로서 소스 제어에 체크 인됩니다. 스크립트를 호출하여 QA, 스테이징 및 프로덕션과 같은 시스템 환경에서 일관되고 반복 가능한 인프라를 프로비저닝합니다.

내부적으로 IaC는 idempotent입니다. 즉, 부작용 없이 동일한 스크립트를 반복해서 실행할 수 있습니다. 팀은 변경을 수행해야 하는 경우 스크립트를 편집하고 다시 실행합니다. 업데이트된 리소스만 영향을 받습니다.

작성자 Sam Guckenheimer는 Infrastructure as Code란 무엇인가 문서에서 "IaC를 구현하는 팀이 안정적인 환경을 신속하고 대규모로 제공”할 수 있는 방법에 대해 설명합니다. 팀은 환경을 수동으로 구성하지 않고 코드를 통해 환경의 원하는 상태를 표시하여 일관성을 적용합니다. IaC를 사용한 인프라 배포는 반복 가능하며 구성 드리프트 또는 누락된 종속성으로 인한 런타임 문제를 방지합니다. DevOps 팀은 통합 사례 및 도구 집합을 함께 사용하여 애플리케이션과 지원 인프라를 신속하고 안정적으로 대규모로 제공할 수 있습니다.

배포 자동화

앞에서 설명한 12단계 응용은 완료된 코드를 실행 중인 애플리케이션으로 변환할 때 별도의 단계를 요구합니다.

5단계는 “각 릴리스는 빌드, 릴리스, 실행 스테이지마다 엄격히 구분되어야 합니다. 각각은 고유한 ID로 태그를 지정하고 롤백 기능을 지원해야 함”을 지정합니다.

최신 CI/CD 시스템은 이 원칙을 충족하는 데 도움이 될 수 있습니다. 사용자가 쉽게 사용할 수 있는 일관된 고품질 코드를 보장하는 데 도움이 되는 별도의 빌드 및 전송 단계를 제공합니다.

그림 1-9는 배포 프로세스 간의 분리를 보여 줍니다.

그림 1-9. CI/CD 파이프라인의 배포 단계

이전 그림에 나오는 작업 분리에 특히 유의합니다.

  1. 개발자는 개발 환경에서 기능을 생성하여 코드, 실행 및 디버그로 이루어진 "내부 루프" 과정을 반복합니다.
  2. 완료되면 해당 코드는 GitHub, Azure DevOps 또는 BitBucket과 같은 코드 리포지토리에 ‘푸시’됩니다.
  3. 푸시는 코드를 이진 아티팩트로 변환하는 빌드 스테이지를 트리거합니다. 작업은 CI(연속 통합) 파이프라인으로 구현됩니다. 자동으로 애플리케이션을 빌드, 테스트 및 패키징합니다.
  4. 이후 릴리스 스테이지가 이진 아티팩트를 넘겨받아서 외부 애플리케이션 및 환경 구성 정보를 적용한 후 변경이 불가능한 릴리스를 생성합니다. 릴리스는 지정된 환경에 배포됩니다. 이 작업은 CD(지속적인 업데이트) 파이프라인으로 구현됩니다. 각 릴리스를 식별할 수 있어야 합니다. “이 배포는 애플리케이션의 릴리스 2.1.1을 실행하고 있습니다.”라고 말할 수 있습니다.
  5. 마지막으로, 릴리스된 기능이 대상 실행 환경에서 실행됩니다. 릴리스는 변경할 수 없습니다. 즉, 변경을 수행하면 새 릴리스가 만들어져야 합니다.

이러한 사례를 적용하여 조직은 소프트웨어를 전달하는 방법을 근본적으로 발전시켰습니다. 많은 조직들은 분기별 릴리스에서 주문형 업데이트로 전환했습니다. 목표는 개발 주기 초기에 문제를 찾아냄으로써 해결 비용을 줄이는 것입니다. 통합 간의 기간이 길어질수록 문제를 해결하는 데 더 많은 비용이 듭니다. 통합 프로세스의 일관성을 통해 팀은 코드 변경 내용을 좀 더 자주 커밋하여 협업 및 소프트웨어 품질을 높일 수 있습니다.

GitHub 및 Azure DevOps와 함께 Infrastructure as code 및 배포 자동화는 DevOps에 자세히 설명되어 있습니다.

 


클라우드 네이티브, 컨테이너, 쿠버네티스(Kubernetes) 기술이란 무엇입니까?

 

"클라우드 네이티브" 방식은 무엇을 의미합니까?

"클라우드 네이티브"라는 용어는 엔터프라이즈 조직이 비즈니스 민첩성, 확장성, 효율성 향상을 위해 대규모 디지털 혁신 프로젝트를 수행할 때 다양한 상황에서 널리 사용되고 있습니다.

이 용어는 무엇을 뜻할까요? 간단히 말해 "클라우드 네이티브" 방식은 애플리케이션이 구축, 배포, 관리되는 방식을 혁신하는 전용 기술, 툴, 프로세스와 더불와 새로운 수준의 소프트웨어 추상화를 수반합니다.

클라우드 네이티브 애플리케이션의 핵심 특징의 예는 다음과 같습니다.

  1. 코드가 컨테이너로 패키지화됨
  2. 마이크로서비스 집합으로 설계됨
  3. 긴밀하게 통합된 민첩한 방식으로 개발자와 IT 운영 팀이 협력함
  4. 탄력적인 클라우드 인프라 전반에서 배포 및 관리됨
  5. 인프라 리소스가 자동화된 정책 기반 방식으로 할당됨

클라우드 네이티브 방식이 엔터프라이즈에 주는 이점

클라우드 네이티브 여정을 시작하는 조직들은 방대한 클라우드 네이티브 생태계의 다양한 상용 오픈소스 기술과 더불어 컨테이너 및 Kubernetes를 도입하고 있습니다.

컨테이너 및 클라우드 네이티브 기술을 사용하면 조직은 애플리케이션 개발을 가속화하고, 운영 중단 없이 애플리케이션을 업그레이드하고, 효율적으로 애플리케이션을 확장하고, 다양한 환경 간에 쉽게 이식할 수 있습니다. 이러한 이점들은 궁극적으로 비즈니스 민첩성과 경쟁 우위를 향상합니다.

컨테이너 서비스는 엔터프라이즈가 직면한 몇 가지 주요 문제를 해결합니다. 어디서나 실행할 수 있고 개발자를 위한 강력한 소프트웨어 패키지를 제공하며 공급업체 중립적 패키지를 통해 서비스 업그레이드, 확장성, 가용성, 리소스 효율성을 지원합니다.  Kubernetes는 엔터프라이즈에서 일반적으로 수행되는 수동적 관리 대신 프로그래밍 가능하고 반복 가능한 방식으로 규모에 맞게 IT가 작동하는 인프라 레이어를 제공합니다. 쿠버네티스(Kubernetes)는 온프레미스와 퍼블릭 클라우드에서 배포할 수 있으므로 여러 환경에서 공통 운영 모델을 제공합니다.  이러한 특징 때문에 Kubernetes는 이러한 두 가지 환경을 활용하는 기업에게 적합한 플랫폼이 됩니다.

관련 리소스

Kubernetes 라이프사이클 관리를 간소화하는 7가지 방법

클라우드 네이티브 아키텍처

클라우드 네이티브 아키텍처는 애플리케이션을 효율적으로 확장할 수 있고 운영 중단 없이 업그레이드 가능하며 다른 환경으로 원활하게 마이그레이션할 수 있는 구성 가능한 작은 단위로 구축하기 위해 컨테이너와 Kubernetes를 사용합니다. 이 기술은 보안을 향상하고 유연한 자동화를 지원하면서 비용 효율성을 달성합니다.

온프레미스 Kubernetes 스택

이제 쿠버네티스(Kubernetes)가 실행되는 인프라부터 Kubernetes 기반으로 실행되는 서비스까지 개발자가 애플리케이션 제공 속도를 향상하기 위해 활용할 수 있는 Kubernetes 온프레미스 스택의 다양한 레이어를 살펴보겠습니다.  일부 구성 요소는 스택의 여러 부분에 포함될 수 있다는 점에 유의하십시오.  예를 들면, 하나의 Kubernetes 배포판에는 Harbor 또는 Quay와 같은 컨테이너 레지스트리가 포함될 수 있습니다. 또는, 컨테이너 레지스트리는 어느 배포판에서든 사용할 수 있는 호스팅된 서비스 또는 관리형 서비스로 제공될 수 있습니다.

컴퓨팅 플랫폼

쿠버네티스(Kubernetes)는 배포할 수 있는 위치 측면에서 매우 유연하며, 기술 혁신 덕분에 Kubernetes를 운영하는 방식과 위치를 선택할 수 있는 폭도 넓어지고 있습니다.  일반적으로 Kubernetes에는 최소한 3개의 노드가 필요하며 이러한 노드와 연결된 스토리지 사이에 완전한 네트워크 연결성이 존재해야 합니다.  현재 Kubernetes는 VMware와 같은 가상 인프라 기반으로 가장 흔히 실행됩니다.  베어 메탈과 HCI 역시 흔히 선택되는 인프라 종류입니다.

추가 기능을 통해 Kubernetes 클러스터의 프로비저닝과 운영을 더욱 용이하게 할 수 있습니다. API(예: 클러스터 API, Terraform 등)를 통해 제어되는 인프라 덕분에 쉽게 새로운 노드를 프로비저닝하고 연결할 수 있습니다.  맞춤형 하이퍼바이저는 워크로드를 격리하여 컨테이너의 보안 허점을 메울 수 있습니다.  Kubernetes 클러스터 밖에서 로드 밸런서를 사용하면 워크로드 가용성을 달성하고 동적으로 워크로드를 이동 및 확장할 수 있습니다. GPU 또는 TPU와 같은 맞춤형 하드웨어의 이점을 활용할 수 있는 워크로드도 있습니다. 그리고 여러 위치(예: 리테일 매장)에서 여러 클러스터를 운영해야 하는 경우, 기반 인프라를 위한 분산 관리 기능이 유용할 것입니다.

Kubernetes 배포판

2015년에 쿠버네티스(Kubernetes)의 첫 릴리스가 나온 이후 Kuerbetes는 폭발적으로 성장했습다. 그 결과 대규모 기술 기업과 스타트업이 제공하는 Kubernetes 배포판과 호스팅된 플랫폼이 100가지 이상 존재하게 되었습니다. 이러한 기업들은 Kubernetes의 핵심 코드를 네트워킹 스택, 클러스터 관리 툴, 로깅, 모니터링 등의 다른 프로젝트와 결합하여 배포판을 만듭니다.

컨테이너 서비스

쿠버네티스(Kubernetes) 환경을 유용하게 활용하려면 Kubernetes 이외의 추가 인프라 서비스가 필요합니다. 이러한 서비스들은 배포판으로 묶이거나 별도의 서비스로 추가되며, 컨테이너 레지스트리, 인그레스, 로드 밸런서, 시크릿 스토어, 인증서 관리자 등과 같은 기본 항목을 포함합니다.

Kubernetes에서 애플리케이션을 구축하고 배포하는 기업이 늘어나면서 이러한 기업들은 일반적으로 Kubernetes에서도 실행되는 많은 핵심 서비스에 의존하게 되었습니다.  그 예로는 데이터베이스(예: Redis, Postgres), Pub sub(Kafka), Indexing(ElasticSearch), CI/CD 서비스(Gitlab, Jenkins) 및 스토리지(Portworx, MayaData, Minio, Red Hat)가 있습니다.

많은 기업들은 고객이 선택한 Kubernetes 배포판에서 실행되는 애플리케이션을 관리 또는 지원할 수 있는 오퍼링을 개발했습니다. 가장 주목할 만한 제품은 고객의 환경에서 Porsgres 및 MS SQL을 관리형 서비스로 제공하는 Microsoft의 Azure Arc Data Services 이외에 Confluent for Kafka, Crunchy Data for Postgres, Redis Enterprise for Redis, Percona, Elasticsearch, Minio, Mayadata 등 다른 오퍼링도 많습니다.

관련 리소스

클라우드 네이티브 데이터센터를 위한 이상적인 토대 구축하기

컨테이너

컨테이너는 클라우드 네이티브 소프트웨어의 가장 작은 단위입니다. 컨테이너는 모든 디펜던시(예: 바이너리, 라이브러리)와 함께 통합된 코드 하나로 구성되며 별개의 프로세스로 실행됩니다. 이 덕분에 새로운 수준의 추상화가 가능합니다. 가상 머신(VM)이 기반 하드웨어에서 컴퓨팅 리소스를 추상화하듯이 컨테이너는 기반 운영 체제(OS)에서 애플리케이션을 추상화합니다.

컨테이너는 여러 가지 중요한 차이점 때문에 VM과 다릅니다. 컨테이너는 리소스 상면이 훨씬 더 작으며, 더 빨리 스핀업할 수 있고, 훨씬 더 쉽게 클라우드 환경 간에 이식할 수 있습니다. VM과 다르게 컨테이너는 수명이 짧습니다.

컨테이너는 마이크로서비스 소프트웨어 아키텍처의 길을 엽니다. 레거시 애플리케이션은 기본적으로 모놀리식이지만, 마이크로 서비스 기반 애플리케이션은 독립적으로 확장할 수 있고 운영 중단 없는 업그레이드를 지원하는 구성 가능한 작은 단위(서비스)의 집합으로 구축됩니다. 컨테이너 서비스는 공통된 기능을 수행하는 하나 이상의 컨테이너로 구성됩니다.

컨테이너화된/마이크로서비스 기반 애플리케이션은 개발자와 DevOps라는 IT 운영 팀 사이의 긴밀한 통합과 조율을 요구하는 효율화되고 가속화된 소프트웨어 개발 방법을 지원합니다.

그림 1: VM 및 컨테이너 비교

Kubernetes

컨테이너화된 애플리케이션은 분산 환경에 적합하고 레거시 애플리케이션과 다른 방식으로 컴퓨팅, 스토리지, 네트워크 리소스를 사용하므로 컨테이너화된 워크로드의 오케스트레이션을 전담하는 인프라 레이어가 필요합니다.

쿠버네티스(Kubernetes)는 지배적인 컨테이너 오케스트레이터로 부상했으며 클라우드의 운영 체제로 간주되는 경우가 많습니다. Kubernetes는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식 및 확장 가능한 오픈소스 플랫폼으로 선언적 구성과 자동화를 모두 촉진합니다.

구체적으로 Kubernetes는 다음과 같은 작업을 수행합니다.

  • 컨테이너를 머신에 할당(스케줄링)
  • 컨테이너 런타임을 통해 지정된 컨테이너 부팅
  • 시스템 업그레이드, 롤백을 담당하고 끊임없는 변화에 대처
  • 장애(예: 컨테이너 운영 중단 등)에 대응
  • 서비스 검색, VM 간 네트워킹, 클러스트 수신/송신 등 클러스터 리소스 생성

Kubernetes는 확장성, 가용성, 보안, 이식성을 위해 설계되었습니다. Kubernetes는 가용 리소스 전반에 워크로드를 분산하여 인프라 비용을 최적화합니다. Kubernetes 클러스터의 각 구성 요소는 고가용성을 위해 구성할 수도 있습니다.

활발하게 활동 중인 글로벌 커뮤니티의 지속적인 기여 덕분에 Kubernetes 기능은 급속도로 진화하고 있으며, 현재 사용자가 사용할 수 있는 다양한 Kubernetes 배포판이 존재합니다. 사용자는 CNCF 인증 배포판을 가장 유용하게 사용할 수 있지만, 스토리지, 네트워킹, 보안, 모니터링 기능을 쉽게 통합하여 Kubernetes 라이프사이클 관리 기능을 통해 지능적 자동화를 달성하는 것이 프로덕션급 클라우드의 네이티브 환경에 필수적으로 필요합니다.

'클라우드 네이티브' 방식으로 전환할 경우 발생하는 문제

클라우드 네이티브 기술은 비즈니스 민첩성과 혁신의 새로운 물결을 대변하지만 이러한 기술의 구성, 배포, 관리는 어떤 유형의 엔터프라이즈에게든 어려운 일입니다. 첫째, 쿠버네티스(Kubernetes) 및 클라우드 네이티브 기술 생태계는 매우 심층적이며 빠르게 진화합니다. 또한, 레거시 인프라는 Kubernetes와 컨테이너가 IT 리소스를 사용하는 방식에 적합하게 설계되지 않았습니다. 이 점은 소프트웨어 개발자에게 상당한 장애물로 작용합니다. 이러한 소프트웨어 개발자는 클라우드 네이티브 애플리케이션에 사용하기 쉬운 서비스와 더불어 필요에 따라 리소스를 원하는 경우가 많습니다. 마지막으로, 모든 조직은 온프레미스 및 퍼블릭 클라우드를 모두 사용하는 Kubernetes 환경을 활용하게 됩니다. 그러나 멀티클라우드의 유연성을 유용하게 활용하려면 모든 환경을 효과적으로 관리하고 모니터링할 수 있어야 합니다.

모범적인 클라우드 네이티브 지침

데이터센터에 엔터프라이즈 쿠버네티스(Kubernetes) 스택을 구축하는 일은 IT 운영 팀의 주된 업무입니다. 이 작업은 회복력이 뛰어나고 동적인 분산 시스템에 맞게 확장되는 인프라에서 Kubernetes 및 컨테이너화된 애플리케이션을 실행하는 데 필수적입니다.

Nutanix 하이퍼컨버지드 인프라(HCI)는 규모에 맞게 Kuberbetes에서 실행되는 클라우드 네이티브 워크로드에 적합한 인프라 토대를 제공합니다.Nutanix는 Kubernetes 플랫폼 구성 요소와 애플리케이션 데이터에 더 나은 회복력을 구현하고 베어 메탈 인프라에 뛰어난 확장성을 제공합니다. Nutanix는 또한 인프라 스테이트풀 컨테이너를 위한 라이프사이클 관리 및영구 스토리지를 간소화하여 클라우드 네이티브 인프라를 배포하고 관리할 때 조직이 직면하는 가장 어려운 문제 중 일부를 해결합니다.


HPE - 클라우드 네이티브란? 클라우드 네이티브 애플리케이션이란?

클라우드 네이티브 애플리케이션은 애플리케이션에서 클라우드 환경을 활용하여 생산성을 높이는 최신 애플리케이션 개발 방식입니다. 전체 애플리케이션은 이러한 방식으로 작성, 개발, 배포되며 지속적으로 업데이트될 수 있습니다.

 

기업에서 클라우드 네이티브를 사용해야 하는 이유

기존의 애플리케이션 개발 주기(예: 워터폴 모델)는 프로세스 전반에 걸쳐 지연을 초래하는 경우가 많습니다. 그러나 클라우드 환경은 애플리케이션 개발자가 분석에서 구현, 테스트, 유지관리에 이르기까지 상조적으로 작업할 수 있도록 지원합니다.

기업과 개발자의 경우 개발 시간이 단축될 뿐만 아니라 상당한 비용을 절감할 수 있습니다. 클라우드에서 간단히 스테이징 환경을 프로비저닝할 수 있으며 온프레미스 환경에 비해 비용이 적게 듭니다. 클라우드 환경은 자동화된 툴 모음을 제공하여 적시에 디버깅 또는 코드 무결성 확인 속도를 높이며 여러 장치에서 동시에 테스트를 진행할 수 있습니다. 업데이트 및 지속적인 유지관리는 백그라운드에서 배포됩니다.

클라우드 네이티브의 이점

레거시 애플리케이션은 사용자의 하드 드라이브에 저장되었지만 지난 10년 간 모바일, 컴퓨팅 및 클라우드 기술이 급속도로 발전하여 개발자와 사용자 모두 클라우드 네이티브 애플리케이션으로 더 쉽게 마이그레이션할 수 있게 되었습니다. 웹 브라우저에 지나지 않는 사용자의 하드웨어는 효과적으로 입/출력 장치가 되며 여러 CPU 집약적 프로세스가 클라우드에서 발생하도록 합니다. 일부 클라우드 애플리케이션은 항상 인터넷에 접속할 필요가 없습니다.

90%의 애플리케이션이 이미 클라우드에서 개발되고 있는 것으로 추정됩니다. 비용 절감, 개발 및 구축 속도 향상, 온라인 툴 모음 등의 이점을 고려하면 클라우드 애플리케이션 환경은 먼 미래의 일이 아닙니다. 이미 실현되고 있습니다.

클라우드 네이티브 애플리케이션 개발 방식

클라우드 네이티브 애플리케이션을 구축하고 유지하려면 기존의 접근 방식을 재고하고 클라우드 네이티브 아키텍처의 원리를 이해해야 합니다. 개발자와 IT 운영 부서의 협업을 통해 위험을 줄이고 지속적인 피드백을 제공하면서 일관되게 증가하는 업데이트를 제공할 수 있습니다.

클라우드 네이티브 애플리케이션의 개발 작업은 여전히 기존의 소프트웨어 개발 라이프 사이클과 많은 측면에서 궤를 같이 합니다. 계획, 분석, 설계 등 모든 기본 사항이 일치합니다. 프로토타이핑, 알파 테스트 및 베타 테스트, 그리고 궁극적으로 배포가 있습니다. 그러나 계층 간의 원활한 통합과 시너지는 10년 전만 해도 불가능했던 속도와 다양성을 실현합니다.

모든 애플리케이션이 그렇듯, 여전히 써야 할 라인과 코드 라인이 많지만, 실시간 디버깅과 데이터 무결성 툴은 개발 속도와 민첩성에 혁신을 불러일으켰습니다. 여러 팀이 전 세계 어디에서나 코드의 다른(또는 동일한) 부분에서 동시에 작업할 수 있습니다. 또한 테스트를 위해 버전을 컴파일하는 작업은 클라우드의 처리 기능으로 수행할 수 있으며 거의 즉각적으로 다른 팀원들과 공유됩니다.

일반적인 클라우드 기반 애플리케이션을 통해 여러 팀원이 완료되는 대로 애플리케이션으로 관리 및 컴파일할 수 있는 개별화된 소규모 작업과 프로세스에 집중하는 “작은 배치 사고”의 이점을 누릴 수 있습니다. 클라우드에서 애플리케이션을 개발하는 것은 속도, 협업, 온라인 툴의 이점뿐만 아니라 확장성, 민첩성, 보안 측면에서도 이점을 얻을 수 있어 개발자들에게 인기가 있습니다.

클라우드 네이티브 애플리케이션과 기존 애플리케이션의 비교

클라우드 네이티브 애플리케이션의 중요한 두 가지 측면은 구축 속도와 최종 사용자호환성의 대폭적인 향상입니다. 개발자는 더 이상 서로 다른 운영 체제의 여러 버전에서 일관되게 사용할 수 있고 호환되는지 걱정할 필요가 없습니다. 데스크탑 및 모바일 OS는 이제 거의 매일 업데이트되며, 이전에 여러 번 반복한 작업은 안정적이거나 호환되기까지 한 단계 차이가 날 수 있습니다.

비네이티브 브라우저 기반 애플리케이션이 클라우드에서 제공되기 때문에 개발자들은 사용자가 호환되는 브라우저를 실행하는 한 하드웨어와 운영 체제 호환성에 대해 더 이상 걱정할 필요가 없습니다. 운영 체제와 브라우저 또한 클라우드 기반 배포(그리고 사용자가 백그라운드에서 업데이트를 선택하는 경우가 많음)의 이점 덕분에 가능한 모든 하드웨어와 운영 체제 구성을 예상하는 작업이 이전보다 훨씬 간단해집니다.

두 번째 주요 이점은 신속하고 원활하게 업데이트를 배포할 수 있다는 점입니다. 다시 말하지만, 사용자는 이러한 작업이 백그라운드에서 실행되도록 선택하는 경우가 많습니다. 사실 대부분은 때때로 알리는 것 외에는 알아차리지도 못합니다. 대규모 모놀리식 애플리케이션은 일반적으로 업데이트되기 전에 많은 변경 및 테스트가 필요합니다. 모든 것이 클라우드의 속도에 맞춰 진행되므로 개발자와 사용자 모두가 상당한 이점을 누릴 수 있습니다.

마지막으로 장치에서 장치로, 직장에서 가정으로, 또는 태블릿에서 PC로 이동할 수 있다는 점은 개발자와 기업뿐만 아니라 사용자에게도 엄청난 유연성을 제공합니다.

클라우드 네이티브 애플리케이션이 중요한 이유

클라우드 네이티브 애플리케이션의 주요 이점은 개발 및 릴리스 속도, 비용 절감, 관리 용이성입니다. 클라우드 네이티브는 더 안정적이고 신뢰할 수 있는 구축, 끝없는 확장성 및 자동 프로비저닝과 결합되어 애플리케이션의 작성, 테스트, 업데이트, 구현 방식에 있어 중요한 단계였습니다.

클라우드 네이티브로 생산성, 안정성, 속도 향상

클라우드에서 작업하는 조직의 경우 기존 또는 로컬 애플리케이션에 비해 네이티브 애플리케이션이 직원의 생산성을 크게 향상합니다. 애플리케이션을 최신 상태로 유지하는 것이 간단하고 자동화되며 인프라 관리가 훨씬 더 용이해집니다. 안정성, 속도, 비용 절감으로 엄청난 이점을 얻을 수 있습니다. 마지막으로 클라우드 네이티브 애플리케이션을 이용하면 사용자는 필요에 따라 동적으로 추가 컴퓨팅 리소스에 액세스할 수 있습니다. 특히 집약적인 프로세스에 더 많은 스토리지 또는 CPU 코어가 필요한 경우 클라우드 관리 소프트웨어가 이러한 리소스를 추가만 하면 됩니다. 

기존 모델 애플리케이션의 제한

클라우드 기반 애플리케이션으로 디지털 트랜스포메이션 과정이 계속해서 발전함에 따라 기존 모델 애플리케이션의 내재적 한계가 점점 더 분명해지고 있습니다. 또한 모델 렌더링 및 시청각/그래픽 제작과 같은 애플리케이션에서 리소스가 점점 더 많이 필요하게 됨에 따라 클라우드를 통해 필요한 컴퓨팅 성능에 액세스할 수 있다는 점이 더욱더 인기를 끄는 장점이 되고 있습니다.

클라우드 네이티브가 사용되는 방식

최신 클라우드 네이티브 애플리케이션의 몇 가지 예는 쉽게 찾을 수 있습니다. 심지어 노트북 컴퓨터도 이제는 터미널과 인터넷 연결 정도만 제공되어 파일 저장과 애플리케이션이 거의 완전히 가상 환경에서 실행됩니다.

브라우저 기반 이메일 및 생산성 애플리케이션은 클라우드 네이티브 애플리케이션의 좋은 예입니다. 점점 더 많은 사용자가 워드 프로세싱 또는 스프레드시트를 위한 독점 데스크탑 애플리케이션에서 멀어지고 있습니다. 잘 알려진 소프트웨어 패키지도 이제 완전히 브라우저를 통해 액세스할 수 있습니다.

개발자와 IT 전문가의 경우 마이그레이션에서 훨씬 더 큰 이점을 얻을 수 있습니다. 최신 클라우드 아키텍처는 많은 프로세스를 클라우드에서 실행할 수 있도록 많은 기능을 개방하고 있습니다. AI 지원 분석 및 툴은 로컬 리소스를 확보하고 유지관리를 훨씬 쉽게 만듭니다.

스프레드시트 작성, 이메일 확인, 애플리케이션 개발 및 테스트(또는 휴식과 온라인 게임) 등 클라우드 네이티브 애플리케이션은 매일 새로운 방식으로 사용자와 기업의 역량을 강화합니다.

HPE 및 클라우드 네이티브 애플리케이션

IT 전문가는 HPE의 GreenLake 및 Ezmeral 환경을 통해 더 많은 작업을 손쉽게 수행할 수 있습니다. 거의 모든 종류의 비즈니스 또는 조직을 위해 빠르게 성장하고 있는 전문 애플리케이션 제품군인 HPE GreenLake는 온프레미스, 엣지 또는 모든 조합에서 실행할 수 있는 서비스형 플랫폼을 통해 디지털 트랜스포메이션을 실현할 수 있는 다양하고 탄력적인 기반을 제공합니다.

예를 들어, 수상 경력에 빛나는 HPE의 Ezmeral은 기존의 애플리케이션 및 클라우드 네이티브 애플리케이션 개발을 통합하는 데 중요한 역할을 해 온 대중적인 오픈 소스인 Kubernetes를 중심으로 구축되었습니다. 개발자들을 위해 Ezmeral은 신속한 개발, 확장 가능한 아키텍처, 코드 병합, 자동 배포가 가능한 완전히 새로운 방법을 도입했습니다. Ezmeral Data Fabric은 데이터 사일로를 없애고 전 세계의 엑사바이트 규모의 데이터를 관리하고 분석할 수 있도록 지원합니다.

HPE Aruba Networking은 또 다른 인기 있는 애플리케이션으로, 업계를 선도하는 엣지 인프라, 더 나은 엣지 투 클라우드 통합, AI 기반 네트워크 모니터링 및 관리 기능을 제공합니다. 최근에 추가된 Ampool은 엔지니어와 분석가를 위해 탁월한 SQL 분석 결과를 제공합니다. HPE GreenLake는 클라우드 기반 데이터 보안 및 무결성의 모든 이점을 제공하여 기업과 고객 모두가 업계 최고 수준의 원활한 상호 작용을 경험할 수 있도록 지원합니다.


클라우드 네이티브의 진정한 의미

Lee Atchison  | InfoWorld2022.08.03
제조업에서 운송업, 소매업에 이르기까지 사실상 모든 업종에서 클라우드 기반 인프라로 전환하여 디지털 트랜스포메이션을 지원하고 있다. 사내 소프트웨어에서 클라우드 서비스로의 전환은 애플리케이션 개발 및 배포 프로세스, 특히, SaaS 애플리케이션으로 혁신적으로 변화했다. 하지만 클라우드를 자주 사용하는 것만으로는 충분하지 않다. 클라우드 네이티브 애플리케이션을 활용해 향상된 민첩성, 가용성, 확장성 및 전체 성능을 활용할 수 있어야 한다.

클라우드 네이티브 아키텍처는 현대 소프트웨어 개발의 표준이 되었다. 그러나 그 인기와 함께 불확실성도 나타났다. 애플리케이션이 클라우드 네이티브라는 것이 정확히 어떤 의미일까? ‘클라우드 네이티브’에 대한 정의는 오늘날 운영되는 클라우드 네이티브 애플리케이션의 수만큼 다양하다. 그러나 클라우드 네이티브 애플리케이션을 구축하고자 할 때 유용한 몇 가지 표준적이고 이해하기 쉬운 원칙이 있다.
 
ⓒ Getty Images Bank 

클라우드 네이티브의 의미

클라우드 네이티브 애플리케이션은 클라우드의 동적이면서 확장적이고 매우 가용적인 속성을 지도 원칙으로 하여 구축된 소프트웨어 시스템이다. 클라우드 네이티브 애플리케이션 아키텍처는 소프트웨어 개발자가 기존 접근 방식을 사용할 때 직면하는 과제에 대한 대응이다. 특히 클라우드 네이티브 애플리케이션은 다음과 같다. 
 
  • 클라우드의 역동적인 리소스 할당을 활용. 즉, 애플리케이션의 설치 공간은 현재 애플리케이션에 주어진 수요에 따라 크기가 달라지며, 소비된 리소스는 현재 시점에 필요한 리소스에 맞게 조정될 것이다.
  • 서비스 또는 마이크로서비스 아키텍처 활용. 마이크로 서비스를 사용하면 애플리케이션 크기와 복잡성을 관리하기 쉬운 방법으로 쉽게 확장할 수 있다.
  • 컨테이너화. 컨테이너를 사용하면 복잡한 종속성 관리에 대한 우려없이 서로 다른 환경에서 빠르고 쉽게 서비스를 배치할 수 있다.
  • 쿠버네티스를 사용하여 서비스를 조율. 컨테이너 오케스트레이션 및 관리를 위한 사실상의 표준인 쿠버네티스는 컨테이너를 시작하고, 컨테이너 간의 통신을 설정하고, 장애를 모니터링하며, 필요에 따라 컨테이너를 재시작하고, 현재 사용 사례의 필요에 따라 애플리케이션의 크기를 조정한다. 쿠버네티스는 클라우드와 긴밀하게 협력하여 동적으로 크기가 맞춰진 애플리케이션과 서비스를 만든다.
  • 클라우드 관리 데이터베이스 및 기타 데이터 서비스의 데이터를 저장 및 관리. 애플리케이션 요구사항을 충족하고 대량의 데이터를 쉽게 사용할 수 있도록 자동으로 확장되는 클라우드 최적화 데이터 서비스는 클라우드 네이티브 애플리케이션의 표준 요구사항이다.
  • 현대적 개발 및 운영 워크플로우를 사용. 데브옵스, 지속 통합 및 연속 전달(CI/CD), 깃 소스 코드 관리 및 유사한 프로세스와 절차가 포함된다.

또한 모든 클라우드 네이티브 애플리케이션은 아니지만 많은 애플리케이션이 클라우드에 구애받지 않도록 설계되거나 적어도 새로운 클라우드 공급자로 합리적으로 마이그레이션할 수 있다. 경우에 따라 클라우드 네이티브 애플리케이션은 하이브리드 클라우드 또는 멀티 클라우드 환경에서 작동한다.
 

왜 클라우드 네이티브 아키텍처를 사용하는가?

클라우드 네이티브 애플리케이션 개발 및 운영 프로세스와 절차는 최신 애플리케이션 경험의 중요한 측면을 강조하기 때문에 동종 최고의 최신 애플리케이션을 만들어 낸다.
 
  • 자동화. 많은 IT 리소스가 수동적이고 반복적인 작업에 낭비될 수 있다. 여기에는 배포 관리, 테스트 제품군 실행, 하드웨어 추가/수정/업그레이드/해제와 같은 작업이 포함된다. 이러한 작업을 자동화하면 시간과 비용을 많이 절약할 수 있어 규모에 관계없이 비즈니스에 큰 이점이 있다. 클라우드 네이티브 원칙을 사용하여 애플리케이션을 구축하면 개발 및 운영 환경을 자동화하는 프로세스가 자연스럽게 진행된다.
  • 민첩성. 민첩성은 변화를 신속하게 식별하고 대응하는 능력이다. 이것은 현대 비즈니스 환경에서 중요한 기술이다. 클라우드 네이티브 애플리케이션을 구축 및 운영하는 조직은 변화하는 비즈니스 및 기술 조건에 보다 신속하고 효과적으로 대응하고 보다 민첩하게 운영된다. 이 중 많은 부분이 클라우드 네이티브 아키텍처의 동적 특성에서 나온다.
  • 확장성. 비즈니스가 성장함에 따라 애플리케이션의 리소스 요구사항도 증가한다. 사용량이 가장 많은 날에 발생하는 것과 같이 사용량이 급증하면 기존 애플리케이션 인프라가 크게 파괴될 수 있다. 고도로 동적인 클라우드 인프라를 통해 애플리케이션을 더 자동화되고 관리가능한 방식으로 확장할 수 있다. 그러나 이러한 클라우드 역동성은 공짜가 아니다. 동적 리소스 할당이 제대로 활용되도록 애플리케이션을 구축해야 한다. 클라우드 네이티브 애플리케이션은 이러한 동적 리소스를 위해 설계된다.
  • 가용성. 가용성은 애플리케이션 중단, 유지보수 또는 업그레이드 절차로 인해 애플리케이션을 사용할 수 없는 것이 아니라 고객이 애플리케이션을 사용할 수 있는 시간의 비율을 측정한 것이다. 낮은 가용성은 일반적으로 심각한 고객 만족 문제가 된다. 높은 가용성을 유지하는 것은 고객 만족과 그에 따른 비즈니스 성장에 결정적이다.
  • 자동 복원성. 애플리케이션 고장 및 장애가 발생하면, 문제를 해결하고 신속하게 정상 작동으로 돌아갈 수 있어야 한다. 복구가 자동화될수록 애플리케이션이 더 빨리 정상 운영으로 복귀할 수 있으며, 직원, 고객 및 비즈니스 전반에 대한 파괴적인 문제들도 줄어든다. 자동화된 복구는 고객에게 높은 수준의 서비스를 유지하도록 돕는다. 실패가 발생할 시점을 예측할 수 없지만, 실패에 대한 애플리케이션을 준비할 수 있다. 애플리케이션과 애플리케이션 인프라 모두에서 내결함성 설계 및 장애극복 메커니즘을 사용하면 복원력을 크게 향상시키고 그에 따라 가용성을 크게 높일 수 있다. 클라우드 네이티브 아키텍처는 최신 애플리케이션에서 자동 복원력을 장려하고 활용한다.
  • 지속적 통합/지속적 배포(CI/CD). CI/CD는 구축, 테스트 및 배포를 자동화하여 소프트웨어가 개발 시스템에서 실제 제작 시스템으로 보다 빠르고 안정적으로 이동할 수 있도록 하는 소프트웨어 전달 프로세스다. 또한, 우수한 CI/CD 전략으로 애플리케이션 다운타임 없이 실행 중인 애플리케이션에 대한 변경 사항을 배포하고, 비즈니스 민첩성, 소프트웨어 품질 및 고객 반응성을 개선할 수 있다.

CI/CD가 없으면 일부 기업은 새 소프트웨어 버전을 배포하는 데 몇 주 또는 몇 달을 기다려야 한다. 고품질 CI/CD 시스템을 통해 클라우드 네이티브 애플리케이션을 매일, 매시간 또는 더 빠르게 배포할 수 있다. 아마존과 같은 기업은 시간당 수백 또는 수천 개의 업데이트 속도로 소매 애플리케이션을 변경하는 것으로 유명하다(달리 말해, 아마존은 1.6초마다 소프트웨어를 배포한다). 하지만 클라우드 네이티브 애플리케이션을 사용하고 구축을 완료할 때 애플리케이션을 중단하지 않아도 되는 견고하고 자동화된 CI/CD 프로세스를 보유한 경우에만 가능하다.

클라우드 네이티브 아키텍처로 마이그레이션하면 많은 이점이 있다. 클라우드 네이티브 애플리케이션은 자동화, 민첩성, 확장성 및 자동 복원력을 활용한다. 또한, 지속적인 배포와 내구성을 달성할 수 있도록 지원한다. 이러한 혜택은 모든 유형의 비즈니스에 적용될 수 있다. 클라우드 네이티브 원칙과 기법을 사용하여 소프트웨어를 개선하고 비즈니스를 더욱 효율적으로 만들 수 있다. 가장 중요한 것은 클라우드 네이티브 아키텍처를 통해 민첩성이 향상되어 빠르게 변화하는 경제 상황에서 비즈니스 경쟁력을 유지할 수 있다는 점이다.
editor@itworld.co.kr



원문보기:
https://www.itworld.co.kr/news/248260#csidx8fc6f61e340f5ad8357026caa6c52d1 

반응형

아이가 쓰던 노트북을 쓰기로 했다.

속도는 별로.. 요즘 컴퓨터가 아니고, 한 7~8년 정도 된

LG 15N53,

정확하게 언제 샀는지 기억나지 않는다.

컴퓨터의 큰 성능이 필요한 작업이 아직 없기에 일단은 버텨보려 한다.

그 대신 키보드, 마우스는 좋은 걸 사용하기로...

현 최저가 25만원하는  alienware 420k,

우연한 기회로 얻게 되었는데, 팔까말까 고민하다가, 그냥 내가 쓰기로...

마우스  ms3230w, 35,000원으로..

가격비교 해보니, 마우스 < 노트북 < 키보드 순이다.

반응형

+ Recent posts