❔우리에게도 IaC가 필요할까?

서비스 개발이 끝나면 배포하기 위해 우리는 보통 클라우드 서비스를 이용합니다.

AWS나 GCP, Azure 같은 퍼블릭 클라우드 서비스 덕분에, 규모가 크지 않은 프로젝트라면 컴퓨팅 서버와 로드 밸런서, DB 정도만 설정에 신경쓰면 금방 서비스를 배포할 수 있게 되었죠.

하지만 서비스나 팀의 규모가 늘어난다면 클라우드 인프라 관리는 점점 부담이 됩니다.

사용하는 클라우드 인프라 구조는 더욱 복잡해지고, 인프라 구조 변경이나 운영 중 오류가 발생했을 때 입는 피해도 커지기 때문이죠.

그래서 이런 부담을 줄이기 위해 등장한 것이 바로, IaC(Infrastructure as Code)입니다.

이름에서 나타내고 있는 것처럼 인프라를 코드로 관리하는 개념인데요.

IaC는 DevOps 관점에서도 중요한 키워드가 되었습니다.

DevOps 접근법을 통해 개발 담당자와 운영 담당자의 배포 환경을 맞출 때, IaC를 도입하면 갖가지 오류나 불일치 문제를 피하고 수월하게 맞출 수 있어 애플리케이션 배포 자동화에 도움이 되기 때문입니다.

게다가 IaC를 적용하면 인프라 역시 CI/CD 파이프라인을 통해 테스트 및 버전 컨트롤이 가능하다는 장점이 있기 때문에 DevOps 관점에서 IaC 도입이 권장되죠.

IaC는 비단 규모가 큰 기업에만 국한되는 기술이 아닙니다.

오히려 한정된 자원으로 많은 일을 처리해야 하는 소규모 팀에게도 인프라 관리 자동화는 필수입니다.

IaC를 도입하면 수동 작업으로 인한 실수를 줄이고, 반복적인 작업을 자동화하여 팀의 생산성을 크게 높일 수 있는데요.

이는 팀이 비즈니스 가치 창출에 더 집중할 수 있도록 도와주는 것이기 때문에 소규모 팀에게도 IaC 도입은 중요합니다.


✨내 상황에 맞는 IaC 툴을 고르는 방법은?

“IaC의 중요성은 알겠는데 IaC 툴이 너무 많아서 고르기 힘들어요.”

맞습니다. 방금 설명드린 것처럼 IaC는 클라우드 인프라 관리에 주요 키워드가 되었기 때문에 이미 여러 IaC 툴들이 세상에 나왔는데요.

오픈소스 IaC 툴만해도 Terraform나 Pulumi, Crossplane 등 다양하죠.

그럼 내게 맞는 IaC 툴을 고르려면 어떻게 해야 할까요?

저는 아래 3가지 기준으로 IaC 툴을 선택하실 것을 추천합니다.

  1. 사용자의 기술 스택
  2. 대상 클라우드 및 서비스 지원 범위
  3. 커뮤니티 및 생태계 성숙도

먼저 사용자의 기술 스택이란, 사용자가 이미 익숙하게 사용하는 기술 스택과 언어를 의미합니다.

예를 들어, Terraform은 자체적인 문법의 DSL(Domain Specific Language)을 사용해서 IaC를 구현합니다.

그래서 Terraform을 사용해본 경험이 없다면 별도의 문법을 새로 배워야 하는 것이 부담이 될 수 있겠죠.

반면에 Python이나 TypeScript, Go와 같은 범용 프로그래밍 언어를 지원하는 Pulumi는 상대적으로 초기 도입 장벽이 낮다고 할 수 있습니다.

두 번째로 대상 클라우드 및 서비스 지원 범위는, 도입하려는 IaC 툴이 현재 내가 사용 중이거나 앞으로 사용할 계획이 있는 클라우드 제공자(AWS, GCP, Azure)와 특정 서비스(Kubernetes 등)를 얼마나 안정적으로 폭넓게 지원하는지 확인해야 함을 의미합니다.

특정 벤더에 종속되지 않고 멀티 클라우드 환경을 고려한다면, 다양한 클라우드를 일관되게 지원하는 툴이 유리하겠죠.

Pulumi와 Terraform의 경우, 모두 특정 클라우드에 종속되지 않고 멀티 클라우드 환경을 지원합니다.

마지막으로 커뮤니티 및 생태계 성숙도입니다.

Terraform는 이미 많은 사람들이 사용하고 있기 때문에 커뮤니티가 활발합니다. 그래서 Pulumi보다 레퍼런스가 많은 편이죠.

위 3가지 기준의 중요도는 이 글을 읽고 계신 분들마다 조금씩 다르실 겁니다.

하지만 저는 도입에 대한 부담이 낮다는 점에서 Pulumi를 여러분들께 좀 더 소개해드리고 싶습니다.

Pulumi는 개발자에게 익숙한 프로그래밍 언어를 사용하여 인프라를 정의할 수 있다는 큰 장점을 지니고 있습니다.

