티스토리 뷰

상상을 해보자. 친구랑 같이 온라인 쇼핑몰을 하나 차리기로 했다.

굉장히 좋은 아이템이라 오픈 전부터 SNS에서 화제가 되고 있고 많은 유저들이 몰릴 것 같다. 실제 상황이면 참 좋겠다


홈페이지를 오픈해야 하는데, 서버 컴퓨터를 사자니 유저가 얼마나 들어올지 예상하기도 어렵고 초기 비용도 많이 든다. 

웹 호스팅 서비스를 이용해도 된다. 웹 서버와 인프라에 대한 지식이 딱히 필요없고 사실 일반적으로 쇼핑몰 같은 간단한 홈페이지라면 웹 호스팅을 많이 이용하는 걸로 안다. 그렇지만 제한적인 트래픽, 떨어지는 자유도 등 문제가 없는 것은 아니다. 


그래도 컴공을 나와서 웹 서버가 어떤 건지 알긴 하는 친구와 나는 클라우드 서비스, AWS를 이용하기로 했다.

지난 번에 클라우드 컴퓨팅에 대한 소개 포스팅에서 얘기했듯 AWS에는 EC2라고 하는 서버를 빌려주는 서비스가 있다. EC2에 가상 머신 (VM) 을 만들어서 웹 서버를 비롯한 각종 플랫폼 소프트웨어, 그리고 내가 만든 홈페이지를 올린다.


근데 막상 해보니 좀 귀찮다. VM 1대에 아파치 웹서버니 DBMS니 설치하는 것도 귀찮은데, VM 1대만으로는 트래픽을 감당하기 힘들 것 같다. 가상 머신 여러 대에 직접, 수동으로 그런 작업을 반복해야 한다면 엄청난 고역이다. 물론 AWS에선 가상 머신 복제도 가능하긴 하다. VM 1대를 만든 다음 그 가상 머신에 대한 정보를 이미지로 저장해서 AMI (Amazon Machine Image) 라는 서비스에 담고, 그 이미지로부터 새 VM을 만드는 식이다. 그렇지만 이것도 VM 수가 많이 늘어나면 콘솔에서 수동으로 하기엔 너무 지루하고 비효율적인 작업이다.


이미지를 만들고, 그 이미지로부터 VM을 만들고, VM 위에 소프트웨어를 설치하고 세팅하는 이런 작업들을 프로그램적으로, 그러니까 코드를 이용해서 자동화할 수 있다면 이런 수고를 덜 수 있을 것이다. 

이런 걸 Infrastructure as Code, 줄여서 IaC라 부른다.


자동화에 의한 비용 효율성 증대 이외에도 중요한 장점이 하나 더 있는데, 인프라가 코드라는 형태로 기록되므로 각종 설정 정보들을 기록으로 확인 및 수정이 가능하고, git같은 코드 저장소를 이용해 관리할 수도 있어 유지보수 측면에서 이점을 가진다.




이런 장점이 있는 IaC를 구현하기 위한 몇 가지 방법과 주요 툴들에 대해서 알아보자.



1) 클라우드 서비스에서 제공하는 개발자 도구, API


위의 사례를 읽어보고 일단 딱 드는 생각은, "콘솔 말고 API로 VM 만들 수 있게 프로그램 짜면 되지 않냐" 라는 것이다.


맞는 말이고 가장 기본적인 IaC 구현 방법이라 할 수 있다. 하지만 일반적으로 IaC라고 하면 이것보다는 조금 더 간편하고 레벨이 높은 다른 툴들을 이용하는 걸 지칭한다. IaC에 대해서 찾아보면서 이런 걸 IaC라고 부르는 글은 본 적이 없다... 그래도 넓은 의미로는 어쨌든 프로그램적으로 인프라를 생성하고 변경하는 방법이니 IaC가 맞긴 맞다. 


여러 클라우드 서비스의 API를 묶어놓은 라이브러리로 libcloud라는게 있는데 이게 유용하게 쓰일 수 있다. libcloud에 대해서는 조만간 따로 얘기할 기회가 있을 것 같다.

참고로 아래에서 언급할 Packer도 내부적으로 libcloud를 이용한다.


        


2) 이미지 빌드 도구


말 그대로 이미지를 만들어주는 도구다. 

가상 머신을 만들기 위해서는 최소한 OS에 대한 정보는 담겨 있는 이미지 파일이 필요하기 때문이다.

코드를 통해 OS는 어떤 종류고 이미지 이름은 무엇이고 클라우드를 이용한다면 어떤 클라우드 위에 올릴 것이고 이런 것들을 정의한다.


대표적으로 Packer라는 툴이 있고, 일반적인 (하이퍼바이저 기반) VM 말고 컨테이너 환경이라면 Docker가 유명하다.


        


3) 구성 관리 (Configuration Management) 도구


구성 관리, 또는 형상 관리라는 용어는 원래 시스템 개발 및 유지 보수 과정을 체계적으로 정리하는 활동을 의미하지만 여기서는 좀 더 좁은 의미로, 쉽게 얘기해서 VM 위에 소프트웨어를 설치하고, 설정을 변경하고, 그 이력을 관리하는 것을 뜻한다.


이런 걸 도와주는 툴로 전통적으로 유명했던 건 Chef랑 Puppet, 최근에 많이 쓰이는 신흥강자로 Ansible이 있다.


   

4) 오케스트레이션 (Orchestration) 도구


오케스트레이션이라고 써놓으면 좀 낯선 단어 같은데 '오케스트라' 를 떠올려보자. 여러 종류의 악기들이 조화를 이루며 그를 조율하는 지휘자가 있다. IT 인프라 분야에서 오케스트레이션이라는 단어는 지휘자처럼 전체 인프라를 조율한다는 의미로 쓰인다.


이것도 굉장히 폭넓게 쓰이는 단어라 도구마다 지원하는 범위가 조금씩 다르지만, 대체로 2) 와 3) 의 기능을 모두 지원하고 거기다가 모니터링 같은 기능까지 추가된 통합 관리 도구같은 느낌이다.


유명한 걸로는 Hashicorp에서 만든 Terraform, AWS에서 쓸 수 있는 CloudFormation 같은 게 있다.




위에서 소개했던 쇼핑몰 시나리오를 떠올려보면서 IaC를 적용하는 예시를 한번 그려보자. 요구사항은 다음과 같다.


프로그램 하나를 실행하면 LAMP 스택 (Linux-Apache-MySQL-PHP) 이랑 홈페이지가 세팅된 VM 3대를 뚝딱 만들어내고 싶다.


이걸 하기 위해서 다음과 같은 IaC 툴들을 이용할 수 있으며 각각의 역할은 이렇다.


- Packer: Linux, 예를 들면 우분투 OS가 설치된 이미지를 생성한다.

- Ansible: OS 이미지 위에 LAMP 스택을 설치하고 홈페이지를 배포한다.

- libcloud: 클라우드 API를 이용해서 네트워크를 세팅하고 VM 인스턴스를 생성한다.



그림으로 그리면 대충 이런 느낌이다.


다음 포스팅에서 이 예시를 구현한 내용을 다룰 것이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함