Subnet

VPC 설계의 시작: IP와 Subnet

반복되는 루틴 속에서 얻은 안정감을 발판 삼아, 이제는 기술적 스펙트럼을 넓히기 위한 개인 프로젝트에 착수하고자 합니다.이번 프로젝트의 목표는 단순한 포트폴리오 구축을 넘어, 실제 서비스 수준의 블로그 시스템 구현과 다국어 처리 적용 등 실무에 가까운 역량을 한 단계

2026년 1월 26일6min read

0. 들어가며 🎯

반복되는 루틴 속에서 얻은 안정감을 발판 삼아, 이제는 기술적 스펙트럼을 넓히기 위한 개인 프로젝트에 착수하고자 합니다.

이번 프로젝트의 목표는 단순한 포트폴리오 구축을 넘어, 실제 서비스 수준의 블로그 시스템 구현과 다국어 처리 적용 등 실무에 가까운 역량을 한 단계 끌어올리는 데 있습니다. 주간에는 주어진 과정에 몰입하여 성과를 내고, 일과 후에는 프로젝트 구현에 필요한 지식을 정리하고자 합니다.

견고한 서비스를 구축하기 위해서는 무엇보다 안정적인 배포 환경이 뒷받침되어야 하기에, 그 첫 단추로 AWS VPC 설계를 선택했습니다. VPC는 IP와 Subnet으로부터 시작됩니다.


1. Internet Protocol 🎯

1-1. IP ✅

IP는 인터넷에 연결되어 있는 모든 장치들을 식별할 수 있도록, 각각의 장비에 부여된 고유 주소를 의미합니다.

IP는 일반적으로 192.168.123.132과 같은 형태를 보입니다. 이를 2진법으로 표현하면 32비트 숫자가 됩니다. 11000000.10101000.01111011.10000100이 되겠죠? IP는 이처럼 32비트로 이루어진 주소이며, 2의 32승이기에 약 43억 개의 주소를 갖게 됩니다.

IP는 네트워크 ID와 호스트 ID로 구성됩니다. 이에 대해서는 뒤에서 다루겠습니다.

1-2. IP 주소 클래스 ✅

IP 클래스는 IPv4를 사용할 당시 IP를 할당하는 방법이었습니다.

1993년에 클래스 방식이 아닌 CIDR 방식으로 할당하도록 변경되었지만, Subnetting을 위해서는 IP 클래스라는 기본 개념을 알고 가야 합니다.

IP 주소를 8비트로 4등분 했을 때, 각각의 요소를 옥텟(Octet)이라고 합니다. 1옥텟은 1바이트니까 각각 256가지를 표현할 수 있겠네요.

1-2-1. A 클래스 ✍️

A 클래스는 처음 8비트(=1바이트, 1옥텟)가 네트워크 ID이며, 나머지 24비트가 호스트 ID로 사용되는 클래스입니다.

A 클래스의 첫 옥텟의 상위 1비트는 0으로 고정됩니다. 즉, 00000000~01111111의 범위를 갖습니다. 이때, 0.0.0.0127.0.0.0은 예약된 주소라서 사용할 수 없습니다. 첫 옥텟의 범위는 1~126 사이의 숫자로 시작한다고 이해할 수 있겠네요.

호스트 ID 대역이 24비트이므로, 네트워크 당 나올 수 있는 호스트 주소 개수는 약 1670만 개 입니다. 대규모 네트워크에 적합하다고 볼 수 있습니다.

1-2-2. B 클래스 ✍️

B 클래스는 처음 16비트(=2바이트, 2옥텟)가 네트워크 ID이며, 나머지 16비트가 호스트 ID로 사용되는 클래스입니다.

B 클래스의 첫 옥텟은 상위 2비트가 10으로 고정됩니다. 즉, 이진수로 10000000에서 10111111까지의 범위를 가지며, 십진수로는 128~191 사이의 숫자로 시작합니다.

호스트 ID 대역이 16비트이므로, 네트워크 당 가질 수 있는 호스트 주소 개수는 약 6만 5000개입니다. 중규모 네트워크에 적합한 대역입니다.

1-2-3. C 클래스 ✍️

C 클래스는 처음 24비트(=3바이트, 3옥텟)가 네트워크 ID이며, 나머지 8비트가 호스트 ID로 사용되는 클래스입니다.

C 클래스의 첫 옥텟은 상위 3비트가 110으로 고정됩니다. 즉, 이진수로는 11000000에서 11011111까지의 범위를 가지며, 십진수로는 192~223 사이의 숫자로 시작합니다.

호스트 ID 대역이 8비트이므로, 네트워크 당 나올 수 있는 호스트 주소 개수는 256개입니다. 주로 소규모 네트워크에 적합한 클래스입니다. 우리가 흔히 사용하는 공유기 주소 대역인 192.168.x.x가 바로 이 클래스에 속하죠.

