안녕하세요 @realmankwon입니다.
최근 stackoverflow에서 개발 관련 조사결과를 발표했습니다.
개발자인지라 관련 내용을 살펴보았습니다.
그중 가장 관심이 간 것이 바로 개발 언어에 대한 부분입니다.
우선 최근 가장 각광 받고 있는 언어의 순위는 다음과 같습니다.
10위 내에 웹관련 언어가 주를 이루고 있는 것을 알 수 있습니다.
다음으로 개발시 사용되는 Framework, Library, Tool의 순위는 다음과 같았습니다.
이 순위와 언어의 순위를 매칭하면 흥미로운 점을 알 수 있습니다.
갑자기 왜 빅데이터가 나왔는지 의아하실 수 있지만 위에서 언급한 순위에서 각각 1위가 javascript, node.js 인 것이 힌트입니다.
node.js 의 홈페이지에 가면 아래와 같은 설명이 첫페이지에 나옵니다.
javascript로 이루어진 node.js 의 가장 큰 특징은 바로 이벤트 기반, non blocking IO입니다.
이미지 출처 : Blocking-NonBlocking-Synchronous-Asynchronous
그림과 같이 Blocking IO 와 Non Blocking IO의 차이는 동기 방식(Synchronous) 과 비동기 방식(Asynchronous)의 차이와 같습니다.
즉, Blocking IO는 데이터를 처리할 때 시간 순서대로 하나를 처리하고 그 다음에 다음 것을 처리하는 것이고 Non Blocking IO는 데이터를 처리할 때 하나를 처리하기 전에 다음 것을 처리할 수 있으며 그 중 처리가 완료된 것들은 callback 함수를 호출함으로써 그 이후 처리를 할 수 있게 하는 것입니다.
이 특징이 바로 빅데이터를 처리하는데 가장 최적화 된 특징이 됩니다.
왜냐하면 빅데이터는 말그대로 많은 양을 데이터를 빠르게 처리하는 것이 중요합니다.
이때 기존과 같이 동기방식의 프로그래밍을 하게 되면 병렬로 데이터를 처리하지 못하고 하나의 데이터를 처리할 때까지 기다린 후 다음 데이터를 처리해야 합니다.
물론 thread를 사용하여 처리를 해도 되지만 multi thread의 처리가 쉽지 않은 것이 사실입니다.
하지만 javascript는 그 자체가 이미 비동기적 언어이고 이를 기반으로 한 node.js 역시 callback 방식의 비동기적 방식이기 때문에 많은 데이터를 처리할 때 병렬로 처리하게 하고 완료가 되면 callback을 받아 후처리를 하는 방식은 큰 장점이 됩니다.
빅데이터는 이해가 가는데 IOT는 또 왜라고 하실 분이 있을실지 모르겠습니다.
IOT는 말그대로 Internet Of Things 입니다.
Full Name을 보시면 눈치 빠른 분들은 "아~~" 하실 겁니다.
IOT는 이름 그대로 모든 기기를 Internet으로 연결하는 것이 가장 중요한 기술이 됩니다.
이때 장비를 Internet 으로 연결하는 것은 어찌보면 쉬울 수 있습니다.
하지만 가장 문제가 되는 것은 그 장비를 제어하는 것입니다.
그때부터는 하드웨어 프로그래밍을 해야되고 이때 필요한 것이 드라이버가 됩니다.
그렇다면 IOT 장비를 만들때 마다 그에 맞는 드라이버를 개발해야 하고 그 드라이버를 포팅하고 난 이후에 그것을 제어하는 클라이언트 프로그램까지 만들어 줘야 됩니다.
개발 생산성이 현저하게 떨어지게 되는 것입니다.
이것을 node.js가 해결할 수 있게 된 것입니다.
node.js는 javascript 기반이지만 동시에 하드웨어를 컨트롤할 수 있는 인터럽트 기반 Framework입니다.
API를 보면 알 수 있듯이 C/C++이 Addon 되어 있습니다.
또한 장비 자체에서 node.js를 이용하여 web server를 실행시킬 수 있기 때문에 브라우저만 있으면 장비 자체에 직접 접속하여서 하드웨어를 제어할 수 있습니다.
즉 장비의 하드웨어 드라이버를 별도로 만들 필요도 없고 장비에 접속하는 클라이언트 프로그램도 별도로 만들 필요가 없는 것입니다.
몇년 전까지만 해도 Javascript 는 HTML로 웹페이지를 만들 때 사용되는 미천한 언어로 여겨졌습니다.
하지만 다양한 모바일 기기가 생겨나면서 웹에 대한 수요가 많아졌고 웹페이지의 최적화를 위해서 javascript를 기반으로 한 jQuery, AJAX 등의 언어가 생겨나면서 그 중요성이 높아지기 시작했습니다.
그러다가 Chrome V8 엔진 및 node.js 등의 Framework의 기반이 되면서 Front-end 단을 넘어 명실상부 Back-end 단에서도 주를 이루는 언어로 급부상하게 되었습니다.
관련하여 stackoverflow의 통계 자료를 보면 javascript는 거의 모든 부분에 빠지지 않는 것을 알 수 있습니다.
그만큼 javascript는 현재 가장 중요한 언어라고 봐도 무방합니다.
그렇다면 Javascript만 죽자고 파면 될까요?
제의 견해는 No 입니다.
이번 조사의 언어별 임금을 보시면 다음과 같습니다.
분명 모든 곳에 쓰이고 아주 중요한 언어이지만 임금은 하위권입니다.
그 이유는 무엇일까요?
바로 Javascript는 필요 조건이 아닌 충분 조건이기 때문입니다.
쉽게 말해 기본으로 할 줄 알아야 되는 스킬이기에 할 줄 모르면 손해이고 할 줄 알아도 기본이라는 겁니다.
그렇다면 개발자는 어떤 선택을 해야 할까요?
제 나름의 대안을 한번 생각해 보았습니다.
앞서 언급한 임금에 대한 조사에서 상위권의 언어들은 그만큼 희소성이 있는 언어였습니다.
그렇다면 그 희소성은 어떻게 생겨나게 될까요?
바로 자신이 하고 있는 언어를 꾸준히 하는 것입니다.
자신의 주언어를 깊이 있게 파고 공부해서 그 언어로는 어떤 것이든 할 수 있다는 자신감을 가질 때까지는 공부를 놓치 않아야 할 것입니다.
그래서 언젠가 그 언어를 할 줄 아는 사람이 줄어들거나 애초가 그 언어를 공부한 사람이 적다면 임금은 자동으로 올라갈 수 밖에 없을 것입니다.
대부분의 개발자는 지금까지 동기 언어를 주로 사용해 왔을 것입니다.
Java, C# 등이 대표적인 동기 언어입니다.
그렇다면 여기 비동기 언어인 Javascript를 기본으로 장착해야 할 것 같습니다.
가장 좋은 방법은 회사의 업무에서 어떻게 해서든 홈페이지 업무를 만드는 것입니다.
홈페이지는 기본적으로 웹페이지를 만들어야 하기 때문에 jQuery나 AJAX 등을 쓰면서 Javascript를 적용해 볼 수 있기 때문입니다.
그리고 여건이 된다면 node.js 를 통해서 홈페이지를 만들어 보면서 express 와 같은 framework를 통해서 back-end 단을 구현하시면 javascript와 node.js 를 동시에 습득하실 수 있는 좋은 방법이 될 듯 합니다.
나아가서 Full stack 개발자를 목표로 하면 더 좋은 개발자, 더 많이 찾는 개발자가 되지 않을까 싶습니다.
아래의 조사 결과가 그것을 뒷받침해 줄 수 있을 것 같습니다.
비록 웹 쪽이긴 하지만 지금도 이미 많은 개발자가 Full Stack web 개발자로 일을 하고 있을 것을 알 수 있습니다.
Full Stack Web 개발자에 C# 이나 Java를 겸비하고 있다면 현시대에서는 가장 강력한 개발자가 아닐까 생각됩니다.
많은 개발자가 저와 같은 고민을 하고 있을 거라 생각이 됩니다.
쏟아지는 언어들 가운데 나의 주언어가 언젠가 쓰이지 않게 되는 날 나는 무엇으로 먹고 살까라는 고민...
한번쯤을 해 보셨을 거라 생각됩니다.
그런 걱정을 이겨낼 수 있는 건 어쩌면 계속 공부하고 만들어 내는 것이라 생각이 됩니다.
어떤 방법으로든 재미를 가지고 공부할 수 있는 방법을 찾아서 이 시대에 필요한 개발자가 되어 걱정없이 살아갈 수 있길 바래 봅니다.
저 역시도 더 많이 노력을 해야겠습니다 ^^