자바스크립트는 싱글 쓰레드 기반 언어이다. 그럼에도 불구하고 동시성 언어라고 불릴 수 있는 이유는 웹 브라우저가 제공하는 API를 통해 동시에 작업을 할 수 있기 때문이다. 노드JS가 비동기 작업을 처리하는 방법 Node.js는 자바스크립트 언어를 사용하고 자바스크립트 언어는 싱글 스레드이다. 싱글 스레드면 한 번에 하나의 작업만 할 수 있는데 node.js를 사용할 때 어떻게 비동기로 파일을 열고 HTTP request를 보낼 수 있을까? Node.js는 LIBUV 라이브러리에서 제공하는 Event Loop를 이용한다. 어떠한 Task들이 들어오면 Libuv에 있는 이벤트 루프를 이용해서 처리해주고 있다. node.js는 I/O 작업을 libuv에게 위임함으로써 논 블로킹 I/O를 지원하고 그 기반에는..
비동기 처리를 하기 위해 콜백함수를 도입했으나, 반복되다보면 콜백지옥에 빠지는 것을 봤다. 그래서 나온 게 Promise 키워드! 라지만... 사실 콜백지옥이랑 별 다를 게 없어보인다. 사실 프로그래밍 햇병아리 수준이라 그렇게 보이는 것일지도 모르겠다. 머리 아파 죽겠어요~ promise 상태 new Promise: 대기 resolve: 정상적인 동작이 되었을 때 reject: 에러가 발생했을 때 Async와 await 이 친구는 비교적 최근에 등장한 문법. 그래서 그런가 promise보다 훨씬 쉬운 것 같다. async는 함수 앞에 붙이는 것으로, 해당 함수는 항상 promise를 반환. (promise가 아닌 것은 promise로 감싸 반환) await는 async가 있어야만 등장할 수 있다. 가장 ..
동기(Synchronous) 비동기(Asynchronous) 첫 번째 해결 방법, 콜백이다. 여기까진 잘 이해가 됐지만... 이 다음이 문제다. 쭉 따라가다 보면 알 수 있지만, 콜백을 반복하다보면 함수 안에 함수가 들어가는 꼴이 반복되면서 콜백지옥 (Callback hell)이 만들어지는 것을 볼 수 있다. 물론 저 정도로 지옥은 아니겠지만 더 길어지면 정말 지옥이 될지도 모른다. 그래서 나온 방법이 Promise. 다음 포스팅에서 볼 수 있을 것이다. 물론 올리기 전에 내가 먼저 이해를 해야겠지만... // 동기(Synchronous), 비동기(Asynchronous) // 동기: 순차적으로 코드 실행O // 비동기: 순차적으로 코드 실행X console.log(1); // 1 console.log(..
다음 포스팅이 동기/비동기(Sync, Async)에 대한 것인데... 이를 이해하기 위해서는 자바스크립트의 작동 방식이 어떠한지를 먼저 알아야 한다고 생각했다. 그걸 안다고 해도 지금 내 머리 속에 둥둥 떠다니는 비동기 처리와 콜백, promise, resolve, reject 등이 한 번에 이해되고 그러진 않겠지만... 열심히 하는 거 같은데 남는 게 없는 느낌이라 뭔가 좀 허하다. 그래도 정진 해야겠지. 자바스크립트의 동작 원리 우선 JavaScript는 동기식 언어이다. 즉, 한 번에 하나의 작업을 실행하는데 그 작업이 실행되는 동안 다른 작업은 수행되지 않는다. JavaScript는 single threaded 언어로 한 번에 코드 하나밖에 실행하지 못한다. setTimeout 같은 코드는 바로 ..