늘은 이것 저것 생각하다가, 예전일이 생각이 났다.


내가 nodeJS 처음으로 사용하기 시작한 것은 2년전 어느 이른 봄으로 기억이 된다.

당시의 나는 쏟아져 나오는 새로운 기술들과 Cloud기반의 서버 기술들을 들여다 보면서, 어떤 것을 공부를 해야할지 수 개월째 맴돌고 있었던 시기로 기억된다. 


하루가 다르게  쏟아져 나오는 새로운 기술들이 눈과 귀를 즐겁게 하였지만

   "무엇을 공부해야할까?" 

   "무엇을 배워야 할까?"

 

대해서 나름 심각하게 고민하고 스스로에게 물어 보는 시간이 많았다.

AI와 머신러닝, ReactJava, Java 8, Lamda, 함수형 프로그래밍,  V8 엔진을 기반으로한 Javascript 기반의 서버 프로그래밍 등등 말이다


이러한 고민의 시작은 사실, 90년대에 서버 클라이언트 프로그래밍을 시작으로 2000년대 초반에는 3 Tier기반의 서버 개발로 할 때는, 모든 서버의 설치와 구성 및 설정을 위해 개발자는 당연하게  사전에 검토와 분석을 기반으로 설계를 하고 개발을 하고 운영까지 하였다. 그리고 당연하게 개발을 위한 소프트웨어 스택과 라이브러리에 대한 기능도 세세하게 검토하고, 버전을 확정한후에 개발을 시작하였다.


하지만, 현재의  AWS와 같은 Cloud 환경과 Spring과 같은 휼륭한 Framework를 사용하거나 완성도가 높은 오픈 소스를 사용하게 되면, 수개월에 걸쳐서 검토하고 기능을 익혔던 과정은 불필요한 작업이 되었다.

내 생각을 덧붙이자면, 누구나 쉽게 개발할 수 있는 환경이 된 것이다. 

이전에 MSDN CD 또는 DVD를 통해서 학습했던 내용들은 인터넷을 이용하면 바로 바로 이용가능한 예제와 설명들을 찾을 수 있다. 


새로운 시대가 도래한 것이다.

그런데, 어떻게 나는 무엇부터 시작을 해야 할지, 알수가 없었다. 몇몇 사람들과 이야기를 나누어 보았는데, 나와 비슷한 고민을 하는 사람들이 있었다. 

알파고의 파도가 지나간지 얼마 되지 않았기에 AI를 공부하고 싶다는 생각이 들었지만, 나는 엔지니어적인 관점에서 접근하고 싶었다. 내가 DB엔진을 만지지않고, DB를 사용하는 것과 마찮가지로 AI와 머신러닝이 어는 정도 성숙된 이후에 공부하고 싶었다. (요즘이 그 때인것 같다.) 


이러 저러한 여러 가지 생각을 하다가, 아무것도 시작을 못하고 있었는데,  

그러다가 내린 나의 생각은 이랬다.  

 

결론은


무엇이 되었던, 일단 한가지씩 시작해 보는 것이다


별다른 고민을 하지 않고, 크지 않은 새로운 과제에 nodeJS 사용해 보기로 하였다

마침 VS Code를 사용하면서, NodeJS와도 궁합이 잘 맞는다는 것을 알았기 때문에, 바로 사용을 할 수 있었던 것 같다. 


꼭 NodeJS 사용해서 원하는 작업을 해야만 하는 것은 아니었다. 

Perl 또는 Python 또는 Groovy 이용해서 Batch 스크립트를 만들어도 되는 간단한 작업 이었기 때문에,
그리고, 새로운 언어를 하나 더 배울 수 있다라는 측면과 호기심에서 시작을 하게 되었다.

아~ 갑자기 생각났다. 그때 AWS에 새로운 가능으로 Lamda가 추가되었는데, 지원하는 언어중에 하나가 바로 NodeJS 였다.   


그때 해야 했던 작업은 배치작업을 만들어야 했는데, RestAPI 정기적으로 호출해서 DB 테이블에 비어 있는

필드를 채워서 테이블을 확인하고 업데이트 하는 것이었다.

NodeJS의 비동기적인 동작에 대해서 잘 알지 못하는 상황이어서, Async와 I/O Non-Blocking에 대해서 작업이 필요한 상황이었다. (지금이라면, 굳이 NodeJS를 사용하지 않습니다. ) 


작업순서는 다음과 같았다.

먼저 AWS S3 에서 로그를 다운로드 받는다. 다운로드 받은 로그를 약간의 분석을 위해서 메모리에 Map형태로 잘 말아서 올린다. 그리고, DB Table 비어 있는 필드를 찾아서 업데이트 하는 작업과 Rest API를 호출해서 DB상의 테이블의 구멍난 부분을 찾아서 채워는 작업이었다.


기본적으로 배치로 돌기 때문에, 시간적으로는 제한을 받지 않기 때문에 기존의 Sync 작업으로 진행해도 되었지만, NodeJS 사용한다라는 것은,  Async 대한 기본적이 고민이 선행될 필요가 있다. (물론, 지금이라면 await async 키워드를 이용하거나, Promise 사용하면 되겠지만...)


비동기 처리는 

내가 원하는 작업 순서에 따라서 로그를 찍지 않는다, 파일을 읽어 올때나, DB에서 쿼리를 실행해 결과를 가져올

때나, 서버로 부터 API 호출하고 Response를 받을때도, 비동기로 찍어주는 로그는 내 예상과 다른 순서와 시점에 로그를 까만 화면에 번쩍이면서 찍고내고  있었다.


