Cloud Modernization 18

VPC, CIDR, 서브넷으로 클라우드 네트워크 공간 나누기

IP 주소, CIDR, VPC, 서브넷이 모두 주소 범위 이야기처럼 보여서 실제 네트워크 경계가 어디인지 헷갈린다.

근거 · 교안 p73-p79

VPC, CIDR, 서브넷으로 클라우드 네트워크 공간 나누기 ?? ???

1장: IP 주소와 CIDR: 네트워크 주소를 ‘언어’로 표현하기

솔라가 노트북 화면을 들여다보며 미간을 찌푸렸다. 화면에는 클라우드 서비스의 네트워크 설정 가이드가 떠 있었다. VPC, CIDR, 서브넷. 익숙하면서도 막상 한데 모아 놓으니 안개가 낀 것처럼 뿌옇게 느껴지는 단어들이었다.

“언니, 이것 좀 봐봐. 아무리 읽어봐도 이상해.”

솔라의 부름에 거실에서 책을 읽던 루나가 다가왔다.

“뭐가?”

“클라우드에서 네트워크 공간을 만든다는 건 알겠어. 그런데 그걸 설명하는 말들이 다 비슷하게 들려. VPC도 IP 주소 범위를 지정하고, 서브넷도 IP 주소 범위를 지정한대. CIDR이라는 것도 결국 IP 주소 범위를 나타내는 표기법이고. 그럼 이게 다 그냥 크기만 다른 ‘주소 덩어리’들이라는 거 아냐? 왜 이렇게 복잡하게 여러 이름을 쓰는 거지?”

솔라는 ‘네트워크 경계’라는 개념이 도무지 손에 잡히지 않는다는 듯 답답해했다. 모두 주소의 집합일 뿐인데, 저마다 다른 경계를 만든다는 설명이 공허하게 맴돌았다.

루나는 솔라의 화면을 잠시 들여다본 뒤, 화면 대신 노트북 자체를 가리켰다.

“그럼 일단 이것부터 시작해볼까? 지금 네 노트북이 쓰는 주소 말이야.”

“내 노트북 주소?”

솔라는 잠시 머뭇거리다 익숙하게 네트워크 설정 창을 열었다. IP 주소: 192.168.1.34. 그리고 그 아래에 늘 따라다니던 서브넷 마스크: 255.255.255.0.

“여기. 192.168.1.34야.”

“좋아. 그 주소는 이 세상에 단 하나일까?”

“아니, 그건 아니지. 이건 우리 집 공유기가 만들어준 사설 IP 주소니까. 다른 집에도 똑같은 주소가 있을 수 있잖아.”

“맞아. 그 주소는 ‘우리 집 네트워크’라는 경계 안에서만 유일하지. 그럼 그 경계는 어떻게 표현될까? 바로 그 아래 서브넷 마스크에 힌트가 있어. 255.255.255.0. 혹시 이걸 다르게 표현하는 방법도 본 적 있어? IP 주소 뒤에 슬래시(/)를 붙이는 방식.”

루나의 말에 솔라는 아까 보았던 가이드 문서를 떠올렸다. 10.0.0.0/16 같은 표기가 분명히 있었다.

/ 뒤에 숫자가 붙는 거 말하는 거지? CIDR이라고 하던데.”

“응. 그게 바로 사이더(CIDR) 표기법이야. 네 서브넷 마스크 255.255.255.0/24로 표현할 수 있어.”

/24? 왜 하필 24야?”

루나는 말없이 펜을 들어 종이에 255.255.255.0을 적었다. 그리고 각 숫자를 2진수로 바꾸기 시작했다.

255 = 11111111 (1이 8개) 0 = 00000000 (0이 8개)

“자, 255.255.255.0을 2진수로 바꾸면 1이 총 몇 개지?”

루나의 물음에 솔라는 2진수 표현을 눈으로 좇았다. 1이 8개씩 세 덩이.

“아! 8 곱하기 3이니까… 스물네 개.”

순간 솔라의 눈이 동그래졌다.

“설마 그래서 /24인 거야?”

“바로 그거야. CIDR의 숫자는 IP 주소 32비트 중에서 네트워크 부분을 나타내는 비트가 몇 개인지를 알려주는 거야. /24는 앞에서부터 24비트가 ‘네트워크 주소’로 고정되어 있다는 뜻이지.”

루나는 종이에 192.168.1.34 /24라고 적었다.

“이 표기를 다시 읽어볼래? 이제 이건 그냥 주소 하나가 아니야.”

