티스토리 뷰
몇 년 전만 하더라도 대부분의 소프트웨어 애플리케이션은 하나의 프로세스 또는 몇 개의 서버에 분산된 프로세스로 실행되는 거대한 모놀리스(monolith)였습니다. 이런 레거시 시스템은 릴리스 주기가 느리고 비교적 업데이트가 자주 되지 않습니다. 요즘은 점차 마이크로서비스라는 독립적으로 실행되는 더 작은 구성 요소로 세분화되고 있습니다. 마이크로서비스는 개별적으로 개발, 배포, 업데이트를 확장할 수 있고 오늘날 급변하는 비즈니스 요구 사항을 충족시킬 만큼 신속하게 자주 구성 요소를 변경할 수 있습니다.
-
모놀리스 애플리케이션
모든 것이 서로 강하게 결합돼 있고, 전체가 하나의 운영체제 프로세스로 실행되기 때문에 하나의 개체로 개발, 배포, 관리돼야 합니다. 애플리케이션의 한 부분을 변경하더라도 전체 애플리케이션을 재배포해야 하며, 시간이 지남에 따라 구성 요소 간의 경계가 불분명해지고 상호의존성의 제약이 커지면서 전체 시스템의 복잡성이 증가하고 품질이 저하됩니다.
-
마이크로서비스 아키텍처(Microservice Architecture)
하나의 모놀리틱한 애플리케이션을 핵심 기능으로 세분화 한 것입니다. 여러개의 서비스들로 이루어져 있으며, 각각은 RESTful API 등을 이용해서 통신을 합니다. 서비스별로 다른 기술 스택을 사용할 수 있기 때문에 적재적소에 알맞은 기술을 선택할 수 있는 장점이 있습니다. 또한, 대체로 정적인 외부 API를 제공하는 독립형 프로세스이기 때문에 개별적으로 개발, 배포할 수 있습니다. 마이크로서비스 확장은 서비스별로 수행되므로 리소스가 더 필요한 서비스들만 별도로 확장할 수 있으며, 다른 서비스들은 그대로 둬도 됩니다.
단점: 시스템이 소수의 구성 요소로만 구성되면 구성 요소를 쉽게 관리할 수 있습니다. 각 구성 요소를 어디에 배포할지 결정하는 일은 선택사항이 많지 않기 때문에 간단합니다. 하지만 구성 요소가 많아지면 배포 조합의 수뿐만 아니라 구성 요소 간의 상호 종속성 수가 훨씬 더 많아지므로 배포 관련 결정이 점점 어려워지고 여러 프로세스와 시스템에 분산돼 있기 때문에 실행 호출을 디버그하고 추적하기 어렵습니다.
-
Kubernetes
서버 배포를 자동으로 스케줄링하고 구성, 관리, 장애 처리를 포함하는 자동화가 필요합니다. 이것이 바로 Kubernetes가 등장한 이유입니다. 개발자가 운영 팀의 도움 없이도 자신의 애플리케이션을 원하는 만큼 자주 배포할 수 있도록 해줍니다. 하드웨어 장애 발생 시 해당 애플리케이션을 자동으로 모니터링하고 스케줄링을 조정해 운영팀을 도와주고 애플리케이션의 다른 구성 요소를 쉽게 찾고 통신할 수 있도록 하게 만들어줍니다. Kubernetes는 리눅스 컨테이너 기술을 사용합니다. 컨테이너 오케스트레이션 영역에서 거의 표준으로 자리 잡은 오픈소스 시스템입니다. Kubernetes를 사용하게 되면 여러대의 노드를 하나의 클러스터로 묶어서 사용가능하게 됩니다. 컨테이너는 호스트 OS에서 실행되는 하나의 격리된 프로세스에 지나지 않으며, 애플리케이션이 소비하는 리소스만 소비하고 추가 프로세스의 오버헤드는 없습니다.
-
Cloud native infra
Cloud 컴퓨팅의 모델의 장점을 모두 활용해서 어플리케이션을 개발하고 실행하는 접근방식입니다. Public, Private, Hybird Cloud 기반 위에 Scalable 한 Application을 구성하기 위한 방법으로써 Container, Service Mesh(Service 간 상호 연결 및 통신 수단), Microservice, Immutable Infrastructure(service에 대한 배포/운영 및 인프라 관리 수단), Declarative API가 대표적으로 쓰입니다. 즉, Serverless 기반 운영환경의 간소화, 최적의 자원 사용, 독립적 설계, 그속에서 유연성을 확보, 자동화 배포방식을 사용하여 서비스 제공의 가속화를 제공할 수 있습니다. 그리하여 서비스 관점에서 보자면 고객들의 개인화된 맞춤 서비스에 대응하기 위해 최적화된 데이터 기반한 infra 라고 할 수 있겠습니다.
'DevOps' 카테고리의 다른 글
Gitlab root password 변경 (0) | 2021.07.07 |
---|---|
Mairadb / postgresql SSL (0) | 2021.07.07 |
Superset / Chart (0) | 2021.03.15 |
NextCloud docker로 구성 (0) | 2021.02.02 |
[GCP] K8S kubespary 구성 (1) | 2020.10.31 |