사실 비동기 프로그램은 비주얼 베이직에서 이벤트를 받아 처리하거나, 콜백 함수를 이용한 메소드의 실행 측면으로 이해한다면, 이해적인 측면에서 쉬울 수 있지만, 순차에 따른 호출을 하고 싶은 경우에는 중복된 콜백 메소드의 호출을 보게된다.  call-back hell이라고 부르는 그것을 말이다. 


Call-Back Hell을 피하기 위해서 메시지 루프와 같은 형태로 Event를 처리하는 방법을 사용해서 피해보기도 하였으나, 마음에 들지 않는 방식이었다. 


그러다가, 네트워크 작업과 DB 쿼리가 비동기로 호출되는 상황에 대해서 고민을 하면서만들어 솔루션은 

 Task 큐에 넣고, 호출하고, 결과를 비교하는 콜백 함수를 이용하는 방식으로 마무리 하였.

 
그리고, 동기처리가 필요한 작업순서를 지정하기 위한 방식으로 Perl 이용했었다.

순전히 Call-Back을 중첩하여 사용하기 싫어서 사용한 방법이었는데, 나름 메시지 큐를 만들고, 들어오는 결과를 처리하는 방식이어서, 간단하지만 좋은 방식이었다.


만약, 지금이라면 다른 방식으로 해결할 것인데, 공부하는 측면에서는 도움이 많이 되었다.

NodeJS는 장점도 많지만, 단점도 많다, 하지만 장점이 워낙 커서 단점을 가릴 정도로 훌륭하다.




WRITTEN BY
행복상자
행복한 마음으로 매일을 살고 싶은 개발자 입니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

구글은 왜 공짜로 프로그램을 공개할까?

며칠전, 5월 1일자 신문 기사에서, 2006년도 기업들의 브랜드 순위를 보았다.
전년도 까지만 해도 "마이크로 소프트"사(이하 MS사)가 1위였으나, 이번에는 달랐다.
아무도 이렇게 빨리 구글이 MS를 제칠 것이라고 생각하진 못했을 것이다. 최근 몇년 전까지만 해도...

그러나 구글이 그 자리를 차지했다, 비록 순이익 면에서는 MS에 미치지는 못한다 할지라도, 구글은 전년도에  비해 77%나 성장한 664억 3400만 달러로 549억 5100만 달라의 MS사를 제치고, 1위에 올라섰다.

분명 그 이면에는 사람들을 움직인는 무엇인가가 있기 때문일 것이다.
구글은 검색엔진과 인터넷 광고를  주 수입원으로 삼고 있다. 구글의 지난해 순이익은 10억 3000만 달러에 달한다. 이는 MS나 국내 삼성전자의 순이익과는 아직도 많은 차이를 보이고 있지만, 제한된 수입원만으로 이정도의 이익을 낼수 있다는 것은 정말 놀라운 일이 아닐 수 없다.
하지만 진짜 놀라운 것은 2006년 12월 31일자 기준으로 구글의 직원이 10640명 밖에 안된다는 것이다. 2004년에는 약 1000~2000명 밖에 안되었다. 작은 회사라고만 생각할 때가 있었다.


단기간에 구글의 브랜드 가치를 올릴 수 있는 이유는 여러가지가 있었지만, 네트워크의 힘이라고 할 수 있다. 그리고 디지탈의 힘이다.
구글은 검색엔진 이외에도 많은 어플리케이션을 인터넷과 디지털 기술을 이용하여 많은 사람들에게 무료에 가까운 가격으로 나누어 주고 있다.
예전에 닷컴바람이 한창일때(1999년~2000년초), 많은 인터넷 전도사들은 떠들어 댄 것은 디지털 기술들로 인해, 제로에 가까은 비용을 제품을 생산할 것이라고 이야기들 했었다. 최초로 개발할 때의 비용은 많은 사람들이 사용하고, 또는 디지털 데이터를 복제함으로 이후의 생산비는 제로에 수렴할 것이라는, 많은 이들이 공감하지만, 현실과는 괴리가 있었다. (닷컴의 거품이 꺼지면서, 비용 지불과 굴뚝 기업의 중요성을 되 돌아봄)  
다시 되돌아가서, 구글은 왜 돈이 되지 않는 것에 많은 투자를 할까? 구글 맵과 Gmail 또는 여러가지 Application(스프레드 시트와 워드)들을 많은 비용을 들여 개발하고 그냥 사람들에게 나누어 주고 있을까?  물론 당장의 이익은 아니고 미래를 보는 투자라고 쉽게 이야기 할 수 있지만, 구글은 당장의 이익 이상을 보고 있다.

기업들은  자신의 값어치를 높이기 위해 많은 투자를 하고 있다. 이는 TV 또는 수 많은 사람들이 접할 수 있는 미디어를 통해, 기업과 상품을 홍보하고 이미지를 인지케 하기 위해 반복적으로 많은 비용을 투자 한다. 이는 막대한 비용이 들어가는 작업이 아닐수 없다. 하지만 그 효과는 들이는 비용과 노력에 반드시 비례하지 않는다.
그러나 구글은 자신들이 배포하는 무료툴과 Application을 통해서, 그 이상의 마케팅 비용과 홍보 효과를 얻어내고 있다. 이에 대한 생산 비용은 사람들이 사용하면 할수록  0에 수렴한다.(물론, 생산비용보다 관리비용은 늘어난다.)
그들이 얻고 있는 것은 홍보을 위해서 얻는 몇천억 이상의 가치를 실제로 얻고 있는 것이다. 이는 상품을 팔아서 얻는 이익보다 크다. 수천억을 들어 홍보하고 있는 기업들을 보라. 삼성전자는 첼시의 스폰서가 되는 조건으로 2010년까지 연간 200억을 제공한다. 그럼에도 삼성전자의 브랜트 가치는 44위 이다.



WRITTEN BY
행복상자
행복한 마음으로 매일을 살고 싶은 개발자 입니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret