기초: 자바스크립트의 특징
우선 자바스크립트와 다른 프로그래밍 언어의 차이점을 알아야 하기 때문에 설명합니다.
JavaScript 는 Chrome 및 Firefox와 같은 " 브라우저에서 "로 작동하는 프로그래밍 언어입니다.
대조적으로 파이썬 이나 루비 와 같은 일반적인 프로그래밍 언어는 대개 " PC "에서 작동합니다.
이것이 만드는 차이점은 OS의 기능에 액세스할 수 있는지 여부 입니다.
「OS의 기능」이란, 예를 들면 파일의 읽고 쓰기나, 네트워크 통신 등의 기능을 말합니다.
PC에서 실행되는 애플리케이션(Python, Ruby 등 포함)에서는 이러한 기능을 처리할 수 있습니다.
반대로 브라우저에서 실행되는 프로그램 (JavaScript)이 OS의 기능에 액세스 할 수 있다면 사용자에게는 기쁘지 않습니다.
어떤 사이트에 액세스한 것만으로 마음대로 PC 상의 파일을 읽고 쓰거나 PC 상의 파일을 일부 지워지거나 할 가능성이 있기 때문입니다.
따라서 브라우저에서 실행되는 JavaScript는 OS의 기능에 액세스할 수 없게 되었습니다.
하지만 OS의 기능에 전혀 액세스할 수 없는 것은 불편하기 때문에 브라우저가 한정적으로 OS의 기능에 대한 액세스를 중개해 줍니다.
최근에는 카메라나 마이크에의 액세스의 중개도 해 주기 때문에, 브라우저상에서 Web 회의할 수 있거나 하지요.
Node.js는 누구입니까?
그런 브라우저상이라고 하는 제한된 환경에서 밖에 움직일 수 없었던 JavaScript를, Python나 Ruby와 같이 PC상에서 움직일 수 있도록 해 주는 것이 「Node.js」입니다. 오해되는 경우가 많지만 Node.js는 웹 서버도 아니고 Rails 나 Django와 같은 웹 프레임 워크도 아닙니다. JavaScript 실행 환경 입니다.
Windows에 Python을 설치하면 'python.exe'가 가능하도록 Node.js를 설치하면 'node.exe'가 가능합니다.
python.exe가 Python 코드를 실행하는 응용 프로그램처럼 node.exe는 JavaScript 코드를 실행하는 응용 프로그램(즉, JavaScript 실행 환경)입니다.
Node.js를 사용하면 JavaScript에서 OS 기능에 액세스하는 프로그램을 만들 수 있습니다.
즉 브라우저상에서 동작하고 있을 때는 할 수 없었던 자유로운 파일의 읽고 쓰기나 네트워크 통신등의 OS의 기능을 취급할 수 있는 것입니다. 결과적으로 Python, Ruby 등과 마찬가지로 웹 응용 프로그램을 만들 수 있지만 Node.js는 웹 응용 프로그램 전용입니다.
Node.js는 서버 측 JavaScript 실행 환경?
Node.js는 종종 " 서버 측 JavaScript 실행 환경 "으로 소개됩니다.
이것은 Node.js의 탄생에서 유래합니다.
Node.js는 원래 대량의 동시 연결을 감시하는 네트워크 애플리케이션을 구축 하기 위해 설계된 JavaScript 환경입니다.
그 「JavaScript로 Web 어플리케이션(Web 서버)을 만들 수 있다」라고 하는 특징으로부터 「Node.js는 (클라이언트 측이 아니고) 서버 측의 JavaScript 실행 환경이다」라고 하는 소개가 잘 되었습니다.
그런데 현재, Node.js는 「클라이언트 측 JavaScript」의 개발 환경 으로서도 널리 이용되고 있습니다.
자세한 것은 후술합니다만, Babel이나 webpack등을 이용한 「브라우저로 실행하는 JavaScript」를 개발하기 위한 환경에도 Node.js가 사용되고 있습니다.
이것은 Node.js의 「PC(OS)상에서 JavaScript를 실행할 수 있다」라고 하는 특성에 주목한 개발자에 의해, 점점 클라이언트 측 JavaScript의 개발에 편리한 라이브러리가 정비되어 가는 결과… … 라고 생각합니다. (조사가 되지 않았기 때문에 상상입니다)
경위는 어쨌든, 현재는 「Node.js는 서버 측의 JavaScript 실행 환경 이나 클라이언트 측 JavaScript의 개발 환경 으로서 이용된다」라고 하는 것이 오해를 주기 어려운 Node.js의 설명이 될까 생각합니다.
npm은 누구입니까?
조금 이야기는 그것입니다만 일단 npm 일도 해설해 둡니다.
npm은 Node.js의 패키지 관리 도구입니다.
Python의 pip, Ruby의 gem (RubyGems), Debian의 apt, Mac의 Homebrew, Rust의 cargo. 대체로 그런 느낌입니다.
가끔 yarn 이라는 것이 나옵니다만 npm과 같을 수 있는 것이라고 생각해 괜찮습니다.
"패키지"는 라이브러리와 프레임 워크입니다.
즉 Vue나 React, webpack, jQuery등입니다.
Node.js에서 사용하고 싶은 라이브러리가 있다면, js 파일을 다운로드하고 와서 <script src="xxx.js"></script>쓰고 ...... 어쨌든 npm을 사용하여 설치합니다.
Node.js는 왜 모두 사용하고 있습니까?
Node.js에 의해 고개를 끄는 자바스크립트는 여러가지 일을 할 수 있게 되었습니다.
그 용도는 다양합니다만, 현재, Node.js를 사용하고 있는 사람의 목적의 대부분은 이하의 3개로 분류할 수 있습니다. (그리고 필자는 생각합니다)
- 새로운 사양의 JavaScript 또는 TypeScript 로 클라이언트 측 프로그램을 작성하고 싶습니다.
- 웹 응용 프로그램 을 만들고 싶습니다.
- 모바일/데스크톱용 애플리케이션 을 만들고 싶습니다.
목적 1. 새로운 사양의 JavaScript 또는 TypeScript로 클라이언트 측 프로그램을 작성하고 싶습니다.
새로운 사양(ES2015 이후)의 JavaScript의 상세나 경위는 어디서나 해설되고 있으므로 여기에서는 짧게 해설합니다. TypeScript에 대해서는 생략합니다.
JavaScript는 매년 사양이 업데이트되고 점점 새로운 기능이 증가하고 있습니다. 특히 ES2015 라는 버전에서는 지금까지 없었던 편리한 기능이 많이 동참했습니다.
하지만 자바스크립트의 사양을 새롭게 해도 기존의 브라우저가 그 사양을 따라잡아 이것이 없다는 문제가 발생합니다.
이것을 해결하기 위해 등장한 것이 「새로운 사양으로 쓴 JavaScript 파일」을 기계적으로 「구 사양(ES5)의 JavaScript 파일」로 변환 해 버리는 수법입니다.
이 변환을 하는 툴(트랜스 컴파일러)의 현재의 주류가 Babel 이며, 그것을 움직이기 위한 환경 으로서 현재 잘 선택되고 있는 것이 Node.js 입니다.
목적 2. 웹 애플리케이션을 만들고 싶다
Ruby + Rails, Python + Django 등으로 만드는 웹 응용 프로그램 을 Node.js로 만들 수도 있습니다.
이 경우의 대응 항목을 표로 작성하면
실행 환경언어웹 프레임워크
루비 | 루비 | Ruby on Rails 등 |
파이썬 | 파이썬 | 장고 등 |
Node.js | 자바스크립트 | Express 등 |
됩니다.
또 Node.js의 특징으로서 「웹 서버의 역할도 Node.js가 해낸다」라는 점이 있습니다. (라고 하는지 Node.js의 목적을 생각하면 Web 서버로서의 역할이 메인입니다)
원래 Node.js는 대량의 동시 접속을 거부하는 네트워크 어플리케이션 을 구축하는 것을 목적으로 설계되고 있습니다.
따라서 웹 서버로서의 기능으로부터 일관되게 Node.js가 받아들여 효율적으로 처리할 수 있게 되어 있습니다.
요컨대 일반적으로 사용되는 Apache 나 nginx 와 같은 웹 서버 대신 Node.js가 직접 HTTP 요청을 받고 처리합니다.
(실제로는 Node.js만이라면 Web 서버로서는 조금 기능이 부족하기 때문에, 그 전단에 Apache나 nginx를 리버스 프록시로서 두는 구성이 많은 것 같습니다.)
프런트 엔드밖에 한 적이 없는 사람은 JavaScript 밖에 할 수 없기 때문에 Node.js를 선택한다고 말하기도 합니다만, 솔직히 Node.js를 공부하는 노력과 Ruby+Rails나 Python+Django등의 공부를 하는 노력 는 그다지 변하지 않는다고 생각하므로, 언어에 얽매이지 않고 각각의 특징을 잘 조사하고 나서 선택하는 것이 좋을까 생각합니다.
목적 3. 모바일/데스크톱용 애플리케이션을 만들고 싶습니다.
Node.js에서는 모바일 및 데스크톱 애플리케이션 을 개발할 수 있습니다.
프레임워크는 모바일 애플리케이션이라면 React Native 가, 데스크탑 애플리케이션이면 Electron 이 사용되는 경우가 많습니다.
React Native는 사용한 적이 없고 지식도 적기 때문에, 이하 Electron만에 대해 설명합니다. 나쁘지 않아.
Electron 은 JavaScript+HTML+CSS 를 사용하여 데스크톱 애플리케이션을 만드는 프레임워크입니다.
Electron
https://www.electronjs.org/
JavaScript는 원래 웹사이트용 언어이기 때문에 UI의 조작에 사용되는 경우가 많아, UI계의 라이브러리나 프레임워크가 세련되고, 성숙하고 있습니다. 그 재산을 이용하여 웹사이트와 마찬가지로 UI를 구축할 수 있다는 것은 큰 이점이 됩니다.
게다가 OS의 기능을 취급하는 어플리케이션을 작성할 수 있으므로, 브라우저의 JavaScript에 비해 할 수 있는 것의 폭이 넓어집니다.
또한 Electron에서는 같은 코드로 Windows/Mac/Linux의 앱을 작성(크로스 플랫폼 개발)할 수 있는 것도 특징의 하나입니다.
Visual Studio Code, Slack, Discord, Twitch, Skype와 같은 데스크톱 앱은 이 Electron 으로 만들어졌습니다.
목적 4. 기타
그 외에도 웹사이트의 애셋을 번들 (webpack)하기 위해 Node.js를 사용하고, Sass를 CSS로 변환 (node-sass)하기 위해 Node.js를 사용하거나, 테스트 툴 (Jest)이나 코드 검증 도구 (ESLint)를 사용하기 위해 Node.js를 사용하거나 개발을위한 간단한 웹 서버 (webpack-dev-server)를 로컬로 설정하기 위해 Node.js를 사용하거나 정적 사이트 빌드 (Gatsby) 를 위해 Node.js를 사용하거나 Node.js는 다양한 용도로 사용됩니다.
마지막으로
Node.js는 다른 프로그래밍 언어와 비슷한 큰 가능성을 자바 스크립트로 가져 왔습니다. (이야기가 복잡해지므로 본문에서는 언급을 피했지만 V8 JavaScript 엔진 덕분입니다)
덧붙여서 말할 수 있듯이, 확실히 JavaScript는 (그 출자의 탓도 있어) 다른 언어에 비해 설계가 달콤한 부분도 있습니다. 그래서 같은 土俵에 서 있어도… … 라는 의견도 알 수 있습니다.
하지만 이렇게 젊은 층의 사용 인구가 많아, 라이브러리 등도 포함해 엄청난 기세로 진화해 나가고, 트렌드가 주마등처럼 바뀌는 프로그래밍 언어는 그다지 없습니다.
jQuery는 더 이상 역사적 유물처럼 취급되고 있습니다만, 탄생한 것은 Rails나 Django보다 나중이니까요(비교하는 것도 미묘합니다만). 굉장한 속도감입니다.
이 시대에 태어나 이 스릴 넘치는 자바스크립트의 진화의 파도를 타는 것은 두근두근하고 즐거운 일이라고 개인적으로는 생각합니다.
마지막으로, 서두에서도 말했습니다만, 이 기사에서 「Node.js는 Web 서버가 아닌가? .