상기 내용에 대한 저작권은 play.node 에 있습니다.


play.node(2015) 후기입니다. 좋은 경험을 할 수 있게 기회를 주신 회사에 감사드립니다.

1. Node.js LTS/Stable





Node.js 는 초창기에 v1.0 이 과연 언제 나올까 기다리는 게 큰 이슈였습니다. 불미스럽게도 node.js 를 fork 로 시작한 io.js 가 나오게 되고 나뉘어 가는 행보를 보였으나, 결국 통합되어 v4.0.0 이 나오게 됩니다. 


기존에는 stable, unstable 정책으로 관리 되었으나, 이번에 새롭게 변경되었습니다.


LTS는 짝수 버전에 해당하며, 안정화, 호환성에 초점을 맞춘 버전이고, stable는 새로운 기능이 활발하게 개발되는 버전입니다.


위 그림은 해당 내용에 대한 버전 일정 이며, 기업에서는 미리 버전 업데이트 일정을 정해서 대비할 수 있습니다.


Node.js 소식은 http://nodejs.github.io/nodejs-ko/ 에서 번역본을 볼 수 있습니다. 번역 까지는 최소 2주 정도 걸린다고 합니다.


2. Node.js Module - (NodeSource/Tim Oxley)


Javascript로 작성되는 프레임워크는 수명이 짧다고 합니다. 해당 언어로 구성된 Node.js 생태계는 격동하는 모습을 보여주고 있고, 프레임워크에 의존하게 되면 새로운 버전이 나왔을 때 맞추어 갈 수 없는 상황이 나오기도 합니다. 예를 들어 C/C++ 로 작성된 모듈이 버전 업데이트를 했을 때 동작하지 않는 경우도 있었다고 합니다. 프레임워크를 도입한다면, 고질적인 문제를 항상 고려해야 합니다.




Node.js 는 프레임워크 보다 상대적으로 모듈화 문화를 적극적으로 지지하고 있고, Node Package Manager(NPM)의 total packages는 공식 홈페이지 2015/11/13 기준 204,841 개입니다.



각 언어의 설치 패키지 pip, gem, maven 등을 합친 수보다 많다고 합니다. 수가 많은 만큼 사용되지 않는 라이브러리도 많으므로, 선점 할때, commit 날짜, 다운로드 수, 버전에 대한 정보는 확인합니다.


실제 애플리케이션을 개발할 때는 라이브러리 개발과 다소 차이가 있다고 합니다. 라이브러리는 단순하면서 사용하기 편해야 합니다. 애플리케이션은 고객의 비지니스를 만족해야 합니다. 개발할 때 자신도 모르게 복잡성 안에 함몰된 있는 모습을 발견합니다. 발표자는 Over Engineering 이라고 표현합니다. 무리한 요구사항이 들어와서 이를 적용해야 하는 데, flat 한 구조, 설계가 된 구조 애플리케이션이 있다고 가정하면, 후자가 훨씬 비용이 많이 들어가게 됩니다. 무리한 설계는 안 하는 좋습니다.


Javascript는 문제가 발생했을 때 해결을 쉽고 빠르게 할 수 있다는 장점이 있습니다. 하지만 끝나지 않는 숙제가 있습니다. 중첩 Callback, 비동기 코드이기 때문에 결과 예측이 쉽지 않습니다. 발표자는 수직적인 구조 사용을 자제하고, flat 한 구조를 권장하고 있습니다.


모듈화를 할수록 Local 복잡도는 감소하는 대신 Global 복잡도는 증가합니다. 최대한 단순하게 개발하고 지나친 모듈화는 피해야 합니다.


3. Node Package Manager [NPM V2 -> NPM V3] - (npm inc/Kat Marchan)




Package Magager 의 Node.js 버전입니다. 흔히 많이 알고 있는 pip, gem, maven과 비슷합니다. 앞에 Node를 붙여 약자로 NPM 이 됩니다.


불편한 점, 버그는 github, twitter 로 개발자들이 문의합니다. NPM V2 중 제일 많았던 문의는 dependence tree입니다. “npm install package” 명령어로 설치를 진행합니다. 각 패키지별 dependence 도 존재 하는 데, 각각 관리를 하므로 중복되는 package가 많고, 규모가 작은 애플리케이션이면 무시할 수 있는 수준이지만, 규모가 커진 경우 애플리케이션 용량이 큽니다. NPM V3 에서는 기능 개선을 하여 각 패키지 dependence 의 중복을 제거하여 기존에는 하위에 하위 폴더로 가는 구조였다면, 같은 선상에서 package가 설치됩니다. 중복을 제거하는 대신 안정화 된 버전의 패키지가 설치되어야 하므로 버전 규칙에 대해 강조 하였습니다.


설치 시 진행 상황을 알고 싶어하는 요청이 있어 NPM V3 에서는 설치 시 Progress Bar를 지원합니다.




npm 다운로드 유저중 42%는 윈도우 개발자이기 때문에 지원을 아까지 않는다고 합니다.


NPM V3 은 Node.js v5.0.0 이상부터 지원합니다.


4. Callback Hell


동기 방식은 차례로 진행되지만, 비동기 방식은 동시에 실행이 되기 때문에 끝났다는 신호를 줘야 합니다. 그 신호가 일명 Callback입니다.


비동기 방식을 동기 방식처럼 개발하기 위해 많은 노력이 있었습니다.


이를 극복하는 라이브러리에 대한 소개입니다.


async

  • 순차 혹은 병렬 실행 지원
  • 어지간한 경우에 쓸만 합니다.

promise

  • ES6 표준에 포함
  • async와 비슷하나 좀 더 깔끔한 코드
  • 병렬 실행이 가능합니다.
  • 예외 처리가 역시 쉽습니다.

출처



+ Recent posts