솔라는 자신이 방금 깨달은 것을 바탕으로 /24의 의미를 되새기며 표기를 다시 보았다. 앞에서부터 24비트, 즉 192.168.1까지는 바꿀 수 없는 부분. 이 주소가 속한 ‘네트워크 자체’를 가리키는 부분이다. 나머지 8비트는 이 네트워크 안에서 각각의 기기(호스트)에 할당할 수 있는 부분.

“… 192.168.1이라는 네트워크에 속한 34번 기기. 이렇게 읽히는데.”

“거의 다 왔어. 그럼 그 네트워크에는 기기를 총 몇 대나 연결할 수 있을까? 바꿀 수 있는 부분이 8비트니까.”

“8비트는 2의 8제곱… 256개! 아, 그래서 이 네트워크의 주소 범위는 192.168.1.0부터 192.168.1.255까지가 되는구나.”

솔라는 무릎을 탁 쳤다. 안개 속에 흩어져 있던 점들이 하나의 선으로 이어지는 느낌이었다. IP 주소는 하나의 점이었다. 하지만 CIDR은 그 점이 어떤 ‘범위’ 안에 있는지를 설명하는 규칙, 하나의 ‘언어’였던 것이다. /24라는 기호 하나가 ‘여기서부터 여기까지가 우리 영역이야’라고 말해주는 것 같았다.

“알겠다. IP 주소는 그냥 특정 컴퓨터의 ‘주소’고, CIDR은 그 주소가 속한 네트워크의 ‘범위’를 나타내는 표현법이구나. 단순한 주소 덩어리가 아니라, 범위를 정의하는 문법이었어.”

솔라는 자신이 처음에 가졌던 의문, ‘왜 다 비슷한 주소 덩어리인데 이름이 다른가’에 대한 첫 번째 실마리를 푼 셈이었다. IP 주소와 CIDR은 역할이 명백히 달랐다. 하나는 위치, 하나는 그 위치가 속한 공간의 크기와 경계를 설명하는 언어.

하지만 이내 새로운 궁금증이 고개를 들었다. 솔라는 다시 클라우드 가이드 문서로 시선을 돌렸다.

“좋아, CIDR이 주소 범위를 나타내는 언어라는 건 알겠어. 그런데 문서에는 VPC를 만들 때 10.0.0.0/16 같은 CIDR로 그 공간을 정의한다고 되어 있거든. 그럼 VPC도 결국 이 CIDR이 표현하는 거대한 주소 범위일 뿐인 거 아냐? ‘가상 전용 네트워크’라는 멋진 이름이 붙었지만, 그게 그냥 주소 개수가 엄청 많다는 것 말고 또 다른 의미가 있는 걸까?”

2장: VPC: 클라우드 속 나만의 ‘가상 전용 네트워크’ 공간

솔라는 방금 전의 깨달음이 남긴 흥분을 그대로 종이 위로 옮겼다. 커다란 네모를 그리고, 그 안에 ‘VPC: 10.0.0.0/16’이라고 적었다. CIDR의 문법을 이제 막 이해했으니, 이 표기가 무엇을 의미하는지 계산하는 것은 어렵지 않았다. /16은 32비트 중 16비트가 네트워크 영역이라는 뜻이고, 나머지 16비트는 호스트에 할당할 수 있다. 2의 16제곱, 약 6만 5천 개의 주소. 솔라는 네모 옆에 ‘약 65,536개 주소 사용 가능’이라고 덧붙였다.

하지만 만족감은 금세 희미해졌다. 솔라는 자신이 그린 커다란 사각형을 물끄러미 내려다보았다. 우리 집 네트워크를 설명하던 /24가 256개의 주소를 가진 작은 상자라면, VPC의 /16은 그냥 운동장만 한 상자일 뿐이었다. 크기만 다를 뿐, 본질적으로는 똑같은 ‘주소의 범위’ 아닌가. 그런데 왜 클라우드에서는 이걸 ‘가상 전용 네트워크(Virtual Private Network)’라는 거창한 이름으로 부르는 걸까. ‘전용’이라는 말에 담긴 특별한 의미가 있을 텐데, 그저 주소가 많다는 것만으로는 설명이 부족했다.

“언니, 이것 좀 봐봐.”

솔라는 자신이 그린 그림을 루나에게 내밀었다.

