Node.js 특강 - 손영수 멘토 (1)

  • 웹 서버의 구동 방식에는 8가지가 있음(3페이지)
  • Node.js는 비동기, non-blocking
    • Server side Javascript
    • Event driven
    • Asynchronous
    • Non-Blocking I/O
    • Single Threaded
    • Lightweight
    • Fast
  • 퍼포먼스 측면에서 많은 일을 처리할 수 있음
  • Event driven
    • reactor: application 레이어로 웹 요청이 들어올 경우
    • proactor: kernel 레이어로 요청이 들어올 경우
  • IOCP
    • 윈도우에서 application 레이어와 Kernel 레이어 사이에 존재하는 queue로, 요청을 바로 넘겨줄 수 있음
    • 리눅스의 EPOLL보다 CPU를 보다 효율적으로 사용함
    • 게임업계가 윈도우를 사용할 수밖에 없는 이유
  • mongoDB: JSON으로 DB 데이터를 저장하고 뺌
  • React보다 Vue.js 추천

장점

  1. Single thread
    • locking mechanism에 대해 전혀 알 필요가 없으며 가볍고 빠르다
      • Real-time web app에 좋음
    • (단점) 그러나 콜백지옥… 순서대로 실행되지 않음
      • 지금 실행되는 함수가 끝나기 전에 다음 함수를 먼저 실행함
      • 그러다 함수 실행이 끝나면 콜백 실행
      • I/O 처리에 최적화되었지, 복잡한 비즈니스 로직에는 적합하지 않음
  2. Node package manager(npm)
    • 지구상의 어떠한 언어보다 사용 가능한 라이브러리가 많음
      • Java는 이미 3년 전에 따라잡음
    • 생산성 자체에서 Node.js를 이길 수가 없음
  3. Socket.io
    • 코드 몇 줄만으로도 소켓 프로그래밍 구현 가능
    • 30분 만에 화상채팅 서비스 구현 가능

나쁜 활용

  1. LTS 사용을 추천
  2. CPU intensive job (X)
    • 대신 Go, C 언어를 쓰기
  3. Multi-thread app (X)
  4. Big data (X)
  5. Complex business logic (X)

Good Points!

  1. RESTful API에 최적화
  2. Single-page web app
  3. Real-time web app
  4. Rapid prototyping
  5. I/O processing

메모리 사용 및 성능 비교

  • Apache
    • 유저 당 스레드를 생성
    • 100명의 유저 -> 100개의 스레드(메모리 사용 증가)… context switching… (X)
  • Nginx
    • 유저가 많아진다고 해서 메모리 사용이 더 늘어나지 않음
    • Apache만큼 기능이 다양하진 않지만 자주 쓰는 기능은 더 잘 만들어 놓았음

