면접공부/Backend

js es5 ,es6 || Nodejs || 코드문서화

Box 2021. 5. 23. 18:14
728x90

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)언코렉셉션 함수 사용

 

코드의 문서화

-설계한 이유, 세부 디자인을 결정한 이유, 코드로 구현한 이유, 등등 다양한 결정의 근거를 남기는것

-가독성 향상에 따른 높은 복잡도의 코드 이해에 도움

-코드의 구조파악이 쉬워 코드 수정시 용이