[기고칼럼] 네트워크 용어 정리: 네트워크에서부터 SDN 까지

칼럼 | 김규만 기자 | 댓글: 11개 |



[▲ 문대경 아이펀팩토리 대표]
인벤에서는 게임업계 1.5세대 인물로 안정적인 게임서버엔진인 아이펀 엔진을 개발한 아이펀팩토리의 문대경 대표님을 모시고 서버 관련 컬럼을 기고 받고 있습니다.

문대경 대표는 서울대 컴퓨터 공학과를 졸업하고 미국 UC Berkeley 에서 컴퓨터 공학 박사 학위를 수여하였고, 1999년 넥슨 입사 후 2005년까지 넥슨에서 출시되는 다수의 게임 개발 프로젝트에서 서버 프로그램을 책임졌습니다.

아이펀팩토리가 개발한 '아이펀 엔진'은 네트워크 처리, DB처리, 분산 처리 등 게임 서버 구현에 필요한 필수 기능을 제공하여 효율적인 게임 개발이 가능하게 하는 게임 서버엔진입니다.

그 일곱 번째 시간으로 네트워크에서부터 SDN까지, 네트워크 관련 용어를 정리하는 시간을 갖도록 하겠습니다.


* 본 내용은 본지의 편집방향과 일치하지 않을 수도 있습니다.


이번 회에서는 몇 가지 네트워크 용어들을 설명하도록 하겠다. 내용이 점점 아스트랄해지는 것 같지만 인터넷들 설계 원칙과 더불어 내가 평소에 주변 사람들이나 직원들에게 적극적으로 설명하고 있는 내용이라서 내가 이런 개념을 소개하는 것을 업무나 사석 혹은 다른 뉴스레터 등을 통해 몇 번씩 들어본 분도 있겠지만, 네트워크 단어의 개념을 확장해 가다 보면 일종의 사고실험과 같은 효과가 있어서 개인적으로는 기회가 될 때마다 소개하는 내용이다.

영어권이 아닌 우리 한국 사람들은 안타깝게도 영어로 표현된 단어의 미묘한 느낌을 직관적으로이해하기 보다는 하나의 전공 용어로서 그대로 외워버리는 경우가 많다. Google 이나 Yahoo 처럼 그냥 단어가 마음에 들어서 작명을 하는 경우도 있지만, 표현하고자 하는 것의 미묘한 뉘앙스를 포함하고 있는 경우도 있기 때문에 단어의 개념을 명확히 이해하면 그 개념이 다른 상황에서 사용되더라도 쉽게 이해할 수 있는 경우가 많다.

예를 들어 관계형 DB 의 효시로 불리는 Berkeley 의 INGRES 디비의 경우, 그것 자체가 INteractive Graphics Retrieval System 이라는 표현의 첫 글자를 딴 조합이긴 하지만 이 조합은 영어 단어 ingress 를 흉내 내어 만들어졌다. 그리고 ingress는 안쪽 방향으로 들어오는 것을 의미하기 때문에 데이터를 모아두는 디비의 특성을 잘 설명하고 있다. 그리고 INGRES DB 의 후속타는 ‘그다음에' 라는 뜻의 영어 단어인 ‘POST’ 를 써서 POSTGRES DB, 정식 명칭 PostgreSQL 이다. 내가 이 예에서 설명하려고 했던 것은 단어를 전공 용어가 아닌 영어 단어로 접근하면 ingres/postgres 의 예에서처럼 서로의 관계를 쉽게 이해할 수 있는 것들이 있다는 점이다.

이제 다시 본 주제로 돌아와서, 아래 내용은 다들 알고 있는 단어들을 조금 다른 각도에서 설명을 시작하여 최근 많이 회자되는 네트워크 가상화, 그중에서도 Software Defined Networking (SDN) 과 관련된 기본 용어들까지에 대한 내용이다.


■ 점 들의 연결 관계 - 네트워크


