Cloud Native

김승윤·2021년 10월 25일
0
post-custom-banner

클라우드 네이티브

정의

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

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

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

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

요소

  • 클라우드 컴퓨팅 : IT 리소스를 인터넷을 통해 on-demand로 제공하고 사용한 만큼만 비용을 지불하는 것.

    • Public Cloud : 인터넷을 통해 불특정 다수에게 제공하는 클라우드 서비스 자사에 데이터센터를 두지 않기 때문에 서버와 네트워크 등 인프라 관련 초기 투자가 필요없다. 제공하는 서비스에 따라 IaaS, Paas, SaaS 등으로 나뉘며 인프라를 서비스 형태로 이용하는 것을 IaaS라 한다.
    • Private Cloud : 특정 기업 그룹에만 제공하는 클라우드 서비스. 예를 들어 그룹사 내에서 데이터센터를 공동으로 사용하는 것도 가능하다. Public에 비해 Private은 특정한 사용자에게만 제공하기 때문에 보안을 확보하기 쉽고 독자적인 기능과 서비스를 추가하기에 용이하다.
  • 컨테이너 기반 인프라스트럭처 : 컨테이너 인프라는 가상화 기술 중 하나로 시스템을 가상화하는 것이 아니라 애플리케이션 운영작업을 가상화한 것으로 기존의 하이퍼바이저 기반의 가상화 기술보다 오버헤드가 적고 인프라의 일관성을 유지할 수 있으며, 블루/그린 배포와 같은 소프트웨어의 안전한 배포 및 운영을 가능하게 해주는 기술이다.

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

  • CICD 지원 DevOps 프로세스 : CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법이다. CI/CD의 기본 개념이 지속적인 통합, 지속적인 제공, 지속적인 배포이다. DevOps는 애플리케이션 개발에서 운영까지 협업 프로세스를 자동화하는 것을 말하며 결과적으로 애플리케이션의 개발과 개선 속도를 빠르게 한다.

클라우드 네이티브 애플리케이션으로 적합한 서비스

  • 디플로이 요구가 빈번하고 지속적인 개발

  • e-비즈니스 웹사이트 프로젝트

  • 클라우드 플랫폼

클라우드 네이티브에 적합하지 않은 서비스

  • 치명적으로 중요성이 높은 응용프로그램(금융, 전력시스템)

  • 높은 완결성을 필요로 하는 서비스(패키지, 제조, 건설)

시대적으로 변화되는 애플리케이션 개발환경과 인프라 구조

Native APPWeb APPCloud Native App
애플리케이션 개발방법론WaterfallAgileDevOps
애플리케이션 운영구조모놀리식멀티티어마이크로서비스
애플리케이션 운영 인프라물리서버가상서버컨테이너

===============생산성과 민첩성===============>

애플리케이션 개별환경과 인프라 구조

애플리케이션 개발 방법론

  • waterfall : 요구분석, 설계, 디자인, 코딩, 개발의 과정으로 순차적으로 한 단계씩 진행하는 개발 방법론

  • 애자일 : 긴민한, 좋은 것을 빠르게 낭비없이 만든다.

    • 일정주기를 가지고 끊임없이 프로토타입을 만들어 그때그때 필요한 요구를 더하고 수정한다.
    • 짧은 반복을 통해서 적합한 제품 테스트에 중점을 두는 개발 방법론
  • DevOps : 개발과 운영을 같이 한다.

    • 기획-개발-테스트-유지보수의 전반적인 이슈를 공유하고 CICD의 자동화 릴리즈 관리를 용이하게 하는 방법론
    • SW와 서비스를 빠른 시간에 개발 및 배포하는 것을 목표로 함
    • 자동화된 라이프 사이클
    • 특징
      • 개발자가 직접 배포하므로 여기에서 발생되는 문제점을 바로 파악하고 적용할 수 있어 서비스의 안정화가 가속화
      • 개발자는 기본 인프라와 시스템 구성에 대한 이해가 필요하지만 이를 최소화 하여 개발에 집중할 수 있는 플래폼이 요구
      • 개발자가 운영팀의 도움 없이 스스로가 app를 원하는 시기에 자주 배포할 수 있는 환경을 지원
      • 시스템 관리자에게는 하드웨어 장애시 서비스를 자동으로 재배치하므로 물리적 인프라 관리 영역에 집중
      • 물리적 인프라를 클라우드 기반으로 운영시 traffic 수요에 빠르게 대응하도록 더욱 효과적이고 탄력적인 운영 효율성을 기대

애플리케이션 비즈니스 로직의 변화

  • 모놀리식 : 애플리케이션의 모든 기능을 다 묶어서 운영하는 구조. 고객의 요구가 다양하고, 라이프 사이클이 짧은 지금의 애플리케이션 서비스의 경우, 각 기능 기능들을 빠르게 개선 해야하고 이들을 연결해서 배포해야 하는데 모놀리식은 이러한 민첩성이 떨어지는 단점이 있다.

  • 멀티티어 : 애플리케이션을 여러 계층으로 나눠서 개발을 하고 이들을 연결해서 하나의 통합된 서비스를 만드는 아키텍쳐

  • 마이크로 서비스 : 애플리케이션 구축을 위한 아키텍쳐 기반의 접근 방식. 전통적인 모놀리식과는 다르게 애플리케이션을 핵심 기능으로 세분화하여 각각을 독립적으로 구축하고 배포할 수 있다. 이는 개별 서비스가 다른 서비스에 영향을 주지 않으며, 독립적 개선이 가능하다는 의미를 가진다.

    • 특징
      • 각각 자체 프로세스에서 실행
      • HTTP 기반 API로 통신
      • 자동화된 배포머신을 통해 독립 배포
      • 중앙 집중식 관리를 최소화
      • 서로 다른 프로그래밍 언어로 개발 가능
      • 서로 다른 데이터 저장 기술을 사용 가능
    • 장점
      • 서비스 별 개별 배포가 가능
      • 배포시 전체 서비스의 중단이 없음
      • 특정 서비스, 기능의 확장성이 용이
      • 장애가 발생할 경우, 전체 서비스에 영향을 끼치는 부분이 적음
    • 단점
      • 기능 단위 시스템이 많아져, 인터페이스의 수가 늘어나게 되어 오류 발생 확인이 어려움
      • 서비스가 분리되어 있기 때문에 테스트와 트랜젝션이 복잡
      • 데이터가 여러 서비스에 분산되어 있기 때문에 관리가 어려움

애플리케이션 운영 인프라

  • 물리서버

  • 가상서버

  • 컨테이너 : 호스트 OS상에 논리적인 구획을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아 마치 별도의 서버인 것처럼 사용할 수 있게 만든 기술. 컨테이너 엔진을 이용하면 호스트 OS의 리소스를 논리적으로 분리시키고, 여러 개의 컨테이너가 공유하여 사용할 수 있다.

    • 컨테이너는 가상머신에 비해 오버헤드가 적기 때문에 가볍고 고속으로 작동
    • MSA(Micro Service Architecture) 환경의 Polyglot 애플리케이션 운영
      • Polyglot : 여러 개의 언어(node.js, python, java...)를 사용하는 것
post-custom-banner

0개의 댓글