
Terraform은 클라우드와 온프레미스 인프라를 코드로 정의해 만들고, 바꾸고, 버전 관리할 수 있게 해 주는 HashiCorp의 IaC(Infrastructure as Code) 도구예요. 콘솔에서 버튼을 눌러 서버와 네트워크를 하나씩 만드는 대신, 설정 파일에 원하는 상태를 적어 두면 Terraform이 각 서비스의 API를 호출해 그대로 만들어 줍니다. 이 블로그의 AWS·Azure·Ncloud 구축 글이 모두 Terraform으로 진행돼서, 그 글들을 읽기 전에 알아 두면 좋은 기본 개념을 HashiCorp 공식 문서 기준으로 정리했어요.
한눈에 보기
| 개념 | 한 줄 설명 |
|---|---|
| IaC | 인프라를 코드(설정 파일)로 정의하고 관리하는 방식 |
| provider | AWS, Azure, Ncloud 같은 서비스의 API와 Terraform을 이어 주는 플러그인 |
| resource | 만들고 관리할 대상 하나(VPC, 서브넷, VM 등) |
| state | Terraform이 관리 중인 실제 인프라를 기록한 파일(terraform.tfstate) |
| 워크플로 | Write(작성) → Plan(계획 확인) → Apply(적용) |
IaC 뜻: 인프라를 코드로 관리한다는 것
IaC(Infrastructure as Code)는 서버, 네트워크, 방화벽 규칙 같은 인프라를 사람이 콘솔에서 직접 만드는 대신 코드로 적어 두고 그 코드로 만드는 방식이에요.
| 구분 | 콘솔에서 직접 만들기 | IaC(Terraform) |
|---|---|---|
| 만드는 방법 | 화면에서 메뉴를 하나씩 클릭 | 설정 파일을 쓰고 명령어 실행 |
| 같은 환경 다시 만들기 | 처음부터 다시 클릭 | 같은 파일로 다시 적용 |
| 변경 이력 | 기억이나 메모에 의존 | Git 같은 버전 관리로 남음 |
| 변경 전 확인 | 누르는 순간 바로 반영 | plan으로 무엇이 바뀌는지 먼저 확인 |

실습에서는 다 쓴 환경을 명령어 하나로 지울 수 있다는 점이 특히 편해요. 클라우드는 켜 둔 리소스만큼 요금이 나가니까, 실습이 끝나면 만든 것을 빠짐없이 지우는 게 중요해요.
Terraform 기본 구조: provider·resource·state
provider: 서비스와 연결하는 플러그인
Terraform은 각 클라우드의 API를 통해 리소스를 관리해요. 그 API와 Terraform을 이어 주는 게 provider예요. 공식 문서에 따르면 Terraform Registry에는 AWS, Azure, Google Cloud, Kubernetes를 비롯해 수천 개의 provider가 있어요. Ncloud도 provider가 있어서 같은 방식으로 다룰 수 있어요.
resource: 실제로 만들 대상
resource 블록 하나가 만들 대상 하나예요. 공식 문서의 예시는 이런 모양이에요.
resource "aws_instance" "example" {
ami = "abc123"
}
resource: 블록 종류"aws_instance": 리소스 유형(AWS provider의 EC2 인스턴스)"example": 이 코드 안에서 부르는 이름- 중괄호 안: 설정값
Terraform 설정 언어는 HCL이라는 더 일반적인 언어를 바탕으로 해요. 설정 파일은 보통 .tf 확장자로 저장해요.
state: 지금 무엇을 관리하고 있는지 적어 둔 기록
Terraform은 자기가 만든 실제 인프라를 state 파일에 기록해요. 기본값은 작업 폴더의 terraform.tfstate이고, 직전 상태는 terraform.tfstate.backup으로 남아요. 설정 파일과 state를 비교해서 무엇을 새로 만들고, 바꾸고, 지울지 정해요.
헷갈리기 쉬운 점
state 파일에는 비밀번호나 키 같은 민감한 값이 들어갈 수 있어요. 공식 문서는 접근 제어와 잠금(lock)이 없는 곳, 예를 들어 Git 저장소에 state를 그대로 올리지 말라고 안내해요. 그리고 state는 JSON 파일이지만 손으로 고치지 말고terraform state명령어로 다뤄야 해요.
Terraform 워크플로: Write → Plan → Apply

