JavaScript/node.js

2020.07.13. 수업내용 - node.js (1)

dev_sr 2020. 7. 13. 14:19

 

참고할 사이트

1. node.js 다큐먼트

 

Index | Node.js v13.14.0 Documentation

 

nodejs.org

 

2. java script 다큐먼트

 

JavaScript

JavaScript(JS)는 가벼운 인터프리터 또는 JIT 컴파일 프로그래밍 언어로, 일급 함수를 지원합니다. 웹 페이지의 스크립트 언어로서 제일 유명하지만 Node.js, Apache CouchDB, Adobe Acrobat처럼 많은 비 브라��

developer.mozilla.org

 

 

 

=================================================
client ---요청 ---> web server ---조회, 저장, 수정, 삭제 ---> DB server 
       <--응답----          가공      <------------결과-------------       저장
=================================================

 

 

Node.js : 언어X, 자바 스크립트 런타임

자바 스크립트 런타임 : 자바 스크립트 언어로 짜여진 코드가 동작하는 환경

 

★npm : 자바스크립트 프로그래밍 언어 사용자를 위한 무료 패키지 관리자 ( 에셋스토어 같은 것 )

 

클라이언트 : 요청을 보내는 주체 (데스크톱, 모바일 앱, 다른 서버 등)
서버 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터, 프로그램
=>서버는 클라이언트 요청에 응답함

 

Ryan Dahl 이라는 사람이 2008년 출시된 크롬의 V8 엔진 기반으로 node.js를 만들었다.

 

 

==========================Node.js==========================

★이벤트 루프(이벤트 기반)
★콜백
★테스트 큐
★백그라운드

 

1. 이벤트 기반
-특정 이벤트가 발생할 때 무엇을 할 지 미리 등록 해둔다 (ex. 유니티에서 버튼 AddListner())

1) 이벤트 루프
여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지를 이벤트 루프가 판단한다.
싱글 스레드라서 동시 처리가 불가능 -> 어떻게 효율적으로 순차적으로 처리를 해야할까?

*자바스크립트는
함수 명 앞에 function을 붙이면 메소드이다
호출할 땐 함수명();

 

 

컴파일 언어가 아니라서 컴파일을 하지 않는다. (한번에 다 적고 실행하기 전 컴파일하지 않는다)
인터프리터 언어 : 한줄 한줄 해석해서 판단한다.

*main함수는 처음 실행시의 전역 컨텍스트를 의미 한다. 
컨텍스트: 함수가 호출되었을때 생성되는 환경
자바스크립트는 실행시 기본적으로 전역 컨텍스트 안에서 돌아간다
함수의 실행이 완료 되면 호출스택은 지원진다.
third, second, first, main순으로 지워지고 main함수까지 실행되면 호출스택은 완전히 비워진다.

코드펜 (CodePen) : 자바스크립트, css, html을 미리 돌려볼 수 있는 플레이 그라운드

 

CodePen

An online code editor, learning environment, and community for front-end web development using HTML, CSS and JavaScript code snippets, projects, and web applications.

codepen.io

 

2) 테스트큐 
이벤트 발생후 호출되어야 할 콜백 함수들이 기다리는 공간이다. 
콜백들이 이벤트 루프가 정한 순서대로 줄을 서 있으므로 콜백 큐라고도 부른다
-> 이벤트 루프가 스택이 비워지면 여기 함수들을 하나씩 스택에 올려준다. 

3) 백그라운드 (ex - webapis) 
타이머나 I/O 작업 콜백 또는 이벤트 리스너들이 대기 하는 곳이다.

 

 

2. 논블로킹 I/O (Input/Output , 입출력을 의미)
동기 방식 : 해당 기능이 끝날 때까지 대기(막음, 블로킹)
비동기 방식 : 안 기다리고 각자 수행됨 (안막음, 논블로킹)

3. 싱글 스레드
주어진 작업을 혼자 처리하는 것
자바스크립트와 노드에서 논 블로킹이 중요한 이유

1)프로세스 
운영체제에서 할당하는 작업의 단위
메모리와 자원 공유X

2)스레드
프로세스 내에서 실행되는 흐름 단위
하나의 프로세스는 한 개 이상의 스레드를 가질 수 있음
메모리와 자원 공유O

->노드는 스레드를 늘리는 대신 , 프로세스 자체를 복사해 여러 작업을 동시에 처리 하는 멀티 프로세싱방식을 택했다.
자바스크립트 언어자체가 싱글 스레드 특성을 띄고 있기 때문이다.

 

4. 장단점
1)장점
멀티스레드 보다 상대적으로 쉽다
연산이 적은 작업엔 괜찮다.
자바스크립트를 사용하므로 프론트엔드 / 백엔드 모두 하나의 언어로 개발할 수 있다.(ex  웹사이트, 서버)

NASA, 에어비엔비, 우버, 넷플릭스, 링크드인, 페이팔, 월마트, 이베이등 노드로 서비스를 운영


2)단점
스레드가 에러로 멈추면 서버 전체가 멈춘다.
연산이 늘어나면 적합하지 않다(동기화 방식이 들어가면 싱글 스레드라 마냥 기다려야한다)


5. 변수선언

var 라고 선언 하는데 es6 (ecma 2015) 부터 const, let을 씀
const : 상수 , 한번 값을 넣으면 안바뀜
let : 바뀜

큰따옴표나 작은 따옴표로 감싸는 기존 문자열과는 달리 ` (백틱)으로 감싼다
문자열 안에 변수를 넣을수 있다

 

터미널에서 js파일이 있는 폴더 위치를 찾아서 node js파일 이름을 입력해주면 실행한다.

 

ecma2015 (es6)부터 문자열 더하기 할때 위와 같이 쓸 수 있다.

 

 

 

참고할 동영상