본문 바로가기
Frontend/엘리스 SW 엔지니어 트랙

[ 엘리스 SW 엔지니어 트랙 ] 26일차(6주차: Node.js와 Express.js - npm, Middleware, MongoDB)

by YWTechIT 2021. 11. 30.
728x90

📍 26일 11.30. 화(실시간 강의)

오늘부터는 FE가 아닌 BE에 대해서 간략하게 배운다. 여러 프레임워크 중 Node.js에 대해서 배우는데 한번 알아보자. 실시간 강의 때는 주로 실습을 하느라 이론을 많이 배우지 못했다. 내일 온라인 강의에서 더 자세하게 알아봐야겠다.


❏ Node.js

  1. Chrome V8 javscript 엔진으로 빌드된 javascript 런타임입니다.
  2. Node.js의 메인스레드는 하나이다. JS가 단일쓰레드인것처럼 node.js도 한 번에 한줄씩 실행한다.
  3. Docker, Auto scaling 등을 이용해 node.js의 단일 스레드의 단점을 보완할 수 있다.
  4. offLoading: 메인스레드와 이벤트 루프는 서로 영향을 받지 않고 계속 실행된다.(저수준의 오래 걸리는 일은 node.js에게, 고수준의 로직은 메인 스레드에서 실행한다.)
  5. LinkedIn, NETFLIX, UBER 등에서 node.js를 사용한다.
  6. Glich 사이트를 통해 온라인에서 무료로 node.js 환경을 구축할 수 있다.
  7. 예전의 JS는 퍼포먼스가 굉장히 떨어졌다. -> 이상한 코드를 집어넣으면 홈페이지가 느려진다. -> firefox - spidermonkey로 인해 성능이 매우 좋아졌다. > microsoft - node.js는 해당 환경을 브라우저가 아닌 로컬환경에서 작동시키기 위해 만들었다.
  8. 런타임 환경: 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신 상태
  9. 컴파일 에러: 프로그램 동작 전에 발생하는 에러
  10. 런타임 에러: 프로그램이 잘 동작하다가 중간에 발생하는 에러
  11. prettier: 개발자가 작성한 코드를 통일시키는 방법
  12. eslint: 자잘한 문법을 잡아준다. 코드를 분석하여 문법적인 오류, 안티 패턴을 찾아준다.
  13. npm init: package.json 생성
  14. npm init: package.json 생성
  15. npm i eslint --save-dev: eslint 설치
  16. 라이브러리 ESLint 설치
  17. npm i -g npm
  18. ./node_modules/.bin/eslint --init : eslint 환경설정
  19. npm i prettier: 프리티어 설치
  20. ./node_modules/.bin/prettier filename
  21. ./node_modules/.bin/prettier filename write
  22. format: format on save
  23. formatter: 어떤 문법규칙으로 정리할지 선택하는 기능
  24. npm i eslint-plugin-airbnb: airbnb 문법 사용
const http = require("http");  // http 모듈 호출
const port = 9999;

http.createServer((req, res) => {
    res.end("Hello, world!");  // end: 담길데이터 다 담겼으니까 요청 글자를 보낸다.
}).listen(port, () => {
    console.log("서버가 켜졌어요!!!");
});

// 이후 F5 -> node.js실행
// res.end("<p style='color:red'>gimotti!!!</p>");처럼 innerHTML와 같은 코드로도 보낼 수 있다.
  1. commonJS 방식은 Node.js에서 사용하는 방식으로 ES2015 의 모듈 개념이 나오기 전부터 사용됨. 기본은 CommonJS 이나, package.json을 수정하면 사용할 수 있음
// CommonJS(default)
const http = require("http");

// ES2015, but 실질적인 사용은 2019년부터
import http from "http";
  1. 동일한 IP주소 여도 포트번호를 통해 다르게 연결할 수 있다.(default: 80)
  2. JS: Express.js , TS: Nest.js + Typescript (해외에서 많이 쓰이고, 국내에서는 스프링을 많이 쓴다. 스프링은 전자정부에서 권장하는 프레임워크라서 많이 사용된다. 러닝 커브가 상당히 힘들다.)
  3. docker: 서버에 무엇인가를 설치할 때 오류가 발생함. 이런 문제를 줄이기 위해 나왔다. 설치가 이미 완료된 컨테이너를 가지고 있다. 서비스에 올리기만 하면 바로 사용 가능함. 모든 기술은 필요에 의해 나왔기 때문에 왜 기술을 사용하는지에 대해 알아두자.
  4. 요즘 개발은 서버와 프런트를 컨테이너 안에 두고 깃허브에서 작성한 코드 커밋 → 테스트 → 빌드 → 자동으로 서버에 올린다. 이러한 과정을 CI/CD 라고 부른다.
728x90

❏ 내장 모듈

  1. node.js 내부에서 제공하는 모듈
  2. 모듈명이 같으면 현재 폴더를 기준으로 가장 가까운 모듈을 먼저 가져온다.
  3. require('fs').readFileSync: 동기적으로 파일을 불러온다. (아무런 인코딩을 하지 않으면 byte 형태로 값을 불러온다. Buffer: 16진수 형태)
const fs = require("fs");
const result = fs.readFileSync("./test");
const buf = Buffer.from([97, 98, 99, 100, 101]);
console.log(buf.compare(result)); // 0: 서로 같으면 0을 반환, 1이면 `buf` 가 더 크고, -1이면 `result`가 더 크다.

// 에러처리는 try-catch문으로 실행
  1. node.js 데이터 구조: stream : 데이터를 작은 청크로 쪼개 처리한다. 큰 데이터를 처리하거나 비동기적으로 얻을 수 있는 데이터를 처리할 때 유용하다.
const fs = require("fs");
const stream = fs.createReadStream("src/test");
stream.pipe(process.stdout);
  1. __filename, __dirname: 파일 경로, 폴더 경로 표시하는 명령어
console.log("__dirname", __dirname);
cosnole.log("__filename", __filename);
  1. dns: dns 정보접근
// family: verson(IPv4, IPv6...)
const dns = require("dns");
dns.lookup("google.com", (err, address, family) => {
    console.log(address, family);
});
  1. path: 경로 설정
const path = require("path");
const fs = require("fs");

// 절대 경로 넣기
const filePath = path.resolve(__dirname, "./test.txt");
const fileContent = fs.readFilSync(filepath, "utf-8");
반응형

댓글