언제든지 인터넷만 연결이 되어 있다면 연결 가능한 서버나 네트워크
- 클라우드 네이티브 - 클라우드의 이점을 최대로 활용해서 애플리케이션을 구축하고 실행하는 방식
SaaS 클라우드 서비스는 사용자가 소프트웨어를 온라인 서비스로 이용할 수 있도록 클라우드 플랫폼에 배치되어 구동되는 모델을 의미한다.
서버확장을 위한 기술이다.
- 스케일 아웃 : 서버를 여러 대 추가하여 시스템을 확장하는 방법
- 스케일 업 : 서버에 CPU나 RAM 등을 추가하여 고성능의 부품, 서버로 교환하는 방법
Microservice : 애플리케이션을 구성하는 서비스들을 독립적인 단위로 분해하여 구축하고 각 구성 요소들을 네트워크로 통신하는 아키텍쳐로 서비스 안정성과 확장성(Scaling)을 지원합니다.
MSA : 단일 프로그램을 각 컴포넌트 별로 나누어 작은 서비스의 조합으로 구축하는 방법입니다. 각 컴포넌트는 서비스 형태로 구현되고 API를 이용하여 타 서비스와 통신하게 됩니다.
모놀리식 아키텍처는 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태이다. 웹 개발을 예로 들면 웹 프로그램을 개발하기 위해 모듈별로 개발하고 개발 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포되는 형태를 말한다.
단점으로 부분 장애가 전체 서비스의 장개로 확대될 가능성, 부분적인 Scale-out(여러 서버로 나누어 일처리)가 어렵다, 서비스 변경이 어렵고 수정시 장애 파악의 어려움, 현 프레임워크와 언어에 종속적.
이러한 단점 보완을 위해 On-promise 서버 기반의 모놀리식 아키텍처에서 클라우드 환경을 이용해 서버를 구축하는 MSA를 사용한다.
MSA의 장점
각각의 서비스는 모듈화가 되어 있고 모듈끼리 RPC 또는 message-driven API등을 이용하여 통신한다. 이러한 MSA는 각각 개별의 서비스 개발을 빠르게 하며, 유지보수도 쉽게 가능하다.팀 단위로 기술 스택을 다르게 가져갈 수 있다. 회사가 java의 spring 기반이여도 MSA를 적용해 node.js로 블록체인 개발 모듈을 연동함에 무리가 없다.
서비스 별로 독립적 배포가 가능하다. 지속적인 배포(CD)의 쉬워짐
각각 서비스 부하에 따라 개별적으로 Scale-out이 가능하다.
MSA의 단점
모놀리식에 비해 상대적으로 많이 복잡하다. 서비스가 모두 분산되어 있어서 내부 시스템의 통신을 어떻게 가져갈지 정해야하고, 통신 장애나 서버 부하 등이 발생할 경우 트랜잭션 유지 방법을 결정하고 구현해야한다.모놀리식에서는 단일 트랜잭션을 유지하면 되지만 MSA에서는 DB마다 서비스가 달라 트랜잭션 유지가 어렵다.
통합 테스트가 어렵다. 개발 환경과 실제 운영환경을 동일하게 가져가는 것이 쉽지 않다.
배포 시 다른 서비스들과 연동을 고려해야 한다.
컨테이너 기반의 오픈소스 가상화 플랫폼
- 컨테이너 : 호스트OS 를 공유하며, 여러개의 컨테이너들이 서로 영향을 미치지 않고 독립적으로 실행되어 가볍다.
컨테이너의 생성은 '도커파일'을 사용한다. 가상화 할 프로그램들을 '도커파일'이란 DSL(Domain Specific Language) 형태로 작성한다.생성과정
도커파일 > build = 도커이미지 생성
도커이미지 > run = 도커컨테이너 생성도커 파일은 소스와 함께 버전관리도 된다.
도커 파일로 생성한 이미지들은 용량이 매우 커서 '도커허브'라는 곳에서 무료로 관리가 가능해 공개 이미지들을 다운로드 받을 수 있다.
호스트OS 를 공유하며, 여러개의 컨테이너들이 서로 영향을 미치지 않고 독립적으로 실행되어 가볍다.
컨테이너의 생성은 '도커파일'을 사용한다. 가상화 할 프로그램들을 '도커파일'이란 DSL(Domain Specific Language) 형태로 작성한다.
Docker는 컨테이너 기반의 가상화 기술입니다. 기존에는 OS를 가상화하였기 때문에 Host OS 위에 Guest OS를 설치해야 했습니다. 하지만, 이러한 방식은 상당히 무겁고 느려 한계가 많이 있었습니다.
그래서 이를 극복하고자 프로세스를 격리시킨 컨테이너를 통해 가상화를 하는 Docker(도커)와 같은 기술들이 등장하게 되었고, 도커를 통해 구동되는 컨테이너를 관리하기 위한 Kubernates(쿠버네티스)가 등장하게 되었습니다.
컨테이너들의 스케쥴링(적절한 서버에 배포), 상태체크, 재기동, 로드밸런싱, 모니터링 등 컨테이너를 종합관리 해주는 환경을 말한다.
- 컨테이너 오케스트레이션 - 여러개의 서버에 컨테이너를 배포하고 운영하면서 서비스 디스커버리 같은 기능을 이용하여 서비스 간 연결을 쉽게 해주는 것 서버마다 이름,접속,관리가 아니라 애플리케이션을 배포하고 부하가 생기면 자동으로 컨테이너를 늘리고, 재기동해주는 것.
가장 많이 쓰이는 것으로 쿠버네티스가 있다.
go언어로 구현되어 있다. 벤더나 플랫폼에 종속되지 않음 퍼블릭클라우드(GCP,AWS,Azure)에 사용가능, 프라이빗 클라우드나 베어메탈(가상화x)에도 배포가능
사용자의 환경에서 쿠버네티스를 사용할 경우 얻을 수 있는 주요 이점은 쿠버네티스를 통해 물리 또는 가상 머신의 클러스터에서 컨테이너를 예약하고 실행할 수 있는 플랫폼이 확보된다는 것입니다. 더 넓게 보면, 프로덕션 환경에 컨테이너 기반 인프라를 완전히 구현해서 사용할 수 있습니다.
쿠버네티스 : 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼
(컨테이너 관리 자동화와 배포/확장까지 해준다.)클러스터 : 여러 대의 컴퓨터들이 연결되어 하나의 시스템 처럼 동작하는 컴퓨터들의 집합을 말한다. / 데이터 집단
클러스터링 : 각기 다른 서버를 묶어서 하나의 시스템처럼 동작하게 하며, 클라이언트에게 고가용성 서비스를 제공한다.
- Active — Active 구조
서버들이 항상 Active(활동)상태 즉, 작업을 수행하고 있는 상태이다. 동일한 스토리지를 공유하며 L4에 의해 Load Balancing이 이루어진다.또한, L4에 의해 즉각적인 Fail Over가 이루어진다.- Active — Standby 구조
서버들의 상태가 Active(활동)상태와 Standby(대기)상태로 이루어져 있고, Standby서버는 Active서버가 장애발생시, 바로 Active상태로 바뀔 수 있도록 한다. 한마디로, Standby 서버는 예비서버이다.- Active서버 -> Standby
서버 : Fail OverStandby(전 Active) -> Active(전 Standby) : Fail Back클러스터 분석 : 주어진 데이터들의 특성을 고려해 데이터 집단(클러스터)을 정의하고 데이터 집단의 대표할 수 있는 대표점을 찾는 것으로 데이터 마이닝의 한 방법이다.
쿠버네티스 아키텍처 : run을 하면 실행되고 stop을 하면 멈춥니다.
중앙(Master)에서 API 서버와 상태 저장소를 두고 서버(Node)의 에이전트(kubelet)와 통신하는 단순 구조.
하지만, 앞에서 얘기한 개념을 여러 모듈로 쪼개어 구현하고 다양한 오픈소스를 사용하기 때문에 설치가 까다롭고 언뜻 구성이 복잡해 보입니다.
클라우드 모니터링은 클라우드 기반 IT 인프라의 상태를 평가하는 프로세스입니다. 클라우드 모니터링 도구를 사용하는 조직은 클라우드 환경의 가용성/성능/보안을 사전에 모니터링하여 문제가 최종 사용자 환경에 영향을 주기 전에 찾아서 해결할 수 있습니다.
CPU, memory 사용량에 따른 확장은 기본이고 현재 접속자 수와 같은 값을 사용할 수도 있습니다. 컨테이너의 개수를 조정하는 Horizontal Pod Autoscaler(HPA), 컨테이너의 리소스 할당량을 조정하는 Vertical Pod Autoscaler(VPA), 서버 개수를 조정하는 Cluster Autosclaer(CA) 방식이 있습니다.
지속적인 통합(Continous Intergration)은 개발자가 작업한 코드를 자동으로 테스트 하고 테스트에 통과하면 통합하여 저장합니다.
지속적인 배포(Continous Deployment)은 작업한 코드 및 변경사항들을 테스트를 거쳐 리포지토리로 업로드 되고 실 서비스 배포로 릴리즈까지 자동화 하는 것을 말합니다.
고가용성(HA, High Availability)이란 서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말한다.
애플리케이션 개발-운영 간의 협업 프로세스를 자동화하는 것을 말하며, 결과적으로 애플리케이션의 개발과 개선속도를 빠르게 합니다.
DevOps는 '개발과 IT'운영간의 프로세스를 통합하여 궁극적으로는 '고객에게 뛰어난 품질의 서비스를 빠르게 제공한다.' 는 개발 방법론 입니다.
과거 새로운 서비스를 출시하기 위해서 오랜기간 작업 후 배포했던 것과 달리, 현재는 서비스 출시 속도가 다르고 업데이트 주기 또한 빈번해 졌습니다. 그렇기 때문에 개발된 소프트웨어가 시스템의 안정성을 유지하면서 사용자에게 빠르게 제공될 수 있도록[개발 - 테스트 - 배포 - 운영]의 업무 사이클을 자동화된 단일 워크 플로우로 통합할 필요성이 생기게 된 이유 입니다.
- 소스 코드 제어(SCM: Source Code Management)
서비스는 주로 팀 단위로 개발이 되는데, 서로 다른 팀에서 개발한 코드에 대한 버전과 이력을 관리해야 한다.- CI/CD
지속적인 통합과 배포를 통해 애플리케이션 개발 단계를 자동화 하여 고객에게 보다 짧은 주기로 서비스를 제공하고 개선하는 방법 입니다.- 모니터링
업데이트 빈도가 늘어남에 따라 일반적으로 요구되는 엄격한 테스트를 매번 수행할 필요가 없습니다. 따라서, 데브옵스 환경에서는 실시간으로 앱 성능 모니터링을 통하여 오류, 개선사항을 찾아 해결하는 것이 중요합니다.
서버리스 컴퓨팅이란 IT 인프라를 데이터센터 또는 클라우드에 준비 없이 필요한 기능을 함수로 구현해서 관리하는 것을 의미 합니다.
그리고,
서버리스 컴퓨팅은 IT 인프라를 데이터센터 또는 클라우드에 준비 없이, 필요한 기능을 함수(Function) 형태로 구현하고, 자동 스케일링 방식으로 시시각각 변하는 자원 수요를 지원하며 전통적인 백엔드를 대신한다. 따라서 서버리스 컴퓨팅을 FaaS(Function as a Service) 라고도 하고 백엔드 시스템을 보이지 않는 서비스로 추상화하였기 때문에 BaaS(Backend as a Service) 라고도 합니다.
우연히 보다가 댓글 남깁니다.
컨테이너 생성은 도커가 아니여도 가능합니다. 도커는 단지 OCI 표준을 지킨 컨테이너 런타임 중 하나일 뿐입니다.
인프라 면접 질문에 대해 공부하고 계신다면 컨테이너와 가상머신(VM)의 차이점도 알고 계시면 더욱 좋을 것 같습니다.
화이팅입니다!