네트워크: 일반화된 개념으로 네트워크는 점 들의 연결 관계를 선으로 표시한 것을 의미한다. 여기서 점과 선이 무엇을 의미하는지는 네트워크가 표현하려는 것에 따라 달라지는데, 점을 개인으로, 선을 개인 간 관계로 생각하면 소셜 네트워크가 되는 것이고, 점을 옥천 허브 같은 물류 기지, 선을 도로라고 생각하면 물류 네트워크가 된다. 그리고 점을 컴퓨터로, 선을 회선으로 생각한다면 우리가 익숙한 컴퓨터 네트워크가 되는 식이다. 네트워크는 굳이 복잡한 모습일 필요는 없다. 단지 점 두 개가 이어진 것도 네트워크고 복잡하게 얽히고설킨 것도 네트워크다.




▲ 그림1: 점들의 연결 관계가 네트워크이다. 그리고 단 2개의 점을 연결하더라도 마찬가지다. (아이콘 출처: WPZOOM, iconfinder.com, Creative Commons License)


스위치:  네트워크 상에서 한 점이 다른 둘 이상의 점에 연결되는 일은 흔하게 발생한다. 이때 그 점은 들어온 입력을 여러 방향 (즉, ‘선’)으로 보낼 수 있고, 이처럼 경로를 결정한다는 의미에서 스위치라고 이야기한다. 마치 교차로에서 길을 선택하는 것과 같다고 생각하면 된다. 우리가 컴퓨터 네트워크에서 일반적으로 말하는 스위치는 OSI 모델상 제2계층인 “데이터링크 계층”에 해당하는 Ethernet 상의 데이터들의 경로를 결정한다고 해서 Layer 2 (또는 L2) 스위치라고 부른다. “스위치와 허브의 차이는..” 식으로 외우고 있는 분들도 많을 것이다. 그것도 나쁘지 않지만, 경로의 결정을 하는 것이 스위치라고 이해하면 “ATM 스위치”, “패킷 스위칭” 이런 표현들이 무엇을 뜻하는 것인지 보다 쉽게 감이 올 것이다.



▲ 그림 2: 어떤 점들은 여러 점들과 연결될 수도 있다. 그렇게 되면 그 점은 여러 경로를 선택할 수 있게 된다. 이런 점을 스위치라고 한다. (아이콘 출처: WPZOOM, iconfinder.com, Creative Commons License)



브릿지: 브릿지는 ‘다리’라고 번역된다. 하지만, 브릿지를 ‘다리’가 아닌 ‘이어주는 것’ 이라고 생각하는 것이 더 편리하다. 그렇게 이해하면 치과의 ‘치아 브릿지’ 라는 시술이 더 이상 암호 같은 의미가 아니라, 치아 사이에 뭔가를 걸쳐서 이어주는 것으로 이해될 수 있기 때문이다. 그리고 이렇게 이해하면, 앞서 설명한 대로 여러 점을 ‘이어주는’ 스위치는 브릿지라고 쉽게 이해할 수 있다. 위의 그림에서 보면 왼쪽의 (서브)네트워크와 오른쪽의 (서브)네트워크 를 가운데 스위치가 이어주고 있다는 것을 알 수 있다. 그리고 “IP 네트워크를 브릿징한다” 라는 의미도 쉽게 이해될 것이다. 그렇다. 두 개의 IP 네트워크를 어떤 장비로 이어주는 것이다.



▲ 그림3: 위의 스위치는 양쪽의 네트워크를 이어주는 역할을 한다. 이어주는 역할을 하는 것을 브릿지라고 한다. (아이콘 출처: WPZOOM, iconfinder.com, Creative Commons License)


그럼 XenServer 와 같은 가상 서버에서 사용하는 네트워크 브릿지라는 표현은 어떤 의미일까? 이는 가상서버안의 네트워크 카드와 물리 서버의 네트워크 카드를 이어주는 역할을 하는 매개체로 생각할 수 있다. VMware 의 경우 “가상 스위치” 라는 이름으로 같은 개념이 존재한다. 이와 관련해서는 아래에서 다시 설명하겠다.




▲ 그림4: 가상 솔루션들은 가상서버의 네트워크 카드와 물리 서버의 네트워크 카드를 연결하기 위해서 브릿지를 사용한다. (아이콘 출처: WPZOOM, iconfinder.com, Creative Commons License)