“CIDR이 주소 범위를 나타내는 ‘언어’라는 건 알겠어. 그래서 VPC를 10.0.0.0/16으로 만든다는 건, 이렇게 6만 개가 넘는 주소를 쓸 수 있는 거대한 공간을 할당받는다는 거잖아. 그런데 이게 다야? 그럼 그냥 아주 큰 ‘주소 덩어리’일 뿐인데, 왜 ‘가상 전용 네트워크’라고 부르는 거야? 뭐가 ‘전용’이라는 거지?”

솔라의 질문에는 날카로운 지점이 있었다. ‘주소 범위’와 ‘네트워크 경계’를 동일시하는, 바로 그녀가 처음 가졌던 혼란의 연장선이었다.

루나는 솔라의 그림을 받아 들고 잠시 보더니, 그림 옆에 다른 비유를 그리기 시작했다. 거대한 빌딩 그림이었다.

“큰 오피스 빌딩이 있다고 상상해보자. 수많은 회사가 입주해 있는 아주 높은 건물이야. 이 빌딩 전체가 AWS 같은 클라우드 제공자의 거대한 물리적 데이터 센터라고 생각해봐.”

루나는 빌딩의 한 층을 굵은 선으로 표시했다.

“네가 회사를 차려서 이 빌딩의 한 층, 예를 들어 10층 전체를 임대했어. 이 10층 공간이 바로 네가 방금 계산한 10.0.0.0/16이라는 거대한 주소 범위, 즉 ‘주소의 땅’이야. 책상 6만 개를 놓을 수 있는 넓은 공간이지.”

“응, 그건 알겠어.”

“자, 그럼 질문. 네가 10층을 통째로 빌렸다고 해서, 그 공간이 지금 당장 ‘너희 회사만의 전용 사무실’이라고 할 수 있을까? 아직 아무런 공사도 하지 않은 텅 빈 상태인데 말이야.”

루나의 말에 솔라는 고개를 갸웃했다.

“아니? 그냥 텅 빈 공간이지. 9층 사람도, 11층 사람도 엘리베이터에서 잘못 내리면 그냥 쑥 들어올 수 있잖아.”

“바로 그거야.”

루나는 빌딩 그림 위 10층 입구에 작은 문과 벽을 그려 넣었다. 그리고 열쇠 그림도 추가했다.

“‘전용 사무실’이 되려면 뭐가 필요하지? 다른 회사 사람들이 함부로 들어오지 못하게 막는 벽과 잠긴 문이 필요해. 직원들만 카드 키로 들어올 수 있게 해야 하고. VPC가 바로 그 역할을 하는 거야. 클라우드라는 거대한 공유 빌딩 안에서, 10.0.0.0/16이라는 ‘주소의 땅’을 너에게 준 다음, 그 주위로 아무도 침범할 수 없는 ‘논리적인 벽’을 세워주는 거지.”

솔라의 눈이 커졌다. 물리적인 벽이 아니라 논리적인 벽. 그 단어가 머릿속에 박혔다.

“논리적인 벽…?”

“응. 다른 사용자의 VPC가 바로 옆에 있어도, 심지어 같은 물리적 서버 위에서 돌아가고 있어도, 서로 절대 들여다보거나 접근할 수 없어. 클라우드 제공자가 ‘이 공간은 오직 너의 것’이라고 보장하는 보이지 않는 경계야. 이 경계, 즉 논리적 격리가 VPC의 핵심이야. 그래서 ‘가상(Virtual)’이고, 그래서 ‘전용(Private)’인 거지.”

순간 솔라의 머릿속에서 모든 것이 재배열되었다. VPC의 본질은 주소의 개수나 범위의 크기가 아니었다. 그 범위를 다른 모든 것으로부터 완벽하게 분리하는 ‘격리’라는 행위와 규칙 그 자체였다. CIDR이 땅의 크기와 위치를 명시하는 ‘등기부등본’이라면, VPC는 그 땅 둘레에 아무도 넘볼 수 없는 울타리를 치고 대문을 다는 ‘건축 행위’에 가까웠다.

솔라는 자신이 그렸던 네모 상자를 다시 보았다. 이제 그 네모는 단순한 주소의 집합이 아니었다. 외부와는 완전히 차단된, 독립된 가상의 우주처럼 보였다.

“아…! ‘가상 전용 네트워크’라는 이름이 이제야 이해돼. 주소 범위는 그냥 그 네트워크가 쓸 땅의 크기일 뿐이고, 진짜 중요한 건 그 땅을 다른 사람들과 완벽히 분리해주는 ‘격리’라는 특성이구나. 이 경계가 있어서 내 네트워크는 안전한 거야.”

