목록전체 글 (134)
PracticeEveryday

프로그램 실행 과정 1. 전처리기 // preprocesser 먼저 처리하는 이 #inclue, #define 같은 것을 처리 하는 것이다. 먼저 처리하니까 '전'처리기라고 한다. 더보기 컴퓨터 과학에서 전처리기(前 앞 전 處 곳 처 理 다스릴 이 器 그릇 기 ) 또는 프리컴파일러영어: preprocessor)는 입력 데이터를 처리하여 다른 프로그램에 대한 입력으로서 사용되는 출력물을 만들어내는 프로그램이다. 여기서 출력물이란 전처리된 형태의 입력 데이터를 말하며 컴파일러와 같은 차후 프로그램들에 쓰인다. // #으로 시작하는 지시자의 지시에 따라서 소스코드를 적절히 변경하는 작업 2. 컴파일러에 의한 번역 // compiler // compile 엮다. - 전처리기에 의해 변경된 소스코드는 C언어로 되..

자바스크립트는 왜 싱글 스레드를 선택했을까? 웹페이지의 보조적인 기능을 수행하기 위해 브라우저에서 동작하는 경량 프로그래밍 언어를 도입하기로 결정하고 만들어진 언어가 자바스크립트 이다. 웹사이트를 구현하던 개발자들에게 자바라는 언어는 다소 무겁고 어려운 언어였기 때문에, 브랜던 아이크라는 사람을 스카우트하여 ‘자바스크립트’가 탄생되었다. 왜 무겁고 어려운 언어라 생각했을까? → 멀티 스레드 모델은 프로그래밍 난이도가 높다. 멀티 스레드로 구현된 서비스에서는 이 동시성 문제에 대해 많이 신경쓴다고 한다. 자바스크립트는 멀티 스레드 환경에서 발생할 수 있는 복잡한 시나리오를 신경쓸 필요 없다. 실제로 구글의 chrome 브라우저도 기존 웹 페이지에서 엄청난 동시성 문제를 일으킬 수 있다는 이유로 단일 웹 사..