라우팅과 포워딩: 우리는 크게 신경을 쓰고 있지 않지만,  router 나 switch 라고 말하는 장비들은 엄밀히 말해 크게 두 가지 일을 한다. 특정 목적지로 가기 위해서는 어떤 경로들이 있는지에 대한 정보들을 수집하는 것과, 그 정보들 중에 실제로 선택된 경로를 기반해서 패킷을 전달하는 일. 전자를 경로(route) 를 알아내는 일이라고 해서 라우팅(routing) 이라고 하고 후자를 실제로 패킷을 전달(forward) 하는 일이라고 해서 포워딩(forwarding)  이라고 한다. 

우리가 보통 패킷을 전달하는 것을 라우팅이라고 부르는 경우가 많은데 이는 틀린 표현이다. 라우팅은 IP 패킷을 전달하는 것이라고 이해하고 있다면 이 역시 잘못된 것이다. 물론 많은 경우에 라우팅이 IP 패킷 전달을 의미하는 것으로 쓰이지만, 라우팅과 포워딩이라는 단어는 IP 와 같은 Layer 3 에 국한되는 것이 아닌 일반적인 개념으로 이해하는 것이 더 바람직하다.


Control plane 과 data plane: 그리고 이런 장비들의 목적이 실제 패킷을 전달하는 것이기 때문에, 장비 입장에서 패킷은 입력 데이터에 해당되고, 목적지로 가기 위해서는 어디로 가야 되는지에 대한 정보는 제어 정보에 해당한다. 그 때문에 후자는 data plane, 전자는 control plane 이라고도 불린다. 따라서 수업 시간에 배운 스위치의 MAC 학습, shortest path spanning tree, 라우터의 BGP, RIP, OSPF 등은 모두 “어디로 보낼지" 에 대한 정보를 이웃 장비들에게 알려주고, 자신도 이웃으로부터 얻은 정보를 이용해 가능한 경로를 계산하는 routing 프로토콜들이고 control-plane 에 해당한다. 비록 그 계층이 스위치의 경우 Layer 2, 라우터의 경우 Layer 3 지만 말이다.

Control plane 에 해당하는 라우팅은 경로 정보를 수집하는 것이라고 했다. 그리고 이들이 경로를 수집하는 방식은 자신이 알고 있는 정보를 이웃과 교환하는 것이다. 교환하는 정보가 선에 대한 정보 (Link state) 일 수도 있고, 자신이 알고 있는 경로 (Distance Vector) 에 대한 것일 수도 있다. 전자의 예로는 OSPF 같은 것이 있고 후자의 예로는 RIP 같은 것을 들 수 있다.

어쨌거나 자신이 알고 있는 정보는 그렇게 자주 바뀌지 않는다. 그 때문에 정보의 교환 역시 빈번하게 발생하지 않는다. 이 때문에 경로를 알아내는 라우팅 자체는 고성능일 필요는 없다. 그래서 대부분의 경우 control-plane 인 라우팅은 소프트웨어로 구현한다. 대신 라우팅에서는 각 지점들이 주고받은 정보를 통해서 각 지점들이 최종적으로 똑같은 정보에 도달하는 것이 매우 중요하다. 그렇지 않으면 중간의  어떤 지점에서는 잘못된 경로를 알게 되기 때문이다. 즉, 라우팅은 각 지점들이 서로 주고받은 경로 정보를 이용해서 독립적으로 연산을 수행해서 전체 경로들에 대해서 동일한 정보를 가지게 되어야 하는 것이다. 동일한 정보를 가지게 되는 것을 수렴한다고 말한다. 그리고 각각이 독립적인 연산을 하기 때문에 라우팅 알고리즘들은 분산 알고리즘이다. 라우팅 알고리즘들은 어떻게 하면 더 빨리 수렴할 수 있을까 하는 고민을 한다.

그러나 data plane 인 패킷 포워딩의 경우는 이야기가 달라진다. 얼마나 빨리 패킷을 전달할 수 있는지가 관건이다. 이를 소프트웨어로 구현을 하면, 매 패킷에 대해서 처리를 해줘야 되기 때문에 CPU 가 병목이 되게 된다. 그래서 이를 ASIC 형태의 하드웨어로 만들어버리게 되었다. 특히나 스위칭 패브릭이라고 하는 핵심 부분이 더욱 그렇다. 그리고 그 분야에서 가장 두각을 보인 것이 시스코다. (시스코는 샌프란시스코 도시 이름에서 시스코라는 이름을 따왔고, 회사 로고 역시 샌프란시스코의 금문교를 모델로 하고 있다)




