보관물

Posts Tagged ‘노드’

node.js 뉴스 : 12월 5일.

– node.js가 비동기 방식으로 동작하면서 매우 좋은 성능을 보인다는 얘기는 많이 하고 있습니다. 하지만, 이런 좋은 성능을 유지하기 위해서는 다양한 경험과 고려가 필요합니다. 그런데, LinkedIn에서 좋은 사례를 기반으로 한 팁을 개발 블로그에 개시해서 소개 드립니다.
간단하게 제목만 소개하면 아래와 같습니다.

놀랍도록 빠른 node.js: 링크드인 모바일에서 사용한 10가지 성능 팀 (Blazing fast node.js: 10 performance tips from LinkedIn Mobile)

1. 동기 방식 코드를 피해라. (Avoid synchronous code)
2. 소켓 풀링을 꺼라. (Turn off socket pooling)
3. 이미지나 CSS와 같은 정적리소스는 node.js에서 서비스하지 마라. -별도의 웹서버로 서비스해라.- (Don’t use Node.js for static assets)
4. 페이지 렌더링은 클라이언트 사이드에서 해라. 정적 리소스라고 볼 수 있는 HTML과 데이터를 분리해서 node.js에서는 데이터만 서비스해라. (Render on the client-side)
5. 요청 응답에 gzip을 사용해라. (Use gzip)
6. 병렬로 처리해라. (Go parallel)
7. 세션을 사용하지 마라. – 서버측에서 상태 유지를 하지 마라.- (Go session-free)
8. 가능한 경우 자바스크립트 대신 바이러리 빌드를 사용해라. (Use binary modules)
9. 스탠다드 구글 V8을 사용해라. (Use standard V8 JavaScript instead of client-side libraries)
10. 코드를 작게 유지하라. (Keep your code small and light)

원문 : http://goo.gl/44lhi

카테고리:node.js 태그:, , ,

Node.js + ObjC = NodObjC.

node.js를 이용해서 재미있는 프로젝트가 무엇이 있는지를 찾던 중에 발견한 것입니다. 간단히 설명되어 있는 것은 objective-c와 node.js의 다리(bridge)라고 하는 군요.

몇가지 링크와 간단한 예제를 통해 맛을 보도록 하겠습니다.
프로젝트 홈페이지 – https://github.com/TooTallNate/NodObjC
간단한 윈도우를 띄운 예제 (이 예제를 조금 변경해서 실행해 보겠습니다.) – https://gist.github.com/1204212

위의 프로젝트 홈페이지를 통해 프로젝트를 다운 받습니다.
다운 받은 후에 예제의 자바스크립트 파일을 만듭니다. 그리고 node 커맨드로 실행만 하면 맥 윈도우를 만들 수 있습니다.

위의 예에서 보시는 것 처럼 창 타이틀에 제 블로그 주소와 Welcome이 보입니다.
그럼 위 윈도우를 실행하는 소스 코드를 보겠습니다.


var $ = require('[NodObjc의 폴더 위치]')

$.import('Cocoa')

var pool = $.NSAutoreleasePool('alloc')('init')
  , app  = $.NSApplication('sharedApplication')

app('setActivationPolicy', $.NSApplicationActivationPolicyRegular)

var menuBar = $.NSMenu('alloc')('init')('autorelease')
  , appMenuItem = $.NSMenuItem('alloc')('init')('autorelease')

menuBar('addItem', appMenuItem)
app('setMainMenu', menuBar)

var appMenu = $.NSMenu('alloc')('init')('autorelease')
  , appName = $._('Jongryong.wordpress.com. Welcome...')
  , quitTitle = $._('Quit ')('stringByAppendingString', appName)
  , quitMenuItem = $.NSMenuItem('alloc')('initWithTitle', quitTitle
                                        ,'action', 'terminate:'
                                        ,'keyEquivalent', $._('q'))('autorelease')
appMenu('addItem', quitMenuItem)
appMenuItem('setSubmenu', appMenu)

var styleMask = $.NSTitledWindowMask
              | $.NSResizableWindowMask
              | $.NSClosableWindowMask
var window = $.NSWindow('alloc')('initWithContentRect', $.NSMakeRect(0,0,200,200)
                                ,'styleMask', styleMask
                                ,'backing', $.NSBackingStoreBuffered
                                ,'defer', false)('autorelease')
window('cascadeTopLeftFromPoint', $.NSMakePoint(20,20))
window('setTitle', appName)
window('makeKeyAndOrderFront', window)

