서버·클라우드 인프라 실습 노트

리눅스·윈도우 서버부터 Docker, Terraform으로 만드는 AWS·Azure·Ncloud 인프라까지

terraform

Terraform이란? IaC 뜻과 기본 구조 정리|provider·resource·state

kkuniyo 2026. 10. 28. 11:18
반응형

Terraform이란 대표 이미지, IaC 뜻과 provider·resource·state 기본 구조

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 IaC 방식 비교 도식

실습에서는 다 쓴 환경을 명령어 하나로 지울 수 있다는 점이 특히 편해요. 클라우드는 켜 둔 리소스만큼 요금이 나가니까, 실습이 끝나면 만든 것을 빠짐없이 지우는 게 중요해요.

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

Terraform 워크플로 Write Plan Apply 단계와 state 파일 관계 도식

  1. Write(작성): .tf 파일에 provider와 resource를 적어요. 여러 provider와 서비스를 한 설정에 함께 쓸 수 있어요.
  2. Plan(계획): Terraform이 무엇을 만들고, 바꾸고, 지울지 실행 계획을 보여 줘요. 실제로는 아직 아무것도 바뀌지 않아요.
  3. 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줄 요약

  1. Terraform은 인프라를 코드로 정의해 만들고 바꾸는 IaC 도구예요.
  2. provider는 클라우드 API와의 연결, resource는 만들 대상, state는 관리 중인 인프라의 기록이에요.
  3. Write → Plan → Apply 순서로 쓰고, apply 전에 plan을 꼭 읽어요.

Terraform 실습 글

참고 자료


이 글은 2026년 10월 기준 HashiCorp 공식 문서를 바탕으로 정리했어요. 버전이 바뀌면 명령어 옵션이나 동작이 달라질 수 있으니 공식 문서도 함께 확인해 주세요.

반응형