๐Ÿš€ Terraform Day 20: ๋งž์ถค Terraform ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•œ ํ”„๋กœ๋•์…˜ ์ธํ”„๋ผ ๊ตฌ์ถ•

๋ฐœํ–‰: (2025๋…„ 12์›” 26์ผ ์˜ค์ „ 01:33 GMT+9)
6 min read
์›๋ฌธ: Dev.to

Source: Dev.to

๐Ÿง  Terraform ๋ชจ๋“ˆ์ด๋ž€?

Terraform ๋ชจ๋“ˆ์€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ, ์ž์ฒด ํฌํ•จ๋œ Terraform ์ฝ”๋“œ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์— ์ผ๋ฐ˜์ ์œผ๋กœ ํฌํ•จ๋˜๋Š” ํŒŒ์ผ:

  • main.tf โ€“ ๋ฆฌ์†Œ์Šค
  • variables.tf โ€“ ์ž…๋ ฅ๊ฐ’
  • outputs.tf โ€“ ๋…ธ์ถœ๋˜๋Š” ๊ฐ’

Terraform์€ ๋ชจ๋“  ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ชจ๋“ˆ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด:

  • ๋ณต์žก์„ฑ ์บก์Аํ™”
  • ํ‘œ์ค€ ๊ฐ•์ œ ์ ์šฉ
  • ์ธํ”„๋ผ ํŒจํ„ด ์žฌ์‚ฌ์šฉ
  • ํŒ€ ๋ฐ ํ™˜๊ฒฝ ์ „๋ฐ˜์— ๊ฑธ์นœ ๊น”๋”ํ•œ ํ™•์žฅ

๐Ÿงฉ Terraform ๋ชจ๋“ˆ ์ข…๋ฅ˜

1๏ธโƒฃ ํผ๋ธ”๋ฆญ ๋ชจ๋“ˆ

  • Terraform Registry์—์„œ ์ œ๊ณต
  • ๊ณต๊ธ‰์ž ๋˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌ
  • ๋‚ด๋ถ€์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Œ

2๏ธโƒฃ ํŒŒํŠธ๋„ˆ ๋ชจ๋“ˆ

  • HashiCorp์™€ ํŒŒํŠธ๋„ˆ๊ฐ€ ๊ณต๋™ ๊ด€๋ฆฌ
  • ๊ฒ€์ฆ๋œ ํ”„๋กœ๋•์…˜ ์ค€๋น„ ์ƒํƒœ
  • ์—ฌ์ „ํžˆ ์™ธ๋ถ€์—์„œ ์ œ์–ด

3๏ธโƒฃ ์ปค์Šคํ…€ ๋ชจ๋“ˆ (Dayโ€ฏ20์˜ ์ดˆ์ )

  • ์—ฌ๋Ÿฌ๋ถ„์ด๋‚˜ ์กฐ์ง์ด ์ง์ ‘ ์ƒ์„ฑยท์œ ์ง€ ๊ด€๋ฆฌ
  • ์ฝ”๋“œ, ๋ฒ„์ „ ๊ด€๋ฆฌ, ๋ณด์•ˆ, ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ œ์–ด

ํ”„๋กœ๋•์…˜ ์‹œ์Šคํ…œ์€ ์ปค์Šคํ…€ ๋ชจ๋“ˆ์— ํฌ๊ฒŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ— ๋ฃจํŠธ ๋ชจ๋“ˆ vs ์ปค์Šคํ…€ ๋ชจ๋“ˆ

๐Ÿ”น ๋ฃจํŠธ ๋ชจ๋“ˆ

  • Terraform ํ”„๋กœ์ ํŠธ์˜ ์ง„์ž…์ 
  • terraform init์™€ terraform apply๊ฐ€ ์‹คํ–‰๋˜๋Š” ์œ„์น˜
  • ์ „์ฒด ์ธํ”„๋ผ๋ฅผ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
  • ์ปค์Šคํ…€ ๋ชจ๋“ˆ์„ ์†Œ์Šคํ•˜๊ณ  ์—ฐ๊ฒฐ

๐Ÿ”น ์ปค์Šคํ…€ ๋ชจ๋“ˆ

  • ๋ฃจํŠธ ๋ชจ๋“ˆ ๋‚ด๋ถ€์˜ ์„œ๋ธŒ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ €์žฅ
  • ๊ฐ ๋ชจ๋“ˆ์€ ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ€์ง
  • ์„œ๋กœ ์ง์ ‘ ํ†ต์‹ ํ•˜์ง€ ์•Š์Œ
  • ๋ฃจํŠธ ๋ชจ๋“ˆ์ด ์ค‘์•™ ์ฝ”๋””๋„ค์ดํ„ฐ ์—ญํ•  ์ˆ˜ํ–‰

๐Ÿ“‚ ์ „ํ˜•์ ์ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ (Dayโ€ฏ20 ์Šคํƒ€์ผ)

