서버/Node 16

NodeJS xlsx Excel

NodeJS xlsx Excel 최근 회사에서 OTA(Over The Air) 차량 업데이트 관련 업무를 진행하였다. 업데이트는 Button 클릭 시 HTTP Request를 통해 이루어지는 방식이다. Button 클릭 시 총 5번의 Request가 일어나며 Polling이 포함되어 있고 소요 시간은 최대 1분이다. Button을 클릭하여 1분 동안 대기 후 업데이트 결과를 확인하여 Excel 파일에 기록해야 했다. 설치 npm i xlsx Parsing 할 xlsx 파일(예시)에 내용은 다음과 같다. xlsx.readFile(Path, ParsingOption)을 통해 Parsing 할 xlsx 파일 전체를 읽은 후 Sheet 메서드를 사용해 특정 시트만 읽는다. Parsing 된 시트는 Sheet_t..

서버/Node 2023.01.04

NodeJS 작동 원리

Nodejs 작동 원리 V8 엔진은 자바스크립트 실행을 담당하는 호출 스택을 담당하며, libuv는 비동기 I/O와 이벤트 루프를 담당한다. 노드 실행은 하나의 스레드에 의해서만 수행되고 하나의 콜 스택을 가짐 콜 스택은 동기적 블로킹 작업이므로 이를 극복하기 위해 Event Loop를 추상화한 libuv를 사용 libuv 내부에 Event Loop는 메인 스레드에 상주하여 비동기 작업을 수행 요청의 특징(블로킹 또는 논 블로킹)에 따라 Thread Pool에 작업을 위임하고 콜백 함수를 실행하기 위해 Event Queue에 적재된 콜백 함수를 빈 상태의 콜 스택으로 이동시킴 Event Loop는 6개의 단계로 이루어져 있으며 각 단계별로 Event Queue를 소유 Event Loop는 각 단계를 순차..

서버/Node 2022.07.25

NodeJS

node 크롬 V8 엔진으로 빌드 된 자바스크립트 런타임 노드는 서버와 자바스크립트 엔진이 아니다. 런타임이다. 싱글 스레드 이벤트 기반 아키텍처 논 블로킹 I/O 모델 서버의 역할도 수행할 수 있는 자바스크립트 런타임 노드로 자바스크립트 언어로 작성된 서버를 실행 서버 실행을 위해 필요한 http/https/http2 모듈을 제공 내부는 내장 코어 라이브러리와 V8 그리고 libuv로 이루어져 있음 런타임이란 특정 언어로 작성된 프로그램을 실행할 수 있게 해주는 실행기(가상 머신) Node는 자바스크립트 실행기이다. 자바스크립트 언어 노드 런타임(실행기) 엔진 V8 노드 등장 전의 자바스크립트 브라우저가 HTML 파일을 읽으며 HTML 내부에 포함된 자바스크립트 코드를 읽어 실행했다. 이는 HTML 파..

서버/Node 2022.07.23

NodeJS Crawling Puppeteer

NodeJS Crawling Puppeteer concept: Headless 크롬 혹은 크로미엄을 제어하도록 도와주는 노드 라이브러리 - SPA(Single Page Application) 즉 SSR(Server Side Rendering) 된 사이트를 크롤링 할 수 있다. - 페이지 화면 캡처와 양식 제출 UI 테스트 키보드 마우스 입출력 등 사람이 할 수 있는 동작 제어 가능 - Dev Tools 프로토콜로 키보드 마우스뿐만 아니라 쿠키/세션/스토리지 등 다양하게 제어할 수 있다. - 크롤링하고자 하는 사이트의 보안이 걸려있을 경우 axios/cheerio를 사용하면 접근할 수 없다. Headless Headless란 CLI(Command Line Interface)에서 작동하는 브라우저이다. 가장..

서버/Node 2022.04.18

NodeJS axios cheerio xlsx

NodeJS axios cheerio xlsx - 실무에서 간혹 기획자가 엑셀 파일에 데이터를 담아 크롤링을 요청할 경우가 있다. - 웹 사이트마다 보안이 다르지만 봇을 검사하지 않는 경우 axios/cheerio 조합으로 크롤링 할 수 있다. - axios로 요청을 보내고 결과를 cheerio로 받아 xlsx로 데이터를 넣는다. const xlsx = require("xlsx"); const axios = require("axios"); const cheerio = require("cheerio"); const add_to_sheet = require("./xlsx"); const workData = xlsx.readFile("./data/data.xlsx"); const workSheet = work..

서버/Node 2022.04.18

NodeJS dotenv

NodeJS dotenv 비밀키 관리하는 파일 - 키=값 줄바꿈 형식으로 작성 - 세미콜론 붙이면 안됨 - 최대한 위에 작성 - 파일은 만들지만 Github/클라우드 등 서비스에 파일을 올리진 않음 - 비밀번호를 하드코딩하지 않는 건 기본 - app.js(dotenv 사용 페이지) - npm i dotenv - 프로젝트 폴더 안 .env 폴더 생성(확장자 없음) const dotenv = require("dotenv") dotenv.config() - .env COOKIE_SECRET=admin DB_PASSWORD=admin

서버/Node 2022.01.20

NodeJS NPM semver package.json

NodeJS NPM semver package.json 노드 패키지 관리 매니저 - 다른 사람들이 만든 소스 코드들을 모아둔 저장소 - 남의 코드를 사용하여 개발 가능 - 이미 있는 기능을 다시 구현할 필요가 없어 효율적 - 오픈 소스 생태계를 구성중 - 패키지는 NPM에 업로드된 node 모듈 - 패키지도 다른 패키지 사용 가능 의존 관계라고 부름 - 명렁어 npm start : package.json "start" 속성 실행 npm ls : 현재 프로젝트에 어떤 패키지가 사용되고 있는지 확인 npm outdated : 어떤 패키지에 기능 변화가 생겼는지 알 수 있음 npm uninstall 패키지명 : 패키지 삭제(npm rm 패키지명으로도 가능) npm search 검색어 : npm 패키지 검색(n..

서버/Node 2022.01.19

NodeJS fs

NodeJS fs 파일 시스템에 접근하는 내장 모듈 - 파일/폴더 생성 삭제 읽기 쓰기 가능 - browser는 제한적이었으나 노드는 권한을 가지고 있음 fs / 프로미스 문법 지원 const fs = require("fs").promises; - fs.readFile("경로", (err, data)) : 파읽 읽기 data에 내용이 들어있음 fs.readFile("./text.txt") .then((data) => { console.log(data.toString()); }) - fs.writeFile("경로 파일명", "내용") : 파일 생성 fs.writeFile("./text.txt", "text입니다."); .then(() => { }) .catch((err) => { console.error(..

서버/Node 2022.01.18

NodeJS exception 예외 처리

NodeJS exception 예외 처리 처리하지 못한 에러 - 서버 스레드를 멈추게 함 - 노드는 기본적으로 싱글 스레드라 스레드가 멈춘다는 건 프로세스가 멈춘다는 거 - 에러 처리는 필수 - try catch - 기본적으로 에러가 발생할 만한 코드를 try catch로 감쌈 setInterval(() => { try { throw new Error("에러 발생"); } catch(err) { console.error(err); } }, 1000); - node 비동기 메서드의 err는 따로 처리하지 않아도 됨 const fs = require("fs").promises; setInterval(() => { fs.readFile("./text.txt") .then((data) => { throw new..

서버/Node 2022.01.18

NodeJS process

NodeJS process 현재 실행중인 node 프로세스에 대한 정보를 담고 있음 - 파일 폴더 경로와 마찬가지로 node는 운영체제에 접근 할 수 있음 - 컴퓨터마다 출력값이 다를 수 있음 - process process.version : 현재 설치된 node 버전 process.arch : 아키텍처 정보(arm ia32) process.platform : 운영체제 정보(linux darwin(맥) freebsd) process.pid : 프로세스 아이디(프로세스별로 구분과 강제 종료 시 사용) process.uptime() : 프로세스 시작 후 경과 시간 process.execPath : node 설치 경로 process.cwd() : 현재 프로세스가 실행되는 위치(__filename/__dirna..

서버/Node 2022.01.18