Jin

The 2nd Node.js Korea Conference / node.js 두번째 컨퍼런스 후기 본문

View/Place

The 2nd Node.js Korea Conference / node.js 두번째 컨퍼런스 후기

진:D 2015.11.16 23:41

저는 죽을 때까지 공부를 해야한다는 직종인 프로그래머로 일하고 있습니다. 어렸을 때 부터 컴퓨터를 좋아했던 저는 여러가지 프로그래밍언어들을 주변친구들보다 빨리 접했었는데, 그 당시에는 프로그래밍 언어라고 해봤자 C/C++, Java, PHP, JSP, ASP 이정도 였습니다. (JavaScript도 있었지만 이건 언어라기보다는 HTML을 이쁘게 꾸미기 위한 도구일뿐) 그런데 지금은 정말 수많은 프로그래밍 언어들로 서비스를 만들고 사람들끼리 서로 코드를 공유하는 시대가 되었습니다. 그 중에서 오늘 소개해드릴 내용은 브라우저에서만 사용했었던 언어인 JavaScript로 서버까지 만들 수 있는 Node.js에 대해 이야기를 시작해보려 합니다.




JavaScript

프로그래밍언어를 조금이라도 아시는 분들이라면, 혹은 관심이 조금이라도 있으신 분들이라면 JavaScript를 한번이라도 들으셨을 것이라 생각합니다. 흔히 JavaScript라고 하면 브라우저에서만 작동하는 Client언어로 알고 계시며, 컴퓨터전공학과에서도 그렇게 배우셨을겁니다. 하지만 지금의 JavaScript는 서버, 클라이언트의 구분이 없어졌으며, 만능의 언어(?)로 성장하고 있지요.

위키설명에 의하면

자바스크립트(JavaScript)는 객체 기반의 스크립트 프로그래밍 언어이다. 이 언어는 웹브라우저 내에서 주로 사용하며, 다른 응용 프로그램의 내장 객체에도 접근할 수 있는 기능을 가지고 있다. 또한 Node.js와 같은 런타임 환경과 같이 서버 사이드 네트워크 프로그래밍에도 사용되고 있다.
자바스크립트는 본래 넷스케이프 커뮤니케이션즈 코퍼레이션의 브렌던 아이크(Brendan Eich)가 처음에는 모카(Mocha)라는 이름으로, 나중에는 라이브스크립트(LiveScript)라는 이름으로 개발하였으며, 최종적으로 자바스크립트가 되었다. 자바스크립트가 썬 마이크로시스템즈의 자바와 구문(syntax)이 유사한 점도 있지만, 이는 사실 두 언어 모두 C 언어의 기본 구문을 바탕했기 때문이고, 자바와 자바스크립트는 직접적인 관련성이 없다. 이름과 구문 외에는 자바보다 셀프와 유사성이 많다.

라고 설명하고 있습니다.

  • 자바스크립트는 Client언어이며, Server언어로 사용될 수 있다.
  • 자바와 자바스크립트는 직접적인 관련성이 없다. (바다와 바다코끼리, 인도와 인도네시아 같은 관계)
  • 스크립트 프로그래밍언어이지만 객체지향적으로 만들어졌다.

크게 이렇게 설명되고 있고, JavaScript언어 자체가 엄청 유연하기 때문에 프로그래밍언어를 전혀 모르는 일반사용자도 처음에 쉽게 접근하며 배울 수 있는 장점을 가지고 있습니다 : ) (깊이들어가면 엄청 어렵지만..)

Node.js

위에서도 틈틈히 말씀드렸던 Node.js 를 이어서 소개하려 합니다. 기존에는 생각할 수 없었던 개념들로 무장한 Node.js라고 생각합니다. (개인적인 의견)

Node.js를 언어라고 하기도 그렇고, 프레임워크라고 하기도 그렇고, 참 설명하기 애매한 그런 존재인 것 같습니다. 그래서 이번에도 역시 위키를 인용하여 설명드리겠습니다.

Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. Node.js는 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.
Node.js는 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.