▲ 그림 5: 시스코의 옛날 로고. Cisco 라는 이름은 San Francisco 의 뒷 부분에서 따왔고 로고 역시 San Francisco 의 금문교를 모델로 한다. Cisco 는 하드웨어를 이용한 고속 패킷 포워딩으로 시장을 석권했다.


그러나 이런 하드웨어 접근 방식은 주어진 네트워크 환경에서 효율적인 성능을 낸다는 장점은 있었지만, 동시에 새로운 것들을 시도해볼 수 없다는 심각한 문제가 발생했다. 일례로, IPv4 에서 IPv6 로 넘어가기 위해서는 장비가 IPv4 스위칭뿐만 아니라 IPv6 스위칭까지도 지원해야 되는데 하드웨어로 이미 박혀있는 것을 바꿀 수 있는 방법이 없는 것이다. 그리고 비록 control-plane 인 라우팅 부분을 하드웨어로 구현을 할 필요가 없지만 그 소프트웨어가 같은 장비 안에 있는 flash 메모리 등에 박혀있는 한 그걸 마음대로 바꾸기도 어려웠다. 이 때문에 네트워크는 기존 프로토콜들 관련해서는 10Mbps, 100Mbps, 1Gbps, 10Gbps 등 높은 고도화를 이루었지만, 새로운 프로토콜 관련해서는 상당 기간 정체를 겪게 된다.

2000년대 중후반에는 Internet Architecture 연구가 한창 붐을 이루었다. “우리가 새로 인터넷을 설계한다면 어떤 내용들이 포함되어야할까?” 라는 주제의 연구들이었는데, 이는 기존의 인터넷이 설계될 때와 오늘날 가장 중요하게 생각하는 요소들이 많이 바뀌었기 때문에 생긴 자연스러운 움직임이었다. 하지만 대부분의 노력은 탁상공론으로 끝나고 말았다. 바로 현재의 하드웨어 중심의 네트워크 구성 때문이었다.

이런 하드웨어 중심의 네트워크는 새로운 것을 시도하지 않는 한 크게 문제가 되지 않았다. 그렇지만 예전에 만들어진 인터넷이라는 옷은 지금에는 맞지 않은 것들이 많아서 새로운 기능들이 종종 필요해졌다. 예를 들어 데이터 센터 안에는 많은 수의 스위치가 들어가는데, 네트워크 구성을 기존의 단순 tree 형태로 하게 되면 최상위 스위치가 병목이 되어 링크가 아무리 빨라도 그만큼을 못 쓰게 된다. (인터넷 설계 원칙에 대해 궁금한 분들은 내가 따로 정리해 둔 글 (링크) 을 참고하면 좋을 듯하다.)

그리고 데이터 센터 안에는 수많은 스위치가 들어가는데 그중 하나가 죽으면 다른 스위치들이 경로 정보를 주고받고 수렴할 때까지 기다려야 된다. 그리고 라우팅 정보가 수렴하지 않으면 포워딩 역시 제대로 이루어질 수 없게 된다. 데이터 센터 안의 네트워크 구성은 너무나 뻔해서 굳이 분산 알고리즘을 돌릴 필요가 없는데도 말이다.

이런 여러 이유 때문에 하드웨어 중심의 네트워크를 벗어나기 위한 노력이 시도되었다. 이름하여 Software Defined Networking, 줄여서 SDN이다. 


■ 하드웨어 중심의 네트워크를 벗어나기 위한 노력 - SDN


Software Defined Networking (SDN): SDN 의 기본 아이디어는 “패킷 포워딩에 특화된 프로그래밍 가능한 더미 하드웨어” + “라우팅과 더미 하드웨어의 포워딩 테이블을 제어하는 현명한 외부 소프트웨어 (컨트롤러)” 로 정리할 수 있다. 이는 기존의 완전 소프트웨어 기반 솔루션과 완전 하드웨어 기반 솔루션의 하이브리드 형태로 이해할 수 있다. 소프트웨어 기반 솔루션은 포워딩 성능이 나오기 힘들었다. 하드웨어 기반 솔루션은 프로그래밍이 안됐다. 그래서 그 둘을 섞어서 포워딩 규칙을 프로그래밍할 수 있는 포워딩에 특화된 하드웨어와 이 포워딩 규칙을 제어하는 소프트웨어라는 방식을 채택한 것이다.


