💡 Node.js
❓ Later
- [x] console.log 단축키
- [ ] https://inpa.tistory.com/category/Node.js/Node
- [ ] new 가 뭐지
- [ ] 콜백함수?
- [ ] parameter인자 호출시(cb,name,txt,message)
- ➕ 채팅시스템 구현 - socket.io (이벤트 많음)
#서버 로그인
ssh root@(공인IP주소)
#서버 로그아웃
exit
setTimeout : 초를 기다렸다가 실행
Node.js
특징
- npm 패키지세션을 쓰면 관련 라이브러리 설치
- npm: JS로 개발된 각종 모듈 관리해주는 기능
- Single Thread
- 운영체제에서 할당하는 작업의 단위 (실행중인 프로그램)(작업 관리자에 쓰는게 프로세스)
- :스레드하나의 프로세스 안에는 여러개의 스레드가 존재할 수 있음한번에 하나를 실행하는데 나머지를 백으로 보내게 함.
- 내가 제어하는게 1개기에 중간에 에러가 나면 전체가 멈춰버림.
- 메모리 자원을 여러개가 공유한다면 여러개를 컨트롤 해야되는데 노드js는 그럴 필요가 없음.
- 1개의 스레드만 있기에 프로그래밍 관리가 쉬움.
- (백으로 보내는것은 백그라운드에서 실행되는 것)
- 스레드는 프로세스 안의 자원들을 이용하면서 실행하는 단위..
- 프로세스 안에서 실행되는 흐름의 단위
- 가상 메모리 공간, 코드, 시스템 작업 공간들이 들어감.
- 내부에서 돌 때의 작업의 단위
- : process: 실행중인 프로그램.
- Non-blocking I/O
- 동기
- 비동기
4. Event-Driven
- Call Stack (호출 스택) : 호출 순서대로 밑에 쌓임
- LIFO방식 (Last input First operate) : 마지막 호출부터 실행
- Task Queue 이벤트 발생 후 호출될 함수들이 기다리는 공간
Event Loop
이벤트 발생시 콜백함수 실행
- 호출 스택에 쌓임
- 실행시 콜백함수를 백그라운드로 보냄
- 백그라운드에서 3초후 태스크 큐에 보냄
- 호출 스택 실행이 끝나 비워지면
- 이벤트 루프가 태스크뷰의 콜백을 호출스택으로 올림
- 콜백함수가 호출스택에서 실행되고 비워짐
- 이벤트루프는 태스크큐에 콜백이 들어올 때까지 대기
간단한 로직
싱글쓰레드라 빠르고 io작업이 많은 서비스에 적합
적합
- 대량 클라가 접속하는 서비스 (입출력 많은 서비스)
- 빠른 개발, 빠른 응답시간 요구
- 비동기 방식에 적합 (스트리밍, 채팅 서비스 등)
비적합
- CPU작업 많으면, 복잡도 높으면 노노
서버에 설치
#서버로그인 후
apt-get install nodejs
apt-get install npm
기능
REPL
- Read → Evaluate → Print → Loop
- 콘솔에서 node 입력
내장모듈(Module)
- 특정 기능의 함수나 변수들의 집합
- 재사용 가능한 코드조각
장점
- 코드 추상화 캡슐화
- 재사용 의존성 관리 → 유지보수 굿
모듈 만들기
- 한 모듈파일에 모듈 +
- 한 모듈파일에 모듈 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 모듈
인터넷 주소 쉽게 조작
- queryString
- 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 모듈
- [ ] https://www.daleseo.com/js-node-fs/
- 오류처리 필수!
비동기방식과 콜백함수
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 |