반응형

부끄러운 사실이지만, 최근 들어서야 코딩할 때 파이썬(python)을 쓰기 시작했다.

말이 최근이지 불과 이틀 전이다. ㅡㅡ;;


애초에 네트워크 시뮬레이션 특성상 핵심 구현은 C/C++을 쓸 수밖에 없고, 똑같은 것을 실제 장비에서 실험을 해보려면 리눅스 디바이스 드라이버를 고쳐야 해서 결국 C를 써야 한다. 전에 연구실에서 IoT 테스트베드 구현에 깊게 참여하던 당시에는 IoT 미들웨어가 순수 Java로만 되어 있었고, 과제 연차평가를 보여줄 시연용 모바일 기기도 안드로이드여서 Java 기반이니 지금껏 Java와 C/C++만 줄기차게 써온 셈이다.


물론 스크립트 언어를 안 쓴 것은 아닌데, 그게 리눅스 쉘(shell) 스크립트와 awk였다. QualNet이나 ns-3가 만들어 내는 수많은 반복 시뮬레이션을 batch로 실행하고, 실행 후에 만들어지는 여러 개의 데이터 텍스트 파일들을 정리해서 엑셀이나 Gnuplot에 붙이기 좋게 만들 필요가 있었다. 

문제는 shell (bash)이든 awk든 스크립트 언어라서 바로바로 돌려볼 수 있기는 한데, 왠지 코드가 쉽게 써지지 않는 것은 단지 나의 기분탓이었을까? (...)


사실 bash나 awk 모두 잘(?) 쓰면 아주 강력한 스크립트 언어인 것은 분명하지만, 이상하게 빨리 익숙해지는 느낌은 잘 들지 않았다. 내가 집중적으로 실험할 때에만 폭풍처럼 몰아쳐서 스크립트를 만들다가 또 한참 안쓰고 잊어버려서 그런 것일지도? 아무튼 awk로 내가 머릿속에서 상상하는 것처럼 텍스트를 예쁜 과일 자르듯 쉽게 파싱하려면 상당한 시간의 구글링과 trial-and-error를 거쳐야만 했다.


최근에도 bash와 awk의 조합으로 ns-3 시뮬레이션을 대량으로 돌리고, 그 결과로 생성되는 텍스트 파일 중에서 몇몇 지정된 노드 번호에 대해서만 로그 데이터를 읽어들여서 파싱하는 작업을 했는데, 최근에 요구사항이 추가돼서 결과 데이터를 한번 더 가공해야 하는 상황이 되었다.

이미 만들어 놓은 awk 코드를 또 고치려니 선뜻 손이 가지 않아서, 차라리 파이썬으로 해 봐야겠다는 생각이 들어서 그냥 파이썬의 파일 입출력 예제 코드와 string 포맷팅 등의 기초적인 정보를 구글링해서 만들어 보았다.


그랬더니,


...15분 만에 결과 데이터가 내가 원하는 형태로 터미널 화면에 뙇.


Aㅏ...


기존의 awk와 shell 스크립트를 뜯어고치면 절대 완성하지 못할 시간인데...

그리고 다른 데이터에 대한 유사한 후처리 작업을 ns-3 시뮬레이션 상에서 C++ 함수로 구현해 둔 것도 있는데, 그 당시에 구현하던 때에도 30분 넘게 걸렸었는데 파이썬은 문법을 구글링하고 vi에서 생으로 코드를 짰는데도 15분이라니.

게다가 그동안 자바로 코딩했던 경험상, 똑같은 기능을 자바로 구현하면 100줄은 쉽게 넘어갈 코드가 파이썬에서 주석과 디버그용 print문 합쳐서 45라인...


...난 지금까지 뭘 한거지? ㅋㅋㅋㅋㅋ


예전에 오버레이 네트워크 상에서 돌리는 라우팅 프로토콜을 만들어야 된다고 징징거릴 때, 주변에서 파이썬으로 먼저 만들어 보는 건 어떠냐는 제안에도 파이썬을 써본 적이 전혀 없어서 익숙한 Java로 하겠다고 그랬는데...

테스트용 웹서버 구축할 때에도 Spring Boot 상에서 자바로 노동(?)을 하고 있을 때에도 옆에서 아는 형이 Django로 파이썬으로 만들면 더 빠르다고 했을 때에도 선뜻 바꿀 생각을 못했는데... @_@ (정신 가출)


다양한 프로그래밍 언어로 문자열 처리 어플리케이션 개발 시 소요되는 시간 비교(Prechelt and Garret) (출처: HACKERNOON [1])


위의 그래프가 충분히 이해가 가는 순간이다.


게다가 내가 목표로 하는 개발환경은 실행속도 따위(...) 그다지 의미가 없고, 코드만 빨리 완성되면 가상 머신 여러 개 만들어서 밤에 자는 동안 batch로 잔뜩 돌려놓기만 하면 되니까... 진작에 파이썬을 여기저기 적용해서 쓸 걸 ㅠㅠ


게다가 파이썬을 단 한번도 써본 적 없다고 괜히 겁먹은 거잖아?!

기존에 다른 프로그래밍 언어들을 장시간 다뤄본 사람 입장에서 파이썬은 배울 필요 없이 그냥 일단 쓰고 보면 되는 거였다. ㅡㅡ;;


물론 텍스트를 잘 파싱/편집/재구성하는 가장 강력한 도구로써 awk를 쓰는 것이 여전히 더 유리한 상황은 있을 것이다. 하지만 비교적 단순한 스트링 파싱은 그냥 파이썬에서 직관적인 코드를 써서 훨씬 더 빨리 만들어낼 수 있음을 이번에 경험으로 알게 되었다.

앞으로는 C++ 시뮬레이션 코드를 bash로 반복 실행을 하고, awk로 여기저기 흩어진 데이터를 한데 모으는 것까지만 하고, 그 뒤의 스트링 파싱이나 평균 계산 등은 다 파이썬으로 하면 될 것 같다.


생산성이 좋다고 주변에서 일관되게 얘기하면 그러한 줄 알고 신속하게 적용할 수 있는 사고방식의 중요성을 느낀다. ㅠㅠ

외곬수가 되지 말자...



<참고자료>

[1] Nick Humrich, "Yes, Python is Slow, and I Don’t Care," HACKERNOON,

https://hackernoon.com/yes-python-is-slow-and-i-dont-care-13763980b5a1



반응형
블로그 이미지

Bryan_

,