[궁금증] 서버를 열 때 사용되는 언어는 JS인데, 왜 Node.js로 서버를 연다고 할까?

차차·2024년 2월 9일

궁금증

목록 보기
1/1

궁금증

이번 주에는 서버를 배우고 있다
게시판 CRUD하는 법을 배우고 있는데,,,
아직 개념 정립이 완전히 되지 않아 문득 든 질문!

🧐 서버를 열 때는 JavaScript 파일을 작성하는데 왜 Node.js로 서버를 연다고 말할까?
각자의 명확한 역할이 무엇이지?

왜일까...?
이것을 알아보려면 먼저 Node.js와 JavaScript가 어떤 관계에 놓여있는지부터 살펴보아야 한다

먼저, Node.js와 JavaScript의 관계

Node.js와 브라우저 안에서 실행되던 언어인 JavaScript를 브라우저 밖에서도 실행하게 도와주는 '런타임 환경'

Node.js란?

Node.js는 V8엔진 + libuv(event loop) +Node.js API으로 구성되어 있다

각 구성요소를 살펴보면

  • V8엔진
    코드를 해석하고 실행하는 것을 담당

  • libuv(event loop)
    싱글스레드로 작동하는 이벤트루프
    C로 작성됨
    동기/비동기 작업에 대한 이벤트가 발생했을 때 해당 이벤트에 할당된 콜백 함수들을 각종 큐에서 정해진 순서에 맞게 꺼내어 엔진에게 전달하는 역할

  • Node.js API: JS/C/C++ 기반의 라이브러리
    Node.js에서 제공하는 독자적인 비동기/동기의 API들
    브라우저가 아닌 일반 환경에서 실행되기 때문에 브라우저의 Web API와는 다른 라이브러리들이 포함되어 있음
    예를 들면 fs, path

-> 이 부분에서 세 번째, Node.js가 제공하는 각종 라이브러리가 서버를 실행할 수 있도록 하는 역할을 담당하는 것!

브라우저는 서버를 실행할 수 없다

Node.js가 서버를 실행할 수 있도록 하는 역할을 한다는 것은 알았다

그러나 여기서 다시 발생한 의문은

브라우저와 Node.js가 둘 다 '실행환경'아닌가..? 브라우저에서는 서버를 열 수 없나?

여기서 브라우저와 Node.js와의 차이가 명확해진다

브라우저는 똑같이 자바스크립트의 실행환경을 제공하지만, 웹 페이지를 표시하고 사용자와 상호작용하는데 '사용'되는 클라이언트 측의 환경인 반면
서버는 데이터를 저장하고 처리하며 클라이언트에게 제공하는 역할
따라서 브라우저는 클라이언트 측, 서버는 백엔드 측이라고 말할 수 있다

서버를 실행할 수 있게 해주는 Node.js의 기능

Node.js는 자바스크립트의 런타임 환경인 동시에 서버를 열 수 있는 여러 가지 모듈을 제공한다

예를 들면,

- HTTP 모듈
Node.js에는 HTTP 모듈이 내장되어 있다
*HTTP 모듈: http 서버와 클라이언트를 생성하는 것과 관련된 모든 기능을 담당하는 Node.js의 가장 기본적인 모듈

- Express.js
Node.js의 웹 애플리케이션을 더욱 쉽게 작성할 수 있도록 만들어주는 웹 프레임워크
*프레임워크: Framework(프레임워크)는 어떤 어플리케이션을 개발하기 위해 필요한 기본적인 클래스와. 라이브러리등이 모두 포함되어있는 환경

- 파일시스템 모듈
파일 시스템에 접근하고 파일을 읽고 쓸 수 있도록 하는 모듈

이 외에도 Node.js에서는 기타 등등의 라이브러리, 모듈을 제공하고, 이것들을 사용해 서버를 열고 관리할 수 있는 것!

+) Node.js와 같은 레벨의 개념. 서버를 열 수 있는 다른 도구들

첫 언어가 JavaScript이고 아직 다른 언어들에 대해 몰라서 조금 더 찾아본 것
Node.js 외에도 서버를 열 수 있는 Java Servlets, Django, Ruby on Rails, Go(Golang) 등의 도구가 있다

결론. 따라서 Node.js로 서버를 연다는 말은

= Node.js를 사용하여 서버를 실행하고, 그 안에서 JavaScript 코드를 실행하여 서버를 구동한다

결국 JavaScript로 작성되는 코드를 실행할 때 Node.js가 그 밑바탕의 결정적인 역할을 한다

자바스크립트만으로는 서버를 열 수 없고 Node.js가 모듈, 기능을 제공하여 서버를 '실행'하는 역할을 하기에 Node.js로 서버를 연다고 말하는 것!


의문점 해결 완료 !!!!

profile
노트북이 좋아

0개의 댓글