규도자 개발 블로그

현기증나는 인프라, 배포 용어들(IaC, 오케스트레이션, CI/CD, DEVOPS, 프로비저닝 등등) 정리 본문

DevOps/etc

현기증나는 인프라, 배포 용어들(IaC, 오케스트레이션, CI/CD, DEVOPS, 프로비저닝 등등) 정리

규도자 (gyudoza) 2021. 10. 15. 17:13

현기증나는 인프라, 배포 용어들(IaC, 오케스트레이션, CI/CD, DEVOPS, 프로비저닝 등등) 정리

비슷한 개념에서 쓰이는 다른 용어들이 진짜 현기증날 정도로 너ㅓㅓㅓㅓㅓ무 많아서 이번기회에 정리를 한번 해보려 한다. 작은 개념에서부터 파고 들어가보자.

 

프로비저닝(Provisioning)

사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다. 서버 자원 프로비저닝, OS 프로비저닝, 소프트웨어 프로비저닝, 스토리지 프로비저닝, 계정 프로비저닝 등이 있다. 그러니까 IT인프라를 설정하는 프로세스 그 자체를 의미하는데 우리가 AWS에서 EC2 인스턴스를 만들 때 AWS는 우리가 사용할 EC2 Instance에 대한 자원, OS, S/W 등등을 미리 "프로비저닝"해놓았다고 할 수 있는 것이다. 기존 고전적인 방식으로 서버컴퓨터나 IDC에 하드웨어를 추가하는 과정도 프로비저닝이다. 이것이 클라우드 컴퓨팅 등과 결합하면서 자동화된 프로비저닝으로 우리가 손쉽게 이용할 수 있는 것이다.

 

AWS Auto Scaling

AWS 제품들의 애플리케이션을 모니터링하고 용량이나 성능을 자동으로 조정하는 기능이다. 예를 들어 자신이 운영하는 서비스에서 파격적인 행사를 하여 갑작스럽게 트래픽이 몰릴 때 오토스케일링 기능을 통해 미리 유휴자원을 확보해두는 것이 아니라 필요할 때만 많은 양의 리소스를 사용함으로써 낭비를 줄일 수 있다. 위에서 말한 프로비저닝과 결합해보자면 "서버 자원 프로비저닝을 자동으로 해주는 서비스"라고 정의할 수 있다.

 

오케스트레이션(Orchestration)

컴퓨터 시스템과 어플리케이션의 자동화된 설정, 관리, 조정을 의미한다. 예를 들면 AWS의 오토스케일링이 일종의 오케스트레이션 서비스인 것이다. 리소스들의 관계를 정의하고 구성을 자동화함으로써 사람의 판단과 수작업을 덜어주는 기능이라고 사전적으로 정의돼있는데 위에서 말한 프로비저닝과 결합해보자면 "프로비저닝을 자동화시켜주는 것"을 오케스트레이션이라고 하면 되겠다.

 

컨테이너 오케스트레이션(Container Orchestration)

이 오케스트레이션이 관리하는 주체가 서버가 아닌 컨테이너로 옮겨졌을 때 이것을 컨테이너 오케스트레이션이라고 한다. 그냥 오케스트레이션이 시스템과 어플리케이션의 자원 관리, 확장, 네트워킹을 자동화하는 것이라면 컨테이너 오케스트레이션은 말 그대로 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 것이다. 여기까지만 읽어봐도 딱 쿠버네티스(Kubernetes)가 연상되지 않는가? 정확하다. k8s는 컨테이너 오케스트레이션을 위한 시스템이다.

 

MSA(Micro Service Architecture)

MSA의 사전적 의미는 단일 프로그램을 각 컴포넌트 별로 나누어 작은 서비스의 조합으로 구축한 아키텍트 형태를 말하는데 요즘에 있어서 이 MSA가 의미하는 바는 십중팔구 컨테이너로 마이크로화한 서비스들을 하나의 서비스 조합으로 묶어놓은 서비스 아키텍트를 의미한다. 만약에 도커로 컨테이너화한 마이크로서비스들로 하나의 완전한 서비스를 제공하고 있으며 이를 쿠버네티스로 관리하고 있다면 그 상태는 "컨테이너 오케스트레이션을 이용해 MSA형태로 운영되고 있는 서비스"라고 할 수 있는 것이다. 어질어질하다.

 

IaC(Infrastructure as Code)

직역하자면 "코드로된 인프라"라고 할 수 있다. 코드로 된 인프라라니, 딱 봐도 감이 온다. 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 의미한다. 인프라 사양을 담은 구성 파일이 코드형태로 존재하므로 그 구성을 편집하고 배포하기가 더 쉽고, 같은 코드라면 매번 동일한 환경을 구축한다는 보험이 깔려있다. Ansible Automation Platform이나 Packer, Terraform등등이 IaC 툴이다. 이름부터 Packer는 뭔가 똑같은짐을 바리바리 싸주는 느낌이고 Terraform은 환경을 구축한다는 느낌이 오지 않는가.

 

CI/CD(Continuous Integration/Continuous Deployment, Delivery)

이건 레드햇 홈페이지에 훨씬 더 자세히 멋지게 간단하게 설명돼있으니 여길참고하는 걸 추천한다.

 

DEVOPS(Developement + Operation)

DevOps는 애플리케이션 개발의 품질과 속도를 개선하고 신규 또는 수정된 소프트웨어 기능이나 제품의 릴리즈 주기 단축을 장려하는 새로운 패러다임, 혹은 프레임워크, 혹은 이러한 행위를 하는 사람을 지칭한다. 잦은 버그발생과 수정, 그리고 기획자의 변경에 엔지니어들이 GG를 치고 처음부터 완전한 소프트웨어를 만든다는 생각보다는 점점 자주 만들고 자주 고치고 자주 변경하고 그만큼 자주 배포하게 됐는데 이렇게 빠르고 잦은 수정과 배포 등 IT서비스 제공 주기를 단축하려는 노력과 그 과정 자체를 도와주려는 제품개발이 DEVOPS라는 단어가 태어난 배경이다. DEV와 OPS, Developement과 Operation을 매끄럽게 이어주려는 노력이 말 그대로 단어의 결합 DEVOPS로 나타난 것이라고 보면 이해하기 쉬울 것이다.

 

MLOPS(Machine Learning + Operation)

이젠 DEVOPS라는 합성어에 MLOPS라는 파생어까지 생겨났다. MLOPS의 목표 또한 DEVOPS의 목표와 마찬가지로 사용자에게 서비스를 빠르게 전달하려는 개발 패러다임 혹은 이를 실행하는 사람을 지칭한다. 하지만 DEVOPS가 테스트 자동화와 모니터링을 통해 CI/CD 환경을 구축하는 것과는 달리 MLOPS과정에서는 배포상태 직전의 완전한 코드를 쓰거나 하진 않고 유믜미한 데이터 만들기, 알고리즘 구현 등등을 위해 다양한 샘플링 데이터, 최적화를 위한 다양한 시도들이 코드로 작성된다고 한다. 자세한 내용이 궁금한 사람은 이글을 참고하길 추천한다. 아주 멋지게 잘 쓰여있다.

 

 

쓸 게 더 생각나면 나중에 추가해야겠다. 끗.

Comments