Terraform(테라폼) 쉽게 이해하기

이민수
∙∙조회 11

테라폼이란?

테라폼은 "코드로 인프라를 만드는 도구" 입니다.
여기서 인프라란, 서버•데이터베이스•네트워크 같은 서비스를 운영하기 위해 필요한 IT 자원을 말합니다.


비유로 이해하기

기존 방식 - 수작업

집을 지을 때 설계도 없이, 인부에게 전화로 하나하나 지시하는 것과 같습니다.

"벽돌 여기 놓고, 창문 저기 내고, 문 이쪽에 달아주세요"

  • AWS 같은 클라우드 콘솔에 직접 로그인
  • 마우스로 클릭하여 서버를 하나하나 생성
  • 설정을 일일이 수동으로 변경

이 방식은 누가, 언제, 뭘 바꿨는지 알기 어렵고, 실수하기 쉽습니다.

테라폼 방식 - 설계도(코드)

건축 설계도를 그려놓고 "이 설계도대로 지어주세요"라고 하는 것과 같습니다.

  • 코드 파일에 "서버 1대, 데이터베이스 1개, 네트워크 이렇게" 라고 작성
  • 테라폼이 설계도를 읽고 자동으로 인프라를 생성

왜 사용해야 할까?

1. 기록이 남는다

코드로 작성하기 때문에 Git(버전 관리 도구)으로 변경 이력을 추적할 수 있습니다.
누가, 언제, 왜 바꿨는지 한눈에 확인 가능합니다.

2.실수가 줄어든다

수동으로 클릭하다 보면 설정을 빠뜨리거나 잘못 입력할 수 있습니다.
코드로 작성하면 항상 같은 결과가 나옵니다.

3. 복제가 쉽다

개발 환경을 만들어놨는데, 동일한 구성으로 운영 환경도 필요하다면?
코드를 복사해서 약간만 수정하면 똑같은 환경을 몇 분 만에 만들 수 있습니다.

4. 팀 협업이 편하다

"서버 설정 어떻게 했어?" 라고 물어볼 필요 없이, 코드를 보면 현재 인프라 상태를 바로 파악할 수 있습니다.

5. 정리(삭제)가 간편하다

테스트용으로 만든 인프라를 지울 때, 하나하나 찾아서 삭제할 필요 없이 명령어 하나로 만들었던 모든 것을 한 번에 제거할 수 있습니다.

어떤 원리로 동작할까?

테라폼은 크게 3단계로 동작합니다.

Step 1. 코드 작성 (Write)

원하는 인프라를 .tf 파일에 작성합니다.

예시) "AWS에 서버 1대를 만들어줘"

hcl
resource "aws_instance" "my_server" {
  ami = "ami-12345678" # 서버의 운영체제 이미지
  instance_type = "t3.micro" # 서버 사양
}

코드를 몰라도 괜찮습니다. 핵심은 "원하는 상태를 글로 적어놓는다" 는 것입니다.

Step 2. 미리보기 (Plan)

terraform plan 명령어를 실행하면, 테라폼이 "이렇게 바뀔 예정입니다" 라고 미리 알려줍니다.

hcl
+ aws_instance.my_server 가 새로 생성됩니다
  - 사양 : t3.micro
  - 운영체제 : ami-12345678 

실제로 아무것도 바뀌지 않습니다. 시뮬레이션입니다.
마치 네비게이션이 출발 전에 경로를 미리 보여주는 것과 같습니다.

Step 3. 적용 (Apply)

terraform apply 명령을 실행하면, 미리보기에서 확인한 대로 실제 인프라가 생성•변경•삭제됩니다.

핵심 개념 : "선언적" 방식

테라폼의 가장 중요한 특징은 "선언적(Declarative)" 이라는 점입니다.

 명령형 (기존 방식)선언형 (테라폼 방식)
비유"밀가루 반죽하고, 오븐 180도로 예열하고, 30분 구워줘""케이크 하나 만들어줘"
의미과정을 하나하나 지시최종 결과만 알려줌
장점세밀한 제어 가능간결하고 관리가 쉬움

테라폼에게는 "서버 2대가 있는 상태를 원해" 라고만 말하면 됩니다.
현재 서버가 0대면 2대를 만들고, 3대면 1대를 삭제합니다.
테라폼이 알아서 현재 상태 → 원하는 상태로 맞춰줍니다.

상태 파일 (State)

테라폼은 "지금 인프라가 어떤 상태인지" 를 기억하는 파일을 갖고 있습니다.
이것을 상태 파일(State File) 이라고 합니다.

[코드 : 원하는 상태] ← 비교 → [상태 파일 : 현재 상태] → [차이만큼 변경]

덕분에 코드를 수정하고 다시 적용하면, 바뀐 부분만 정확히 반영됩니다.

한 줄 요약

테라폼 = IT 인프라의 설계도를 코드로 작성하고, 자동으로 만들어주는 도구

수작업 대신 코드로 관리하면 → 기록이 남고, 실수가 줄고, 협업이 쉬워집니다.