서브넷 마스크와 CIDR 완벽 가이드 (계산법 포함)
많은 애플리케이션 개발자분들에게 네트워크는 마치 '마법'처럼 느껴지곤 합니다. 우리는 데이터베이스나 API와 통신하는 코드를 매일 짜지만, 막상 VPC(Virtual Private Cloud)를 설정하거나 연결 문제를 디버깅할 때 마주치는 "서브넷 마스크"나 "/24" 같은 용어들은 왠지 모르게 어렵게 다가오죠.
하지만 **서브넷 마스크(Subnet Mask)**와 **CIDR(Classless Inter-Domain Routing)**를 이해하는 것은 현대 소프트웨어 엔지니어링에서 정말 중요합니다. 쿠버네티스 클러스터를 구축하든, AWS 보안 그룹을 설정하든, 아니면 단순히 로컬 도커 컨테이너가 왜 호스트와 통신이 안 되는지 파악하든, 이 개념들은 어디에나 존재하기 때문입니다.
이번 글에서는 IP 주소 체계를 파헤치고, 서브넷팅이 어떻게 작동하는지, 그리고 네트워크 범위를 어떻게 계산하는지(또는 계산기에 무엇을 입력해야 하는지) 확실하게 정리해 드리겠습니다.
IP 주소의 해부학
서브넷으로 들어가기 전에, IPv4 주소가 실제로 무엇인지 잠깐 복습해볼까요? 192.168.1.1 같은 IP 주소는 사실 32비트 이진수를 사람이 읽기 쉽게 표현한 것에 불과합니다.
점(.)으로 구분된 각 숫자는 **옥텟(Octet)**이라고 부르는데, 8비트를 나타내기 때문입니다.
192=11000000168=101010001=000000011=00000001
즉, 192.168.1.1은 컴퓨터 입장에서 11000000.10101000.00000001.00000001인 것이죠.
이게 왜 중요할까요? 서브넷팅은 철저하게 '비트 연산'의 영역이기 때문입니다. 네트워크 장비는 십진수 숫자가 아니라, 이 비트들을 보고 판단합니다.
서브넷 마스크란 무엇인가요?
IP 주소는 두 가지 역할을 합니다. 하나는 내가 속한 네트워크를 식별하는 것이고, 다른 하나는 그 네트워크 안에서 나라는 **호스트(기기)**를 식별하는 것입니다.
그런데 라우터는 192.168.1.1에서 어디까지가 네트워크 주소이고, 어디서부터가 호스트 주소인지 어떻게 알 수 있을까요? 바로 여기서 서브넷 마스크가 등장합니다.
서브넷 마스크는 일종의 필터 역할을 합니다. 1이 연속되다가 0으로 끝나는 32비트 수열이죠.
- 1로 된 부분: 네트워크 영역
- 0으로 된 부분: 호스트 영역
예시: 가장 흔한 C클래스 마스크
가장 익숙한 서브넷 마스크인 255.255.255.0을 볼까요?
이진수로 보면 다음과 같습니다:
11111111.11111111.11111111.00000000
이 마스크를 우리 IP 192.168.1.1에 씌워보면:
- 네트워크 파트: 처음 24비트 (1과 매칭됨) ->
192.168.1 - 호스트 파트: 마지막 8비트 (0과 매칭됨) ->
.1
이 말은 즉, IP가 192.168.1로 시작하는 모든 기기는 같은 로컬 네트워크(LAN)에 있다는 뜻입니다. 이 기기들은 게이트웨이를 거치지 않고 서로 직접 통신할 수 있습니다. 만약 목적지 IP가 192.168.2로 시작한다면? 그건 다른 네트워크이므로 라우팅이 필요하게 됩니다.
CIDR 표기법의 등장 ("/24" 같은 것)
매번 255.255.255.0이라고 쓰는 건 너무 귀찮죠. 1993년, IETF는 기존의 비효율적인 "Class A/B/C" 시스템을 대체하고 라우팅 효율을 높이기 위해 **CIDR(Classless Inter-Domain Routing)**를 도입했습니다.
CIDR 표기법은 서브넷 마스크를 아주 단순하게 표현합니다. 바로 마스크에 있는 1의 개수를 세는 것이죠.
255.255.255.0은 1이 24개입니다. ->/24255.0.0.0은 1이 8개입니다. ->/8255.255.0.0은 1이 16개입니다. ->/16
그래서 192.168.1.1/24라고 적혀있으면, "아, 앞에서부터 24비트가 네트워크 주소구나"라고 바로 이해하면 됩니다.
자주 쓰는 CIDR 블록 치트시트
| CIDR | 서브넷 마스크 | 총 IP 수 | 사용 가능 IP | 용도 |
|---|---|---|---|---|
| /32 | 255.255.255.255 | 1 | 1 | 특정 단일 호스트 (예: 방화벽 규칙) |
| /30 | 255.255.255.252 | 4 | 2 | 라우터 간 1:1 연결 |
| /24 | 255.255.255.0 | 256 | 254 | 표준 LAN (가정/사무실) |
| /16 | 255.255.0.0 | 65,536 | 65,534 | 대규모 사내망 / AWS VPC |
| /8 | 255.0.0.0 | 16M+ | 16M+ | A클래스 전체 (예: 10.0.0.0/8) |
참고: "사용 가능 IP"는 항상 총 IP 수에서 2를 뺍니다. 하나는 네트워크 주소(호스트 비트가 모두 0), 다른 하나는 브로드캐스트 주소(호스트 비트가 모두 1)로 예약되어 있기 때문입니다.
실전! 서브넷 계산해보기
여러분이 새 사무실의 네트워크를 설계한다고 가정해봅시다. 10.0.0.0/16 대역을 할당받았습니다. 이걸 부서별로 쪼개고 싶습니다.
시나리오 1: 개발팀에게 /24 할당하기
개발팀에게 넉넉하게 /24 블록을 주기로 했습니다.
- Base:
10.0.0.0 - Subnet:
10.0.1.0/24
이렇게 하면 10.0.1.1부터 10.0.1.254까지의 IP를 사용할 수 있습니다.
시나리오 2: 까다로운 /28 계산
서버 몇 대만 있는 작은 망이 필요해서 10개 정도의 IP만 있으면 됩니다. /24를 쓰기엔 아깝죠. /28을 써볼까요?
/28마스크는 네트워크 28비트, 호스트 4비트(32 - 28 = 4)입니다.- 총 IP 수 = 2^4 = 16개.
- 사용 가능 IP = 16 - 2 = 14개.
딱 좋네요. 10.0.2.0/28로 시작한다면:
- 네트워크 주소:
10.0.2.0 - 첫 번째 사용 가능:
10.0.2.1 - ...
- 마지막 사용 가능:
10.0.2.14 - 브로드캐스트:
10.0.2.15
그 다음 서브넷은 바로 뒤인 10.0.2.16/28부터 시작하게 됩니다.
클라우드 컴퓨팅에서 이게 왜 중요한가요?
AWS, Azure, GCP 같은 클라우드 환경에서는 VPC를 만들 때 CIDR 블록을 지정해야 합니다. 흔한 실수 중 하나가 너무 작은 블록을 잡는 것입니다.
만약 10.0.0.0/24 (254개 IP)로 VPC를 만들고 EKS(쿠버네티스) 클러스터를 띄우려고 하면, 파드(Pod)마다 IP가 하나씩 필요하기 때문에 순식간에 IP가 고갈되어 버립니다. 보통 VPC는 /16 (6만 5천 개) 정도로 크게 잡고, 가용 영역(AZ)별로 /20이나 /24 서브넷을 쪼개서 쓰는 것이 일반적인 권장 사항입니다.
문제 해결 팁 (Troubleshooting)
- "Destination Host Unreachable": 내 컴퓨터가 목적지를 로컬 서브넷에 있다고 착각하고(서브넷 마스크 설정 때문에) ARP 요청을 보내고 있는데, 실제로는 외부망에 있을 때 자주 발생합니다. 마스크 설정을 확인해보세요!
- 서브넷 충돌(Overlapping): 회사 VPN이
192.168.1.0/24를 쓰는데, 재택근무하는 내 집 공유기도192.168.1.0/24를 쓴다면? 라우팅이 꼬여서 통신이 안 됩니다. 그래서 사내망 VPN은 보통10.x.x.x나172.16.x.x대역을 써서 가정집 공유기 대역과 겹치지 않게 피하는 것이 국룰입니다.
계산을 도와주는 도구들
이진수 계산을 암산으로 하는 건 멋진 개인기일 수 있지만, 실무에서는 도구를 써서 검증하는 것이 안전합니다. 비트 하나만 틀려도 네트워크 전체가 마비될 수 있으니까요.
IP 범위를 빠르게 계산하거나, 사용 가능한 호스트 수를 확인하고 싶다면 전용 계산기를 사용하는 것이 좋습니다.
IP와 CIDR 마스크만 입력하면 네트워크 주소, 브로드캐스트 주소, 그리고 사용 가능한 IP 범위를 즉시 보여줍니다. VPC 서브넷을 계획하거나 방화벽 규칙을 디버깅할 때 정말 유용하게 쓸 수 있습니다.
마치며
서브넷 마스크와 CIDR 표기법은 인터넷의 '좌표계'와 같습니다. 데이터가 어디로 흘러가고 어디서 멈춰야 하는지 경계를 정의하죠. 이진수 계산이 조금 딱딱하게 느껴질 수 있지만, 이걸 마스터하면 견고하고 확장 가능한 네트워크를 설계하고, 연결 문제를 자신 있게 해결할 수 있는 능력을 갖게 됩니다.
이제 /24나 /28을 볼 때 단순히 숫자로 보이지 않고, 그 네트워크의 크기와 범위가 머릿속에 그려지실 거예요!
관련 도구 둘러보기
Pockit의 무료 개발자 도구를 사용해 보세요