개요
이 실습에서는 데이터베이스 마이그레이션 프로젝트를 위한 안전한 네트워크 인프라를 만듭니다. 공용 VPC와 비공개 VPC를 모두 만들고 각각에 적절한 방화벽 규칙을 적용합니다. 각 네트워크에 가상 머신을 추가하고 가상 머신 간의 통신을 테스트합니다. 마이그레이션 프로젝트에서 활용할 수 있는 더 현실적인 워크플로를 보여주기 위해 Terraform을 사용하여 이 모든 작업을 수행합니다.
목표
이 실습에서는 Terraform을 사용하여 다음 작업을 수행하는 방법을 알아봅니다.
- 네트워크 생성 자동화
- 방화벽 규칙 만들기
- 가상 머신 만들기
- 비공개 네트워크 만들기
설정 및 요건
이 작업에서는 실습을 위한 초기화 단계를 수행합니다.
각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.
-
시크릿 창을 사용하여 Google Skills에 로그인합니다.
-
실습 사용 가능 시간(예: 1:15:00)을 참고하여 해당 시간 내에 완료합니다.
일시중지 기능은 없습니다. 필요한 경우 다시 시작할 수 있지만 처음부터 시작해야 합니다.
-
준비가 되면 실습 시작을 클릭합니다.
-
실습 사용자 인증 정보(사용자 이름 및 비밀번호)를 기록해 두세요. Google Cloud Console에 로그인합니다.
-
Google Console 열기를 클릭합니다.
-
다른 계정 사용을 클릭한 다음, 안내 메시지에 이 실습에 대한 사용자 인증 정보를 복사하여 붙여넣습니다.
다른 사용자 인증 정보를 사용하는 경우 오류가 발생하거나 요금이 부과됩니다.
-
약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
작업 1. Terraform을 사용하여 네트워크 생성 자동화
-
탐색 메뉴(
)에서 홈을 클릭합니다.
-
프로젝트 정보 섹션에서 프로젝트 ID를 찾아 복사하여 텍스트 파일에 붙여넣습니다. 이 파일은 나중에 필요합니다.

