js es5 ,es6 || Nodejs || 코드문서화
JavaScript
-객체 기반의 스트립트 프로그래밍 언어
-최신 버전은 ECMAScript 2021이다
JavaScript [es5 => es6]로 넘어가면서 추가된 기능
-Arrow Fucntion
가독성 및 유지 보수성이 올라갔다고 판단됩니다.
-Templete literal
문자열 관리가 편리해졌다
-class 추가
-module import || export 추가
-pomise도입
콜백 헬을 해결해줄 비동기 기법입니다
2017년도에는 async-await 이 추가되었습니다.
-let , const 추가
let과 const 는 블록범위 생성자 입니다
let은 변수 const 상수를 선언합니다.
var는 유연한 변수선언 방식으로 편리하기도했지만 많은 오류를 발생시켜 let || const 가 추가됨
-this의 다른동작
Node Js
- 크롬 v8 자바스크립트 엔진을 빌드된 자바스크립트 런타임입니다.
Node js 의 작동방식
v8엔진 싱글 스레드로 동작하며 libuv를 사용한다.
1.I/O가 발생하면 스레드 풀에 작업전달
2.I/O가 완료 되면 이벤트 큐에 콜백 함수를 쌓는다.
3.이벤트 루프는 항상 돌고있다가 v8엔진의 호출스택이 비워지면 이벤트 큐에서 작업을 처리한다.
작업이 완료 될때까지 기다리지않고 다른작업을 먼저 처리하면서 blocking없이 동기적인 작업처럼 동작하게 됩니다.
Libuv : 이벤트 루프를 기반으로 비동기 I/O를 지원하는 다중 플랫폼 C라이브러리
이벤트 큐(event Queue) : Call Stack에 작업을 보내기 전에 대기하는 큐라고 볼 수 있다.
자바스크립트에서 비동기로 실행되는 함수들(예를들면 setTimeout)이 Call Stack에 들어갔다가 webAPIs에서 실행 후 Callback Queue에 들어오는 것이다.
프로그램 : 어떤 작업을 위해 실행할 수있는 파일
프로세스 : 컴퓨터에서 연속적으로 실행되고있는 컴퓨터 프로그램
스레드:프로세스 내에서 실행되는 여러 흐름의 단위
스레드 풀
- 스레드가 생성 될때, 컴퓨터 내부적으로 운영체제가 요청을 받아들여 메모리 공간을 확보해주고 그 메모리를 스레드에게 할당
- 요청이 들어올때마다 스레드를 생성하고 일을 다하면 수거하고 하는 작업은 비용과 프로그램 퍼포먼스에 지대한 영향을 준다
따라서 스레드를 미리 만들어 놓는것이다.
v8엔진: V8엔진은 C++로 작성됐고 ECMA-262에 기재된 ECMAScript를 구현했습니다.
Node.js 장점 || 단점
장점
-높은 개발 생산성 보여준다.
-v8엔진에서 실행 되기 때문에 요청처리 속도와 빠른응답시간으로 고성능 그리고 확장성이좋다
-npm을 통한 다양한 모듈제공
어울리는 웹서비스
-간단한 로직.
-대용량(동시에 여러 request를 처리)
-빠른 응답시간 요구
-빠른 개발 요구
-비동기방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)
단점
-로직이 복잡한경우 콜백함수의 늪에 빠질 수 있다.
-싱글 스레드라서 cpu코어를 하나밖에 못쓴다. 그러므로 무거운 cpu연산과는 맞지 않다.
-스레드가 하나라서 절대로 멈추면 안 된다.
어울리지 않는 웹 서비스
-단일처리가 오래 걸리는 경우
-서버 체크 로직이 많은 경우
서버 다운 대책
(uncaughtException)언코렉셉션 함수 사용
코드의 문서화
-설계한 이유, 세부 디자인을 결정한 이유, 코드로 구현한 이유, 등등 다양한 결정의 근거를 남기는것
-가독성 향상에 따른 높은 복잡도의 코드 이해에 도움
-코드의 구조파악이 쉬워 코드 수정시 용이