프로그래밍(Basic)/Javascript(TS,Node)

    [바미] Node - GC

    GC? 가비지 컬렉션은 프로그램이 동적으로 할당한 메모리 중에서 더 이상 사용되지 않는 부분을 자동으로 찾아서 해제하는 프로세스입니다. 이는 메모리 누수를 방지하고, 사용 가능한 메모리 공간을 최대화하여 프로그램의 안정성과 성능을 향상시키는 데 필요합니다. Node.js에서는 프로세스 메모리 관리를 개발자가 직접하지 않고 자동으로 수행합니다. 그렇기 때문에 가비지 컬렉션(GC)은 Node.js의 메모리 관리의 핵심이며 성능에 많은 영향을 끼치죠 오늘은 Node.js의 V8 engine이 어떻게 가비지 컬렉션을 수행하는지 알아보겠습니다. 프로세스 메모리 관리 - C와 Node.js 비교 메모리 관리란? 프로그래머가 요청할 때 동적으로 Heap 영역에 메모리 청크를 할당해주고, 더 이상 필요하지 않을 때 메..

    Node.js 동작 원리

    Node.JS? JavaScript를 브라우저 외부에서 실행하는 런타임입니다. Node.js는 싱글 스레드, 논블로킹 모델을 사용합니다. 이 모델은 비동기 I/O 작업을 통해 여러 요청을 동시에 처리하며, 클러스터링을 통해 확장성을 갖추고 있죠. 싱글스레드? 프로세스 내에서 하나의 스레드가 하나의 요청만을 수행합니다. 한 번에 여러 요청을 수행할 수 없는 것이죠 그래서 싱글 스레드는 블로킹 모델이라고 합니다. 반면 멀티스레드는 스레드 풀에서 실행의 요청만큼 스레드를 매칭 하여 작업을 수행합니다. NodeJS 는 완전한 싱글 스레드인가? NodeJS는 싱글 스레드이지만 완전한 싱글 스레드를 기반으로 동작하지는 않습니다. 무슨 말일까요? 일부 블로킹 작업들은 libuv의 스레드 풀에서 수행되기 때문이죠. 이..

    [바미] Javascript에서 전역객체와 활성객체에 대하여..

    안녕하세요. 오늘은 Javascript에서 전역 객체와 활성 객체에 대해 알아보려 합니다. Javascript의 전역 객체와 활성 객체는 매우 중요한 개념입니다. 전역객체? 전역 객체(Global Object)는 Javascript 프로그램이 실행되는 동안 프로그램 전체에서 접근 가능한 객체입니다. 전역 객체는 페이지(웹 페이지에서)에서의 전역 객체인 window와 노드(Node.js)에서의 전역 객체인 global입니다. 전역 객체의 속성과 메서드는 프로그램이 실행되는 동안 어디에서든 접근할 수 있습니다. 예제 코드 다음 코드는 전역 변수 greeting을 정의하고, window.greeting을 통해 접근할 수 있는 것을 보여줍니다 let greeting = "Hello, World!"; consol..

    [바미] Node 그리고 장, 단점.

    Node.js 란? Node.js는 위키백과에 아래와 같이 정의되어 있습니다. Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다. 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다. Node.js와 관련된 핵심키워드는 아래와 같습니다. 구글 V8 자바스크립트 엔진 고성능 네트워크 서버 단일 쓰레드(Single Thread) 이벤트 루프(Event Loop) 기반 비동기 I/O 처리(Non-..

    [바미] Promise와 async/await

    안녕하세요. 회사에서 저에게 자바스크립트에서 async, await사용시 블락되는 구간에 대해 질문을 받게 되었습니다. 먼저 제 블로그에 그러한 글이 있는지 찾아보았지만 Promise와 async에 관련된 글이 포스팅 된 줄 알았으나 단 한 개도 없더라구요. 그래서 겸사겸사 Javascript에서 비동기 처리에 빠질 수 없는 Promise와 async/await에 대한 내용과 저에게 질문 받은 내용을 포스팅하게 되었습니다. 만으로 2년간 Node.js를 사용하고 있었지만 아직까지 모르는 게 많다는 걸 알게 되네요. 해당 글의 내용이 정확하지 않을 수 있기 때문에 혹시나 틀린 부분이 있으시다면 언제든 지적 부탁드립니다! 물론 Javascript에서 비동기 처리를 다룰 수 있는 방법에는 여러가지가 있지만 많..

    [바미] Factory 패턴

    Factory 패턴 객체를 생성하는 팩토리 함수를 사용한다. 📜 원문: patterns.dev - factory pattern 📜 번역: https://patterns-dev-kr.github.io/design-patterns/factory-pattern/ 팩토리 패턴을 사용하면 함수를 호출하는 것으로 객체를 만들어낼 수 있습니다. new 키워드를 사용하는 대신 함수 호출의 결과로 객체를 만들 수 있는 것이죠. 앱에 다수의 사용자를 추가해야 한다고 가정해 보겠습니다. 사용자는 firstName, lastName, email 속성을 갖게 됩니다. 이 때 팩토리 함수를 사용해 fullName 메서드를 가진 객체를 만들어 반환합니다. const createUser = ({ firstName, lastName,..

    [바미] Flyweight 패턴

    Flyweight 패턴 동일한 객체를 다룰 때 이미 존재하는 인스턴스를 재사용한다 📜 원문: patterns.dev - flyweight pattern 📜 번역: https://patterns-dev-kr.github.io/design-patterns/flyweight-pattern/ 플라이웨잇 패턴은 비슷한 객체를 대량으로 만들어야 할 때 메모리를 절약할 수 있게 해 주는 유용한 패턴입니다. 책을 추가할 수 있는 앱이 있다고 가정해 보겠습니다. 모든 책은 title, author, isbn속성을 가지고 있습니다. 그런데 도서관에는 보통 책을 한 권만 가지고 있지 않고 같은 책을 여러권 가지고 있죠? 동일한 책에 대해 새로운 클래스를 매번 생성하는것은 그다지 도움이 되지 않습니다. 그 대신 하나의 책을 ..

    [바미] Javascript Micro task queue.

    지난 시간엔 콜 스택, 태스크 큐, 이벤트 루프에 대해 알아보며 호출스택과 테스크큐의 관계에 대해 알아보았는데요. [바미] 콜 스택, 태스크 큐, 이벤트 루프 안녕하세요. 오늘은 자바스크립트의 콜스택, 태스크 큐, 이벤트 루프가 무엇인지에 대해 알아보도록 하겠습니다. 먼저 자바스크립트는 단일 스레드입니다. 이 말의 뜻은 한 번에 1개의 작업만 codesk.tistory.com 오늘은 Micro task queue에 대해 알아보며 지난번에 했던 태스크 큐와 어떤 차이가 있는지 알아보도록 하겠습니다. 태스크 큐와 마이크로 태스크 큐 먼저 마이크로 태스크 큐는 일반 태스크 보다 좀 더 우선순위를 갖는 태스크 큐라고 보면 됩니다. 2개의 큐 모두 콜백함수가 들어간다는 점에서 동일하지만 어떤 함수를 실행하느냐에 ..

    [바미] 콜 스택, 태스크 큐, 이벤트 루프

    안녕하세요. 오늘은 자바스크립트의 콜스택, 태스크 큐, 이벤트 루프가 무엇인지에 대해 알아보도록 하겠습니다. 먼저 자바스크립트는 단일 스레드입니다. 이 말의 뜻은 한 번에 1개의 작업만 할 수 있다는 뜻인데요. 메모리 힙(Memory Heap)이라는 정보를 저장하는 공간이있고, 콜스택(Call Stack)이라는 실행 중인 코드를 추적하는 공간이 있습니다. 자바스크립트는 Heap, Queue와 함께 구성하는 단일 콜스택을 갖게 되는데 메모리 힙은 자바스크립트 엔진이 구동되면서 변수, 함수 저장, 호출 등의 작업이 발생하는 공간을 말합니다. 콜스택은 코드를 읽어내려가며 수행 할 작업들을 밑에서 부터 하나씩 쌓고, 메모리 힙에서 필요한 것들을 찾아서 작업을 수행하는 공간인데요. 이름에서 알 수 있듯이 스택(S..