본문 바로가기

Node.js

Node.js - 프로그램, 프로세스, 스레드, 모듈

728x90
반응형

1) Node.js

   1-1) 프로그램, 프로세스

   1-2) Node.js

   1-3) 스레드

   1-4) 모듈

 

 

 

 

 

1) Node.js

1-1) 프로그램, 프로세스

  • 프로그램 : 본인이 어떤 것을 동작시킬 코드
  • 프로세스 : 프로그램을 돌리고 있는 것을 의미하며, 프로세스는 하나의 "PID"가 존재함!

Node.js: Javascript를 실행해주는 프로그램

브라우저도 Javascript를 실행할 수 있지만 아래와 같은 차이로 인해 우리는 Node.js를 사용함!!
(중요) Node.js와 브라우저의 차이 : 브라우저는 내 컴퓨터에 접근할 수 없지만 Node.js는 내 컴퓨터에 대해 컴퓨터 조작이 가능함!!
기본적으로 브라우저는 컴퓨터를 조작할 수 없다!!

따라서 앞으로는 Node.js를 통해 내 컴퓨터를 조작하는 방법을 배울 예정!

Node.js는 브라우저를 컨트롤하는 것이 아니기 때문에 window 객체가 없다!!
즉, Node.js와 브라우저는 내장객체가 다르다!
Node.js의 전역객체는 "global"이다!!

컴퓨터를 조작할 수 있다는 의미는 하드디스크를 조작할 수 있다는 의미이다!!

 

 

 

1-2) Node.js

Node.js(프로그램) 설치

NVM(Node Version Manager)

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash

$ cd ~

$ ls -al
$ vi .zshrc

$ source ~/.zshrc

$ nvm --version => nvm이 정상적으로 설치되었으면 해당 버전이 뜸!
$ nvm install --lts

$ node --version => Node.js가 정상적으로 설치되었으면 해당 버전이 뜸!

 

 

 

 


여기까지 하면 우리는 현재 Node.js 프로그램 설치까지 완료한 것이다!

 


Node.js 특징
- 이벤트 기반
- 논블로킹 I/O

  • 위의 두 개념을 이해하기 위해서는 프로세스와 스레드를 알야함 함!
  • 싱글 스레드


Node.js 실행 방법
(1) repl
- R(Read)
- E(Evaluate)
- P(Print)
- L(Loop)


repl 나가는 방법

$ ctrl + D
$ ctrl + c => "ctrl + c"를 2번 클릭하면 나가짐!

 


(2) Javascript 파일로 실행하기

hello.js 파일 생성

$ vi hello.js


입력모드 진입("i" 클릭)

console.log('hello world!')


명령모드로 전환("esc" 버튼 클릭)

$ :wq!

 

hello.js 파일 node를 통해 실행

$ node ./hello.js



loop.js

setInterval(() => {
	console.log('hello world!');
}, 1000);


새로운 터미널을 연 뒤 위의 loop.js 파일 실행여부 조회 (MacOS or Linux)

$ ps -ef | grep node

 

나가기 => 마치 Windows의 "alt + f4"와 같은 느낌!

$ ctrl + c
or
$ ctrl + d

 


코드를 실행하는 과정은 "프로세스"로 보면 된다!!
프로그램이 계속 실행된다는 것은 콜스택이 계속 쌓인다는 의미이다!!

 


foreground process, background process

  • Foreground Process : 눈에 보이는 것
  • Background Process : 눈에 안보이는 것(ex. 백신 프로그램 등)

 

  $ node ./loop.js & => 이렇게 하면 "background process"로 실행됨!!

 

(중요!!) "background process"는 종료를 하려면 프로세스 아이디를 알아야 함!!

 

$ kill -9 4048(프로세스 아이디)
$ ps -ef | grep node

 

 

 

1-3) 스레드

멀티 스레드 : 하나의 프로세스에 여러 개의 스레드가 있는 것을 뜻함
멀티 프로세스 : 프로세스가 여러 개 있는 것을 뜻함

 

싱글 스레드
하나의 프로그램을 실행시켰을 때 하나의 프로세스가 생성된다!
하나의 프로그램을 실행시킬 때 메모리를 차지하는데 이때 지정된 저장용량 만큼 저장된다!
(중요!!) 하나의 프로세스에는 반드시 최소 하나의 스레드가 들어가야 한다!
즉, 싱글 스레드라 하면 더이상 스레드를 추가할 수 없다는 것(이미 하나의 스레드가 있기 때문)을 의미한다!
Node.js는 싱글 스레드이다!
스레드를 여러 개 돌린다는 의미는 동시 작업을 가능하게 해준다는 의미이다!

(중요!!) 스레드와 프로세스의 차이점

  • 스레드끼리는 데이터 공유가 가능하다!
  • 프로세스 간에는 데이터 공유가 불가능하다!!

서로 다른 프로세스끼리 데이터를 공유하려면 네트워크(통신)를 사용해야 한다!!

싱글 스레드 : 실제로는 스레드가 두 개이지만 이 중 본인이 컨트롤할 수 있는 스레드가 하나이기에 싱글 스레드라 한다!!
동기적 처리 : 하나의 작업이 마무리된 후 다음 작업을 수행하는 방식
싱글 스레드는 동기적 처리 방식으로 동작한다!

Node.js의 장점 : 2개의 스레드를 가지고 마치 멀티 스레드처럼 동작하도록 만든 점이다!!

스레드는 대부분 stack 형태로 코드를 처리한다!

 

 

 

1-4) 모듈

한 파일에 모든 소스 코드를 적으면 불편하다!
이와 더불어 코드 오류 추적도 힘들고 협업도 힘들다!

따라서 파일을 규칙에 맞게 쪼개는 것이 좋다!
"모듈"이라는 것은 우리가 구현하려는 프로그램에 있어서 작은 단위라고 보면 된다!!
ex) 게시판 - write, list, update, delete

list.js

const list = [
	{
		index: 0,
		subject: "avante",
		date: "22-12-05",
		hit: 0,
	},
];

module.exports = list;


view.js

const data = require('./list.js');
console.log(data);

 

$ node view


view.js 파일을 실행하면 => 프로세스
list.js 파일도 실행해야 함. => 프로세스

view.js 파일을 실행시키면
list.js 파일을 실행시키기

require() => node.js 내장객체
require(경로 입력)