솔라는 ‘네트워크 경계’라는 말이 더 이상 뜬구름처럼 느껴지지 않았다. VPC의 경계는 주소의 시작과 끝이 아니라, 외부의 접근을 원천적으로 차단하는 논리적인 방화벽이자 울타리였다.

새로운 이해와 함께 또 다른 질문이 자연스럽게 떠올랐다. 솔라는 자신이 그린 VPC라는 큰 네모난 사무실 공간을 가리켰다.

“좋아, 이제 우리 회사만의 완벽하게 격리된 10층 사무실이 생겼어. 그런데 이 넓은 공간을 그냥 통째로 쓰진 않잖아? 외부 손님을 맞는 로비도 있어야 하고, 직원들만 들어가는 개발실도 있어야 하고, 중요한 정보가 있는 서버실은 더 안전하게 분리해야 할 텐데… 이 하나의 큰 격리 공간은 또 어떻게 나눠서 쓰는 거지?”

3장: 서브넷: VPC 공간을 ‘목적’에 따라 분할하는 단위

솔라는 루나와 함께 그린 그림을 다시 책상 위에 펼쳤다. 커다란 네모 상자, ‘VPC: 10.0.0.0/16’이라고 적힌, 외부와 완벽히 격리된 우리 회사만의 가상 사무실. 그 옆에는 빌딩의 10층 전체를 임대한 그림이 그려져 있었다. 외부와는 완전히 차단된, 독립된 우주. 여기까지는 명확했다.

하지만 솔라의 마지막 질문이 여전히 공중에 떠 있었다. “이 하나의 큰 격리 공간은 또 어떻게 나눠서 쓰는 거지?” 솔라는 그 질문에 스스로 답을 해보려는 듯 펜을 들었다. 그리고 VPC라는 큰 네모 상자 안에 망설이며 선 두 개를 그어 세 개의 작은 칸을 만들었다. 하지만 칸을 나누자마자 새로운 의문이 벽처럼 앞을 가로막았다. 솔라는 펜을 내려놓고 자신이 나눈 칸들을 멍하니 바라보았다.

“언니, 내가 우리 10층 사무실에 이렇게 칸막이를 쳐서 방을 세 개로 나눴다고 해보자. 그런데 이게 무슨 의미가 있지? 어차피 10층 현관문(VPC)을 통과해서 들어온 우리 회사 직원이라면 이 방 저 방 마음대로 다 돌아다닐 수 있잖아. 그냥 공간만 좁아진 것뿐, 이 칸막이가 새로운 ‘경계’가 되지는 못하는 것 같은데.”

솔라의 지적은 정확했다. 그녀는 서브넷이 VPC를 나눈다는 것은 알았지만, 그 분할이 단순한 주소 쪼개기를 넘어 어떤 의미 있는 경계를 만들어내는지 이해하지 못하고 있었다. 그녀에게 서브넷은 여전히 ‘VPC 안의 그냥 작은 주소 덩어리’일 뿐이었다.

루나는 솔라가 그린 그림을 보더니, 그녀가 나눈 세 개의 칸 중 하나를 손가락으로 가리켰다.

“그 칸막이가 그냥 얇은 파티션이 아니라, 방화벽과 카드키 리더기가 달린 특수 출입문이라면 어떨까?”

“특수 출입문?”

“응. 첫 번째 방은 ‘로비’라고 이름 붙여보자. 이 방은 외부 손님도 자유롭게 드나들 수 있어야 해. 그래서 이 방으로 통하는 문은 인터넷이라는 외부 복도와 직접 연결되어 있어. 대신, 이 방에서 ‘개발실’로 들어가려면 직원 카드키가 필요하지.”

루나는 솔라의 그림 위에 덧그리기 시작했다. 첫 번째 칸에는 ‘Public Subnet (로비)’이라고 적고, 외부와 연결된 화살표를 그렸다. 그리고 두 번째 칸에는 ‘Private Subnet (개발실)’이라고 적고, 로비와 개발실 사이에 ‘내부 통신만 허용’이라고 쓰인 작은 문을 그렸다.

“이게 바로 서브넷을 나누는 첫 번째 이유야. ‘목적에 따른 분할’. 어떤 서버는 인터넷과 직접 통신해야 하고(웹서버 등), 어떤 서버는 절대로 외부에 노출되면 안 되기(데이터베이스 등) 때문이지. 이렇게 서브넷을 ‘퍼블릭(Public)’과 ‘프라이빗(Private)’으로 나누면, 같은 VPC 안에 있더라도 서로 다른 접근 규칙을 가진 진짜 ‘경계’가 생기는 거야.”

