본문으로 이동
Kim Jongwon
Projects

Terraform 구조 · MSP 8기 Terraform 모듈 리팩터링 교육 미션 · 2026.04.09 - 2026.04.10

AWS Terraform Module Refactoring Mission - MSP 8기 교육 미션

MSP 8기 Terraform 모듈 리팩터링 교육 미션

MSP 8기 Terraform 모듈 리팩터링 교육 미션에서 flat 구성을 module interface와 output chaining 구조로 바꿨습니다.

Modules

4

networking, secrets, messaging, cache

Envs

dev/prod

state key와 변수 분리

연결

outputs

module output → input chaining

Terraform module map

교육 미션 기반 module 심화 구조

flat resource 구성을 dev/prod root와 module interface로 나누었습니다.

M1

Foundation

VPC · Subnet · NAT · SG · IAM

M2

Secrets

SSM Parameter Store · Secrets Manager

M3

Messaging

SNS fan-out · SQS · DLQ

M4

Cache

ElastiCache Redis · TLS · AUTH

M5

Modular

modules + dev/prod root

environments/dev

NAT 1개 · cache.t3.micro · state key: dev

environments/prod

NAT 2개 · cache.r6g.large · state key: prod

MSP 8기 선택 심화 Terraform module/output chaining 구조

교육 미션 심화

Terraform module 리팩터링 구조

교육 미션 기반 flat resource를 module interface, dev/prod root, output chaining으로 리팩터링했습니다.

  • 기본 미션 1~4에서 networking, secrets, messaging, cache 리소스를 flat Terraform으로 각각 작성했습니다.
  • Mission 5 선택 심화에서 4개 module로 책임을 나누고, environments/dev · environments/prod root module에서 같은 module을 다른 변수로 호출합니다.
  • networking/secrets output을 cache module input으로 전달해 terraform_remote_state 의존을 root module 내부 chaining으로 대체했습니다.
  • dev/prod는 state key, NAT gateway 수, message retention, Redis node/cluster 설정을 다르게 두어 비용 절감과 고가용성 가정을 코드에 반영합니다.
  • S3 backend, terraform.tfvars.example, lock file, troubleshooting 문서까지 포함해 교육 미션 기반 리팩터링 결과와 재현 절차를 작성했습니다.
TerraformAWS modulesS3 BackendElastiCacheSecrets Manager

module/output 심화

교육 미션 기반 module 구조

교육 미션에서 작성한 리소스가 flat 구성에 머물면 module interface와 환경별 차이를 설명하기 어렵습니다. 선택 심화 과제에서는 output chaining과 state key로 그 차이를 코드에 명시하는 것이 핵심이었습니다.

작업 파트

  • 기본 미션 1~4의 flat Terraform resource 구성을 작성하고 리소스별 output interface를 정의했습니다.
  • Mission 5 선택 심화에서 networking, secrets, messaging, cache module 인터페이스를 설계했습니다.
  • environments/dev와 environments/prod root module을 분리하고 state key, NAT gateway, cache node, queue retention 차이를 코드에 명시했습니다.

핵심 결과

  • MSP 8기 Terraform module 교육 미션 선택 심화 과제
  • Mission 5 최종 구조: modules/networking, secrets, messaging, cache
  • environments/dev와 environments/prod 디렉토리 기반 환경 분리

모듈 구조

Module/output chaining 리팩터링 구조

MSP 8기 Terraform module 교육 미션 기반 리팩터링에서 dev/prod root와 module output 연결을 다이어그램으로 제시합니다.

dev와 prod 환경의 state key, NAT gateway, Redis node, message retention 차이를 나타낸 비교표
dev vs prod 환경 설정 비교
networking과 secrets 모듈의 output이 cache 모듈 input으로 전달되는 root module 내부 chaining 구조
module output → input chaining 구조

output chaining

선택 심화 module 연결 코드

프로젝트의 핵심 구현 지점입니다.

선택 심화 root module 연결 코드

mission5-modular/environments/dev/main.tf

terraform {
  backend "s3" {
    bucket = "<your-bucket-name>"
    key    = "deepdive/mission5/dev/terraform.tfstate"
    region = "us-east-2"
  }
}

module "networking" {
  source             = "../../modules/networking"
  single_nat_gateway = true
}

module "secrets" {
  source = "../../modules/secrets"
}

module "cache" {
  source = "../../modules/cache"

  private_subnet_ids = module.networking.private_subnet_ids
  sg_redis_id        = module.networking.sg_redis_id
  redis_auth_token   = module.secrets.redis_auth_token

  node_type                = var.cache_node_type
  num_cache_clusters       = var.cache_num_clusters
  apply_immediately        = var.cache_apply_immediately
  snapshot_retention_limit = var.cache_snapshot_retention
}

모듈 구조

교육 미션 IaC 구조

MSP 8기 Terraform module 교육 미션 범위에서 module interface, 환경 분리, output chaining을 검증했습니다.

module/output chaining

  • MSP 8기 Terraform module 교육 미션 범위에서 module 설계, 환경 분리, output chaining을 validate/plan과 문서로 검증했습니다.
  • dev/prod 차이는 state key, NAT gateway 수, cache node type, queue retention 변수로 코드에 명시되어 있습니다.