Post

데브코스 TIL - Day 13

23년 12월 5일 강의를 들은 내용과 추가로 더 학습한 내용을 기록한 글입니다.

HTTP Method

HTTP에 담아보내는 나의 목적

  • 생성(=등록): POST
  • 조회: GET
  • 수정: PUT(덮어쓰기), PATCH(일부 변경)
  • 삭제: DELETE
  • HEAD, OPTIONS, CONNECT, TRACE

※ PATCH는 마이페이지에서 연락처나, 이메일 등 부분 수정할 때 사용

Node.js

특징

  • 이벤트 기반
  • 싱글 스레드
  • 논 블로킹 I/O

Eg. 라면가게에 요리사가 한명이라고 생각해보자!

만약 라면가게에 사람이 몰려서 주문이 밀린다면?
주문이 계속 밀려도 요리사가 한명이기때문에 그 한명이 모든 요리를 쳐내야한다 => 싱글 스레드

만약 라면가게에 주문이 없으면?
주문이 없으면 일(요리)를 하지 않는다 => 이벤트 기간

만약 라면 1개와 볶음밥 1개 주문이 들어왔다면?
라면 1개를 끓일 때 총 10분이 걸리지만, 그 중 5분은 물이 끓는 시간이다. 이 때 요리사는 물이 끓는 동안 아무것도 하지않고, 물이 끓는 것을 기다린다. 볶음밥을 만들려면 총 5분이 걸린다. 이 때 라면을 다 끓이고, 볶음밥을 만드는 것이 아닌, 라면의 물 끓는 시간동안 볶음밥 요리를 하고, 다시 라면을 끓인다 => 논 블로킹 I/O

논블로킹 실습

1
2
3
4
5
6
7
8
9
10
11
12
13
function first() {
  console.log("첫 번째");
}
function second() {
  console.log("두 번째");
}
function third() {
  console.log("세 번째");
}

first();
second();
third();
1
2
3
4
PS C:\Users\user\Desktop\non-blocking> node nonBlockingDemo.js
첫 번째
두 번째
세 번째

first - second - third 순으로 진행

  • second함수를 setTimeOut으로 2초 늦게 출력시키기
1
2
3
4
5
6
7
8
9
10
11
12
13
function first() {
  console.log("첫 번째");
}
function second() {
  console.log("두 번째");
}
function third() {
  console.log("세 번째");
}

first();
setTimeout(second, 2000);
third();
1
2
3
4
PS C:\Users\user\Desktop\non-blocking> node nonBlockingDemo.js
첫 번째
세 번째
두 번째

first - third - second 순으로 진행

모듈

다른 개발자들이 미리 만들어둔 코드 덩어리

모듈을 가져다 쓰고싶다면

  • 기본 내장 모듈 사용하기
  • 외부 모듈 사용하기
    • npm

npm?

npm 공식 홈페이지 https://www.npmjs.com/

외부 모듈을 내 프로젝트에 설치할 수 있게 해주는 것

  • npm install 패키지: 패키지 설치
  • npm install -g 패키지: 전역 패키지 설치 (모든 프로젝트에 설치하겠다.)
  • npm uninstall 패키지: 패키지 삭제

라이브러리 vs 프레임워크

라이브러리 = 모듈

  • 다른 사람이 만들어 놓은 코드를 가져다 사용
  • 내가 직접 선택

프레임워크

  • 내가 만들고 싶은 서비스를 구현하는데 필요한 모든 일을 틀 안에서 하는 것
  • 필요한 라이브러리(모듈)을 미리 다 틀 안에 넣어둠

npm과 figlet 사용해보기

figlet 설치

npm install figlet

demo code

  • 첫번째 매개변수 “Hyemin!”라는 문자열을 받아서,
  • 아스키 아트를 만든 다음
  • 두번째 매개변수 콜백 함수 실행

※ 콜백함수 : 함수의 매개변수로 변수 또는 값을 전달하는 것이 아니라, 함수를 전달하는 것

1
2
3
4
5
6
7
8
9
10
11
var figlet = require("figlet");

figlet("Hyemin!", function (err, data) {
  // 오류 발생 시
  if (err) {
    console.log("Something went wrong...");
    console.dir(err);
    return;
  }
  console.log(data);
});

output

1
2
3
4
5
6
7
PS C:\Users\user\Desktop\non-blocking> node figletDemo.js
  _   _                      _       _
 | | | |_   _  ___ _ __ ___ (_)_ __ | |
 | |_| | | | |/ _ \ '_ ` _ \| | '_ \| |
 |  _  | |_| |  __/ | | | | | | | | |_|
 |_| |_|\__, |\___|_| |_| |_|_|_| |_(_)
        |___/

http 모듈 뜯어보기

  • http 모듈 createServer 함수에서 할일을 다 한 다음에
  • onRequest 함수 실행시켜달라고 매개변수로 던진 것!
1
2
3
4
5
6
7
8
9
let http = require("http");

function onRequest(req, res) {
  res.writeHead(200, { "Content-Type": "text/html" });
  res.write("Hello Node.js");
  res.end();
}

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

package.json 뜯어보기

  • dependencies: 사용할 모듈

var, const, let

  • var
  • let
    • 블록 스코프
    • 값 재할당 가능
  • const
    • 블록 스코프
    • 값 재할당 불가능
This post is licensed under CC BY 4.0 by the author.