Task Queue(Macro: 매우큰 거대 task: 작업 Queue - 우리가 기존에 알고 있던 Task Queue는 뒤에서 설명할 Microtask Queue과 구분하기 위해 Macrotask Queue라고 부른다. - 이 큐는 setTimeout(), setInterval(), setImmediate()와 같은 task를 넘겨 받는다. Micro: 마이크로 , 미소한, 초소형의 뜻을 나타내는 말 task Queue - Microtask Queue는 Promise나 async/await, process.nextTick, Object.observe, MutationObserver과 같은 비동기 호출을 넘겨 받는다. // Mutation : 돌연변이 Observer 관찰자 - Microtask의 우선순..

nextTickQueue , microTaskQueue - nextTickQueue와 microTaskQueue는 앞에서 말했듯 이벤트 루프의 일부가 아니다. - 정확히는 libUv에 포함되어 있지 않고 Node.js에 구현되어 있다. 따라서 이벤트 루프의 페이즈와 상관없이 동작한다. nextTickQueue nextTickQueue는 microTaskQueue 보다 높은 우선순위를 가지므로 더 먼저 실행된다. Promise.resolve().then(() => console.log("resolve")); process.nextTick(() => console.log("nextTick")); // process.nextTick은 같은 페이즈에서 호출한 즉시 실행된다. // nextTick // resol..

Pending: 보류중 Callbacks Phase - 이 페이즈에는 Pending_queue에 담기는 콜백들을 관리한다. - 이 큐에 담기는 콜백들은 이 전 이벤트 루프 반복에서 수행되지 못했던 I/O 콜백들이다. - Time Phase에서 말했듯 대부분의 페이즈는 시스템의 실행 한도의 영향을 받는다. - 시스템의 실행 한도 제한에 의해 큐에 쌓은 모든 작업을 실행하지 못하고 다음 페이즈로 넘어갈 수도 있다. - 이때 처리하지 못하고 넘어간 작업들을 쌓아놓고 실행하는 페이즈다. - 에러 헨들러 콜백 또한 pending_queue로 들어오게 된다. *nix는 TCP 단에서 ECONNREFUSED( : 연결 서버에 의해 거부)를 받으면 pending_queue에 에러 핸들러를 추가한다. static int..

이벤트 루프의 여러 페이즈 - 이벤트 루프는 말했든 여러 페이즈로 구성되어 있고 페이즈마다 관심있어 하는 작업이 다르다. - 비동기 작업의 종류마다 담기는 페이즈가 달라지고 실행 순서 또한 달라진다. 1. Timer Phase - Timer Phase 는 말 그대로 setTimeout이나 setInterval과 같은 함수가 만들어내는 타이머들을 다룬다. - // 엄밀하게 말하면 Timer Phase가 관리하는 큐에 콜백을 직접 담지는 않는다. - Timer Phase는 setTimeout이 호출 되었을 때 타이머의 콜백을 큐에 저장하지 않는다. - 그 대신 콜백을 언제 실행할 지에 정보가 담긴 타이머를 Timer Phase가 관리하는 min-heap에 넣는다. - 만약 Poll Phase에서 setTim..

이벤트 루프 Node 실행과 이벤트 루프 흐름 실제로 node someScript.js를 실행했을 때 어떤 일이 일어나는지 보자 우리가 node someScript.js를 실행하면 Node.js는 우선 이벤트 루프를 만든다. 그리고 이벤트 루프 바깥에서 someScript.js를 실행한다. 처음부터 끝까지 someScript를 실행하고 나면 Node.js는 그제서야 이벤트 루프를 확인한다. 이벤트 루프에 남은 작업이 있다면 Node.js는 이벤트 루프에 진입해 반복하며 작업을 실행한다. 이벤트 루프에 남은 작업이 없다면 Node.js는 process.on('exit', callback)을 실행하고 이벤트 루프를 종료한다. // case 1 // test.js console.log("Hello World"..

런타임 런타임이란 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 뜻한다. 따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 하는 자바스크립트 실행기이다. 특히 2008년 구글이 V8 엔진을 사용하여 크롬을 출시했고 V8 엔진은 다른 자바스크립트 엔진과 달리 매우 빨라 라이언 달(Ryan Dahl)은 2009년 V8 엔진 기반의 노드 프로젝트를 시작하며 세상에 나왔다. JavaScript는 스크립트 언어이기 때문에 독립적인 프로그램을 만들 수가 없었지만 !! Nodejs가 나오면서 JavaScript라는 언어를 가지고 프로그램을 만들고 실행 시킬 수 있게 되었다!! Nodejs 특징 1. 이벤트 기반 2. 이벤트 루프 3. 논 브로킹 I/O 4. 싱글 스레드 console.log(1);..

Nodejs 1. HTML = Hyper: 들뜬 흥분한 Text Markup: 마크업(문서의 활자·조판 지정 표시) Language => HyperText(웹페이지에서 다른 페이지로 이동 할 수 있게 하는 것) 기능을 가진 문서를 만드는 언어 => HyperText 구조를 설계할 때 사용하는 웹 페이지를 위한 마크업 언어 => 정적임... 못바꿈 움직이게 동적인 효과를 주고 싶어 JavaScript 등장! => 글 넣고 그림넣고가 끝! 2. JavaScript => HTML을 동적으로 조작하기 위해 생긴 스크립트 언어( 특정한 프로그램을 돌리기 위해 등장한 언어 ) => 웹 페이지를 다이나믹하게 동적으로 바꾸는 것이 가능 => 즉, 웹 브라우저(크롬, 사파리, 익스플로러, 파이어폭스 등)가 없으면 사용할..

원시값 Copy 원시값은 복사할 때 복사된 값을 다른 메모리에 할당하기에 원래의 값과 복사된 값이 서로 영향을 미치지 않습니다. const a = 1; let b = a; b = 2; console.log(a); // 1 console.log(b); // 2 객체 (참조) Copy 참조값은 변수가 객체의 주소를 가리키는 값이 되기 때문에 복사된 값(주소)이 같은 값을 가리키게 됩니다. const c = { number: 1 }; let d = c; d.number = 2; console.log(c.number); // 2 console.log(d.number); // 2 const e = [1, 2, 3]; let f = e; f[0] = 10; console.log(e); // [10, 2, 3] co..