본문 바로가기

Backend

(126)
Cluster Module in Node.JS 이번 포스팅에선 Node.JS 의 내장 모듈인 cluster 에 대해서 알아보도록 하겠습니다. Node.JS 는 기본 싱글 스레드입니다. Node.JS 어플리케이션은 하나의 core 에서 실행되므로 어플리케이션을 띄우는 환경이 멀티코어인 경우 나머지 CPU 를 활용하지 못하는 문제점이 있습니다. 흔히 사용하는 클라우드 서비스에서도 멀티코어 인스턴스를 사용하는 경우가 많으므로, 낭비없이 이를 최대한 활용하는 방법으로 Node.JS 에선 cluster 라는 내장 모듈을 제공하고 있습니다. - Cluster const cluster = require('cluster'); const os = require('os'); const process = require('process'); const cpus = os...
SharedArrayBuffer & Atomics (SharedMemory) ES8 에선 새로운 공유 메모리 모델에 대해 소개하고 있습니다. 먼저 그 배경을 짧게 얘기해볼까 합니다. 기본적으로 Node.JS 단일 프로세스 단일 스레드에서 실행되고 이벤트 루프 또한 그렇습니다. 이런 기본 컨셉때문에 Node.JS 개발자들은 다른 언어들이 겪는 동시성 문제에서 꽤나 자유로웠지만, 그로 인해 갖는 단점도 있습니다. 단일 프로세스이다보니 멀티 코어 환경에선 cpu 를 제대로 활용하지 못하기때문에, cluster 모듈을 사용하는 설계를 대부분의 경우엔 깔고 들어가야 합니다. 또한 단일 스레드 모델은 cpu 집약적인 연산에 약하고, 이런 작업의 처리가 오래 걸리면 전체 성능이 저하됩니다. 그러다보니 Node.JS 도 꽤 예전버전부터 worker_threads 라는 내장 모듈을 통해 멀티 쓰..
ES8 (ES2017) 이번 포스팅에선 ES8 의 기능들에 대해 알아보도록 하겠습니다. - Async functions ES 에서 그간 추가된 스펙 중에 현재 자바스크립트 프로그래밍에서 가장 많이 쓰는 기능이 아닐까 싶습니다. async functions 이 제공하는 syntax 를 통해 훨씬 향상된 비동기 프로그래밍이 가능케 되었습니다. const test1 = () => { return new Promise(resolve => { resolve(3); }); }; (async () => { const result = await test1(); console.info(result); // 3 })(); async 함수에선 await 키워드를 사용할 수 있고, await 는 전달된 promise 의 해결을 기다리는 역할을 합니..
ES7 (ES2016) 2022년에 ES7 을 포스팅하는게 맞나 싶긴 하지만.. 정리하는 차원에서 ES7 에 나온 기능들을 알아보도록 하겠습니다. ES7 부터 TC39 산하에서 출시된 첫번째 개정판입니다. - new exponentiation operator const result1 = Math.pow(10, 2); console.info(result1); // 100 const result2 = 10 ** 2; console.info(result2); // 100 새로운 거듭제곱 연산자가 추가되었습니다. 기존에 거듭제곱을 연산하기 위해선 Math.pow 메서드의 도움을 받아야 했는데, ** 연산자로 인해 좀 더 간편해진 기분입니다. 현재는 비교적 최근에 추가된 BigInt 도 ** 연산자는 처리가 가능하며, 이 점을 제외하면..
ES12 (ES2021) 이번 포스팅에선 ES12 의 기능들에 대해 알아보겠습니다. - replaceAll const test1 = '2022-03-03'; const result1 = test1.replace('-', ''); const result2 = test1.replace(/-/g, ''); console.info(result1); // 202203-03 console.info(result2); // 20220303 원래 자바스크립트에는 replaceAll 메서드가 없었습니다. 따라서 replace 메서드를 통해 replaceAll 과 같은 효과를 보려면 정규표현식을 같이 사용해야 했습니다. const result1 = test1.replaceAll('-', ''); console.info(result1); // 202..
ES11 (ES2020) 이번 포스팅에선 ES11 의 기능들에 대해 알아보겠습니다. - matchAll 정규표현식에 사용할 수 있는 새로운 메서드가 추가되었습니다. 기존에는 match 메서드를 사용해왔었는데, 어떤 차이점이 있는지 아래 코드 예제로 보도록 하겠습니다. const regex1 = /https?:\/\/www.npmjs.com\/package\/(\w*)/g; const regex2 = /https?:\/\/www.npmjs.com\/package\/(\w*)/; const domain = 'https://www.npmjs.com/package/axios'; const test1 = domain.match(regex1); const test2 = domain.match(regex2); console.info(test..
ES10 (ES2019) 이번 포스팅에선 ES10 의 기능들에 대해 알아보겠습니다. - Array.prototype.flat flat 이라는 이름 그대로 배열을 평탄화시키는 메서드가 새롭게 추가되었습니다. 이미 lodash 와 같은 유틸 함수를 제공해주는 라이브러리를 자주 사용해왔다면 그리 어색하진 않을 메서드입니다. const list1 = [1, 2, [3, 4]]; console.info(list1.flat()); // [1, 2, 3, 4] const list2 = [1, 2, [3, 4, [5, 6]]]; console.info(list2.flat()); // [1, 2, 3, 4, [5, 6]] console.info(list2.flat(2)); // [1, 2, 3, 4, 5, 6] const list3 = [1, ..
ES9 (ES2018) 이번 포스팅에선 ES9 의 기능들에 대해 알아보겠습니다. 나온진 꽤 됐지만 쓰는 기능도 있고 처음 보는 기능 (관심이 부족했는지..) 도 있어 적어보려 합니다. - Object rest/spread properties ES6 때부터 spread operator 와 rest parameters 는 도입이 되었었습니다. 먼저 이 두 문법부터 간단히 보도록 하겠습니다. const list1 = [1, 2, 3]; const list2 = [...list1, 4, 5, 6]; console.info(list2); // [1, 2, 3, 4, 5, 6] 위는 spread operator 의 예시입니다. 전개 연산자라고도 하는데 이름 그대로 Iterable 한 배열의 프로퍼티를 펼치는 역할을 합니다. 단순 펼치는게..