⚠️ 추가

이 이후의 대역인 D 클래스(224~239)는 멀티캐스트용, E 클래스(240~255)는 연구 및 예약용이라는 특수 목적으로 관리되기 때문에 일반적인 호스트에는 할당되지 않습니다. 따라서 우리가 VPC 설계 시 고려할 실질적인 클래스는 A, B, C 클래스라고 이해하시면 됩니다.

1-3. 네트워크 / 브로드캐스트 주소 ✅

1-3-1. 네트워크 주소(Network Address) ✍️

네트워크 주소는 특정 네트워크의 '대표 이름' 역할을 합니다. 해당 호스트 ID 대역의 비트가 모두 0인 상태를 의미합니다.

예를 들어, C 클래스 대역인 192.168.0.0에서 마지막 8비트가 모두 0이라면, 이는 특정 컴퓨터를 지칭하는 것이 아니라 192.168.0이라는 네트워크 자체를 의미하게 됩니다. 외부망에서 우리 네트워크를 찾아올 때 이 대표 주소를 보고 길을 찾게 됩니다.

1-3-2. 브로드캐스트 주소(Broadcast Address) ✍️

브로드캐스트 주소는 해당 네트워크에 속한 '모든 호스트에게 한 번에 데이터를 보낼 때' 사용하는 주소입니다. 호스트 ID 대역의 비트가 모두 1인 상태를 의미합니다.

C 클래스 대역을 예로 들면, 192.168.0.255가 브로드캐스트 주소가 됩니다. 이 주소로 패킷을 보내면 네트워크 내부의 모든 장비가 그 내용을 수신하게 됩니다.

⚠️ 요약

우리가 한 서브넷에서 실제로 컴퓨터나 서버에 할당할 수 있는 IP 개수는 (전체 IP 개수 - 2)개가 됩니다. 네트워크의 시작(0)과 끝(255)은 시스템을 위해 양보해야 하기 때문입니다.


2. Subnet 🎯

2-1. Subnet ✅

IP 클래스 방식으로 네트워크를 나누던 시절에는 주소 할당이 매우 경직되어 있었습니다.

예를 들어, 약 1만 개의 IP가 필요한 중견기업이 있다고 가정해 봅시다. 256개만 제공하는 C 클래스로는 턱없이 부족하여 결국 65536개의 IP를 가진 B 클래스를 할당받게 됩니다. 이 경우 해당 기업은 필요한 1만 개를 제외한 나머지 5만 5000여 개의 IP를 사용하지 않더라도 독점하게 되며, 이는 전 세계적인 IPv4 주소 고갈 문제를 가속화하는 원인이 되었습니다.

이러한 비효율성을 해결하고, 거대한 네트워크 대역을 실제 필요한 크기만큼 잘게 쪼개어 사용하기 위해 등장한 개념이 바로 Subnet입니다.

2-2. Subnet Mask ✅

2-2-1. Subnet Mask 표현 ✍️

Subnet Mask는 IP 주소에서 네트워크 ID와 호스트 ID를 구분하기 위한 목적으로 만들어졌습니다.

Subnet Mask는 IP 주소와 똑같은 32비트 2진수로 표현됩니다. 다만 IP와 표현이 다른 점은, Subnet Mask는 연속된 1과 연속된 0으로 구성되어 있다는 것입니다.

만약 Subnet Mask 옥텟이 255면 네트워크 ID이고, Subnet Mask 옥텟이 0이면 호스트 ID입니다.

2-2-2. Prefix 표현 ✍️

Subnet Mask를 더욱 간소화해서 표현할 수도 있습니다. 만약 IP 주소가 192.168.0.1/24라면 뒤 /24가 Subnet Mask를 표현한 것입니다. 32비트 중 앞에서부터 차례대로 1의 개수가 24개라는 의미이죠.

10.10.10.10/8은 A 클래스, 172.16.1.10/16은 B 클래스라는 점을 직관적으로 파악할 수 있게 됩니다.

2-3. Subnetting ✅

Subnetting은 앞서 언급한 '자원 낭비'를 막기 위해 하나의 큰 네트워크를 여러 개의 작은 네트워크로 쪼개는 기술입니다.

핵심은 호스트 ID로 할당된 비트 중 일부를 '네트워크 ID'로 빌려오는 것입니다. 비트를 하나씩 빌려올 때마다 네트워크의 개수는 2배씩 늘어나고, 각 네트워크가 가질 수 있는 호스트의 개수는 절반으로 줄어듭니다.

2-3-1. Subnetting 계산 예시 ✍️

Subnetting은 결국 전체 IP 주소를 몇 개씩 묶어서 나누느냐의 문제입니다.

