Node.js 이해하기

채재헌·2023년 8월 20일
1
post-thumbnail

1. ES6란?


(1)ES6

ECMAScript 버전 6 이후를 통틀어 일반적으로 ES6이라고 부름


(2) ECMAScript

계속해서 발전해가는 JavaScript 표준 문법
2015년, ECMAScript 버전 6 이후 많은 현대적인 문법이 추가됨.
그러므로 다른 언어에서 부터 지원되던 유용한 기능들이 이 자바스립트로 넘어온것이다. 그러다 보니 사용자들이 사용자 코드들 중 ECMAScript버전 6 이전에 사용된 코드가 있을 수 도 있고 이후에 사용된 코드들도 있을 것이다.


(3) ES6을 사용하는 이유?

1.현대전인 문법은 생산성 향상에 도움을 줌 => 작은 코드로도 더 유용한 기능을 할 수 있다.
2.Node.js는 빠르게 최신 ECMAScript를 지원 중
3.자주 사용되는 유용한 문법을 익히고 필요한 부분에 적절하게 활용하는것이 중요하다.


(4) Node.js와 ES6

Node.js는 ES6의 모든 문법을 지원하지는 않지만 Node.js로 자주 사용되는 유용한 ES6문법의 코드를 실해해보며 Node.js와 친숙해질 수 있다.


2.자주 사용되는 문법

(1) let,const

기존의 자바스크립트에서는 변수를 선언할 때는 var라는 키워드를 사용하였다.하지만 이 var 라는 키워드는 상수와 변수의 구분이 없는 문제점을 가지고 있었고 ES6버전을 이용하여 const와 let 으로 상수와 변수의 구분이 가능해졌다.


(2) Template String

Template String은 우리가 원하는 문자열로 만들수 있는것이다. 기존의 자바스크립트의 문법에서는 + 를 사용해 문자열과 변수를 연결하고 줄 바꿈 문자 \n을 사용해야 했었지만 ES6 버전에서는 문자열 사이에 간단한 변수를 사용 가능하게 되었고 줄 바꿈을 지원 가능하게 해주었다.


(3) arrow function

기본적인 문법에서는 그림과 같이 function이라는 함수와 함수 이름, 매게변수, 괄호를 넣어주어야만 함수를 만들수 있었다. 하지만 ES6에서는 '=>'를 기준으로 왼쪽에는 매게변수, 오른쪽에는 할일을 적어서 간편하게 함수를 만들수 있다.

=> 이 장점은 위의 그림에 있는 익명함수를 간결하게 표현할 때 분명히 나타난다.


(4) class

class는 객체지향 프로그램이나 자바와 같은 언어에서 사용되는 언어인데 기존의 자바스크립트의 복잡한 형태보다 더 일반적인 형태의 class를 구현 가능하게 만들어 줄수 있다.


(5) destructing

어떤 자료를 분해는것을 의미한다. 예를 들어 name 은 'elice age는 5라는 작은 객체를 만들어 주었다. 그다음 name과 age를 각각 obj.name이라고 두는데 ES6에서는 obj를 오른쪽에 두어 이 변수를 한번에 obj라고 지정해줄 수 있다.


(6) promise, async-await

promise와 Async-Awaite은 간단한 요약이 어려움으로 나중에 비동기 코딩때 실습해보겠다.


ES6 적용 결과

복잡하거나 직관적이지 않던 방법을 보기 좋게 만들고 간결하게 표현할 수 있게 되고, 현대적인 문법은 처음 접할 땐 어색하지만 익숙해지면 좋은 코드로 작성 할 수 있게 됨.


3. 비동기 코딩


(1) 비동기 코딩이란?

비동기란 쉽게 말하자면 어떤일을 할 때 그일이 끝나기전까지 기다리지 않고 다른일을 하거나 기다리는것을 의미한다.


(2) 비동기 코딩의 세가지 방법

처음에는 전통적이 javascrpit의 이벤트 기반 코딩 방식을 사용하였지만 이것의 문제점을 해결하기위해서 promise가 나왔고 그 이후에 단점을 보안하기 위해 Async-Await가 나오게 되었다.


🅰. Callback

db.getUers 함수는 데이터베이스에서 유저 목록을 찾아오는 비동기 동작을 수행하게 되는데 이 말은 즉,node.js가 하는 일이 아니라는 것이다. 일을 시키고 일의 결과가 나오면 console.log의 값을 나타내는 것을 볼 수 있다.

쿼리가 완료되면 오류가 있는지, 혹은 유저목록의 결과로 미리 등록된 callback 함수를 실행하는데 이 함수를 위에서는 console.log를 가리키게된다.

callback 함수를 실행하는데 callback 함수의 표준이 있는데 그것은 에러와 결과를 같이 전달하는것이 표준으로 위와 같이 잡혀있는것을 볼 수 있다.


  • 콜백 지옥

    위의 그림과 같이 node.js는 기본적으로 비동기 동작을 callback으로 처리하기 때문에 callback의 callback의 callback...를 볼수 있다. 이와 같은 코드는 되게 복잡해 보이고, 쉽게 쓸수 가 없을 것이다. 이로 인해 우리는 이 단점을 극복하기 위해 promise함수를 사용하게 된다.


🅱.Promise

Promise 함수는 동작이 완료되면 then에 등록된 callback을 실행하고 오류가 발생한 경우 catch에 등록된 callback을 실행시킨다. 이는 chaining을 사용해 코드를 간결하게 만들수 있고short-hand 표현 방법으로 더욱 간결하게 만들어 줄 수 있다.


  • 프로미스 지옥

이러한 프로미스도 callback 함수와 같이 then이 꼬리에 꼬리를 물어 작동이 될 수도 있다.
직관적으로 생각한다면 위와 같은 콜백 지옥과 유사한 해결핵이 Async-Await가 됨.


🅾. Async.Await

async구문 어떤 작업을 있어서 '이 작업을 하겠다', '명시하겠다'라는 뜻을 가지고 있고, async 함수 내에서 promise 함수의 결과는 await으로 받을 수 있고, await 한 promise 함수가 완료 될때 가지 다음 라인으로 넘어가지 않는다. 하지만 await 간에서는 작업을 비동기로 진행을 할 수있다.


  • Async 함수의 오류처리

    async 함수의 오류처리는 promise 함수와 동일하게 처리된다.


  • 정리


0개의 댓글