Node/수업내용

Node 수업내용 21.06.01 Node.js - 기본문법

HappyFrog 2021. 6. 1. 11:35

CRUD

* Create(Post)

* Read(Get)

* Update(Put)

* Delete(Delete)

 

 

자바스크립트는 컴파일언어가 아닌 인터프리터 언어이다. -> 맨 위부터 한줄씩 실행

Node - 자바스크립트 런타임(자바스크립트가 활동할 수 있는 환경)

 

Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다.

Node.js는 이벤트 기반, 논블로킹 I/O모델을 사용한다.

Node.js의 패키지 생태계인 npm은 세계에서가장 큰 오픈소스 라이브러리 생태계이다.

 

서버는 네트워크를 통해 클라이언트에 정보다 서비스를 제공하는 컴퓨터 또는 프로그램

클라이언트는 요청을 보내는 주체

 

이벤트기반이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다.

이벤트기반 모델에서는 루프라는 개념이 등장합니다. 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백함수를 호출할지를 이벤트 루프가 판단한다.

 

노드는 자바스크립트 코드에서 맨 위부터 한 줄씩 실행한다. 함수를 발견했다면 호출한 함수를 스택에 넣는다.

 

엔터를 누르니 출력결과가 바로 나온다

자바스크립트같은 경우는 ;(세미콜론)이 없어도 실행이 되지만 그래도 달아주는 것이 바람직하다.

자바스크립트의 메서드는

 

function 메서드이름() {내용}식으로 작성한다 function sayHello(){} = void sayHello(){}이다.

자바스크립트는 메서드의 첫 글자는 소문자로 작성한다.

 

노드js를 잘 이해하기 위해서는 이벤트 루프, 태스크 큐, 백그라운드를 잘 알아야한다.

이벤트 루프는 실행순서를 결정한다.

태스크 큐는 이벤트 발생후에 호출되어야 할 콜백함수들을 기다리는 공간이다. 큐의 역할을 한다.

백그라운드 타이머나 I/O 작업콜백 또는 이벤트 리스너들이 대기하는 곳이다. (I/O는 Input/Output = 입/출력)

 

만약 호출스택에 함수들이 너무 많이 차 있으면 원하는 때에 메서드가 실행되지 않을 수 있다.

 

싱글스레드

스레드를 알기 위해선 프로세스도 알아야한다.

 

노드는 싱글스레드 이므로 작업을 혼자서 처리해야하며 논블로킹이 중요한 이유는 싱글스레드이기 때문이다.

 

Node.js의 장점 - 싱글스레드이기때문에 멀티스레드보다 쉽다.

 

개수는 많지만 크기는 작은 데이터를 실시간을 주고 받는데 적합합니다.

Json데이터를 제공하는 API서버가 노드를 많이 사용한다.

 

이미지나 비디오처리, 대규모 데이터처리같이 CPU를 많이 사용하는 작업을 위한 서버로는 권장하지 않음

 

안정성과 보안성 측면의 문제도 이미 검증이 되었음- NASA, Air B&B, Uber, Netflix등에서 사용중이다.(ㄷㄷNASA라니)

 

Node.js는 웹, 모바일, 데스크탑 앱개발에도 사용되기 시작했다.

 

노드 공식사이트에서 LTS버전을 받은 뒤 cmd창을 열어 해당버전을 이 설치되었는지 확인했다.

 

그리고 npm모듈을 최신버전으로 업데이트 시키고 싶다면 cmd창에서 해당 코드를 입력하면 설치가 된다.

 

문법

요즘 js에서는 var를 거의 사용하지 않고 let 과 const를 사용한다고 한다. let은 변수, const는 상수의 타입이다.

ES2015문법에 새로운 문자열 표기방식이 생겼다. 기존에는 ""만 사용가능했지만 이제는 '', "", `` 또한 가능하다.

js는 메서드(함수)도 객체이다.

 

 


자바 문법복습

let relationship1 = {
    name: `zero`,
    friends: [`nero`, `hero`, `xero`],
    logFriends: function(){
        let that = this;
        this.friends.forEach(function (friend){
            console.log(that.name, friend);
        });
    }
};
console.log(relationship1);
relationship1.logFriends();



let relationship1 = {
    name: `zero`,
    friends: [`nero`, `hero`, `xero`],
    logFriends(){
        this.friends.forEach()(friend)=>{
            console.log(this.name, friend);
        });
    }
};
console.log(relationship1);
relationship1.logFriends();


변수선언
let, const

함수선언
function sayHello(){
    console.log(`Hello World!`);
}

출력
console.log(obj);
console.log({obj},{name}, {age});

함수 호출
sayHello();

객체 만들기
let obj = {};

객체에 속성추가 : variable
let obj2 = {
    name: `임꺽정`
}

동적으로 속성추가
obj3[`age`] = 34;
obj3.level = 99;

함수선언 + 매개변수
function sayHello2(message){
    console.log(`Hello World!` + message);
}

함수의 반환
function sayHello3(){
    return `Hello~3`;
}

let message = sayHello3();
console.log(message);

객체에 속성추가 : 함수만들기
let obj2 = {
    sayHello(){
        console.log(`Hello~`);
    }
};

let obj2 = {
    sayHello: function(){
        console.log(`Hello~`);
    }
}

객체에 속성(function) 호출
obj.sayHello();