Node.js는 V8 (자바스크립트 엔진) 위에서 동작하는 이벤트 처리 I/O 프레임워크이다. 웹 서버와 같이 확장성 있는 네트워크 프로그램 제작을 위해 고안되었다.
Node.js는 파이썬으로 만든 트위스티드, 펄로 만든 펄 객체 환경, 루비로 만든 이벤트머신과 그 용도가 비슷하다. 대부분의 자바스크립트가 웹 브라우저에서 실행되는 것과는 달리, Node.js는 서버 측에서 실행된다. Node.js는 일부 CommonJS 명세[3]를 구현하고 있으며, 쌍방향 테스트를 위해 REPL 환경을 포함하고 있다.

뭐라고 설명드려야하나 했더니, 소프트웨어 플랫폼이라고 합니다!
JavaScript의 장점들을 Node.js가 그대로 흡수하여 만들어졌기에, 엄청난 장점들을 보유하고 있습니다. 대표적으로 정말 빠른 개발속도 입니다. Client와 Server가 같은 언어를 사용하다보니 개발속도가 미친듯이 빨라집니다.
그리고 수많은 오픈소스입니다. npm을 통해 많은 라이브러리들을 설치하여 Node.js에 바로 적용할 수 있습니다. 그 외에도 많은 장점들이 있는데, 포스팅을 써내려가며 말씀드리도록 하겠습니다 : )

단점으로는 한국만 그런지 모르겠는데, Node.js 커뮤니티가 많이 활성화 되어있지 않다는 것입니다. 그렇기 때문에 컨퍼런스자체도 없는 편이구요. 그런데 이번에 두번째로 Node.js 한국 컨퍼런스인 The 2nd Node.js Korea Conference가 열리게 되었습니다. 저는 회사덕분에 컨퍼런스에 참여할 수 있는 기회가 생겼고, 학교/회사일정으로 참여하지 못하신 여러분들을 위해 열심히 정리하여 포스팅하려 합니다.

The 2nd Node.js Korea Conference

아침 9시부터 저녁 5시 30분까지 많은 발표들이 있었고, 그 이야기들을 정리하였습니다. 다소 부족한 부분들도 있지만 Node.js로 개발하고 사용하실 때 도움이 되셨으면 하는 바램으로 정리를 시작합니다.

return play.node();
// 2015년 11월 12일(목)
// 서울특별시 동작구 보라매로5길 15
// (신대방동,전문건설회관 4층)

08:30 Registration

8시 30분부터 컨퍼런스 등록을 시작하였고, 소정의 선물들을 나누어 주었습니다.


NIKON D5100 | Shutter priority | Center-weighted average | 1/25sec | F/2.8 | 0.00 EV | 17.0mm | ISO-400 | Flash did not fire


NIKON D5100 | Shutter priority | Center-weighted average | 1/25sec | F/2.8 | 0.00 EV | 17.0mm | ISO-400 | Flash did not fire


NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 17.0mm | ISO-640 | Flash did not fire


NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 17.0mm | ISO-640 | Flash did not fire


NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 17.0mm | ISO-640 | Flash did not fire



09:00 Welcome Outsider

Node.js의 성장과정과 io.js가 왜 빠져나왔고, 왜 다시 합치게 되었는지에 대해 설명하는 시간이였습니다.
이 내용은 제가 설명하는 것보다 잘 정리되어 있는 링크를 남기도록 하겠습니다.

한눈에 보는 노드JS 커뮤니티 역사 - http://www.bloter.net/archives/228022

  1. Node.js에는 지금 어떤 일이?
    • 2013년 3월 v0.10 js
    • 2013년 3월 v0.11 js
    • 2015년 1월 v1.0 js
    • 2015년 2월 v1.1 io
    • 2015년 5월 v2.0 io
    • 2015년 8월 v3.0 io
    • 2015년 10월 v4.0 nodejs + io.js
  2. Version
    • 안정버전 (Stable)
    • 장기지원 (LTS)
  3. Node.js 한국 커뮤니티

NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 45.0mm | ISO-640 | Flash did not fire


NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 38.0mm | ISO-640 | Flash did not fire





09:20 Modular vs Monolith - The Structure of Node.js Applications TimOxley@NodeSource