그리고 SDN 는 기존에 장비들이 분산 알고리즘을 돌리던 것에서 벗어나 외부 소프트웨어가 모든 하드웨어를 중앙 집중식으로 관리하게 된다. 그 때문에 오랜 시간이 걸릴 수 있는 분산 알고리즘의 수렴 과정을 피할 수 있게 되었다. 외부 소프트웨어 (콘트롤러) 가 바로 어떻게 하면 되는지 알려주면 되기 때문이다. 그리고 외부 소프트웨어가 네트워크를 정의한다(제어한다) 는 뜻에 Software-Defined 라는 이름을 쓰게 된 것이다.



▲ 그림6: SDN 는 포워딩에 특화된 하드웨어들을 외부의 소프트웨어 중앙 집중방식으로 통제하는 형태이다. (아이콘 출처: WPZOOM, iconfinder.com, Creative Commons License)


잠깐. 그런데 포워딩에 특화된 하드웨어이면서 프로그래밍 가능하다고 했는데 어떻게 이런 게 가능할까? 앞서 하드웨어로 포워딩을 구현하면 바꾸는 것이 안된다고 했는데 말이다. 사실 여기서 말하는 하드웨어는 기존 ASIC 기반의 하드웨어와는 다르다. SDN 에서의 하드웨어는 입력으로 들어오는 패킷의 패턴 매칭 하드웨어라고 이해하는 것이 더 좋을 것이다. “패킷을 보고 헤더 부분이 이런 패킷은 여기로, 저런 패턴의 패킷은 저기로” 이런 방식이다. 그 때문에 하드웨어는 특정 프로토콜에 종속되지도 않고, 외부의 소프트웨어는 패킷의 일정 길이에 해당하는 앞 부분의 패턴에 따른 경로만 프로그래밍하면 되는 것이다. 신박하지 않은가?

