728x90
반응형

Node.js 로 서버를 만들어보려 합니다. 간단히 Node.js 와 자바스크립트에 대하여 간단히 정리를 해보았습니다.

개요

  1. Node.js 란, 자바스크립트 런타임을 의미합니다.
  2. Node.js는 논블로킹/비동기 처리 방식이기 때문에 사용하기 어렵다고 합니다. 
    논블로킹/비동기는 작업 흐름이 순차적이지 않고, 응답을 기다리지 않습니다. 블로킹/동기 방식보다 자원 낭비가 적습니다.
  3. Node.js 는 싱글 스레드이지만 이벤트 루프가 있습니다. 
    이벤트 루프는 이벤트를 감지하며 작업을 위한 스레드를 생성하여 이벤트를 처리합니다.

 

ECMAScript(=ES)

ECMAScript 는 자바스크립트, J스크립트, 액션스크립트가 따르는 표준을 말합니다. 스크립트 언어들의 표준을 지키기 위하여 매년 6월마다 새로운 기능 혹은 규칙을 개정합니다. ES6(=ES2016) 버전에서 자바스크립트가 혁신적이게 바뀌게 되며 이 시점을 전후로 최신인지 구식인지를 판가름합니다.

 

간단한 자바스크립트 문법 정리

변수, 호이스팅

ES6 이전에는 변수 선언시 var를 사용했지만, ES6 이후로 되도록 const, let 를 사용해야합니다. 이유는 var의 변수 호이스팅과 function-level-scope로 인해 생기는 문제 때문입니다.

  • 변수 호이스팅(Hoisting) : 변수의 선언과 초기화가 동시에 이루어져, 아직 값이 없음에도 오류가 나지 않는 현상
  • function-level-scope: 함수의 블록 범위 내에서 선언한 변수는 함수 내에서만 인정하고 함수 외부에서 선언한 변수는 모두 전역변수가 된다

let과 const 의 차이

let과 const는 block-level-scope 입니다. 둘의 차이를 보면 let은 값을 재할당 할 수 있어 값의 변경이 가능합니다. const는 값을 재할당할 수 없어 변경할 수 없습니다. 

클로저

내부 함수가 외부 함수의 scope에 접근할 수 있는 것을 이야기합니다. 자바스크립트에서 scope는 함수 단위로 생성이됩니다. 한 함수의 inner()함수의 scope가 outer()함수의 scope를 참조하고 있고 outer()의 실행이 끝나고 소멸된 이후에도 inner()함수가 outer()함수의 스코프에 접근할 수 있다 것을 이야기합니다.

 

자주 사용하는 내장 함수

함수 설명 함수 설명
forEach() for문을 짧게 줄임 indexOf() 원소의 인덱스를 반환
findIndex() 배열의 요소가 객체,배열 일 때 판별 함수를 만족하는 첫 식별자 반환 find() 찾은 값을 반환
shift() 첫 번재 원소 제거 및 반환 unshift() 맨 앞에 새 원소를 추가
filter() 조건을 만족하는 배열 생성 splice() 인덱스로 특정 항목을 제거
slice() 항목을 제거해 새 배열 생성 pop() 마지막 원소 제거 및 반환
join() 배열 요소를 문자열로 합침 concat() 배열합침
reduce() 누적 값을 계산 map() 배열 각 원소 반원

자바스크립트의 비동기 처리

콜백함수, Promise

 콜백은 나중에 실행되는 코드를 의미합니다. A()라는 함수가 있을때, 인자로 어떤 함수를 넣어주었다고 한다면 A함수의 모든 명령어를 실행한 후 마지막으로 넘겨받은 인자 callback을 실행하게 될것이고 여기서 인자로 들어가는 함수를 콜백 함수라고 합니다. 콜백함수를 사용하는 이유는 이를 이용하여 비동기 작업을 동기적으로 처리할 수 있기때문입니다.

 Promise는 코드의 중첩이 많아지는 콜백 지옥을 해결하게 해주는 자바스크립트 API입니다. 보낸 요청에 대해 응답이 준비되었을 때 알림을 주는 알리미 역할을 합니다.

async/await

ES7.6부터 사용할 수 있는 문법으로 Promise의 단점을 보안해주는 패턴입니다. Node.js는 8버전부터 async/await를 지원합니다. async/await를 사용하면 new Promise로 Promise 객체를 선언하고 resolve, reject를 넘겨주는 부분은 숨기겨 코드의 양이 줄어듭니다. try/catch를 통해 오류를 다룰수 있다는 장점도 존재합니다.

await는 async 키워드를 붙인 함수 안에 lock을 걸어 놓고 싶은 부분에 await를 붙이기만하면 됩니다. async/await를 이용하게 되면 비동기로 처리하고 싶은 함수에 async를 붙이고, 비동기 처리를 할 특정 부분에 await를 붙이기만 하면 됩니다.

비동기 상황에서의 예외 처리

비동기 상황에서의 예외처리는 Promise의 .catch()를 이용하거나, Promise의 .then()을 이용하는 방법이 있습니다. 또한, async/await의 예외처리 방식으로 사용이 가능합니다.

 

 

 

 

 

 

728x90
반응형

+ Recent posts