-
콘솔의 오른쪽 상단에 있는 Cloud Shell 활성화(
) 아이콘을 클릭합니다. Cloud Shell 터미널이 브라우저 창 하단에 있는 창에서 열립니다.
-
terraform-networks라는 디렉터리를 만들고 해당 디렉터리로 변경합니다.
mkdir terraform-networks
cd terraform-networks
- 이 실습에 필요한 Terraform 파일을 만듭니다.
touch provider.tf
touch terraform.tfvars
touch test-server-linux.tf
touch variables.tf
touch vpc-network-public.tf
touch vpc-firewall-rules-public.tf
touch public-test-server-linux.tf
touch random-id-generator.tf
-
ls를 입력하여 파일이 terraform-networks 폴더에 생성되었는지 확인합니다.
-
Cloud Shell에서 편집기 열기를 클릭한 다음, terraform-networks 폴더를 선택하고 provider.tf 파일을 엽니다.
-
다음 코드를 입력하여 Google Cloud Terraform 프로바이더를 구성합니다.
terraform {
required_version = ">= 0.12"
}
provider "google" {
project = var.project_id
region = var.gcp_region_1
zone = var.gcp_zone_1
}
위 코드의 변수를 확인합니다. 이제 이러한 변수와 다른 변수를 만듭니다.
-
variables.tf 파일을 열고 다음 코드를 입력합니다.
# GCP Project ID
variable "project_id" {
type = string
description = "GCP Project ID"
}
# Region to use for Subnet 1
variable "gcp_region_1" {
type = string
description = "GCP Region"
}
# Zone used for VMs
variable "gcp_zone_1" {
type = string
description = "GCP Zone"
}
# Define subnet for public network
variable "subnet_cidr_public" {
type = string
description = "Subnet CIDR for Public Network"
}
이전 파일에서 변수를 정의하고 다른 파일에서 변수를 설정했습니다.
-
terraform.tfvars 파일을 열고 다음 코드를 추가합니다.
# GCP Settings
project_id = "{{{project_0.project_id|Project ID}}}"
gcp_region_1 = "{{{ project_0.default_region | "REGION" }}}"
gcp_zone_1 = "{{{ project_0.default_zone | "ZONE" }}}"
# GCP Network Variables
subnet_cidr_public = "10.1.1.0/24"
-
vpc-network-public.tf 파일을 열고 다음을 추가합니다.
resource "google_compute_network" "public-vpc" {
name = "public-vpc"
auto_create_subnetworks = "false"
routing_mode = "GLOBAL"
}
resource "google_compute_subnetwork" "public-subnet_1" {
name = "public-subnet-1"
ip_cidr_range = var.subnet_cidr_public
network = google_compute_network.public-vpc.name
region = var.gcp_region_1
}
참고: 위의 Terraform 코드는 서브넷이 하나인 VPC를 만듭니다. 서브넷에서 ip_cidr_range와 region의 두 변수를 확인합니다. 또한 network 속성이 서브넷 이전에 생성된 VPC를 다시 참조하는 방식도 확인하세요.
-
지금까지 절차가 제대로 진행되었는지 확인하려면 Google Cloud 콘솔의 탐색 메뉴(
)에서 VPC 네트워크를 클릭합니다. default라는 이름의 네트워크가 하나 있을 것입니다.
-
Cloud Shell에서 터미널 열기를 클릭합니다. 올바른 디렉터리에 있는지 확인합니다.
cd ~/terraform-networks
- Terraform을 초기화하려면 다음 명령어를 입력합니다.
terraform init
'Terraform has been successfully initialized!'(Terraform이 성공적으로 초기화되었습니다.)라는 메시지가 표시되어야 합니다.
- Terraform 계획을 빌드하려면 다음 명령어를 입력합니다.
terraform plan
오류가 없는지 확인하고 생성될 리소스를 살펴봅니다.
계획에 네트워크와 서브네트워크라는 두 개의 리소스가 생성된다고 표시됩니다.
- 리소스를 만들려면 다음 명령어를 실행합니다.
terraform apply -auto-approve
-auto-approve 파라미터는 프롬프트 없이 스크립트를 실행합니다.
- 스크립트가 완료될 때까지 기다린 다음, 콘솔의 VPC 네트워크 툴바에서 새로고침을 클릭합니다. 새 네트워크와 서브넷이 표시됩니다.
네트워크 구성 작업은 아직 끝나지 않았습니다.
- 다음 명령어를 사용해 방금 만든 항목을 삭제합니다.
terraform destroy -auto-approve
-
새로고침을 클릭하여 네트워크가 삭제되었는지 확인합니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
Terraform을 사용하여 네트워크 생성 자동화
검토
지금까지 Terraform을 사용하여 네트워크와 서브넷을 만들었습니다. 다음으로 방화벽 규칙을 만듭니다.
작업 2. Terraform을 사용하여 방화벽 규칙 만들기
-
Cloud Shell에서 편집기 열기를 클릭합니다. terraform-networks 폴더에서 vpc-firewall-rules-public.tf 파일을 엽니다.
-
이 네트워크의 머신에 SSH를 허용하는 방화벽 규칙을 추가하려면 다음 코드를 추가합니다.
# allow ssh
resource "google_compute_firewall" "public-allow-ssh" {
name = "${google_compute_network.public-vpc.name}-allow-ssh"
network = google_compute_network.public-vpc.name
allow {
protocol = "tcp"
ports = ["22"]
}
source_ranges = [
"0.0.0.0/0"
]
target_tags = ["allow-ssh"]
}
참고: 이 규칙은 어디서나 SSH를 허용하지만 'allow-ssh' 태그가 있는 머신에만 허용합니다.
- Windows 머신에는 SSH가 아닌 RDP가 필요합니다. SSH 규칙 아래에 다음 RDP 규칙을 추가합니다.
# allow rdp
resource "google_compute_firewall" "public-allow-rdp" {
name = "${google_compute_network.public-vpc.name}-allow-rdp"
network = google_compute_network.public-vpc.name
allow {
protocol = "tcp"
ports = ["3389"]
}
source_ranges = [
"0.0.0.0/0"
]
target_tags = ["allow-rdp"]
}
핑은 테스트에 유용합니다.
- 이전 규칙 아래에 다음 규칙을 추가하여 사용 설정합니다.
# allow ping only from everywhere
resource "google_compute_firewall" "public-allow-ping" {
name = "${google_compute_network.public-vpc.name}-allow-ping"
network = google_compute_network.public-vpc.name
allow {
protocol = "icmp"
}
source_ranges = [
"0.0.0.0/0"
]
}
- 이전과 마찬가지로 터미널을 전환하고 다음 명령어를 실행하여 오류를 확인하고 생성될 항목을 확인합니다.
terraform plan
- 다음 Terraform 명령어를 실행하고 콘솔을 사용하여 네트워크, 서브넷, 방화벽 규칙이 모두 생성되는지 확인합니다.
terraform apply -auto-approve
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
Terraform을 사용하여 방화벽 규칙 만들기
검토
이제 네트워크와 몇 가지 방화벽 규칙이 갖춰졌습니다. 다음으로 네트워크에 테스트 서버를 추가하고 방화벽 규칙이 작동하는지 확인합니다.
작업 3. Terraform을 사용하여 가상 머신 만들기
- Cloud Shell 코드 편집기를 열고 random-id-generator.tf 파일을 열어 다음 코드를 추가합니다.
# Terraform plugin for creating random ids
resource "random_id" "instance_id" {
byte_length = 4
}
이 Terraform 플러그인은 프로그래매틱 방식으로 추가된 VM의 고유한 이름을 생성하는 데 사용됩니다.
- 공용 네트워크에서 가상 머신을 만들려면 test-server-linux.tf 파일을 열고 다음 코드를 추가합니다.
# Create Test Server in Public VPC
resource "google_compute_instance" "test-server-linux" {
name = "public-test-server-linux-${random_id.instance_id.hex}"
machine_type = "f1-micro"
zone = var.gcp_zone_1
tags = ["allow-ssh"]
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
metadata_startup_script = "sudo apt-get update;"
network_interface {
network = google_compute_network.public-vpc.name
subnetwork = google_compute_subnetwork.public-subnet_1.name
access_config { }
}
}
output "test-server-linux" {
value = google_compute_instance.test-server-linux.name
}
output "test-server-linux-external-ip" {
value = google_compute_instance.test-server-linux.network_interface.0.access_config.0.nat_ip
}
output "test-server-linux-internal-ip" {
value = google_compute_instance.test-server-linux.network_interface.0.network_ip
}
참고: 출력 변수는 생성된 머신의 이름과 내부 및 외부 IP 주소를 반환합니다. 또한 이 머신에는 'allow-ssh' 태그가 지정되어 있으므로 연결할 수 있습니다.
마지막으로 network_interface 섹션의 코드를 살펴보세요. 이 코드는 앞서 만든 공용 네트워크에 이 머신이 있도록 구성합니다.
- 앞에서와 같이 Terraform plan 및 apply 명령어를 실행하여 이 머신을 만듭니다. 오류가 표시되면 다시 이 두 명령어를 실행하기 전에 terraform init를 다시 실행해야 할 수 있습니다.
명령어 실행이 완료되면 VM 이름과 내부 및 외부 IP 주소가 표시됩니다.
-
Cloud Shell 터미널에서 해당 머신의 외부 IP 주소를 핑할 수 있는지 확인합니다.
-
콘솔에서 Compute Engine 서비스로 이동하여 방금 만든 VM을 확인합니다.
-
SSH를 클릭하여 방화벽 규칙이 작동하는지 확인한 다음, SSH 세션을 종료합니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
Terraform을 사용하여 가상 머신 만들기
작업 4. Terraform을 사용하여 비공개 네트워크 만들기
-
공용 네트워크의 구성을 가이드로 사용하고 두 번째 비공개 네트워크를 만듭니다. variables.tf 파일에서 비공개 서브넷 IP CIDR 범위의 변수를 추가하고 terraform.tfvars 파일에서 값을 설정합니다.
-
vpc-network-public.tf 파일을 복제하고 이름과 변수를 적절하게 변경합니다.
-
공개 방화벽 규칙을 가이드로 사용하여 비공개 네트워크에 대한 방화벽 규칙을 추가합니다. source_ranges 섹션에서 모든 소스의 트래픽을 허용하지 말고 공개 서브넷 IP CIDR 범위의 트래픽만 허용합니다.
-
공개 서버를 가이드로 사용하여 비공개 네트워크에 테스트 서버를 만듭니다.
참고: 이 실습을 직접 완료해 보세요. 문제가 발생하면 GitHub의 다음 URL(GoogleCloudPlatform/training-data-analyst)에서 전체 솔루션을 확인할 수 있습니다.
- 모든 항목을 생성한 후에는 공개 테스트 서버에 SSH를 통해 연결해 보세요. 비공개 네트워크의 서버에는 아직 액세스할 수 없습니다. 다음 실습에서 이 문제를 해결합니다.
수고하셨습니다. 이 실습에서는 데이터베이스 마이그레이션 프로젝트를 위한 안전한 네트워크 인프라를 만들었습니다. 공용 VPC와 비공개 VPC를 모두 생성하고 각각에 적절한 방화벽 규칙을 적용했습니다. 각 네트워크에 가상 머신을 추가하고 가상 머신 간의 통신을 테스트했습니다. 이 모든 작업을 Terraform을 사용하여 수행했습니다.
실습 종료하기
실습을 완료하면 실습 종료를 클릭합니다. Google Skills에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.
실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.
별점의 의미는 다음과 같습니다.
- 별표 1개 = 매우 불만족
- 별표 2개 = 불만족
- 별표 3개 = 중간
- 별표 4개 = 만족
- 별표 5개 = 매우 만족
의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.
의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.
Copyright 2026 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.