데브코스/강의 정리

3주차 node.js 기초와 모듈 설치와 삭제

케케_ 2024. 8. 29. 18:14

HTTP에 담아내는 목적 = HTTP method

  • http = 규약 = 정해둔 용어 존재
  • method: http에서의 목적
    • 외울 필요는 없어요! 대신 적절한 method를 찾아서 사용해주세요!
    • 생성(=등록) : POST 
    • 조회 : GET
    • 수정 : PUT(덮어쓰기) / PATCH
      • PATCH: 일부 변경? 부분 수정?
    • 삭제 : DELET
    • HEAD, OPTIONS, CONNECT, TRACE

node.js

  • 백엔드에만 쓰이는게 아님! / 자바스크립트를 위한 운동장 (프론트엔드에도 쓰임: node.js 기반 리액트, 뷰, ...)
  • 특징(동작 원리): 싱글 스레드, 이벤트 기반, 논블로킹 I/O
    • 주문이 계속 밀려 드러와도, 한명이 어떻게든 쳐냄: 싱글 스레드 (싱글 요리사)
    • 주문이 들어와야만 일을 함 (= 주문이 없으면, 일을 안함): 이벤트 기반
    • 한 명이 일을 하는데, 요리를 순차적 X, 중간중간 비는 시간이 있으면 다른 요리: 논블로킹 I/O
      • 라면 (총 10분, 물 끓는 시간은 5분), 볶음밥 5분 -> 물 끓이는 동안 볶음밥하고 다시 라면 요리 (막히는 게 없당)

노드 확인

- node 들어가기(node), 목록 확인(.help)

 

- 빠져나가기(.exit), 노드 버전 확인(node -v)

 

- js 코드 vscode에서 실행하기

이 부분은 강사님의 화면에서는 바로 실행키가 있었는데 버전 차이인지 내 vscode에서는 보이지 않아 적어둔다.

(메뉴바에 실행키가 아예 없어진 줄 알고 알아봤더니 그냥 js코드에서만 안보이는 거였다,,)

node 파일이름.js

 

논블로킹 I/O 실습

- setTimeout 사용 후 결과

 

  • 동기식, 비동기식을 의미하는 듯: 참고 블로그
  • setTimeout 은 비동기식 --> 2초를 기다리지 않고 뒷 라인 코드인 third 실행

모듈

: 내가 만들게 아니라, 선배 개발자들이 미리 만들어둔 코드 덩어리

 

모듈을 가져다 쓰고 싶으면,,

  1. 내장모듈(=표준모듈): setTimeout 같은 거
  2. 외부모듈은 어떻게? npm

 

모듈 = "라이브러리"?


cf. 라이브러리(feat. 프레임워크)

라이브러리

도서관: 분류 -> 상세 주제의 한권의 책을 골라냄! 기준: "출판사, 작가, 내용, ..." ->

 - 장점: 내가 원하는 걸 빌릴 수 있음

 - 단점: 고르기 힘듦, 찾는 시간 오래, 도서관 가는 시간, ...

 

=라이브러리 = 모듈 !

 

프레임 워크

: 틀 안에서 일하는 것: 내가 만들고 싶은 서비스를 구현하는데 필요한 모든 일을 틀 안에서 하는 것

  (프레임 워크는, 필요해 보이는 라이브러리(모듈)를 미리 다 틀 안에 넣어둠)

 

node.js가 프레임워크는 아님! 런타임(구동 환경)이라고 함

-> Node.js 덕분에 자바스크립트 모듈을 만들 수 있고, 사용도 할 수 있게됨!

(node.js가 없었으면 js를 vscode와 같은 툴에서 사용 X, 원래 웹 브라우저에서 작성)

 


모듈2: 외부 모듈 사용

- npm: 외부 모듈 설치, js 모듈 관리

   : npm이 저장소에 "외부 모듈" 설치를 우리가 원하는 프로젝트에 자동으로 해줌

  • npm -v: npm 설치 버전 확인 (node.js 설치할 때 같이 설치)

  • npm 사이트에서 필요한 모듈을 찾을 수 있고 오른쪽 intall 명령어를 이용
    • i 는 install의 약자
    • install -g : global의 약자, 내가 만드는 모든 프로젝트에 해당 모듈이 install 됨 --> 비추!

  • 설치 후 화면
    • .json 확장자 파일과 node_mudules가 생김

  • 공식 사이트의 예제 코드를 실행하면 잘 돌아감!

 


위의 예제 코드 뜯어보기

var figlet = require("figlet");

 - 변수 선언

  • require("모듈(예제: figlet)"): figlet이라는 모듈을 가지고 옴
figlet("Kim", function (err, data) {
if (err) {
  console.log("Something went wrong...");
  console.dir(err);
  return;
}
  console.log(data);
});

 - figlet ("출력될 문자열", 함수)

  • "콜백함수": 함수의 매개변수로 변수나 값이 아니라 함수를 전달하는 것!
    1. 첫번째 매개면수 "출력될 문자열"라는 문자열을 받아서
    2. 아스키 아트를 만든 다음에
    3. 두번째 매개변수 function 함수를 실행 = 콜 백 (뒤에서 실행!)
  • 익명의 함수: 함수 이름이 없음, 이 함수를 쓸 일이 다른 데는 없어서
  • 함수
    1. 에러가 나면 콘솔에 에러 출력
    2. 에러 아니면, 콘솔에 문차열을 아스키코드로 바꾼 data 출력

 


http 예제 뜯어보기

let http = require("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 모듈: 내장 모듈 -> 바로 사용 가능

 - http.createServer(onRequest).listen(8888);

  • createServer와 listen을 이렇게 사용하라고 정해짐
    • createServer(onRequest): http 모듈에 createServer 함수 안에서 할 일을 다 한 후, onRequest 콜백 함수를 실행시켜달라고 매개변수를 던진 것
    • listen(포트번호) 

var, let, const

var vs let, const -> 블록 스코프 추천됨

if (true) {
  var num1 = 7;
  const num2 = 3; //블록 {} 스코프 -> {} 기준으로 안에서 선언되면 밖에선 선언 불가
  let num3 = 5; //블록 {} 스코프
}

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

 

let vs const

if (true) {
  var num1 = 7;

  const num2 = 3; //블록 {} 스코프(사용추천) 
  let num3 = 5; //블록 {} 스코프

  //num2 = 10; //const는 초기화 후 변경 불가!
  num3 = 21;
}

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

 

문자열

if (true) {
  var num1 = 7;

  const num2 = 3; //블록 {} 스코프
  let num3 = 5; //블록 {} 스코프

  num3 = 21;

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

console.log(num1);

 


모듈 삭제

: npm uninstall figlet

 

- package.json 내용 삭제

  • 삭제 전

  • 삭제 후

 

  • dependencies: 내가 사용할 것
  • json: "키": "값" 형태로 데이터 작성하는 객체