만약 우리가 10.0.0.0/16 대역을 12개의 서브넷으로 나누어야 한다면, 가장 먼저 네트워크의 분할 단위를 결정해야 합니다. 네트워크는 이진수 원리에 따라 항상 2의 거듭제곱 단위로만 쪼개지기 때문에, 12개를 모두 수용하기 위해서는 그보다 큰 최소 단위인 16분할을 선택해야 합니다. 이는 4비트를 추가로 빌려오는 것을 의미하며, 결과적으로 Prefix는 기존 /16에서 4가 더해진 /20이 됩니다.

이제 하나의 서브넷이 가질 IP의 총개수인 덩어리 크기를 구할 차례입니다. 공식에 따라 2의 12승(32에서 20을 뺀 값)을 계산하면 각 서브넷 당 4,096개의 IP가 할당된다는 사실을 알 수 있습니다. IP 주소는 8비트씩 끊어서 옥텟을 구분하므로, 4,096개를 256으로 나누면 세 번째 옥텟이 16씩 증가하는 형태로 주소가 나뉩니다.

이에 따라 첫 번째 서브넷은 10.0.0.0부터 10.0.15.255까지의 범위를 가지며, 두 번째 서브넷은 그다음 숫자인 10.0.16.0부터 10.0.31.255까지 이어집니다. 이런 식으로 16씩 더해가며 계산하면 12번째 서브넷은 10.0.176.0에서 시작하여 10.0.191.255로 끝나게 됩니다. 12개가 필요해서 16개로 쪼갰기 때문에 10.0.192.0부터 시작하는 나머지 4개의 서브넷은 미래를 위한 여분으로 남겨두게 되며, 각 서브넷에서 네트워크 주소와 브로드캐스트 주소를 제외한 4,094개의 IP를 실제 장치에 할당할 수 있습니다.

2-4. Supernetting ✅

Supernetting은 Subnetting과 반대로 여러 개의 작은 네트워크들을 하나의 커다란 네트워크로 합치는 기술입니다. 이를 경로 요약이라고도 부르는데, 수많은 세부 경로를 일일이 관리하는 대신 이를 포함하는 하나의 큰 경로로 묶어 라우터의 부담을 줄이고 통신 효율을 높이는 것이 주된 목적입니다.

2-4-1. Supernetting 계산 예시 ✍️

예를 들어 어느 기관에서 192.168.0.0/24부터 192.168.3.0/24까지 총 4개의 C 클래스 대역을 사용하고 있다고 가정해 봅시다. 외부 라우터에 이 4개의 경로를 따로 등록하는 대신 공통된 비트를 찾아 하나로 합칠 수 있습니다. 10진수 숫자만 보면 왜 하필 Prefix를 /22로 조정해야 하는지 바로 와닿지 않지만, 세 번째 옥텟을 2진수로 펼쳐보면 그 이유가 명확해집니다.

우리가 합치려는 4개 대역의 세 번째 옥텟을 이진수로 변환해 보면, 0은 00000000, 1은 00000001, 2는 00000010, 3은 00000011이 됩니다. 여기서 자세히 살펴보면 8자리 비트 중에서 앞의 6자리인 '000000'은 4개 대역 모두 완벽하게 일치하고, 오직 뒤의 2자리만 00부터 11까지 변화하고 있음을 알 수 있습니다.

기존의 /24 표기법은 세 번째 옥텟의 8비트 전체가 네트워크 주소로 고정되어 있다는 뜻이었습니다. 하지만 우리는 이 4개의 대역을 하나로 묶기 위해, 숫자가 변하고 있는 세 번째 옥텟의 뒤쪽 2비트를 고정 상태에서 해제하여 호스트 주소 영역으로 넘겨주어야 합니다. 결과적으로 세 번째 옥텟에서 고정된 비트는 앞의 6개가 되며, 전체 주소로 계산하면 첫 번째 옥텟의 8개, 두 번째의 8개, 그리고 세 번째의 6개를 더해 총 22비트가 공통 네트워크 주소가 됩니다. 이것이 바로 Prefix가 /22로 결정되는 원리입니다. 이렇게 경로를 요약하면 라우팅 테이블의 크기가 획기적으로 줄어들어 전체적인 네트워크 성능이 최적화됩니다.


3. 마치며 🎯

이번 글에서는 IP 주소의 구조와 클래스 기반 주소 체계, 그리고 서브넷과 슈퍼넷 개념을 통해 네트워크를 어떻게 나누고 관리해왔는지를 살펴보았습니다. Subnetting은 제한된 자원을 효율적으로 사용하고 확장 가능성을 고려하는 네트워크 설계의 출발점이라는 점에서 중요한 의미를 가집니다.

이러한 개념들은 이후 등장하는 CIDR 방식의 배경이 되며, 보다 유연한 네트워크 설계를 이해하기 위한 기초가 됩니다. 다음 글에서는 CIDR 표기법과 CIDR 블록을 중심으로, 현대적인 IP 관리 방식과 AWS 환경에서의 네트워크 구조를 이어서 정리해 보려 합니다.