Node.js 실습 메모

  • 패키지 설치
    • npm install package-name --save
      • 현재 디렉토리에서만 패키지를 설치
    • npm install package-name —g
      • global하게 패키지 설치
  • 모듈 시스템
      // math.js
      // module ‘math’ used in app.js
    
      exports.abs = function(number) {
      return number < 0 ? -number : number;
      };
    
      exports.pow = function(x, y) {
      var value = 1;
    
      for ( var I=0; I<y; I++) {
      value *= x;
      }
      return value;
      }
    
      // app.js
    
      var math = require(‘./math’);
    	
      console.log(‘math.abs(%d) = %d’, -100, math.abs(-100));
      console.log('math.pow(%d, %d) = %d’, 2, 3, math.pow(2, 3));
    
    • exports
      • public과 같다고 생각하면 됨
  • colors 모듈
  • EventEmitter
    • Node의 많은 객체들은 이벤트를 발생(emit)시킴
    • 이벤트를 발생시키는 모든 객체들은 events.EventEmitter의 인스턴스들임
    • ex. HTTP 서버에 요청을 보내면 request event가 발생
  • Stream
    • 데이터를 잘게 쪼개어 보내는 것
      • fs.createReadStream
    • Node의 다양한 객체들에 의해 실행되는 abstract interface
    • 모든 stream은 EventEmitter의 인스턴스들임
    • ex. HTTP 서버 요청은 stream임(stdout)
    • File 입/출력, Socket 입/출력, stdin/stdout
  • Socket.io
  • RESTful API Server 구현
    • Postman의 MemoServer를 이용해 실습함

기타

  • DB 관련
    • 실무 레벨에서는 DB를 하나만 사용하지는 않음
      • insert 전용 DB (master)
      • 이를 복제한 DB들(slave)에서 select를 수행
        • 보통 insert보다 select가 압도적으로 많으므로 slave를 여러 개 두어 부하를 분산시킴
    • master에 장애가 발생할 경우,
      • slave 중 최신 데이터를 가진 애를 master로 승격시켜 새롭게 구조를 정립함
      • DB가 살았는지 죽었는지 모니터하고 구조를 바꾸는 코드는 여러분이 짜셔야 한다
        • Node.js를 이용하면 간단함
  • Nodemon
    • 서버 소스코드가 바뀌어도 서버를 내릴 필요 없이 자동으로 띄워줌
    • 난이도 있게는 PM2도 많이 사용
    • 개발 단계에서만 쓰고 프로덕션 레벨에서는 사용하지 않음 (꼬이는 문제가 있음)
  • GPL license 관련 이슈 (주의)
    • DB 사용 시(?) 소스를 오픈해야 하는 문제
    • node-mysql 사용
    • MySQL과 MariaDB 중 어떤 것을 설치할지 고객이 선택하게 하기

다음 수업

  • Express
    • 가장 많이 사용하는 웹 프레임워크
  • Node.js는 PM2를 사용하면 영원히 다시 살릴 수 있음
    • pm2 start app.js
    • mp2 start app.js -I max // 각 프로세스에 모두 배분
  • async.js
    • 콜백 피할 수 있음
  • 가비지 컬렉터의 동작 원리
  • Nginx https to http 공부하기
    • client — (https) — nginx — (http) — node

2019

Redis 기초 특강 - 강대명 멘토

1 minute read

Redis 소개 In-memory data structure storage disk 접근을 하지 않음 -> 속도가 빠르다 오픈소스(BSD 3) 제공되는 자료구조들 Strings, set, sorted-set, ...

Node.js 특강 - 손영수 멘토 (2)

3 minute read

MongoDB 클라우드 서비스를 SaaS로 제공하려다가 그 중 DB 서비스가 제일 잘 나가서 MongoDB가 됨 No Schema: JSON data 삽입 시 field가 생성됨 Document data model JSON data를 그대로 넣음 ...

Node.js 특강 - 손영수 멘토 (1)

2 minute read

웹 서버의 구동 방식에는 8가지가 있음(3페이지) Node.js는 비동기, non-blocking Server side Javascript Event driven Asynchronous Non-Blocking I/O ...

TensorFlow.js: Speech Command Recognizer (번역)

less than 1 minute read

TensorFlow.js의 공식 모델 중 하나인 Speech command recognition에 대해 조사해 보았습니다. 원문 링크: tfjs-models/speech-commands at master · tensorflow/tfjs-models · GitHub

Chapter 04. HTML & CSS 필수 기초 (2)

2 minute read

이 포스트는 SW마에스트로 자기주도학습으로 패스트캠퍼스의 웹 프론트엔드 올인원 패키지 Online을 수강하면서 작성한 노트입니다.

Chapter 04. HTML & CSS 필수 기초 (1)

1 minute read

이 포스트는 SW마에스트로 자기주도학습으로 패스트캠퍼스의 웹 프론트엔드 올인원 패키지 Online을 수강하면서 작성한 노트입니다.

Chapter 03. CSS 입문

1 minute read

이 포스트는 SW마에스트로 자기주도학습으로 패스트캠퍼스의 웹 프론트엔드 올인원 패키지 Online을 수강하면서 작성한 노트입니다.

CC 라이센스

less than 1 minute read

소프트웨어 마에스트로 과정에서 아기 울음소리를 인식하고 분류하는 딥러닝 모델을 작성하고 있습니다. GitHub에 공개되어 있는 소리 데이터셋을 사용하기 위해 확인한 라이센스 몇 가지를 정리해 보았습니다. 참고한 곳: CC 라이선스 :: Creative Commons K...

URI와 URL의 차이점

less than 1 minute read

이 포스트는 What Is The Difference Between A URI And A URL? - DEV Community 👩‍💻👨‍💻 를 참고하여 작성되었습니다.

Chapter 02. HTML 입문

1 minute read

이 포스트는 SW마에스트로 자기주도학습으로 패스트캠퍼스의 웹 프론트엔드 올인원 패키지 Online을 수강하면서 작성한 노트입니다.

블로그 개설

less than 1 minute read

Github 블로그를 드디어 개설했습니다.🎉

Back to Top ↑