그래서 별도의 DSL 학습 부담을 줄여줌과 동시에 기존 언어의 풍부한 생태계와 도구를 활용한 테스트, 재사용, 추상화에 유리하죠.

특히 기존 개발 도구와 테스트 프레임워크를 그대로 활용하여 인프라 코드의 품질을 높일 수 있다는 점도 주목할 만합니다.


💫Pulumi는 어떻게 동작할까?

그럼 이제 Pulumi가 어떤 구조로 어떻게 동작하는지 핵심만 알아보겠습니다.

Pulumi의 핵심 구성요소는 아래와 같습니다.

  • CLI
  • 언어별 SDK
  • 배포 엔진
  • 상태 관리 시스템

아까 Pulumi는 개발자에게 익숙한 프로그래밍 언어로 인프라 관리 코드를 작성 가능하다고 했었죠?

그래서 개발자는 원하는 언어별 SDK를 사용하여 인프라 관리 코드를 작성하고, Pulumi CLI를 통해 배포 엔진에 명령을 전달할 수 있습니다.

명령을 전달 받은 배포 엔진은 작성된 인프라 관리 코드를 해석하여 실제 클라우드 리소스를 생성 및 수정하며, 그 결과는 상태 관리 시스템에 기록됩니다.

위 워크플로우를 그림으로 표현하면 아래와 같습니다.

(출처: https://www.pulumi.com/docs/iac/concepts/how-pulumi-works/)

Pulumi의 상태 관리 시스템은 IaC 관점에서 중요하기 때문에 조금만 더 알아볼게요.

배포된 인프라의 최신 상태는 로컬 파일이나 Pulumi의 클라우드 서비스, 아니면 S3와 같은 백엔드에 저장해서 관리할 수 있는데요.

이 상태 정보는 실제 인프라와 코드 간의 드리프트(Drift)를 탐지하거나, 기존 상태를 추적하는 데에 꼭 필요한 요소입니다.

드리프트란, 변경된 인프라 상태가 인프라 관리 코드에 정의된 것과 일치하지 않는 현상을 의미합니다.

IaC 툴의 효율성과 보안성을 약화시킬 수 있기 때문에 드리프트를 탐지하는 게 중요한데요.

Pulumi는 자신의 상태 관리 시스템을 활용하여 드리프트를 탐지하는 기능도 지원하고 있습니다.


👍Pulumi를 도입하면 어떤 변화가 있을까?

그렇다면 내가 진행 중인 프로젝트에 Pulumi를 도입해서 어떤 이점을 얻을 수 있을까요?

IaC를 도입한다는 것은 인프라 구축 프로세스를 자동화해서 인프라 프로비저닝 및 관리에 필요한 시간을 줄일 수 있다는 뜻입니다.

또한 인프라를 코드 베이스로 관리할 수 있기 때문에 Human error를 줄이고, 일관성 있는 환경 구축도 가능하죠.

인프라 변경 이력이 코드 기반으로 기록되기 때문에 추적과 문서화에도 용이하고요.

특히 Pulumi는 범용 프로그래밍 언어를 지원하기 때문에,

  • 코드 자동 완성
  • 실시간 오류 검출
  • 리팩토링 등…

IDE가 지원하는 기능들을 인프라 코드 작성에도 그대로 활용할 수 있습니다.

그래서 별도의 도구나 언어를 배우는 시간을 절약하면서도 개발 흐름을 끊지 않아, 인프라 구축 및 수정 속도가 눈에 띄게 향상될 것입니다.

또한 인프라가 모든 팀원에게 익숙한 프로그래밍 언어로 관리되면, 개발과 운영 팀 간의 장벽이 낮아질 것입니다.

인프라 변경 사항에 대해 코드 리뷰를 진행하고, Git을 통해 버전을 관리하며 협업하는 것이 자연스러워 지는 거죠.

규모가 어느 정도 있는 팀이라도 개발 담당과 운영 담당 인원들 간의 인프라 이해도를 높여, 결과적으로 더 빠르고 안정적인 서비스 배포가 가능해질 것입니다.

Pulumi는 일반 소프트웨어 코드처럼 인프라 코드에 대한 단위 테스트 작성을 지원합니다.

그래서 개발자는 자신에게 익숙한 테스트 프레임워크를 사용하여 인프라 관리 코드가 예상대로 동작하는지 미리 검증할 수 있죠.

실제 클라우드 환경에 배포하기 전 잠재적인 오류를 발견하고 수정할 기회가 주어지기 때문에, 인프라 변경 작업의 신뢰도와 안정성도 더욱 높아질 것입니다.


🔭마무리

이번 글에서는 IaC를 도입해야 하는 이유와 IaC 툴 선택 기준, 그리고 Pulumi에 대해 살펴봤습니다.

여기까지 글을 읽으시다보면 자연스럽게 Pulumi를 어떻게 도입하고 활용할 수 있을까 궁금하실 수 있는데요.

그래서 다음 글에서는 Pulumi 설치부터 인프라 코드 작성, 배포까지 Python 언어로 AWS 리소스를 관리하는 핵심 가이드를 제공해드리겠습니다.

그럼 다음 글도 기대해주세요!


References