외국분이 컨퍼런스 첫발표를 시작했습니다. 하나도 알아듣지 못해 (프로그래밍코드이야기할 때 빼고) 통역자막을 보고 열심히 정리했습니다. 신혼이기에 발표끝나고 집으로 빨리가야한다고 했던 이야기가 기억에 남네요.. :D
이 분이 가장 많이 말씀하신 것은 모든 코드는 플랫(Flat)하게!, 아주 쉽고, 가장 간단하게 만드는 것을 강조하셨습니다. JavaScript이기에 이 말이 더 더욱 중요하다고 느껴졌습니다.

  • Node.js와 npm 생태계는 “극단적인 모듈화 문화”를 적극적으로 지지해서 지금 npm 저장소에는 수십만 개의 패키지가 생겨났습니다. 계속해서 발전하는 실제 애플리케이션을 개발할 때 이러한 모듈화 패턴을 어떻게 적용할 수 있는지를 살펴봅니다.
  1. http://github.com/timoxley, @secoif
  2. http://nodesource.com
  3. node.js의 경우 수명들이 짧기 때문에 프레임워크를 만드는 것보다 라이브러리를 만들어 사용하는 것이 더 도움이됨
  4. 코드를 작성할 때 오버엔지니어링을 안하는 것.
  5. 언제나 작동되는 가장 간단한 것을 만드는 게 중요
    • 내가 생각하는 것을 가장 간단하고, 심플하게 작동하는 것.
    • 문제를 해결하기 위한 솔루션인가도 항상 생각하면서 프로그래밍.
  6. 항상 결정하기를 미루는 것
    • 여러개의 모듈을 만들고, 문제를 해결하기 위해 가장 적당한 것을 찾기 위해 결정을 미뤄라.
    • 그렇지 않으면 비용이 많이 발생함.
  7. 잉크로 작성하기전에 연필로 그려볼 것.
  8. 자바스크립트의 장점은 어떠한 문제를 만나도 빨리 빠져나갈 수 있다는 것.
  9. 굉장히 안타까운점은 중첩된 콜백.
    • 콜백이 중복되면 어떤 일이 일어나는지 확실히 알 수 없음.
    • 동기화가 안되는 경우도 문제가 발생.
    • 깊은 수직구조를 사용하지 말라고 조언들을 많이 하고 있음. (이는 다른 언어도 마찬가지)
    • 핵심 : 중복보다는 항상 플랫한 것이 낫다.
    • 모든 구조를 머리속에 담고 생각해야 함.
  10. 수직구조는 관리하기가 힘들기 때문에 플랫화를 추천.
  11. 오늘날의 문제는 우리가 복잡성에 함몰되어 있는 것. -> 복잡성을 숨기려 하지말고 사람들에게 공개하고 문제를 해결하는 것. (복잡성을 숨기지 않는 것)
  12. Node.js 개발시
    • Monolith First.
    • Open Source Later

NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 45.0mm | ISO-640 | Flash did not fire





10:10 npm@>=3 Kat Marchan@npm inc

