2025년이 다 끝나가는 시점에서 “SDN 이 잘 이해가 안갑니다!” 라는 질문을 받는것이 저는 개인적으로 굉장히 신선했기에 생각난김에 좀 깨작여 보려고 합니다.
SDN 이라는 단어는 저는 UCC 라는 단어와 같다고 생각합니다. (하핫 저는 개인적으로 이 단어를 잘 모르는 나이대라고 거짓말 하고 싶지만… ) UCC는 User Created Contents의 약자입니다. 한 때는 개인이 영상을 제작해서 퍼트리는게 신기하게 여겨지는 시대가 있었죠 ㅎㅎ . 요즘 유튜브에 누군가가 영상을 올렸다고 해서 “너 UCC 올렸구나!!” 라고 이야기 하진 않잖아요? 하지만 엄밀히 따지면 유튜브에 올라오는 영상은 User Created Contents가 맞습니다. 너무 당연한 것을 UCC 라는 단어를 써가며 설명하는것이 이상할 뿐이죠.
OpenStack과 Kubernetes를 하는 요즘의 우리는 숨쉬듯이 SDN을 하고 있습니다. 그래서 굳이 이러한 Network를 SDN 이라고 부르는것도 참 이상한 세상을 살고 있습니다. 이 단어는 시대의 발전에 따라 자연스레 사라졌다고 보는것이 맞겠습니다. 우리는 그냥 Neutron 이라고 부르고, Calico 라고 부르고 Cilium 이라고 부르고 Cisco ACI 라고 부르고 있죠.
그 당시의 SDN은 파격적인 패러다임의 변화였습니다. 너무나 익숙하던 Cisco 장비를 다르게 바라보는 계기가 되었죠. 지금 생각해보면 당연한 변화였습니다. 마치 H.O.T가 처음 데뷔 했을때는 “아이돌” 이라고만 정의 했었는데, 시간이 흐르고 이해도가 올라가니 이제 Aespa는 4세대 아이돌이고 All Day Project는 5세대 아이돌이라고 용어가 생겨나고 이해도가 깊어지는것 처럼요.
Docker 또한 마찬가지의 수순을 밟았습니다. Docker로 시작했지만 이해도가 높아지자 OCI 가 생겨났고, containerd 가 분리되어 나왔고, buildah 같은 툴들이 생겨나기 시작했고, daemonless 라는 용어들이 튀어나오고… 하는 식으로 Docker를 해부하며 용어들을 만들어 내며 구분하기 시작했죠.
하나의 Network 장비라는 개념에서 Data plane, Control Plane, Management plane이라는 개념이 정립된 바로 그 순간이 SDN이 탄생한 순간입니다. 또한 Programmable 해야한다는 성질도 포함되어있는 단어이기도 하죠.
Calico에는 Bird라는 Agent가 있고 Calico Controller가 있죠. Cilium 에는 Clilium Controller가 있고 CIlium Agent가 존재합니다. 이러한 설계 패턴에 대해 청사진을 제시했던게 그 당시 SDN이 처음 나왔을때 했던 일이라고 할 수 있겠습니다. 이 모든것이 API 호출을 통해, gRPC 를 타거나 AMQP를 타고 정보 교환이 이루어지며 Program 적으로 네트워크가 세팅이 되고 동작이 되기 시작합니다.
SDN 이라는 단어를 굳이 알려고 하지 않으셔도 됩니다. 이미 우리는 Calico의 구조를 통해, Kube-OVN의 구조를 통해, OpenStack Neutron의 구조를 통해, CIlium의 구조를 통해 SDN이 뭔지를 그냥 본능적으로 경험하는 시대에 살고 있으니까요.
그럼에도 면접에서 SDN이 뭔지 말해보라는 분이 계신다면, 저는 그 분을 그냥 단어 하나로 상대방을 찍어누르고 싶어하는 꼰대 정도로… 평가하겠습니다. ^^. Calico의 구조와 CIlium의 구조를 설명할 수 있으면 되는거 아닌가요 ㅎㅎ