새싹🌱

0718 10회차

idleday 2022. 7. 18. 19:00

💡 Node.js

❓ Later

#서버 로그인
ssh root@(공인IP주소)
#서버 로그아웃
exit

setTimeout : 초를 기다렸다가 실행


Node.js

특징

  1. npm 패키지세션을 쓰면 관련 라이브러리 설치
    • npm: JS로 개발된 각종 모듈 관리해주는 기능
  2. Single Thread
    • 운영체제에서 할당하는 작업의 단위 (실행중인 프로그램)(작업 관리자에 쓰는게 프로세스)
    • :스레드하나의 프로세스 안에는 여러개의 스레드가 존재할 수 있음한번에 하나를 실행하는데 나머지를 백으로 보내게 함.
    • 내가 제어하는게 1개기에 중간에 에러가 나면 전체가 멈춰버림.
    • 메모리 자원을 여러개가 공유한다면 여러개를 컨트롤 해야되는데 노드js는 그럴 필요가 없음.
    • 1개의 스레드만 있기에 프로그래밍 관리가 쉬움.
    • (백으로 보내는것은 백그라운드에서 실행되는 것)
    • 스레드는 프로세스 안의 자원들을 이용하면서 실행하는 단위..
    • 프로세스 안에서 실행되는 흐름의 단위
    • 가상 메모리 공간, 코드, 시스템 작업 공간들이 들어감.
    • 내부에서 돌 때의 작업의 단위
    • : process: 실행중인 프로그램.
  3. Non-blocking I/O
  • 동기
  • 비동기

4. Event-Driven

  • Call Stack (호출 스택) : 호출 순서대로 밑에 쌓임
  • LIFO방식 (Last input First operate) : 마지막 호출부터 실행
  • Task Queue 이벤트 발생 후 호출될 함수들이 기다리는 공간

 

Event Loop

이벤트 발생시 콜백함수 실행

  1. 호출 스택에 쌓임
  2. 실행시 콜백함수를 백그라운드로 보냄
  3. 백그라운드에서 3초후 태스크 큐에 보냄
  4. 호출 스택 실행이 끝나 비워지면
  5. 이벤트 루프가 태스크뷰의 콜백을 호출스택으로 올림
  6. 콜백함수가 호출스택에서 실행되고 비워짐
  7. 이벤트루프는 태스크큐에 콜백이 들어올 때까지 대기

간단한 로직

싱글쓰레드라 빠르고 io작업이 많은 서비스에 적합

적합

  • 대량 클라가 접속하는 서비스 (입출력 많은 서비스)
  • 빠른 개발, 빠른 응답시간 요구
  • 비동기 방식에 적합 (스트리밍, 채팅 서비스 등)

비적합

  • CPU작업 많으면, 복잡도 높으면 노노

서버에 설치

#서버로그인 후
apt-get install nodejs
apt-get install npm

기능


REPL

  • Read → Evaluate → Print → Loop
  • 콘솔에서 node 입력

내장모듈(Module)

  • 특정 기능의 함수나 변수들의 집합
  • 재사용 가능한 코드조각

장점

  • 코드 추상화 캡슐화
  • 재사용 의존성 관리 → 유지보수 굿

모듈 만들기

  1. 한 모듈파일에 모듈 +
  2. 한 모듈파일에 모듈 1

모듈 불러오기

  • [ ] 구조 분해 할당

1개 - 다른 이름이어도 불러올 수 있음

const returnString = require("./func.js");

여러개 - 이름 동일해야

const{a,b}= require("./variable.js");

ES2015 모듈

  • 자바스크립트 자체 모듈 시스템 문법
  • package.json에 “type”:”module” 적어야

내장객체

global

  • 노드 전역객체
  • 모든파일에서 접근 가능
  • 생략가능 global.console.log
  • 현실적으론)
  • 환경변수, 상수로 사용하지
  • 메모리공간 계속 차지

console

#같은 레이블의 time ~ timeEnd까지 걸리는 시간 출력
console.time("시간");

console.timeEnd("시간");
console.error("에러!");
console.trace("Error");
console.table([{name:'abc',birth:1990},{name:'def',birth:1980}]);

Timer

require

모듈 불러올때 사용하는 객체

서로가 서로를 불러오는 순환참조❌ → 빈 객체 → 무한반복

process

현재 실행 중인 노드 프로세스에

og(process.version);
og(process.arch);
og(process.platform);

os 모듈

운영체제 정보를 담고있는 내장 모듈

path 모듈

폴더와 파일 경로를 쉽게 조작하도록 도와주는 모듈

const os = require("os");
console.log("os.hostname()", os.hostname());

const path = require("path");
const string = __dirname;
console.log("path.extname(string)", path.extname(string));

url 모듈

인터넷 주소 쉽게 조작

  1. queryString
  2. searchParams
    • 중요정보들을 구분해서 보여줌
    • 특정 키,값 가져올 수 있음
const { Console } = require("console");
const { URL } = require("url");

const string =
  "<https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=sesac&oquery=%EC%83%88%EC%8B%B9&tqi=hWRsZwprvxssscDqo7ossssst6l-347146>";
const naver = new URL(string);

console.log(url.format(naver));
console.log(url.parse(string)); //url분리

console.log(naver.searchParams);
  • 실습
    const { Console } = require("console");
    const url = require("url");
    const { URL } = url;
    
    const string =
      "<https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=sesac&oquery=%EC%83%88%EC%8B%B9&tqi=hWRsZwprvxssscDqo7ossssst6l-347146>";
    // const url = new URL(address);
    
    const sesac = new URL(string);
    url.parse(string);
    
    const sesacParams = new URLSearchParams(sesac.searchParams);
    
    console.log(sesacParams.keys());
    console.log(sesacParams.values());
    
    sesacParams.delete("sm");
    console.log(sesacParams.keys());
    

File System 모듈


비동기방식과 콜백함수

user⇒ {}; 와 function (user) {}; 는 같다

콜백 방식

callback-hell

console.log("start");

function login(id, pw) {
  setTimeout(() => {
    console.log("정보 없음");
    return { userID: id };
  }, 3000);
}

const user = login("kim", "1234");
console.log(user + "님 반갑습니다.");
console.log("finish");

callback-hell

function login(id, pw, cb) {
  setTimeout(() => {
    console.log("사용자 입장");
    cb(id);
  }, 3000);
}

function getVideo(id, cb) {
  setTimeout(() => {
    cb(["아이언맨1", "아이언맨2"]);
  }, 2000);
}

function getDetail1(video, cb) {
  setTimeout(() => {
    cb("비디오 제목은 : ", video);
  }, 1000);
}
login("kim", "1234", (user) => {
  console.log("user님 환영");
  getVideo(user, (videos) => {
    console.log(videos);
    getDetail1(videos[0], (title) => {
      console.log(title);
    });
  });
});

Promise

  • 성공시 resolve 실행 → then
  • 실패시 reject 실행 → catch

chaining 가능

  • 다음 then 으로 value 넘겨줌

'새싹🌱' 카테고리의 다른 글

0905 CSS 반응형  (0) 2022.09.05
[TIL] 220724  (0) 2022.07.24
0715 9회차  (0) 2022.07.15
0713 8회차  (0) 2022.07.13
0711 7회차  (0) 2022.07.12