Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다.
"자바스크립트를 실행시켜주는 도구"
자바스크립트를 독립적으로 실행시켜줌.
서버의 역할도 수행할 수 있는 자바스크립트 런타임이지만 서버는 아님.
노드로 자바스크립트로 작성된 서버를 실행할 수 있음.
자바스크립트는 컴파일러가 아닌 해석기이다.
논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행됨
일부 코드 : I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등
나머지 코드는 블로킹 방식으로 실행됨
I/O 작업이 많을 때 노드 활용성이 극대화
node webserver.js
서버 실행
싱글 스레드라 주어진 일을 하나밖에 처리하지 못함
블로킹이 발생하는 경우 나머지 작업은 모두 대기해야함 ⇒ 비효율 발생
주방에 비유 (점원: 스레드, 주문:요청, 서빙:응답)
대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능
요청을 먼저 받고, 완료될 때 응답함
I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐
싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춤
프로그래밍 난이도 쉽고, CPU, 메모리 자원 적게 사용
멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복
단, 새로운 스레드 생성이나 놀고 있는 스레드 처리에 비용 발생
프로그래밍 난이도 어려움
스레드 수만큼 자원을 많이 사용함
점원: 스레드 , 주문:요청 , 서빙:응답
자바 스크립트 런타임이기 때문에 용도가 서버에만 한정되지 않음
웹, 모바일, 데스크탑 애플리케이션에도 사용
위 프레임워크가 노드 기반으로 동작함
npm install -g electron
{
"name" : "hello-world",
"version" : "1.0.0",
"main" : "main.js",
"scripts": {
"start" : "electron ."
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello World</title>
<style>
body {
background-image: linear-gradient(45deg, #EAD790 0%, #EF8C53 100%);
text-align: center;
}
button {
background: rgba(0,0,0,0.4);
box-shadow: 0px 0px 4px 0px rgba(0,0,0,0.5);
border-radius: 8px;
color: white;
padding: 1em 2em;
border: none;
font-family: 'Roboto', sans-serif;
font-weight: 300;
font-size: 20pt;
position: relative;
top: 40%;
cursor: pointer;
outline: none;
}
button:hover {
background: rgba(0,0,0,0.3);
}
</style>
<link href="https://fonts.googleapis.com/css?family=Roboto:300" rel="stylesheet" type="text/css"/>
</head>
<body>
<script>
function sayHello() {
alert("Hello World");
}
</script>
<button onclick="sayHello()">Say Hello</button>
</body>
</html>
const {app, BrowserWindow} = require('electron');
function createWindow() {
let win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('./index.html');
}
app.on('ready', createWindow);
npm start
npm install -g expo-cli
expo 어플 설치 후 npm start
명령 후 qr코드로 확인가능
npm init
npm install express