03. 프라이빗 서브넷 환경 (서브넷, 라우팅)
03. 프라이빗 서브넷 환경 (서브넷, 라우팅)
작성일: 2026-05-02 | 수정일: 2026-05-02
{
"BasicRetailStoreVPCPrivateSubnet1Subnet6D036CC4": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"AvailabilityZone": {
"Fn::Sub": [
"${Region}a",
{
"Region": {
"Ref": "AWS::Region"
}
}
]
},
"CidrBlock": "10.0.3.0/24",
"MapPublicIpOnLaunch": false,
"Tags": [
{
"Key": "aws-cdk:subnet-name",
"Value": "Private"
},
{
"Key": "aws-cdk:subnet-type",
"Value": "Private"
},
{
"Key": "CreationDate",
"Value": "2026-02-21"
},
{
"Key": "Name",
"Value": "EcsImmersionDay/Basic/RetailStoreVPC/PrivateSubnet1"
},
{
"Key": "Version",
"Value": "1.0.2"
},
{
"Key": "WorkshopName",
"Value": "ECSImmersionDay"
}
],
"VpcId": {
"Ref": "BasicRetailStoreVPC0FA21CD5"
}
}
},
"BasicRetailStoreVPCPrivateSubnet1RouteTableDF70C60F": {
"Type": "AWS::EC2::RouteTable",
"Properties": {
"Tags": [
{
"Key": "CreationDate",
"Value": "2026-02-21"
},
{
"Key": "Name",
"Value": "EcsImmersionDay/Basic/RetailStoreVPC/PrivateSubnet1"
},
{
"Key": "Version",
"Value": "1.0.2"
},
{
"Key": "WorkshopName",
"Value": "ECSImmersionDay"
}
],
"VpcId": {
"Ref": "BasicRetailStoreVPC0FA21CD5"
}
}
},
"BasicRetailStoreVPCPrivateSubnet1RouteTableAssociationCBCC2100": {
"Type": "AWS::EC2::SubnetRouteTableAssociation",
"Properties": {
"RouteTableId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet1RouteTableDF70C60F"
},
"SubnetId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet1Subnet6D036CC4"
}
}
},
"BasicRetailStoreVPCPrivateSubnet1DefaultRoute701604F2": {
"Type": "AWS::EC2::Route",
"Properties": {
"DestinationCidrBlock": "0.0.0.0/0",
"NatGatewayId": {
"Ref": "BasicRetailStoreVPCPublicSubnet1NATGatewayF5759A33"
},
"RouteTableId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet1RouteTableDF70C60F"
}
}
},
"BasicRetailStoreVPCPrivateSubnet2Subnet5E255638": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"AvailabilityZone": {
"Fn::Sub": [
"${Region}b",
{
"Region": {
"Ref": "AWS::Region"
}
}
]
},
"CidrBlock": "10.0.4.0/24",
"MapPublicIpOnLaunch": false,
"Tags": [
{
"Key": "aws-cdk:subnet-name",
"Value": "Private"
},
{
"Key": "aws-cdk:subnet-type",
"Value": "Private"
},
{
"Key": "CreationDate",
"Value": "2026-02-21"
},
{
"Key": "Name",
"Value": "EcsImmersionDay/Basic/RetailStoreVPC/PrivateSubnet2"
},
{
"Key": "Version",
"Value": "1.0.2"
},
{
"Key": "WorkshopName",
"Value": "ECSImmersionDay"
}
],
"VpcId": {
"Ref": "BasicRetailStoreVPC0FA21CD5"
}
}
},
"BasicRetailStoreVPCPrivateSubnet2RouteTable88B6A240": {
"Type": "AWS::EC2::RouteTable",
"Properties": {
"Tags": [
{
"Key": "CreationDate",
"Value": "2026-02-21"
},
{
"Key": "Name",
"Value": "EcsImmersionDay/Basic/RetailStoreVPC/PrivateSubnet2"
},
{
"Key": "Version",
"Value": "1.0.2"
},
{
"Key": "WorkshopName",
"Value": "ECSImmersionDay"
}
],
"VpcId": {
"Ref": "BasicRetailStoreVPC0FA21CD5"
}
}
},
"BasicRetailStoreVPCPrivateSubnet2RouteTableAssociationA0687748": {
"Type": "AWS::EC2::SubnetRouteTableAssociation",
"Properties": {
"RouteTableId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet2RouteTable88B6A240"
},
"SubnetId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet2Subnet5E255638"
}
}
},
"BasicRetailStoreVPCPrivateSubnet2DefaultRoute6CB95A04": {
"Type": "AWS::EC2::Route",
"Properties": {
"DestinationCidrBlock": "0.0.0.0/0",
"NatGatewayId": {
"Ref": "BasicRetailStoreVPCPublicSubnet2NATGateway304D4FCE"
},
"RouteTableId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet2RouteTable88B6A240"
}
}
},
"BasicRetailStoreVPCPrivateSubnet3Subnet01DB8173": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"AvailabilityZone": {
"Fn::Sub": [
"${Region}c",
{
"Region": {
"Ref": "AWS::Region"
}
}
]
},
"CidrBlock": "10.0.5.0/24",
"MapPublicIpOnLaunch": false,
"Tags": [
{
"Key": "aws-cdk:subnet-name",
"Value": "Private"
},
{
"Key": "aws-cdk:subnet-type",
"Value": "Private"
},
{
"Key": "CreationDate",
"Value": "2026-02-21"
},
{
"Key": "Name",
"Value": "EcsImmersionDay/Basic/RetailStoreVPC/PrivateSubnet3"
},
{
"Key": "Version",
"Value": "1.0.2"
},
{
"Key": "WorkshopName",
"Value": "ECSImmersionDay"
}
],
"VpcId": {
"Ref": "BasicRetailStoreVPC0FA21CD5"
}
}
},
"BasicRetailStoreVPCPrivateSubnet3RouteTableE3807248": {
"Type": "AWS::EC2::RouteTable",
"Properties": {
"Tags": [
{
"Key": "CreationDate",
"Value": "2026-02-21"
},
{
"Key": "Name",
"Value": "EcsImmersionDay/Basic/RetailStoreVPC/PrivateSubnet3"
},
{
"Key": "Version",
"Value": "1.0.2"
},
{
"Key": "WorkshopName",
"Value": "ECSImmersionDay"
}
],
"VpcId": {
"Ref": "BasicRetailStoreVPC0FA21CD5"
}
}
},
"BasicRetailStoreVPCPrivateSubnet3RouteTableAssociationF2AF7FA5": {
"Type": "AWS::EC2::SubnetRouteTableAssociation",
"Properties": {
"RouteTableId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet3RouteTableE3807248"
},
"SubnetId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet3Subnet01DB8173"
}
}
},
"BasicRetailStoreVPCPrivateSubnet3DefaultRoute11F29836": {
"Type": "AWS::EC2::Route",
"Properties": {
"DestinationCidrBlock": "0.0.0.0/0",
"NatGatewayId": {
"Ref": "BasicRetailStoreVPCPublicSubnet3NATGateway700166B7"
},
"RouteTableId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet3RouteTableE3807248"
}
}
}
}1. "BasicRetailStoreVPCPrivateSubnet1Subnet6D036CC4"
"BasicRetailStoreVPCPrivateSubnet1Subnet6D036CC4": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"AvailabilityZone": {
"Fn::Sub": [
"${Region}a",
{
"Region": {
"Ref": "AWS::Region"
}
}
]
},
"CidrBlock": "10.0.3.0/24",
"MapPublicIpOnLaunch": false,
"Tags": [
{
"Key": "aws-cdk:subnet-name",
"Value": "Private"
},
{
"Key": "aws-cdk:subnet-type",
"Value": "Private"
},
{
"Key": "CreationDate",
"Value": "2026-02-21"
},
{
"Key": "Name",
"Value": "EcsImmersionDay/Basic/RetailStoreVPC/PrivateSubnet1"
},
{
"Key": "Version",
"Value": "1.0.2"
},
{
"Key": "WorkshopName",
"Value": "ECSImmersionDay"
}
],
"VpcId": {
"Ref": "BasicRetailStoreVPC0FA21CD5"
}
}
},첫 번째 프라이빗 서브넷을 생성하는 리소스입니다.
"AvailabilityZone"을 보면 이 프라이빗 서브넷이 첫 번째 퍼블릭 서브넷과 같은 가용 영역(AZ)에 위치해 있음을 알 수 있습니다.
"CidrBlock": "10.0.3.0/24"의 대역은 10.0.3.0부터 10.0.3.255까지입니다. 앞의 3개의 퍼블릭 서브넷의 대역이 각각 10.0.0.0/24, 10.0.1.0/24, 10.0.2.0/24이기 때문에 이 대역 바로 뒤의 대역을 쓴 것임을 알 수 있습니다.
"MapPublicIpOnLaunch": false는 이 프라이빗 서브넷에 위치한 인스턴스에게 자동으로 퍼블릭 IPv4 주소를 할당하는 것을 비활성화합니다. 이는 프라이빗 서브넷의 인스턴스는 기본적으로 인터넷에서 접근되지 않기 때문입니다.
2. "BasicRetailStoreVPCPrivateSubnet1RouteTableDF70C60F"
"BasicRetailStoreVPCPrivateSubnet1RouteTableDF70C60F": {
"Type": "AWS::EC2::RouteTable",
"Properties": {
"Tags": [
{
"Key": "CreationDate",
"Value": "2026-02-21"
},
{
"Key": "Name",
"Value": "EcsImmersionDay/Basic/RetailStoreVPC/PrivateSubnet1"
},
{
"Key": "Version",
"Value": "1.0.2"
},
{
"Key": "WorkshopName",
"Value": "ECSImmersionDay"
}
],
"VpcId": {
"Ref": "BasicRetailStoreVPC0FA21CD5"
}
}
},첫 번째 프라이빗 서브넷에 위치할 라우트 테이블을 생성하는 리소스입니다.
3. "BasicRetailStoreVPCPrivateSubnet1RouteTableAssociationCBCC2100"
"BasicRetailStoreVPCPrivateSubnet1RouteTableAssociationCBCC2100": {
"Type": "AWS::EC2::SubnetRouteTableAssociation",
"Properties": {
"RouteTableId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet1RouteTableDF70C60F"
},
"SubnetId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet1Subnet6D036CC4"
}
}
},라우트 테이블 어소시에이션(Route Table Association)을 생성하는 리소스입니다.
4. "BasicRetailStoreVPCPrivateSubnet1DefaultRoute701604F2"
"BasicRetailStoreVPCPrivateSubnet1DefaultRoute701604F2": {
"Type": "AWS::EC2::Route",
"Properties": {
"DestinationCidrBlock": "0.0.0.0/0",
"NatGatewayId": {
"Ref": "BasicRetailStoreVPCPublicSubnet1NATGatewayF5759A33"
},
"RouteTableId": {
"Ref": "BasicRetailStoreVPCPrivateSubnet1RouteTableDF70C60F"
}
}
},라우트를 생성하는 리소스입니다.
퍼블릭 서브넷에 연결된 라우트 테이블의 기본 라우트 규칙과 다르게, 이 라우트 규칙에 해당하는 트래픽은 IGW가 아닌 NAT Gateway로 전달되도록 명시됩니다.
나머지 리소스들은 서로 다른 AZ에 속해 있지만 내부 설정이 동일한 프라이빗 서브넷 관련 리소스들이므로, 이에 대한 코드 분석은 생략하겠습니다.