솔라의 눈빛이 달라졌다. 서브넷은 단순히 공간을 나누는 칸막이가 아니었다. 각 공간의 ‘역할’과 ‘보안 수준’을 정의하는 규칙 그 자체였다. 로비는 아무나 올 수 있지만, 사장실은 허락된 사람만 갈 수 있는 것과 같았다.

“그럼… 서브넷은 주소 범위뿐만 아니라, 누가 어디에 접근할 수 있는지를 정하는 규칙의 단위이기도 하네. 이 경계는 주소로 나뉜 게 아니라 역할로 나뉜 거구나.”

“맞아. 그리고 또 하나의 중요한 분할 기준이 있어.”

루나는 빌딩 그림을 다시 가리켰다.

“우리 회사가 10층을 쓰고 있는데, 만약 10층 전체에 전기가 나가면 어떻게 될까?”

“어… 그럼 모든 업무가 마비되겠지?”

“그걸 막기 위해, 똑똑한 회사들은 보통 10층에 절반, 그리고 완전히 다른 전력과 네트워크 라인을 쓰는 20층에 나머지 절반을 배치해. 한쪽에 문제가 생겨도 다른 쪽은 계속 일할 수 있도록. 클라우드에서는 이걸 ‘가용 영역(Availability Zone, AZ)’이라고 불러. 물리적으로 분리된 데이터 센터들이지.”

루나는 솔라가 그린 VPC 네모 상자 전체를 가로지르는 점선을 그어 두 개의 구역으로 나눴다. 왼쪽은 ‘AZ-A’, 오른쪽은 ‘AZ-B’.

“아주 중요한 규칙이 있는데, 하나의 서브넷은 절대로 두 개의 가용 영역에 걸쳐 있을 수 없어. 반드시 하나의 AZ 안에 속해야 해.”

그 순간, 솔라는 클라우드 가이드 문서에서 무심코 지나쳤던 문장, ‘각 서브넷은 하나의 가용 영역 내에 포함됨’이라는 구절을 떠올렸다. 당시에는 그저 또 하나의 제약 조건처럼 보였지만, 이제는 그 의미가 선명하게 다가왔다.

솔라는 다시 펜을 잡았다. 이번에는 망설임이 없었다. 그녀는 자신이 처음 그렸던 어설픈 칸막이들을 모두 지웠다. 그리고 루나가 그어준 AZ 경계선에 맞춰 새로운 그림을 그리기 시작했다.

먼저 AZ-A 안에 두 개의 작은 네모를 그렸다. 하나는 ‘Public Subnet (웹서버용, 10.0.1.0/24)’, 다른 하나는 ‘Private Subnet (DB용, 10.0.2.0/24)’. 그리고 AZ-B 안에도 똑같은 구성으로 두 개의 네모를 더 그렸다.

“알겠어…! 완벽하게 알겠어.”

솔라는 자신의 그림을 루나에게 보여주며 설명했다.

“VPC는 우리 회사만의 격리된 네트워크 공간, 즉 10층 전체. 이 공간은 그냥 통으로 쓰는 게 아니라, 먼저 가용성을 위해 AZ-A와 AZ-B라는 물리적으로 분리된 구역으로 나눠서 생각해야 해. 그리고 각 AZ 안에서 ‘목적’에 따라 공간을 다시 분할하는 거야. 외부 손님을 맞는 ‘퍼블릭 서브넷’이라는 로비와, 우리 직원만 쓰는 ‘프라이빗 서브넷’이라는 사무 공간으로.”

솔라는 그림 속 네 개의 서브넷을 가리켰다. 이제 그것들은 단순한 주소 덩어리가 아니었다. 재해 복구를 위한 물리적 분산(AZ)과 보안을 위한 논리적 격리(Public/Private)라는 두 가지 중요한 원칙이 교차하며 만들어낸, 정교한 네트워크 설계도였다.

IP 주소, CIDR, VPC, 서브넷. 처음에는 모두 비슷해 보였던 ‘주소 범위’라는 단어들이 이제 제자리를 찾았다. IP는 개별 주소, CIDR은 범위를 표현하는 언어, VPC는 격리된 전체 공간, 그리고 서브넷은 그 공간을 목적에 따라 나누는 실질적인 단위. 솔라는 이제 ‘네트워크 경계’라는 말이 무엇인지 스스로 설명할 수 있게 되었다. 그것은 선이 아니라, 명확한 ‘목적’을 가진 약속이었다.