OpenFlow: 이처럼 SDN 에서 가정하는 하드웨어는 기존의 ASIC 기반 하드웨어와는 확연하게 달랐고, 이렇게 패턴 매칭 형태로 프로그래밍 가능한 스위치에 대한 Spec 이 OpenFlow 라는 이름으로 이루어졌다. 그리고 HP, DELL, IBM 등 메이저 스위치 제조업체들이 이 규격에 따라 OpenFlow 스위치들을 만들기 시작했다. 보다 자세한 내용은 여기를 참고하기 바란다. (http://www.openflow.org/)


가상화 (Virtualization): 나는 virtualization 을 가상화로 번역하는 것이 상당히 많은 오해를 불러일으키고 있다고 생각한다. 가상화는 왠지 가짜의 느낌을 주기 때문이다. 실은 Virtualization 이 가짜라기 보다 “진짜 같이” 혹은 좀 더 의역을 하면 “나만이 쓰는 것처럼” 라는 의미에 가까운데 말이다. Server virtualization 은 나만이 쓰는 것 같은 진짜 서버, Storage virtualization 은 나만이 쓰는 것 같은 진짜 스토리지 이런 식이다. 그러니 Network virtualization 은 나만이 쓰는 것 같은 네트워크라는 뜻이 된다. 

가상화 기술이 “나만이 쓰는 것처럼” 하는 기술이기 때문에, 필연적으로 자원의 공정한 분배와 분리를 지원해줘야 된다. 예를 들어 서버 가상화 기술은 각 가상 서버들이 공정하게 자원을 분배 받고, 다른 가상 서버가 자원을 쓰는 것 때문에 또 다른 가상 서버가 영향받지 않게끔 하는 것이 핵심이다. 그리고 스토리지 가상화는 각 가상 스토리지가 공정하게 디스크 IO 를 분배 받을 수 있게끔 하고 다른 가상 스토리지 때문에 내 가상 스토리지의 IO 성능이 영향받지 않게 해줘야 된다. 네트워크 가상화도 마찬가지다. 내 가상 네트워크가 일정 수준의 밴드위스를 보장받아야 되고 이는 다른 가상 네트워크 때문에 영향을 받아서는 안된다.

이런 가상화 기술은 물리 자원 위에 소프트웨어적으로 만들어 주는 것이다 보니, 자원의 할당량을 변경하거나 다른 곳으로 이동시키는 것이 자유롭다는 장점이 있다. 예를 들어 가상 서버에 CPU 를 추가한다거나 다른 물리 기계로 이동하는 것이 가능한 것처럼 말이다. 그리고 가상 네트워크에 밴드위스를 추가한다거나 다른 물리 네트워크로까지 가상 네트워크를 확장하는 것 등이 가능한 것처럼 말이다.

가상 스위치: 이처럼 네트워크 자원의 배정과 분리, 그리고 제어가 가능하게 하려면 네트워크 가상화를 위해서 뭔가가 더 필요한 것은 당연하다. 바로 가상 스위치라는 개념이다. 가상 스위치는 보통 가상화 프로그램 안에 내장된다.


가상 스위치가 없는 경우 어떤 일이 벌어질까? 아래 그림을 보기 바란다.



▲ 그림7: 만일 가상 스위치가 존재하지 않는다면 같은 물리 머신안 가상 머신들이라도 통신을 위해서는 외부 스위치까지 갔다가 돌아와야 된다. (아이콘 출처: WPZOOM, iconfinder.com, Creative Commons License)


가상 서버는 물리 서버와 마찬가지로 각각의 IP 를 받을 것이다. 그런데 같은 기계 안에 있더라도 가상 서버들끼리 통신을 하기 위해서는 물리 기계를 벗어나 외부 스위치 까지 가야 되는 일이 발생한다. 이는 엄청나게 비효율적이다. 그럼 가상 스위치가 있는 경우는 어떨까? 아래를 보면 알겠지만 훨씬 더 효율성이 높아진다.



▲ 그림 8: 가상 스위치가 존재하는 경우 같은 물리 장비 안의 가상 서버들간의 통신이 훨씬 효율적으로 된다. (아이콘 출처: WPZOOM, iconfinder.com, Creative Commons License)


그 외에도 같은 물리 머신의 네트워크 카드로 통신하더라도, 가상 스위치를 분리함으로써 가상 서버들이 다른 네트워크에 존재하게 하는 것도 가능하고, 다른 기계에서 도는 가상 서버들이 같은 네트워크에 있도록 하는 것도 가능하다.



▲ 그림 9: 가상 스위치를 분리해서 가상 서버들이 다른 네트워크에 존재하게 만들 수 있다. 맨 왼쪽의 가상 서버는 다른 두 가상 서버와 다른 네트워크에 포함된다. (아이콘 출처: WPZOOM, iconfinder.com, Creative Commons License)





▲ 그림 10: 가상 스위치는 서로 다른 물리 서버에 있는 가상 서버들간에 같은 네트워크 안에 있게 만드는 것도 가능하다. 이때 물리서버간 통신은 가상 스위치간 터널링으로 이루어진다. (아이콘 출처: WPZOOM, iconfinder.com, Creative Commons License)


이처럼 가상 스위치는 네트워크 가상화를 구현하기 위한 필수적인 기술이라고 할 수 있다. 그 때문에 최근 가상화 솔루션들은 모두 가상 스위치 기능들을 포함하고 있다. 그중에서 Open vSwitch 는 오픈 소스 기반의 가상 스위치 구현이며, XenServer 의 가상 브릿지 구현은 Open vSwitch 을 활용하고 있다. (OpenFlow 와 Open vSwitch 는 이름도 유사하지만, 실제로도 같은 사람들이 만들었다) 

이번 컬럼에서는 네트워크 관련 용어들을 정리해보았다. 서두에 이야기한 것처럼 비영어권인 우리는 많은 용어를 그냥 전공 용어겠거니 하며 외우는 경우가 많은데, 용어의 의미를 좀 더 명확히 이해하면 해당 용어의 확장이나 응용 역시 쉽게 이해할 수 있는 경우가 많으니 다소 이단적인 이번 컬럼에서의 용어 설명이 도움이 됐길 바란다.

댓글

새로고침
새로고침

기사 목록

1 2 3 4 5