[Node] Node.js란 무엇인가?

흩날리는추억·2024년 6월 28일

❓ Node.js란?

Node.js®는 개발자가 서버, 웹 앱, 명령줄 도구 및 스크립트를 만들 수 있는 무료 오픈 소스 크로스 플랫폼 JavaScript 런타임 환경입니다. - 노드 공식 사이트

JavaScript는 본래 브라우저 환경에서만 작동하는 언어입니다. 브라우저에는 JavaScript 런타임을 이미 갖추고 있기 때문에 온전히 실행할 수 있었습니다. 그런 상황에 구글의 Chrome V8 Javascript이 세상에 나오게 되었고, Node.js는 Chrome V8 Javascript을 통해 JavaScript를 실행할 수 있게 되었습니다.

🧨 이벤트 기반(event-driven)

특정 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미합니다. 이를 이벤트 리스너(event listener)에 콜백 함수를 등록한다고 표현합니다.

이벤트 기반 모델에서는 이벤트 루프(event loop)라는 개념이 등장합니다. 여러 이벤트가 동시에 발생했을 때 처리할 순서를 판단합니다. 처리 내용을 쉽게 설명하자면 함수가 호출되면 호출 스택(call stack)이라는 곳에 하나씩 쌓이게 됩니다. 그리고서 늦게 쌓여진 함수부터 하나씩 처리하게 됩니다.

이 내용에 대해 조금 더 자세한 내용은 여기이곳에 정리해두었습니다.

🥅 논블로킹(non-blocking) I/O

I/O는 입력(Input)과 출력(Output)을 말합니다. 논블로킹이란 이전의 작업이 완료될 때 까지 대기하지 않고 다음 작업을 수행하는 것을 말합니다. 이를 통해 Node는 I/O 작업을 백그라운로 넘겨 동시에 처리하여 시간을 절약합니다.

👀 싱글 스레드

Node.js는 싱글 스레드 모델을 사용합니다. 하지만, 이벤트 루프와 비동기 호출을 통해 멀티 스레드 환경에서도 고성능을 유지할 수 있습니다. 이는 개발이 비교적 간단하면서도 높은 성능을 유지할 수 있게 해줍니다.

🛠️ NPM(Node Package Manager)

Node.js는 NPM을 통해 수많은 오픈 소스 패키지를 쉽게 사용할 수 있습니다. 이는 개발자들이 기존의 모듈을 재사용하고 빠르게 애플리케이션을 개발할 수 있게 합니다.

⚙️ 서버에 주로 사용

Node.js는 논블로킹 I/O와 이벤트 기반 아키텍처를 사용합니다. 이는 서버가 한 요청을 처리하는 동안 다른 요청을 대기하지 않고 처리할 수 있게 합니다. 이러한 비동기 특성 덕분에 Node.js는 높은 동시성을 제공하여 많은 클라이언트 요청을 효율적으로 처리할 수 있습니다.

또한 Node.js를 사용하면 서버와 클라이언트 모두 JavaScript로 개발할 수 있습니다. 이는 풀스택 개발에서 큰 이점을 제공합니다. 개발자가 동일한 언어를 사용하여 프론트엔드와 백엔드 코드를 작성할 수 있기 때문에 개발 효율성이 높아지고 유지 보수가 용이해집니다.

마지막으로 Node.js는 실시간 애플리케이션 개발에 적합합니다. 이는 웹소켓과 같은 프로토콜을 쉽게 다룰 수 있는 기능을 제공하기 때문입니다.

✏️ 마무리

프로젝트 개발을 하면서 완전하지 못한 것을 보며 매우 아쉬웠습니다. 프론트엔드 개발에 중점을 두어 개발해서 그런지 여러 제약이 있었습니다. 이번 기회에 백엔드 관련한 내용을 공부하여 로그인 구현 및 DB를 공부하고 API를 직접 만들어서 사용하는 등 스스로 성장할 방향성을 늘리기로 했습니다.

🙏 글 작성에 도움받은 목록

노드 공식 사이트
hompion님의 글
Node.js 교과서 개정 3판 1장

profile
걱정보다 생각을 하고 싶은 사람

0개의 댓글