[TIL-백엔드] 3주차 Part2. node.js랑 제대로 인사하기

반 히·2024년 3월 25일

데브코스

목록 보기
17/58
post-thumbnail

📁 Node.js

  • 백엔드에만 쓰이는 게 아니에요!
    • : 넷플릭스, 에어비엔비, 링크드인, 우버, NASA
    • : Node.js 기반 리액트, 뷰, ... 프론트엔드 프레임워크
    • : 페이팔, 이베이, ...

📌 Node.js란

  • Node.js는 자바스크립트를 스크립트 언어 이상으로 프로그래밍 언어 역할을 할 수 있도록 지원하는 플랫폼 (운동장)
  • 즉, 우리는 Node.js를 이용해서 자바스크립트로 백엔드를 구현할 수 있음.
  • 특징 : 싱글 스레드, 이벤트 기반, 논블로킹 I/O
    • 요리사가 한 명?
      싱글 스레드 ⇒ 주문이 계속 밀려들어와도, 한 명이 어떻게든 쳐내야 해요.
    • 논 블로킹 I/O ⇒ 한 명이 일을 하는데 요리를 순차적으로 X. 중간 중간 비는 시간이 있으면, 다른 요리를 해요
      ex. 라면 1개 (10분 중 물 끓는 시간 5분 : 요리사는 그 물만 쳐다봐요...), 볶음밥(완성 5분)
      : 라면 물 끓여놓고 ⇒ 볶음밥 요리 ⇒ 라면 요리
    • 이벤트 기반 ⇒ 주문이 들어와야만 일을 합니다. (=주문이 없으면, 일을 안 합니다!)
  • cf. 스프링은요? (싱글 스레드가 기본 구조)
  • 자바스크립트에서는 모듈을 사용할 수 있음
  • 모듈이란? 쉽게 얘기하면, 자바스크립트를 노드 위에서 굴릴 수 있는 순간, 우리는 남들이 만들어 놓은 기능들을 사용할 수 있고, 직접 구현되지 않고도...
  • ex) setTimeout(); → 기본적으로 내장이 되어있는 모듈
    • setTimeout(second, 2000) → second를 2초 뒤에 실행시킬 거예요
//non-blocking-demo.js
function first() {
    console.log("첫 번째")
}
function second() {
    console.log("두 번째")
}
function third() {
    console.log("세 번째")
}
first();
setTimeout(second, 2000);
//2초 뒤에 second 함수를 실행합니다. 
// 함수의 매개변수로 변수 또는 값을 전달하는 것이 아니라, 함수를 전달하는 것!
// == "콜백 함수" 
third();


📁 모듈이란

📌 모듈?

  • 내가 만든 게 아니라, 선배 개발자들이 미리 만들어둔 코드 덩어리
  • 그럼 선배들이 만들어둔 모듈을 가져다 쓰고 싶으면..
    • 기본적으로 제공하고 있는 모듈 : 내장 모듈 or 표준 모듈 (ex. setTimeout())
    • 1) 기본 내장된 거 쓰자 setTimeout()
    • 2) 외부 모듈 어떻게 사용하지? NPM
  • "Node.js 덕분에 자바스크립트 모듈을 만들 수도 잇게 되었고, 사용도 할 수 있게 되었어요!"
  • 모듈 = "라이브러리"

📌 라이브러리 vs 프레임워크

  • 라이브러리
    • 도서관 : 분류 ⇒ 상세 주변의 한 권의 책을 골라냄! 기준 : "출판사, 작가, 내용, ..."
      • 장점 : 내가 원하는 걸 빌릴 수 있고
      • 단점 : 고르기가 힘들 수도,, 찾을 시간 오래 걸리고, 도서관 가는 시간...
    • = 라이브러리 = 모듈
    • cf. 프레임워크 : 내가 만들고 싶은 서비스를 구현하는 데 필요한 모든 일을 틀 안에서 하는 것
      (프레임워크는, 필요해보이는 라이브러리(모듈)를 미리 다 틀 안에 넣어뒀습니다)
      Node.js는 프레임워크가 아님 (자바스크립트가 구동될 수 있는 환경을 구축해주는 것)

📌 NPM

  • npm : 외부 모듈을 우리가 설치할 수 있게 도와주는 친구
  • 자바스크립트 모듈들을 잔뜩 모아두고 필요한 것을 찾을 수도 있고 새로 만들 수도 있음.
  • npm이 저장소에 "외부 모듈"을 설치를 우리가 원하는 프로젝트에 자동으로 해준다!
    • = "프로그램" 설치 파일 다운로드 받아서 더블 클릭
    • = npm install 모듈
    • (cf. npm은 빠르고 간편하게 삭제도 가능 = num uninstall 모듈)
  • npm i 모듈명 -g : 내 컴퓨터에 있는 모든 프로젝트에 해당 모듈을 설치하는 것 // 추천하지 않습니다
var figlet = require("figlet");

figlet("Hello World!!", function (err, data) {
  if (err) {
    console.log("Something went wrong...");
    console.dir(err);
    return;
  }
  console.log(data);
});

📌 콜백 함수

//figlet-demo.js
var figlet = require("figlet");
//figlet이라는 변수에 figlet이라고 하는 모듈을 가지고 와서 담아줌 
// require : 외부 모듈을 가져올 때 쓰는 함수 (내장 모듈) 
figlet("Hanbirang", function (err, data) {
//익명의 함수를 쓰는 이유 = 이 함수를 쓸 일이 다른 데는 없어서..
//figlet 만든 사람이, 매개 변수로 함수를 받기로 했기 때문 

// 첫 번째 매개변수 "Hanbirang"라는 문자열을 받아서,
// "아스키 아트를 만든 다음에"
// 두번째 매개변수 function 함수를 실행 = 콜 백 

  if (err) {
    console.log("Something went wrong...");
    console.dir(err);
    return;
  }
  console.log(data);
});
//figlet의 첫 번째 매개 변수 : 아스키코드로 출력하고 싶은 문자열 
/*
원래는 매개변수로 어떠한 변수 또는 값이 들어가야 정상인데, 두 번째 매개변수에는 함수가 들어감.
setTimeout에도 second라는 함수를 매개변수로 전달함. 
함수를 구현되어 있는 함수를 전달하는 것이 아니라, 지금 한 번만 쓸 거라서 함수의 이름 없이 익명으로 함수를 전달함
*/
//server-demo.js
let http = require('http');
//http : 내장 모듈

function onRequest(request, response) {
    response.writeHead(200, {'Content-Type' : 'text/html'});
    response.write('Hello Node.js');
    response.end();
}

http.createServer(onRequest).listen(8888);
// http 모듈에 createServer 함수에서 할일을 다 한 다음에
// onRequest 콜백 함수를 실행시켜달라고 매개변수로 던진 거에요!
//scope-demo.js
if (true) {
	  var num1 = 7; //전역변수 
    const num2 = 3; // 블록 {} 스코프
    let num3 = 5;   // 블록 {} 스코프 = 지역 변수 
}

console.log(num1)
// console.log(num2)
// console.log(num3)

📌 템플릿 문자열

if (true) {
    var num1 = 7;
    const num2 = 3; // 블록 {} 스코프, 초기화 이후 값을 못 바꾼다. 
    let num3 = 5;   // 블록 {} 스코프, 초기화 이후 값 바꿀 수 있다. 

    // num2 = 10; 
    num3 = 21;

    console.log(num1 + " X " + num2 + " = " + num3);
    console.log(`${num1} X ${num2} = ${num3}`); //템플릿 문자열 
}

console.log(num1)
// console.log(num2)
// console.log(num3)

0개의 댓글