node.js

Command ‘node’ not found

C

분명히 공식사이트에서 노드를 잘 설치했는데, 막상 terminal에서 node -v를 치니 그런 프로그램 없다고 나온다. 반면, node프로그램을 직접 실행해서 console.log("Hello") 라고 하면 또 작동은 잘 된다.

뭐가 문제일까?

환경변수

검색창에 sysdm.cpl ,3를 입력하면 아래와 같이 환경변수를 설정하는 창이 뜬다.

여기서 환경변수를 누르면 아래와 같이 나온다.

이제 환경변수 Path에다가 node.exe파일의 경로를 입력해 주면 된다.

이렇게 하면 된다. 이렇게 해도 안될 경우에는 Visual Studio Code를 껐다가 다시 켜보거나 컴퓨터를 재부팅하면 된다.

Booting시에 Node서버가 자동으로 실행되도록 하기

B

pm2설치 node서버를 관리해주는 pm2라는 노드 모듈을 설치해준다. sudo npm install -g pm2 이제 내 index.js를 pm2로 돌린다. pm2 start index.js 잘 돌아가고 있는지 보려면 pm2 ls라고 치면 된다. 그리고, 이 상태(?)를 저장한다. pm2 save 그리고 pm2 startup 이라고 치면 아래와 같이 나온다. [PM2] Init System found: systemd [PM2] To setup the Startup Script, copy/paste the following command: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u rpf5573 --hp...

Node.js + 라즈베리파이로 원격 모터 제어하기

N

구글링해보면 라즈베리파이로 모터제어하는 글보다 아두이노로 하는게 많고, 라즈베리파이로 한다치다손 파이썬을 쓰는 경우가 많다. 하지만 나는 Node.js + Ra-Pi가 좋아서 이 조합으로 모터제어를 하였다. 목차 준비물Node.js 설치ngrokL298n 분석배선모터 제어원격 제어 준비물 라즈베리파이3 B+ (너무 옛날것만 아니면 다른 모델도 가능할것 같다)DC모터모터 드라이버 - L298n건전지 홀더 - AA건전지 4구AA건전지 4개안경 드라이버(꼭필요!) Node.js 설치 nodesource 사이트에 가보면, installation instructions 부분이 있다. 자신이 원하는 Node.js 버전과 라즈베리파이에 설치된 운영체제를 바탕으로 코드를 가져다 쓰면된다. 참고로 나는 아래와 같이...

static folder 설정과 router 순서

s

const app = express(); // static file request folder app.use(express.static('public')); app.get('/admin', (req, res) => { console.log( 'called' ); }); 이렇게 코드를 작성하면 브라우저에서 localhost:8080/admin이라고 했을때 저 app.get('/admin') router는 작동하지 않고, 서버의 public/admin/index.html파일만 보내질 뿐이다. 반대로, app.use(express.static('public'))를 뒤에 쓰면 router가 잘 동작한다. 먼저 써주는게 우선순위를 갖는다. 조심해야겠다. 참고 : node.js app.get not...

Terminal에서 node index.js를 치면 무슨일이 일어날까?

T

index.js 파일안에 내가 쓴 javascript코드는 잘 실행되는데, 조금 더 큰 그림을 보고 싶었다. 그래서 nodejs 소스코드를 다운받아서 중요한것 같은 부분만 읽보고 실행 순서를 추측해 보았다. 심플하게 정리 node index.js → main()함수 실행Global Module( console.log , timer 등등의 기본 모듈) 로드내 index.js 로드 및 실행event-loop 실행 실제 코드 아래는 꼬리에 꼬리를 물듯이 node.js 안에서의 함수 호출과 정의를 따라 가본 과정이다. 언어는 C++과 Javascript이다. 함수의 내용물중 내가 잘 모르거나, 필요없어보이는 것들은 삭제하였다. // 시작은 main 함수! // src/node_main.cc :...

Blocking vs Non-Blocking

B

사전지식 I/O관련 작업은 OS와 I/O Device가 알아서 처리를 해주기 때문에, CPU가 할일이 별로 없다 Blocking Javascript코드를 한줄 한줄 실행하다가, I/O관련 작업이나 네트워크 통신을 하는 코드를 CPU(NodeJS의 single-thread에 할당된 CPU자원)가 만났을때, OS에게 그 일을 맡긴다. 그리고 CPU는 잠시 일을 쉬면서 결과를 기다린다. 그러다가 OS로 부터 일이 끝났다는 신호를 받으면, 바로 다음 Javascript코드를 한줄씩 읽기 시작한다. 이때 CPU가 잠깐 쉬면서 신호를 기다리는상태를 Blocking이라고 한다. from :  예를들어 console.log('start'); const fs = require('fs'); const data = fs...

Node.js는 single-thread가 아니다

N

결론 기본적으로 NodeJS는 event loop를 돌리는데 하나의 thread를 사용한다. 여기서 내 js code(callback function)가 실행된다. 그러나, CPU를 많이 사용해야 하는 일들을 이 main thread에서 처리할 수 는 없다. 그렇게 하면 다른 일을 못하고 서버가 엄청 느려질것이기 때문이다. 그래서 nodejs는 기본적으로 CPU Intensive한 작업들은 다른 thread에서 처리한다. 설명 crypto는 다른 thread에서 실행된다 nodejs module중에 암호생성과 관련된 crypto라는 모듈이 있다. 이 모듈의 pbkdf2()라는 함수를 사용하면 암호를 생성할 수 있다. 이 작업이 CPU Intensive하기 때문에, event loop가 돌아가는...

Event-Loop Part 2 : setTimeout() vs setImmediate() vs process.nextTick()

E

들어가기에 앞서 이전글 : Event-Loop Part 1 : Big Picture이 글은 setTimeout(), setImmediate(), process.nextTick() 으로 설정한 callback function이 어떤 순서로 실행되는지에 대한 설명입니다.추가적인 그림 이전에 위와 같은 그림을 그렸었는데, 이전글과 이번글을 쓰는데 상당히 많이 참조한 이 글에 나오는 아래 그림을 바탕으로 설명하겠습니다(소스코드도 많이 가져다 썼습니다). 4. 이 글에서 setTimeout()는 setTimeout 함수 자체를 의미하고, setTimeout(cb)는 setTimeout()에서 설정한 callback function을 의미합니다. 심플한 결론...

Event-Loop Part 1 : Big Picture

E

사전지식 Process & Thread process와 thread에 대한 정리Process Management (Processes and Threads) I/O Device Basics of OS (I/O Structure)I/O Systems in Operating Systems | Device Drivers | interrupt Polling 심플한 결론 내 index.js를 읽고 실행한다내 코드를 읽으면서 파일 읽기/쓰기 네트워크 통신 관련 작업은 OS나 libuv에게 맡긴다(일이 끝나면, 내가 설정해 놓은 callback function이 실행되거나 event-queue에 넣어진다)이벤트 루프를 돌리면서, event-queue에 있는 callback function을...