다음은 npm CLI팀의 팀장님이 나왔습니다. 음, 패션이 눈에 띄었습니다. 역시 외국은 엄청 개성적인 사람들이 많은 것 같습니다.
발표내용에서는 npm의 간단한 역사와 앞으로의 로드맵에 대해 설명해주셨습니다.

  • 현재 Node.js 4.2.x LTS 버전에 포함된 npm 2.x의 다음 버전인 npm v3에 대해서 npm cli 개발자가 직접 설명합니다. npm@3에서 프론트앤드 라이브러리 지원을 위한 준비작업인 peerDependencies의 변경과 flat하게 설치하는 의존성 등 npm@3가 어떻게 달라졌는지를 설명합니다.
  1. NPN은 자바스크립트 패키지 매니저
    • 과거에는 서버측 디펜던시를 관리하는데 사용했음.
    • 현재는 애플리케이션, 프론트엔드 개발자들도 이용하고 있음.
    • 현재 200k이상의 npm패키지들이 있음.
  2. NPM의 직원은 26명, CLI팀은 3명. at Marchan은 팀장.
    • CLI는 오픈소스들을 등록하고 관리.
  3. @npmjs, support@npmjs.com, github.com/npm/npm/
  4. Version
    • Semver Major : v 1.x.x
    • Semver Minor : v x.2.x
    • Semver Patch : v x.x.3
  5. Flat trees!
    • 기존 2버전에서는 디펜던스안에 중복패키지가 있을 경우도 중복설치로 인해 문제가 있었음.
    • 3버전에서는 이 모든 것이 해결.
    • 하위호환성이 지원되면서 중복되는 것들은 트리 꼭대기로 이동.
  6. peerDependencies : 기본적으로 설치됨.
     'peerDependencies' : {"grunt-cli" : "5.0"}'
    
  7. npm shrinkwrap
    • 기존에도 있던 기능이지만 버전3에서는 좀 더 편하게 사용가능 함.
    • 예전버전에서는 실행할때마다, PC마다 다른 결과값을 나왔는데, 버전3에서는 이 모든 것이 해결되어 항상 같은 값을 받을 수 있음.
    • npm install —save, npm update —save, npm deupdate —save, npm delete —save ?
  8. phased installation
    • 버전3에서는 설치히 각각단계를 끝낸뒤 다음설치로 진행. (이전버전에서는 문제가 되었음)
    • 이로 인해 크리티컬에러는 나지 않으며, 간단한 에러정도만 나옴.
  9. version lifecycle scripts
     "scripts" : {
         "preversion" : "npm test"
     },
     "script" : {
         "preversion" : "git push --follow-tag && npm publish"
     }
    
  10. Long Term Support
    • LTS를 제공하기 위해 노력하고 있음.
  11. 마지막으로 npm2는 사용하지 마세요. 적어도 2.2이상 사용하세요.
  12. NPM의 미래 로드맵중 하나는 Front-end 지원
    • 이미 템플릿, CSS, 이미지 패키지들을 제공하고 있음.
    • 노드모듈들을 카피할 것이고, 플랫하게 만들 예정. 플랫하지 못하다는 것은 실패한 것.
  13. 오거나이제이션 패키지 (베타)
  14. ES6 Modules
    • ES6 NPM로더가 나오면 그 때 지원할 예정.

NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 45.0mm | ISO-640 | Flash did not fire


NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 38.0mm | ISO-640 | Flash did not fire





11:00 Pipe: 콜백지옥의 또 다른 거짓 선지자 조승연@KnowRe

스타트업 KnowRe회사에서 일하고 계시는 조승연님께서 발표를 진행해주셨습니다. 자바스크립트를 사용하다보면 반드시 겪게 되는 콜백지옥의 대해 재미있게 설명해주셨습니다.

콜백지옥을 피하기 위해 여러가지 라이브러리들을 소개해주셨고, 이 분은 그 라이브러리로도 만족하지 못해 직접 만드시고 오픈소스로 공개하셨습니다.

  • swint-pipe : https://github.com/KnowRe/swint-pipe

  • 자바스크립트가 진지하게 연구되고 비동기 프로그래밍에 대한 이해가 깊어질수록 사람들은 점점 더 콜백지옥에 고통받게 되었고, 그러면서 그 고통에서 해방시켜 주겠다는 수많은 거짓된 선지자들이 나타났습니다. 저는 발표를 통해 콜백지옥을 해방시켜 준다고 주장하는 또 다른 거짓된 선지자를 소개하고자 합니다.

  • 발표키노트 : http://kivol.net/playnode.pdf


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 55.0mm | ISO-640 | Flash did not fire


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 50.0mm | ISO-640 | Flash did not fire




    11:50 Gulp로 정적 페이지 생성하기 박창우@프리랜서

    프리랜서로 활동중이신 박창우님께서 Gulp를 활용한 정적페이지 만드는 방법에 대해서 설명해주셨는데, 너무 빠른속도로 진행하셔서 많은 내용은 담지 못했습니다. (중간에 슬라이드쉐어를 찾게된다면 링크 올리도록 하겠습니다)
    결론적으로는 Gulp는 매력적이다! 였습니다!

    • 바야흐로 대 정적 페이지시대! Gulp와 Handlebars로 정적 페이지를 만드는 과정을 공유합니다.
    1. Template -> HTML -> GitHub 만드는 과정
    2. Gulp
      • 기본단위는 Task
      • gulp-load-plugins모듈을 설치하면 node.js에서 $로 쉽게 사용가능
    3. ASCIIDOC
      • MARKDOWN보다 더 많은 기능들을 지원하여 멋진 문서를 만들 수 있음.
    4. Dashbars (handlebars.js)

    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 60.0mm | ISO-640 | Flash did not fire


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 60.0mm | ISO-640 | Flash did not fire





    12:30 Lunch Time


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 17.0mm | ISO-640 | Flash did not fire






    13:30 Node.js 기반의 대용량 분산 서버 아키텍처 설계 사례 김요한@GSSHOP

    GSSHOP의 김요한님께서 발표진행해주셨고, 이 분은 유명하신 분이라 설명이 필요없을 것 같네요. 제가 초기에 Node.js를 시작할 때 stalk.io를 써보고 감동을 받았었는데, Node.js를 정말 필요한 곳에 잘 사용하시는 것 같습니다.

    • Node.js 기반의 주로 어떤 시스템이 적합할까? 무중단 Scalability 를 고려하려면 어떻게 해야할까? 실제 구축 사례를 기반으로 실무에 활용할 수 있는 방법들을 공유하고자 합니다. 실제 프로젝트나 서비스 구축시 Node.js 와 다양한 오픈소스의 조합을 통해 대용량 트래픽을 처리하는데 도움이 되고자 합니다.
    1. 비동기 병렬처리 사례
    2. 실시간 메시지 처리 사례

    1. node.js는 코드라인수를 줄일 수 있다.
    2. 페라리만큼이나 빠르다
    3. 서버 시작/중지 시간이 상당히 빠르다.

    비동기 병렬처리 사례

    1. PhantomJS
      • 웹페이지의 이미지를 한꺼번에 처리 (최적화 작업)
    2. 생산성, 확장성, 운영의 편의성 역시 Node.js이지만 사실 PhantomJS가 너무 좋아서..

    실시간 메시지 처리 사례

    1. Real-time Dashboard, Instant Messanger, Mobile Push Notification
    2. node.js + socket.io
      • redis : 세션데이터 저장용
      • 분산처리의 방법으로 scale up, scale out이 있음.
      • channel server, session server로 나누어 업무를 나눔. (1-Session후 2.Channel에 접속)
      • Apache ZooKeeper : 분산락킹, 설정값들 동기화 때 사용함.
      • 이 들을 npm, docker를 통해 띄워서 처리
    3. 서버 할당은 어떻게 하는가?

      • Consistent Hashing 기법을 활용.
        var HashRing = require('hashring');
        var ring = new HashRing({
        '12.0.0.1' : {weight:200},
        '12.0.0.1' : {weight:200},
        '12.0.0.1' : {weight:200},
        '12.0.0.1' : {weight:1000}
        });
        ring.get('chatKey');
        // 좀더 잘하기 위해서는 weight값을 실시간으로 수정 (ZooKeeper사용시 weight값을 같이 전달)
        
    4. 죽으면 어때 다시 시작하면 되지

      • 프로세스 모니터링 데몬을 실행한다. : 부모 프로세스와 자식 프로세스의 관계를 끊는다! 같이 죽으면 안되도록…
      • 프로세스 살아 있는지 체크한다.
      • 모니터링용으로는 Grafana툴을 사용.
      • InfluxDB 로 로그를 수집.
    5. wrap up

      • CPI Intensive Task는 잘 생각해봐야 한다.
      • 개발 시작부터 Scalability를 고려해야 한다.
      • 효율적인 모니터링 방법을 고민해야 한다.
    6. 개발중인 오픈소스프로젝트

    7. Development - MongoDB, Express, AngularJS And Node.js = MEAN Stack

    8. UI = AdminLTE
    9. Tool - NVM (Node Version Manager), IntelliJ IDEA
    10. Tip - .gitignore : https://www.gitignore.io/, .editorconfig : http://editorconfig.org
    11. PT자료는 슬라이드쉐어에 등록예정
    12. http://highscalability.com

    yohany@gmail.com, https://www.facebook.com/JohnKim0331


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 45.0mm | ISO-640 | Flash did not fire


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 55.0mm | ISO-640 | Flash did not fire


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 55.0mm | ISO-640 | Flash did not fire


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 60.0mm | ISO-640 | Flash did not fire





    14:20 시간당 수백만 요청을 처리하는 node.js 서버 운영기 김군우@Dable

    Dable의 김군우님께서 발표 진행해주셨습니다. AWS에 Node.js를 올려 사용했던 경험기 위주로 말씀해주셨습니다. 또한 괜찮은 라이브러리들도 같이 소개해주셨습니다.

    • Amazon Web Service에서 node.js를 이용하여 시간당 수백만 요청을 처리하는 서버를 운영하면서 얻게된 노하우, 삽질기, 느낀점 등을 공유하려 합니다.

    http://miya.pe.kr - PT 올라올 예정

    1. 파일관리

      app.js                // Cluster count == CPU cuont
      route.js            // 라우팅 맵, Documentation (with apidoc)
      controller//        // Express의 Middleware
      lib/                // 공통로직관련
      front/                // Front-end에서 사용하는 것들의 모음집
      style/                // css
      script/            // javascript
      test/                // mocha+should+rewire(for server), qunit+karma(for Front-end)
      views/
      public/
      
    2. 즐겨쓰는 라이브러리

      • moment : 날짜, 시간 다루기
      • async : Q: Promise!
      • lodash(underscore) : Super Utility
      • sanitizer : 문자열에서 안전하지 않은 HTML태그들을 걸러주는 라이브러리.
      • lz-string : Front/Server 양쪽에서 사용 가능한 문자열 압축 라이브러리. Front에서 만든 URL의 긴 파라미터를 줄이기 위해 사용. (2,000자 -> 800자)
      • CoffeScript
        • 들여쓰기, 띄어쓰기, brace 어디다 열지, jsLint/jsHint.. 피곤
        • 늙으니 타이핑 속도가 느려짐

    15:10 Node.js in Flitto 이승우@Flitto

    이 서비스는 이전부터 알고 있던 서비스였는데, Node.js로 개발했다는 것에 신기하고 반가웠습니다. 트랜드한 기술들을 많이 접목해서 서비스하고 있다는 것. Node.js서버로 전세계를 대상으로 서비스한다는 것에 대해 경험과 사용중인 라이브러리, 운영방법들을 설명해주셨습니다.

    • 집단지성 번역 플랫폼 Flitto(플리토)는 Node.js로 서버, 웹 개발을 하고 있습니다. Flitto 서버의 전반적인 구조를 설명하고, 개발하면서 경험했던 시행착오를 공유합니다.

    C, Java, Fashion Photography in Tokyo, Ruby on Rails, Node.js
    Node.js in Flitto
    Seungwoo Lee
    Engineer
    asbubam@Flitto.com
    서비스 : http://www.Flitto.com

    • Node.js 4.2.1 적용시 npm cache, node_gyp 깔끔하게 지우고 재설치
    • DB schema 버전관리 : flyway
    • Callback What? step / async / promise
    • tpl()메소드를 통한 백엔드 / 프론트엔드 그리기
    • pg_node : pg를 래핑, 트랜잭션 처리 추가, query string 출력 log() 추가
    • 프론트엔드 패키징 자동화
      • 변경 전 : grunt + python
      • 변경 후 : grunt + gulp
    • test : mocha, should
    • 노드 프로세스관리 : forever -> pm2
    • 개발환경 : dev /staging / real
    • 배포 : Jenkins + Fabric
    • 디플로이 : AWS ELB - 무중단 서비스 디플로이
    • Logging : winston / morgan
    • 웹푸쉬 : socket.io redis sub/pub
    • 실험적 admin
      • 변경 전 : backbone.js
      • 변경 후 : angular.js, sequelize
    • 그밖에 노드로 하는 것 : 쉘스크립트, 크론잡, Node.js 포팅
    • AWS s3에서 파일 50만개 빨리 다운받기 : aws-sdk, async(queue)
    • 형태소 분석 : mecab-ffi (예-“내일 아침까지 첨부된 엑셀파일에 포함된 문장 중에서 3글자 이상이면서 2번이상 반복되는 명사, 형용사를 뽑아주세요~”를 처리할때 사용)

    시행착오

    • surrogate pair
      • 대표적으로 Emoji
    • forEach
      • forEach안에 비동기코드 엄청많이 동시 실행. 시스템 콜스택에도 한계가 발생
      • async.queue 등을 사용해서 동시 실행되는 비동기코드를 제어
    • npm install 했더니 동작이 달라요 (버전올라가면서 변경된 사항)
      • 버전별 확인 필수. 무조건 최신버전이 설치되도록 하는 것이 좋은방법은 아님.

    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.0 | 0.00 EV | 45.0mm | ISO-640 | Flash did not fire


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 55.0mm | ISO-640 | Flash did not fire





    16:00 스프링과 Node.js의 공존 장동수@카카오

    카카오의 장동수님께서 발표진행해주셨습니다. 딱딱한 구조의 한국문화에서 Node.js같은 트랜드한 기술을 사용하고 싶을 때 적용하는 노하우에 대해서 설명해주셨습니다. 매력적이기는 하지만 개인적으로 이부분은 엄청 사서고생하는 것이 아닐까?라는 생각도 들었습니다. 하지만 여러 프로젝트를 진행하면 이런식으로 개발을 해야하는 경우도 생길 것 같습니다 : )

    • 자바 기반의 레거시 웹 서비스를 마이크로서비스 아키텍쳐와 node.js로 현대화 하는 과정을 실제 사례를 통해 알아봅니다.

    Dongsu jang.

    1. JavaSpring + Thrift + node.js

    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 55.0mm | ISO-640 | Flash did not fire


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 55.0mm | ISO-640 | Flash did not fire


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 60.0mm | ISO-640 | Flash did not fire


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 60.0mm | ISO-640 | Flash did not fire


    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 60.0mm | ISO-640 | Flash did not fire





    16:50 Express, Angular.js를 이용해서 Big Data 세계를 헤엄친 이야기, 나와 같은 실수를 반복하지 마세요 이병준@SKplanet

    SK planet의 이병준님께서 발표진행해주셨고, Node.js를 처음사용하면서 겪었던 많은 실수들에 대해 설명해주셨습니다. 이 발표의 핵심은 node-java는 정말 최악의 상황이 아니라면 사용하지 않는 것이 좋다! 였으며, 다른 언어와 통신을 해야한다면thrift를 활용하는 것도 나쁘지는 않다! 였습니다.

    • 자바스크립트는 TIOBE Index에서 2015년 10월 기준 8위를 차지할 정도로 많은 성장을 거듭하였습니다. 다양한 분야에서 사용되고 있지만 아무래도 Node.js는 특성 상 Big Data 세계에서는 그 사용 례가 그리 많지 않습니다. 사내에서 여러가지 이유로 인해서 Hue를 사용할 수 없게 되어 Galleon이라는 대체할 플랫폼을 개발하기 위해 주력 플랫폼으로 Node.js를 선택하여 겪은 경험담을 공유하려고 합니다. - Node.js에서 Hive를 다루어보고 싶은 분이라면 이번 세션이 도움이 될 것 입니다.

    http://imjuni.github.io/playnode2015

    • BigData = 대용량의 데이터를 다루고 저장하는 기술
      • Hadoop, Hive, HBase, Impala, Presto, Sentry, Kafka …
    • Data Visualization Tool : R Studio. MSTR, Hue
    • 로그가 쌓이면 Hadoop에 쌓이고, 쌓이면 Hivefmㄹ Hadoop에 붙이고 데이터를 즉시즉시 조회하여 출력
    • node-java 현재 비동기통신이 가능해졌음.
    • node-thrift : Thrift는 Hive를 접근하는 다른 방법.
    • https://github.com/imjuni/jshs2 - thrift null처리
      • 인증은 NOSSL
    • node.js killer package : socket.io
    • Galleon 도 오픈소스로 공개해놓았음.

    NIKON D5100 | Manual | Center-weighted average | 1/40sec | F/4.2 | 0.00 EV | 60.0mm | ISO-640 | Flash did not fire



    마치며

    오전 9시부터 저녁 5시 30분까지 정말 쉬지않고 발표들이 진행되면서 허리와 다리가 아프기는 했지만 정말 유익한 시간이였습니다. Node.js로 단순이 코드만 짜는 것이 아닌 여러가지 라이브러리들을 섞어 사용하면 더 멋진 것을 만들 수 있다는 것을 간접적으로나마 경험할 수 있었습니다.
    Node.js로 개발하여 서비스하는 것에는 아직 무리가 있다라는 말을 종종 듣기도 했는데, 이 컨퍼런스를 통해 실제 서비스를 적용한 곳이 있다는 것을 보면서 많은 궁금증이 풀리게 되었습니다.
    개발이라는 것을 처음시작하시거나, front-end만 하시는 분들이거나, FullStack개발을 원하시는 분들이 시작하기 좋은 언어이며, 좋은 플랫폼이라고 생각합니다 : )
    감사합니다.



    0 Comments
    댓글쓰기 폼