테라폼

1. 테라폼 - 효율적인 클라우드 관리

pininini 2026. 4. 22. 13:13

AWS를 사용하면서 느낀 불편함

AWS를 처음 사용할 때는 콘솔이 가장 익숙하다. 화면에서 클릭 몇 번으로 EC2, VPC, 보안 그룹, RDS 같은 리소스를 바로 만들 수 있어서 진입장벽이 낮다. 하지만 리소스 수가 늘어나기 시작하면 오히려 이 방식이 발목을 잡는다. 어떤 인스턴스를 왜 만들었는지, 네트워크 설정은 어떻게 연결했는지, 실습이 끝난 뒤 무엇을 지워야 하는지를 사람이 직접 기억해야 하기 때문이다. AWS는 CloudFormation 같은 IaC 서비스와 AWS CLI도 제공하지만, 콘솔 중심으로 작업하면 반복 생성·수정·삭제가 여전히 수동에 가깝고 변경 이력이 코드로 남지 않아 관리가 번거롭다.

내가 특히 불편했던 지점은 세 가지였다.

첫째, 필요한 인스턴스나 기능을 만들고 지우는 과정을 매번 AWS 콘솔에서 직접 해야 했다. 학습이나 테스트 환경에서는 비슷한 리소스를 반복해서 만들 일이 많은데, 콘솔에서 같은 작업을 다시 수행하는 것은 시간도 오래 걸리고 실수도 자주 발생한다. 예를 들어 실습용 EC2 인스턴스 하나를 다시 만들더라도 보안 그룹, 키 페어, 서브넷, 태그까지 일일이 확인해야 한다. 이런 방식은 재현성이 떨어진다. 같은 환경을 다시 만들려고 해도 “예전에 어떻게 만들었지?”라는 문제가 생긴다.

둘째, 일괄 작업이 불편했다. 정확히 말하면 AWS에 자동화 수단이 없는 것은 아니다. AWS는 CLI와 CloudFormation을 통해 여러 작업을 코드나 명령으로 처리할 수 있다. 다만 콘솔 기반으로 운영하면 여러 리소스를 한 번에 생성·변경·삭제하는 흐름을 직접 구조화해야 하고, 그 과정이 표준화되지 않으면 팀원마다 방식이 달라진다. 결국 “한 번 더 클릭해서 처리하는 운영”이 반복된다.

셋째, 학습하면서 만든 인스턴스가 방치되어 비용이 계속 발생했다. 잠깐 테스트하려고 만든 리소스도 사용이 끝난 뒤 정리하지 않으면 비용이 누적된다. 문제는 이 정리 작업 역시 콘솔에서 직접 찾아서 삭제해야 한다는 점이다. 실습이 잦을수록 “지워야 하는 리소스”와 “남겨야 하는 리소스”를 구분하는 일 자체가 부담이 된다.

Terraform이란 무엇인가

이 문제를 해결하기 위해 찾은 도구가 Terraform이다. Terraform은 HashiCorp가 제공하는 Infrastructure as Code(IaC) 도구로, 클라우드와 온프레미스 리소스를 코드로 정의하고, 변경하고, 버전 관리할 수 있게 해준다. Terraform은 EC2 같은 컴퓨트 리소스, 스토리지, 네트워크뿐 아니라 DNS나 일부 SaaS 기능까지 폭넓게 관리할 수 있다. Terraform 설정은 여러 파일과 디렉터리로 구성할 수 있고, 이 설정이 “어떤 인프라를 원하는지”를 선언하는 문서 역할을 한다.

쉽게 말하면, AWS 콘솔에서 클릭으로 만들던 인프라를 텍스트 파일로 옮겨 적는 방식이라고 볼 수 있다. 중요한 점은 이 코드가 단순한 문서가 아니라, 실제 인프라를 생성하고 수정하고 삭제하는 실행 가능한 정의라는 것이다. Terraform CLI는 이러한 인프라 생명주기를 관리하는 명령들을 제공한다. 대표적으로 terraform plan은 현재 코드와 실제 인프라 상태를 비교해 어떤 변경이 일어날지 미리 보여주고, terraform destroy는 현재 Terraform 프로젝트가 관리하는 리소스를 정리하는 데 사용된다.

왜 Terraform이 해결책이 되는가

1. terraform destroy로 실습 환경을 한 번에 정리할 수 있다

Terraform의 가장 체감되는 장점 중 하나는 정리(clean-up) 다. terraform destroy 명령은 현재 Terraform 설정이 관리하는 객체를 한 번에 제거한다. 학습용이나 개발용처럼 수명이 짧은 인프라를 자주 만들고 없애는 상황에서 특히 유용하다. 콘솔을 돌아다니며 EC2, 보안 그룹, 볼륨, 네트워크를 하나씩 지우는 대신, 코드 기준으로 정리할 수 있기 때문이다. 다만 이 명령은 현재 Terraform 프로젝트와 상태(state)가 관리하는 리소스만 삭제하며, 계정 전체의 모든 리소스를 지우는 것은 아니다.

실무 관점에서는 이것이 비용 관리와도 직결된다. 학습용으로 잠깐 만든 인프라가 남아 있어 과금되는 문제를 줄일 수 있기 때문이다. 특히 ephemeral 환경, 즉 잠깐 쓰고 버리는 개발 환경에 Terraform이 잘 맞는 이유가 여기에 있다.

2. 인프라를 코드로 관리할 수 있어 재현성과 협업성이 높아진다

Terraform의 본질은 “인프라를 클릭이 아니라 코드로 관리한다”는 데 있다. 코드로 작성된 인프라는 Git 같은 버전 관리 시스템에 올릴 수 있고, 누가 어떤 리소스를 왜 바꿨는지 기록으로 남길 수 있다. 즉, 인프라 변경이 더 이상 개인의 기억이나 콘솔 습관에 의존하지 않는다. 새로운 팀원이 프로젝트에 합류해도 콘솔 화면을 일일이 설명받는 대신, 저장소의 Terraform 코드와 변경 내역을 보면 전체 구조를 이해할 수 있다.

또한 같은 코드를 바탕으로 개발, 스테이징, 운영 환경을 비슷한 방식으로 재현할 수 있다. “한 번 만들어놓고 다시는 정확히 못 만드는 인프라”가 아니라, 언제든 같은 정의에서 다시 생성 가능한 인프라가 된다. 이것이 콘솔 중심 운영과 IaC의 가장 큰 차이다.

3. GitHub Actions와 결합하면 인프라 변경을 자동화할 수 있다

Terraform 코드를 Git 저장소에서 관리하면, GitHub Actions 같은 CI/CD 도구와 연결해 인프라 변경을 자동화할 수 있다. GitHub Actions는 저장소 이벤트를 기준으로 워크플로를 실행할 수 있고, HashiCorp도 GitHub Actions를 이용해 Terraform 워크플로를 자동화하는 가이드를 제공한다. 즉, 개발자가 직접 콘솔에 들어가서 배포하는 대신, Pull Request나 머지 이벤트를 기준으로 plan, 검토, apply 같은 흐름을 표준화할 수 있다.

이 방식의 장점은 단순 자동화만이 아니다. 인프라 변경이 코드 리뷰 프로세스 안으로 들어온다는 점이 중요하다. 애플리케이션 코드처럼 인프라 코드도 리뷰하고, 승인하고, 기록을 남길 수 있기 때문이다. 결과적으로 “누가 언제 어떤 인프라를 바꿨는지”를 추적하기 쉬워진다.

4. Infracost로 비용 변화를 배포 전에 예측할 수 있다

Terraform을 Git과 CI/CD에 연결하면 비용 관점도 더 좋아진다. Infracost는 Terraform 등 IaC 변경에 대해 비용 영향을 계산해, Pull Request 단계에서 월 비용 변화와 비용 차이를 보여줄 수 있다. 공식 문서에 따르면 Infracost는 PR 코멘트나 CI/CD 흐름에서 비용 추정치를 제공해 엔지니어가 배포 전에 비용 영향을 확인할 수 있도록 돕는다.

이 점은 개인 학습 환경에도 유용하지만, 팀 협업에서는 더 큰 의미가 있다. 리소스를 하나 추가하는 코드가 단순히 “기능 추가”로 끝나는 것이 아니라, “월 비용이 얼마나 늘어나는가”까지 함께 논의할 수 있기 때문이다. 비용이 운영 뒤에야 보이는 것이 아니라, 코드 리뷰 단계에서 보이게 된다.

5. Brainboard로 코드 기반 인프라를 시각적으로 이해할 수 있다

Terraform은 강력하지만, 처음 접하면 코드만으로 인프라 구조를 한눈에 파악하기 어렵다. 이때 보조 도구로 볼 수 있는 것이 Brainboard다. Brainboard 공식 문서에 따르면 이 도구는 Terraform/OpenTofu 리소스로 클라우드 인프라를 설계하고, Terraform 코드를 자동 생성하거나 코드 편집을 지원한다. 즉, 코드 기반 인프라를 시각화하고 설명하기 쉽게 만드는 도구로 활용할 수 있다.

특히 팀 단위에서는 “Terraform 코드는 있는데 구조를 빠르게 설명하기 어렵다”는 문제가 자주 생긴다. 그런 상황에서 Brainboard 같은 시각화 도구는 온보딩과 커뮤니케이션에 도움이 될 수 있다. 다만 이것은 Terraform 자체를 대체하는 핵심 도구라기보다, Terraform을 더 이해하기 쉽게 도와주는 보조 도구로 보는 편이 적절하다.

정리

AWS 콘솔은 빠르게 시작하기에는 좋지만, 반복 작업이 많아지고 실습 환경이 늘어나면 관리 부담이 커진다. 무엇을 만들었는지 기록이 남지 않고, 정리도 수동이며, 비용 통제도 뒤늦게 이뤄지기 쉽다. Terraform은 이런 문제를 코드 기반 관리, 일괄 생성/삭제, 버전 관리, 자동화, 비용 예측으로 바꿔준다. 결국 Terraform의 가치는 단순히 “인프라를 코드로 쓴다”는 데 있지 않다. 인프라를 재현 가능하고, 리뷰 가능하고, 자동화 가능하며, 비용까지 예측 가능한 대상으로 바꾼다는 점에 있다.