- Write(작성):
.tf파일에 provider와 resource를 적어요. 여러 provider와 서비스를 한 설정에 함께 쓸 수 있어요. - Plan(계획): Terraform이 무엇을 만들고, 바꾸고, 지울지 실행 계획을 보여 줘요. 실제로는 아직 아무것도 바뀌지 않아요.
- Apply(적용): 계획을 승인하면 리소스 간 의존 순서에 맞춰 변경을 실행해요. 서로 의존하지 않는 리소스는 동시에 만들어요.
실제 명령어로는 terraform init(provider 내려받기) → terraform plan → terraform apply 순서이고, 다 쓴 환경은 terraform destroy로 지워요. 각 명령어는 다음 글에서 따로 정리할 예정이에요.
Terraform을 쓸 때 주의할 점
- 콘솔에서 직접 바꾸지 않기: Terraform으로 만든 리소스를 콘솔에서 손으로 고치면 코드·state와 실제 상태가 어긋나요. 바꿀 일이 있으면
.tf파일을 고쳐서 다시 적용해요. - plan을 꼭 읽기: apply 전에 plan 결과에서 지워지는(destroy) 항목이 있는지 확인해요. 설정을 조금 바꿨는데 리소스가 지워졌다가 새로 만들어지는 경우도 있어요.
- 액세스 키는 코드에 쓰지 않기: provider 설정에 클라우드 액세스 키를 그대로 적으면 Git에 올라가는 순간 노출돼요. 환경 변수나 CLI 자격 증명을 쓰는 방법은 이 시리즈에서 따로 다룰게요.
- 실습 뒤 destroy: 요금이 나오는 리소스(NAT 게이트웨이, 로드밸런서, DB 등)는 실습이 끝나면 바로 지워요.
자주 묻는 질문
Q. Terraform은 무료인가요?
Terraform CLI는 내려받아 바로 쓸 수 있어요. 팀 협업용 HCP Terraform 같은 관리형 서비스는 요금제가 따로 있으니 HashiCorp 사이트에서 확인하세요. Terraform으로 만든 클라우드 리소스 요금은 각 클라우드에 따로 나가요.
Q. Terraform과 Ansible은 무엇이 다른가요?
Terraform은 서버·네트워크 같은 인프라 자체를 만들고 지우는 데 많이 쓰고, Ansible은 이미 있는 서버 안에 패키지를 깔고 설정하는 데 많이 써요. 둘을 함께 쓰는 경우도 흔해요.
Q. AWS 콘솔에서 만든 리소스도 Terraform으로 관리할 수 있나요?terraform import로 기존 리소스를 state에 등록할 수 있어요. 다만 그 리소스에 맞는 설정 코드는 따로 맞춰 써야 해요.
Q. state 파일을 지우면 어떻게 되나요?
Terraform이 자기가 만든 리소스를 모르게 돼요. 실제 리소스는 그대로 남아 있는데 관리할 수 없게 되니, state는 백업하거나 원격 백엔드에 두는 게 좋아요.
3줄 요약
- Terraform은 인프라를 코드로 정의해 만들고 바꾸는 IaC 도구예요.
- provider는 클라우드 API와의 연결, resource는 만들 대상, state는 관리 중인 인프라의 기록이에요.
- Write → Plan → Apply 순서로 쓰고, apply 전에 plan을 꼭 읽어요.
Terraform 실습 글
참고 자료
- HashiCorp Developer: What is Terraform?
- HashiCorp Developer: State
- HashiCorp Developer: Configuration syntax
이 글은 2026년 10월 기준 HashiCorp 공식 문서를 바탕으로 정리했어요. 버전이 바뀌면 명령어 옵션이나 동작이 달라질 수 있으니 공식 문서도 함께 확인해 주세요.
'terraform' 카테고리의 다른 글
| Terraform 명령어 순서 틀리면 생기는 일|init·plan·apply·destroy (0) | 2026.10.30 |
|---|---|
| Terraform 설치 방법|Windows·Rocky Linux 설치와 버전 확인 (0) | 2026.10.29 |
| Terraform을 이용해 Azure 인프라 구축하기(dns, db server(mysql)) (0) | 2025.03.30 |
| Terraform을 이용해 Azure 인프라 구축하기(application gateway, virtual machine, Auto scaling) (0) | 2025.03.27 |
| Terraform을 이용해 Azure 인프라 구축하기 -1 (rg 생성, 서브넷 생성, 네트워크 인터페이스 구축, NAT 게이트웨이 구축) (0) | 2025.03.20 |