🏃🏻♀️런타임(runtime)이란
프로그램이 구동되는 환경, 즉 어떤 코드가 동작할 때, 이 코드를 실행시켜주는 수단(도구,프로그램)을 런타임이라고 한다.
💡Node.js = Chrome V8 JavaScript 엔진으로 빌드 된 JavaScript 런타임
node.js는 자바스크립트 프로그래밍 언어로 작성된 코드를 컴퓨터에서 구동시켜주는 프로그램이다. 다시 말해, node.js는 자바스크립트 코드를 읽고 실행시켜주는 "런타임"인 것이다.
💻브라우저 안에도 JavaScript 런타임이 내장되어 있다.
이렇게 자바스크립트를 실행시켜주는 런타임이 Node.js만 있는 것은 아니다.
우리가 자바스크립트로 작성된 코드를 크롬이나 사파리 등의 브라우저 개발자 창에서 테스트할 수 있는것은, 브라우저 안에 자바스크립트 런타임이 들어가 있기 때문이다. (그래서 코드스테이츠 문제 지문에선 "브라우저 = 자바스크립트 런타임" 으로 보기도 했다.)때문에 우리가 자바스크립트로 작성한 코드가 웹브라우저에서 정상적으로 시행이 되면서 각종 웹페이지들을 정상적으로 가동시키는 것이다.
🔌브라우저를 안쓰고 자바스크립트 코드를 실행하려면 Node.js
이렇게 브라우저를 쓰지 않고 자바스크립트를 쓰기 위해선 Node.js를 사용하면 된다. 크롬 브라우저를 설치하면 바탕화면에 아이콘이 생기고 그 아이콘을 눌러 브라우저를 활성화시켜 자바스크립트로 코드 실행이 되는 장면을 볼 수 있지만, Node.js도 개념은 비슷하다.다만, Node.js는 그렇게 친절하게 아이콘이 생기지 않을 뿐! Node.js는 설치 후 터미널 창을 이용해서 사용한다.
🙀도대체 브라우저 없이 자바스크립트를 실행시킨다는게 뭐야?
기본개념이 텅~빈 나는 개인적으로 이부분에서 막연하게 모호한 지점이 있었는데, 왜 자바스크립트를 브라우저 없이 실행시켜서 사용하려고 하는지, 왜 때문에 배우는 건지.. 알 수가 없었는데, 이에 대해서 '개발자의 품격'이라는 고마운 유튜브 채널의 영상을 보고 실험해보면서 알게 되었다.
설명의 편의를 위해 각각의 경우로 자바스크립트를 실행했을 경우를 변수(?!ㅋㅋ)로 지정하겠다.
a방법 = 크롬 개발자도구
b방법 = node.js 커맨드창
먼저 아래의 자바스크립트 코드를 a와 b방법으로 실행한다고 가정하자.
console.log('노드js가 뭔데?!!!')
이렇게 친다고 하면 a와 b 방법 모두 실행해서 동일한 결과를 얻어낼 수 있다.
하지만! 아래의 코드를 실행한다고 쳐보자
window.addEventListener('load',e=>{
document.body.style.background='blue'
})
그럼 a의 방법으론 변화를 확인 가능하지만, b방법으론 에러 메세지만 쓸쓸하게 뜨는 것을 확인할 수 있다.
이는 웹브라우저 환경해서는 window라는 것이 존재를 하지만,
nodejs 환경에서는 window라는 변수가 정의되어 있지 않기 때문이다!
이렇게 브라우저 상에서 가동될 웹 페이지나 프로그램을 개발할때는 브라우저 상에서 자바스크립트를 체크해야만 한다.
그럼 커맨드 창에서 자바스크립트 코드를 체크해야 하는 경우는 어떤 경우 일까?
바로! 내 컴퓨터 자체에 폴더나 파일을 만들고 기록하는 등의 로컬에서 어떤 행위를 하도록 할 때이다.
예를 들면 아래의 코드를 담은 code.js를 만들고
//code.js
const fs = require('fs');
fs.writeFileSync('test.txt','abc');
그 후 커맨드 창에서 node.js명령어로 code.js를 실행시켜보면
node code.js
'abc'라는 텍스트를 담고 있는 test.txt가 생긴다.
하지만 동일한 코드를 브라우저 환경에서 구동시키면 require라는 변수가 존재하지 않는다고 에러가 뜬다!
이렇듯 각각이 구동되는 환경에 따라 되는게 있고 안되는게 있기때문에
자바스크립트는 브라우저에서 구동시키기도 하고, Node.js를 사용해서 커맨드창에서 구동시키기도 하는 것이다.
Node.js로만 할 수 있는 자바스크립트 코드의 예시들
- 내 pc에 저장되어있는 사진 파일을 모아서 날짜별,혹은 gps별로 폴더 만들어 넣는다.
- 내 pc에 동일한 파일이 중복되면 삭제한다.
- 컴퓨터 통신기능으로 인터넷 공간 링크를 따라다니면서 자료수집을 하는 bot을 만든다
- 서버를 만들 수 있다. (node.js의 express를 사용하면 브라우저 상에서 작동도 만들어내고 서버상의 작동도 만들어 낼 수 있다!)
💖node.js가 그저 빛인 이유
어플리케이션을 개발할때, 클라이언트 프로그램과 서버 프로그램을 모두 개발해야 완성이 된다. 그러니까, 서버상에서 제어해야하는 부분들과 클라이언트를 제어하는 부분이 각각 다른 언어로 쓰여져 있고, 이 다른 언어를 사용해서 각각의 클라이언트와 서버 프로그램을 완성해야 짜잔!! 하고 서버에서 클라이언트에게, 클라이언트에서 서버에게 원활하게 정보가 오고가는 어플리케이션이 나오는 것이다.
자바스크립트는 클라이언트 프로그래밍 언어인데, node.js는 이 클라이언트 언어인 자바스크립트로 서버 프로그래밍까지 가능하게 해준다. 자바스크립트 하나만 잘 다뤄도 클라이언트와 서버 둘 다를 컨트롤할 수 있다는 것이다.대박적인 것!!
node.js의 이 엄청난 강점은 많은 사람들을 node.js의 세계로 이끌었고, 그 덕분에 갈수록 오픈소스 생태계도 강력해져서! 필요한 node.js모듈만 잘 찾아도 금방 어플리케이션을 만들 수 있다는 점이 엄청난 매력으로 작용하고 있다.
'개념 > Node.js' 카테고리의 다른 글
[Node.js] Express 시작하기, 미들웨어와 라우터 사용법 (0) | 2022.08.16 |
---|---|
[Node.js] 서버 개발 필수 모듈 Nodemon (0) | 2022.08.11 |
[Node.js] Node.js http모듈 사용해서 미니 서버 만드는 방법 (1) | 2022.08.11 |
[Node.js] Node.js와 npm, package.json뜯어보기 (0) | 2022.07.10 |
[Node.js] NVM: 미즈마블 말고, 미즈노드! Node.js 버전 여행 (0) | 2022.07.10 |