사용자 도구

사이트 도구


node.js와_javascript_이야기

Node.js 그리고 JavaScript

싱글 스레드 모델에서 비동기 처리를 통해 자바스크립트 요청을 처리하는 이벤트 드리븐 플랫폼이 바로, Node.js

C10K Problem

비동기처리에 대한 사람들의 토론 가운데 C10k 문제라는 녀석을 발견했다.

동시에 처리할 수 있는 소켓(채널)을 넓히는데에서 발생하는 문제. 즉, C10K means Connection 10,000 Concurrency Problem 허나 여기서 말하는 '동시성(concurrnecy)'가, request per second(RPS)를 의미하는 것은 아니며, 소켓 서버 최적화 문제는 장기간 연구되었는데, 이는 많은 클라이언트를 소화하고 싶어서. 이것은 OS 제약조건과 서버 소프트웨어 제한을 유발시켰다. 서비스의 범위를 따라서, 또 스레드 활용 범위에 따라 싱글스레드냐, 멀티스레드냐 선호 사항이 달라진다. 번역을 나름 했는데 엉망…요지는, 비동기 처리를 수행하는 Node.js는 CPU가 IO로 인해 발생하는 Blocking에서 자유롭고 이를 통해 C10K문제를 슬기롭게(?)극복한다는 것.

출처 : https://en.wikipedia.org/wiki/C10k_problem

이것을 이해하기 위해서는 Event-Driven Programming에 대한 이해가 필요할 것만 같아..

JSONP란 무엇인가?

"JSON with Padding"

자바스크립트에서 서로 다른 도메인 간의 데이터 요청을 위한 통신 기법. 평소 이것은 same-origin-policy에 의하여 웹브라우저 차원에서 금지하고 있다. JSONP는 브라우저가 <script> 에서 same-origin policy를 강요하지 않는 것을 이용한 것이다. <script> 태그를 활용하는 것이므로, 이것은 GET요청에 대해서만 유효하다.

Callback의 지옥

Callback Hell

이것은 간단히 아래의 코드형태로 인한 문제를 말하는 것임.

$.ajax({
  url:"",
  data:"",
})
.done({
  $.ajax({
    url:"",
    data:"",
  })
  .done({
    $.ajax({
      ...
    })
});

위와 같은 형태의 코드는 로직의 동작 흐름을 직관적으로 볼 수 없게 하는데, 이것은 아래와 같은 여러가지 문제를 유발한다.

  • 코드 가독성 저하
  • 디버깅 난이도 상승
  • 예외 처리의 어려움

위의 문제를 해결 하기 위해서는…

  • 모듈화 - 익명 함수의 사용을 지양하고 함수를 따로 선언하여 활용하자.
  • Promise Pattern의 활용 - 더 찾아볼것.
  • 코드를 얕게 하기. - 하나의 함수가 수행하는 역할을 최소화 할 것.

WaterfallJS 등은 비동기적인 함수의 호출을 동기적으로 수행할 수 있게 한다.

node.js와_javascript_이야기.txt · 마지막으로 수정됨: 2017/08/19 22:13 (바깥 편집)