// set up the app delegate
var AppDelegate = $.NSObject.extend('AppDelegate')
AppDelegate.addMethod('applicationDidFinishLaunching:', 'v@:@', function (self, _cmd, notif) {
  console.log('got applicationDidFinishLauching')
  console.log(notif)
})
AppDelegate.register()

var delegate = AppDelegate('alloc')('init')
app('setDelegate', delegate)

app('activateIgnoringOtherApps', true)
app('run')

위 소스코드를 자세히 소개하지는 않겠습니다. 사실, 저도 잘 모릅니다. ^^;
아무튼 역시나 node.js를 이용한 다양한 시도중에 하나네요. 이런 클라이언트 기반 코드와 node의 통신 환경을 이용하면 간단한 맥용 클라이언트용 툴을 쉽게 만들 수도 있을 것 같습니다.
물론, 아직은 기본적인 것만 지원하는 것으로 보입니다.

node.js를 서비스에 활용하는 회사들.

최근에 node.js에 관심을 가지면서 그 활용에 대한 예를 찾아보고 싶었습니다.

그러던 중에 node.js를 사용하는 회사들에 대한 아티클를 보게 되었습니다. (보기 : http://goo.gl/o39pD)
Yammer가 눈에 들어오네요. 역시, 많이 알려진 회사이기 때문이겠죠.
Yammer는 node.js를 proxy로 사용한다는 구문이 있네요. cross domain을 위한 방법이 기존에도 있었지만 (참고, Always Renewal 블로그) 이벤트 기반의 non-blocking 환경에 세션에 대한 리소스 비용을 적게 이용하는 node.js는 정말 proxy와 같은 환경에는 최적이라는 생각이 듭니다.
다른 회사들은 어떨까요? 트윗에 대한 필터링 크롬 익스텐션을 제공하는 Proxlet의 경우는 noSQL인 mongoDB와 node.js를 사용하네요. 특히, 속도에 집중하는 mongoDB와도 node.js는 찰떡궁합일 듯 합니다.

최근(’11/12/5)에 알게된 다른 활용 사례가 있어 소개합니다. 링크드인이 자사의 모바일 웹 관련 서비스를 위해서도 활용하고 있으며, 관련 정보를 제공하고 있어 블로그를 했습니다. 좀 더 구체적인 사례들이 많이 나오고 있네요. 링크드인의 경우도 node.js와 mongoDB를 활용하고 있다고 합니다. 관련 블로그. -> http://goo.gl/3KY2y

최근(’12/01/24)에 알게된 다른 활용 사례가 있어 소개합니다. 월마트에서도 자신들의 모바일 앱의 백엔드 서비스를 위해서 노드를 활용하기 시작한 모양입니다. 관련한 내용은 블로그에 담아두겠습니다. 주로, 하이브리드 앱 스타일로 구성하고, 대부분의 기능은 노드를 통해 서버 사이드에서 기능하도록 해둔 모양입니다. DevBeat 기사-Why walmart is using Node.js

위에서 볼 수 있듯이 node.js의 장점은 분명 존재합니다. 단점으로 지적되는 아직 어린 환경을 극복하고 다양한 기능과 확장을 제공한다면 최근과 같이 서비스에 접근하는 단말이 기하급수적으로 늘어나는 환경에서 node.js는 상당히 선전을 할 수 있을 것이라고 생각되네요.

주.
proxy는 두가지 방식이 있습니다.
forward-proxy라고 불리는 방식과 reverse-proxy라고 불리는 방식입니다.
forward-proxy는 우리가 일반적으로 알고 있는 proxy방식으로 사용하는 단말에 proxy 서버를 설정하면 해당 서버를 통해 목적지로 이동하는 방식입니다.
reverse-proxy의 경우는 사용자는 아무 설정도 없지만 사용자가 proxy를 목적지로 알고 접근하면 그 사용자에 맞는 동작을 하는 진짜 목적지에서 정보를 받아서 반환하는 역할을 합니다.
proxy를 사용하는 다양한 이유가 있지만 익명성도 하나의 목적 중에 하나 입니다. 그런 측면에서는 최근에는 토르 프로젝트라는 것이 있네요. 아직 정확하게 이해는 하지 못했지만 네트워크에 운영되는 시스템에 익명성을 줄 수 있는 프로젝트이고, 중국 등과 같이 검열이 심한 국가를 위해 지원도 하고 있다고 합니다.

%d 블로거가 이것을 좋아합니다: