반응형

NodeJS 6

AsyncHooks로 context에 DB connection 저장하기

서론 Node 13.X 버전부터 AsyncHooks라는 것이 도입되었다. AsyncHook이란, 쉽게 설명하자면, 실행 context마다 고유한 id를 줘서 callback후에도 callback 전의 context를 알 수 있게 해주는 것이다. 더 자세한 내용은 공식 문서(https://nodejs.org/api/async_hooks.html)에 설명이 잘 되어 있는 편이니 참고하기 바란다. 현재 14.X 버전에서도 experimental이지만, stable이 된다면 production에서도 context 당 db connection을 저장할 때 사용하면 될 것 같다. 아래 설명은 node 14.x 버전에서 진행한 것이다. 설명에 대한 소스코드를 참고하려면 여기를 보면 된다. https://github...

NodeJS 2020.06.14

Dockerized Node.js for development

도커라이징(dockerize)의 장점 중 하나는 개발/배포시 환경에 신경을 덜 쓰면서 앱 개발에만 신경쓸 수 있다는 점이라고 생각한다. 윈도우 랩톱에서 개발된 웹 어플리케이션이 리눅스 서버에서 정상적으로 동작한다는 것을 장담하기가 매우 어렵다. 물론 docker가 윈도우나 Mac 상에서 리눅스 가상머신을 사용하기 때문에 리눅스와 100% 동일한 환경에서 동작할 것이라고 장담하기는 어렵지만, 그래도 전자의 경우보다는 정상적으로 동작활 확률이 더 높다고 본다. Node.js 앱을 개발할 때도 배포환경과 유사하게 도커라이징하면, 개발/배포 환경 간의 간극을 줄일 수 있지 않을까 고민이 들어서 오늘은 개발 환경을 위한 Node.js 도커라이징 방법을 소개한다. Node.js 앱 프로젝트 디렉토리를 적당히 하나 ..

NodeJS 2019.12.29

setImmediate(), setTimeout() 그리고 process.nextTick()

이벤트 루프(Event Loop)에서 많이 나왔던 함수인 setImmediate( )와 setTimeout( ) 그리고 process.nextTick( )에 대해 더 알아보고자 한다. setImmediate( )와 setTimeout( ) setImmediate( )와 setTimeout( )은 비슷하지만, 언제 호출되느냐에 따라 다르게 행동한다. setImmediate( )는 현재 poll phase가 끝났을 때 실행된다. setTimeout( )은 최소 임계점이 지난 후 스크립트가 실행되도록 스케줄한다. 타이머가 실행되는 순서는 호출되는 콘텍스트 시점에 따라 다르다. 만약 둘 다 메인 모듈에서 호출되면, 프로세스의 성능에 따라 호출되는 시점이 다르다. (이것은 머신의 다른 애플리케이션에 의해 영향을 ..

NodeJS 2019.02.08

이벤트 루프(Event Loop)란?

이번에는 이벤트 루프란 무엇이고 어떻게 동작 하는지를 다뤄보고자 한다. 내용이 조금 어렵다면 이벤트 루프가 무엇인지만 알고 넘어가도 될 것 처럼 보인다. 이벤트 루프란 무엇인가? Node.js가 단일 쓰레드(sigle thread)로 구성된다고 흔히 들어본 적이 있을 것이지만 이것은 착각이다. 정확히는 메인 쓰레드(main thread), 워커 쓰레드(worker threads) 이렇게 두 가지의 쓰레드(thread) 종류로 구성된다. 메인 쓰레드는 단일 쓰레드로 구성되지만 워커 쓰레드는 여러 쓰레드로 구성된 쓰레드 풀(thread pool)이다. 이번에 게재할 주제인 이벤트 루프는 단지 메인 쓰레드의 별명일 뿐이다. 이벤트 루프는 싱글 스레드로 구성되어 있지만, 블로킹(blocking) 될 만한 작업들..

NodeJS 2019.01.27

NodeJS, 블로킹(Blocking)과 넌블로킹(Non-Blocking)

NodeJS에서 블로킹(Blocking)과 넌블로킹(Non-Blocking) 호출(call)을 할 때 차이점을 살펴보자. 블로킹(Blocking)과 넌블로킹(Non-Blocking) 어떤 task가 블로킹, 넌블로킹인지를 따지는 것은 쉽지 않은 주제라고 생각한다. 관점에 따라 다를 수 있기 때문이다. 나는 블로킹(Blocking)이란, 현재 컨텍스트에서 다음의 Javascript 코드가 수행되기 위해 현재의 Javascript 연산, 혹은 non-Javascript 연산이 끝날 때 까지 기다려야 하는 상황이라고 생각한다. 다시 말해, 블로킹은 이벤트 루프(event loop)가 계속해서 다음의 Javascript 코드를 수행할 수 없게 되는 현상이라고 본다. 반면, 넌블로킹은 다음의 Javascipt 코..

NodeJS 2019.01.20

NodeJS, NodeJS란 무엇일까?

들어가며 NodeJS의 장점은 러닝 커브가 낮아 애플리케이션을 구현하기 쉽고 사용되는 자원대비 비교적 좋은 성능을 내는 점이라고 생각한다. 정말 NodeJS는 방금 말했던 장점을 가졌을까? 그리고 실제 프로젝트에 사용해도 안전할까? 어떤 프로젝트에 적용하면 좋을까? 나는 NodeJS를 얼마나 알고 있을까? 부끄럽게도 나는 NodeJS를 거의 모르는 것 같다. 사실 Java기반의 프레임워크인 스프링부트도 러닝 커브가 낮아 사용하기 쉽다고 생각한다. NodeJS가 어떻게 구동되는지 깊게 고민한 적이 없으므로 다른 언어에 비해 왜 그리고 어떤점이 좋은지 당장 설명할 수가 없다. 이러한 내가 어떻게 NodeJS가 좋은 언어라고 다른 사람들에게 말할 수 있을까? NodeJS 공식 사이트에 들어가면 NodeJS를 ..

NodeJS 2019.01.19
반응형