반응형
요즘 들어서 실제 환경에서 내 연구분야와 관련된 지식이 확장되는 기쁨과 동시에 이걸 그동안 모르고 있었다는 절망, 곧이어 또다른 지식의 확장에 대한 경험의 연속이다. 한마디로 말해서 제정신이 아닌 상태다. (...) 전산학/컴퓨터공학의 세부 분야라면 어느 것이나 마찬가지일 것 같은데, 애초에 이론을 완벽하게 습득하지 않은 채로 계속 다음 단계로 전진하다 보면 실전에서 모래성과 같이 허술하게 쌓여 있던 그동안의 지식이 깨지게 되고, 결국 실전에서 문제를 해결하는 과정을 겪으면서 이론을 재정립하고, 실제 환경에서 어떻게 이론이 적용되는지도 배우게 된다. 물론 마지막 단계에 해당하는 '실전에서 문제를 해결하는 과정'이론 기반이 약할 경우 오래 걸릴 수밖에 없다.
내가 석사과정 2년차 때 자의반 타의반으로 무선 네트워크 분야의 연구주제를 선택하면서, 비교적 최근까지 얼마나 내가 이론이 약한 상태였는지를 뼈저리게 느끼고 있다. 달리 표현하자면, 이제서라도 네트워크를 실제로 운용할 때 필요한 일부 요소들(여전히 극히 일부인 것 같다.. 에휴)을 하나씩 재정립하는 것이 얼마나 다행인지 모르겠다. 학생이니까 실수하고 배우는 것이 용서가 되지, 만약 박사가 되어 세상에 나가서 똑같은 경험을 하고 살았다면 부끄러워서 고개를 들고 다니지 못했을 것이다. (뭐 사실 학생 신분도 이제 시한부가 되었다. 무한정 학생일 수는 없다.)
최근에 내 연구의 실험 환경인 와이파이(IEEE802.11) 기반의 멀티채널 무선 메쉬 네트워크(multi-channel wireless mesh network)를 구축하고 실제로 트래픽을 만들어서 보내면서, arp, route (커널 라우팅 테이블), iptables, hostapd, dhcp 등의 다양한 도구들의 역할과 그 중요성을 실감할 수 있었고, 커널에서 netlink를 통해서 패킷을 처리하는 절차, 패킷이 버퍼링되면서 발생하는 지연 문제, 그 원인을 제공하는 intra-flow interference, inter-flow interference 등에 대해서도 다시 살펴볼 수 있었다.

퀄넷(QualNet) 네트워크 시뮬레이터에서는 메쉬 네트워크 만드는 매뉴얼에 따라서 만들어 놓고 노드 몇번에서 다른 노드 몇번으로 패킷을 몇개 보내라고 시키면 위에 언급된 각종 도구들의 역할을 전혀 몰라도 실험하는 데 아무 이상이 없었고, 성능 측정 결과도 바로바로 나왔다. 그러면 나는 그저 next-hop으로 패킷을 전달하는 부분만 고쳐 가면서 실험해서 그래프를 만들어 내면 되었다.

그러나 현실 세계에서 무선 메쉬 네트워크가 서로 기본적인 "연결" 상태를 유지하도록 만드는 기본적인 것도 호락호락하지 않았고, 여기에 스마트폰이나 노트북을 연결해서 인터넷을 하거나 서로 통신이 되도록 만들기 위해서 이것저것 시도하면서부터는 더더욱 멘붕 상태에 빠져들 수밖에 없었다.

최근 들어서야 여러 앱들을 돌리고 네트워크 상태를 모니터링할 수 있게 되었는데, 이제 실제로 나만의 "라우팅"을 적용할 수 있겠다는 부푼 기대를 안고서 실험을 했으나, 근본적으로 라우팅만 가지고는 해결이 안되는 문제임을 인식한 직후에는 또 한번 절망할 수밖에 없었다. 아, 이래서 내가 저널에 투고한 논문이 reject 되었던 것일까?

------------------- 내가 다시 석사과정 2년차 또는 박사과정 1년차로 돌아간다면, 당장 노트북이든 보드PC든 라우터든 여러 개를 가져와서 실제로 돌아가는 무선 네트워크 실험 환경을 구축하는 것부터 시작할 것이다. 그것이 한 학기가 넘게 걸리든, 거의 일 년이 걸리는 한이 있더라도 반드시 테스트베드 환경 구축을 강행할 것이다. 그렇게 실제로 써먹을 수 있는 테스트베드를 만드는 작업 그 자체가 적어도 나에게는 이론을 동시에 습득하기에 가장 효과적이기 때문이다.

이렇게 무선 네트워크 환경에서 패킷이 머신 하나에 들어오고 나가기까지의 모든 세부 절차에 대한 총체적인 이해를 바탕으로, 그 다음에야 실제로 내가 해결하고 싶은 문제 상황을 상상해 보고, 매일매일 테스트베드 환경에 돌려볼 것이다. 만약 기존 환경에서 잘 해결이 안 된다면, 그것이 최소한의 research goal은 될 수 있다. 하지만 내가 단독으로 그 목표를 해결하면 아무 소용이 없으므로, 이제 기존의 논문들이 어떻게 했는지를 공부해서 그 개념을 실험 환경에 적용해서 돌려볼 것이다. 물론 너무나 당연한 소리지만, 기존 연구는 반드시 최고 수준의 학회/저널에서 최근에 발간된 논문들 중에서 찾을 것이다. 최근에 발간된 최고 수준의 학회/저널에 올라오지 않는 주제라면 사실 조심해야 한다. 모 아니면 도가 될 수 있기 때문이다. 정말로 해결이 필요한 실용적이고 중요한 문제인데 아무도 해결하지 않았거나, 해결할 가치가 없거나(공학적인 의미가 없거나) 둘 중 하나이기 때문이다. 하지만, 전자일 확률을 1%도 안 된다.

그런데 아마 내가 관심있어 하는 가장 최근의 핫한 연구분야는 내가 앞서 '이론의 실제화' 과정에서 구축한 테스트베드에 비해 이미 여러 단계 앞서 있을 것이다. 그리고 이미 어느 정도 오픈소스로 쉽게 구할 수 있게 되어 있을 가능성도 높다. 그럼에도 불구하고 위와 같이 기본적인 테스트베드를 구축하는 연습은 적어도 네트워크 분야에서는 안할 수가 없는 것 같다. 저 과정을 이해하지 못한 채로 신기술을 바로 적용하면 그 내부 작동 원리를 이해하기 위해서 결국 언젠가는 공부해야 하기 때문이다. 물론 최신 기술을 바로 설치해서 써 보는 것부터 시작해서 세부 개념과 원리를 익혀 가는 방법도 결코 나쁘지 않을 것이다. (예를 들면, 요즘 핫한 SDN 도구 중 하나인 OpenFlow나, 그 위에서 작동하는 ONOS 같은 컨트롤러 패키지부터 설치해서 써 보는 것.) 어쨌든 결국 최종적으로 얻게 되는 지식은 다를 바가 없을 테니까. 즉, 성향에 따라서 어느 방법이든 선택해서 열심히 익혀 나가는 수밖에 없다.

비록 많이 늦었지만, 이제서라도 이론을 다시 쌓아올리고, 실제 환경과 습득한 이론 사이의 간극을 줄여 가고 있으므로, 조금 더 노력해서 반드시 의미 있는 연구 결과를 만들어 내고 싶다. 남부끄럽지 않은 박사가 되어야겠다. 


반응형
블로그 이미지

Bryan_

,