1.1 핵심 개념 이해하기
Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다.
Node.js는 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적입니다.
Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다.
1.1.1 서버
노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있지만, 노드는 서버 애플리케이션을 실행하는 데 제일 많이 사용됩니다.
그럼 서버란 무엇이며, 어떤 역할을 할까요?
서버는 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램을 말합니다.
클라이언트란 요청을 보내는 주체로, 브라우저일 수도 있고, 데스크톱 프로그램일 수도 있고, 모바일 앱일 수도 있고, 다른 서버에 요청을 보내는 서버일 수도 있습니다.
여러분이 평소에 사용하는 웹 사이트나 앱을 생각해보세요.
웹 사이트의 화면(HTML)은 어디에서 가져올까요?
앱 설치 파일은 어디에서 내려받는 걸까요?
예를 들어 XXX의 웹사이트를 방문한다고 생각해봅시다.
주소창에 XXX의 웹 사이트 주소를 입력(요청)하면 브라우저는 그 주소에 해당하는 XXX의 컴퓨터 위치를 파악합니다.
그리고 그 컴퓨터에서 XXX의 웹 사이트 페이지를 받아와 요청자의 브라우저(클라이언트)에 띄워줍니다.(응답)
이런 일을 하는 컴퓨터가 바로 서버입니다.
모바일 앱을 설치하는 경우를 생각해봅시다.
구글의 플레이 스토어나 애플의 앱스토어에서 원하는 앱을 골라서 설치 버튼을 누르면(요청) 내려받기(응답)가 시작됩니다.
앱 설치 파일은 이미 어딘가에 저장되어 있으므로 여러분이 그곳에서 데이터를 받아와 모바일 기기에 설치할 수 있는 것입니다.
그 어딘가가 구글과 애플의 서버입니다.
플레이 스토어와 앱스토어는 클라이언트 역할을 하는 것이고요.
웹이나 앱을 사용할 때 여러분의 데이터(아이디, 비밀번호, 이메일 등)와 서비스의 데이터가 생성됩니다.
이 데이터를 어딘가에 저장하고, 그 어딘가에서 클라이언트로 데이터를 받아와야 합니다.
이곳이 바로 서버입니다.
서버라고 해서 요청에 대한 응답만 하는 것은 아닙니다.
다른 서버에 요청을 보낼 수도 있습니다.
이때는 요청을 보낸 서버가 클라이언트 역할을 합니다.(상대적인 관점!!)
정리하면 서버는 클라이언트의 요청에 대해 응답을 합니다.
응답으로 항상 YES를 해야 하는 것은 아니고, NO를 할 수도 있습니다.
여러분이 어떤 사이트로부터 차단 당했다면 그 사이트의 서버는 여러분의 요청에 매번 NO를 응답할 것입니다.
노드는 자바스크립트 애플리케이션이 서버로서 기능하기 위한 도구를 제공하므로 서버 역할을 수행할 수 있습니다.
다른 언어를 사용하지 않고 왜 굳이 노드를 사용해 서버를 만드는지 의문이 들 수도 있습니다.
궁금증을 해결하려면 먼저 노드의 특성에 대해 알아야 합니다.
공식 사이트에 게시된 노드 소개글을 바탕으로 노드의 특성에 대해 알아봅시다.