terraform-project/
โ”œโ”€โ”€ main.tf          # Root module
โ”œโ”€โ”€ variables.tf
โ”œโ”€โ”€ outputs.tf
โ”œโ”€โ”€ modules/
โ”‚   โ”œโ”€โ”€ vpc/
โ”‚   โ”‚   โ”œโ”€โ”€ main.tf
โ”‚   โ”‚   โ”œโ”€โ”€ variables.tf
โ”‚   โ”‚   โ””โ”€โ”€ outputs.tf
โ”‚   โ”œโ”€โ”€ eks/
โ”‚   โ”‚   โ”œโ”€โ”€ main.tf
โ”‚   โ”‚   โ”œโ”€โ”€ variables.tf
โ”‚   โ”‚   โ””โ”€โ”€ outputs.tf
โ”‚   โ”œโ”€โ”€ iam/
โ”‚   โ””โ”€โ”€ secrets/

๊ฐ ๋ชจ๋“ˆ์€ ํ•˜๋‚˜์˜ ์ธํ”„๋ผ ๋„๋ฉ”์ธ์„ ์บก์Аํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” ๋ชจ๋“ˆ ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ (๋งค์šฐ ์ค‘์š”)

์ปค์Šคํ…€ ๋ชจ๋“ˆ์€ ์„œ๋กœ ์ง์ ‘ ํ†ต์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ†ต์‹ ์€ ๋ฃจํŠธ ๋ชจ๋“ˆ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค:

  1. ๋ฃจํŠธ ๋ชจ๋“ˆ์ด ์ปค์Šคํ…€ ๋ชจ๋“ˆ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  2. ์ž…๋ ฅ ๋ณ€์ˆ˜๋“ค์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์ปค์Šคํ…€ ๋ชจ๋“ˆ์ด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  4. ์ปค์Šคํ…€ ๋ชจ๋“ˆ์ด ์ถœ๋ ฅ๊ฐ’์„ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฃจํŠธ ๋ชจ๋“ˆ์ด ์ถœ๋ ฅ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  6. ์ถœ๋ ฅ๊ฐ’์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด:

  • ๋А์Šจํ•œ ๊ฒฐํ•ฉ
  • ๋ช…ํ™•ํ•œ ์˜์กด ํ๋ฆ„
  • ์œ ์ง€ ๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜

๐Ÿ”— ์˜ˆ์‹œ: VPC โ†’ EKS ์˜์กด ํ๋ฆ„

  • VPC ๋ชจ๋“ˆ์ด vpc_id๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฃจํŠธ ๋ชจ๋“ˆ์ด vpc_id๋ฅผ ๋ฐ›์•„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฃจํŠธ ๋ชจ๋“ˆ์ด vpc_id๋ฅผ EKS ๋ชจ๋“ˆ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • EKS ๋ฆฌ์†Œ์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ VPC ์•ˆ์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ธํ”„๋ผ๊ฐ€ ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ ์ด ํŒจํ„ด์€ ๊น”๋”ํ•˜๊ฒŒ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“ฅ ๋ชจ๋“ˆํ˜• ์„ค๊ณ„์—์„œ ๋ณ€์ˆ˜์™€ ์ถœ๋ ฅ

๋ณ€์ˆ˜

  • ๋ชจ๋“ˆ์ด ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฐ’์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฃจํŠธ ๋ชจ๋“ˆ์—์„œ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ์„ ์œ ์—ฐํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ

  • ๋ชจ๋“ˆ์ด ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜๋Š” ๊ฐ’์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฃจํŠธ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ ๊ฐ„ ์กฐ์ •์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์€ ํ•จ์ˆ˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค: ์ž…๋ ฅ โ†’ ์ฒ˜๋ฆฌ โ†’ ์ถœ๋ ฅ.

๐Ÿ ๊ฒฐ๋ก 

Dayโ€ฏ20์€ Terraform์„ ํ•™์Šต ๋‹จ๊ณ„์—์„œ ์•„ํ‚คํ…์ฒ˜ ๋‹จ๊ณ„๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ์„ธ์…˜์„ ํ†ตํ•ด ๊ฐ•์กฐ๋˜๋Š” ์ ์€:

  • Terraform์€ ๋‹จ์ˆœํžˆ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ.
  • Terraform์€ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค.
  • ์ปค์Šคํ…€ ๋ชจ๋“ˆ์ด ํ”„๋กœ๋•์…˜ IaC์˜ ํ•ต์‹ฌ์ด๋‹ค.

๋ชจ๋“ˆํ˜• Terraform ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งˆ์Šคํ„ฐํ•˜๋ฉด ๋Œ€๊ทœ๋ชจ, ์œ ์ง€ ๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ธ‰ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹คโ€”์‹ค์ œ ํ˜„์žฅ์—์„œ Terraform์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

Terraform ์Šคํƒ

๊ฐœ์š”: ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํŒจํ„ด์„ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋‹ค์ค‘ ์ง€์—ญ ํŒฌโ€‘์•„์›ƒ, ๊ทธ๋ฆฌ๊ณ  Kubernetes ํ”Œ๋žซํผ์— ๊ฑธ์ณ ๋ณด์—ฌ์ฃผ๋Š” ํ”„๋กœ๋•์…˜ ์ค€๋น„๊ฐ€ ๋œ Terraform Stacks ๋ชจ์Œ.

Terraform ํƒ€์ž… ์ œ์•ฝ: ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ทœ๋ชจ AWS๋ฅผ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€

Terraform์˜ type constraints๋Š” AWS ๊ธฐ๋ฐ˜ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์‰ฝ๊ฒŒ ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” IaC๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. AWS var๋ฅผ ๋ณด์žฅํ•˜๋Š”โ€ฆ