[프로그래머스 데브코스 풀스택] 2026-01-14 TIL(1) node.js / npm

HTTP에 담아보내는 나의 목적(= HTTP method)

- HTTP는 규약 -> 정해진 용어가 있음

- 생성(=등록) : POST

- 조회 : GET

- 수정 : PUT/PATCH

- 삭제 : DELETE

// HEAD, OPTIONS, CONNECT, TRACE ...

 

💡PATCH : 일부 변경? 부분 수정? ex. 마이 페이지 : 연락처, 이메일, 집주소, 이름 => 부분 수정
까다롭기때문에 잘 쓰지 않음

 

Node.js

: 웹브라우저 밖에서도 자바스크립트를 사용할 수 있게 해주는 운동장 

백엔드에만 쓰이는 게 아님! ( 리액트, 뷰, ... 전부 Node.js기반 )

넷플, 에어비앤비, 링크드인, 우버, 나사 등이 사용 .. 

 

- 특징 

1️⃣ 싱글 스레드 : 주방에 요리사가 한명, 주문이 밀려들어와도 한명이 어떻게든 쳐냄

2️⃣ 이벤트 기반 : 주문이 들어와야만 일을 함, 주문이 없으면 일을 안함

3️⃣ 논블로킹 I/O : 라면 1개 (10분 중 물끓는 시간 5분: 요리사는 할일없음), 볶음밥(5분) -> 라면 끓여놓고 볶음밥 하고 다시 라면으로오자!

👉🏻 한 명이 일을 하는데, 요리를 순차적으로 X, 중간중간 비는 시간이 있으면 다른 요리를 함

 

논블로킹 실습

node 다운받았는지 확인

 

function first() {
    console.log("첫 번쨰")
}

function second() {
    console.log("두 번쨰")
}

function third() {
    console.log("세 번쨰")
}

first();
setTimeout(second, 2000);
third();

setTimeout(second, 2000) : 2초 뒤에 second 함수 실행

second 기다리고 있을 때, 세 번째가 먼저 함! => 논블로킹

 

모듈이란?

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

 

그럼, 선배들이 만들어둔 모듈을 가져다 쓰고 싶다면

1) 기본 내장 setTimeout() console.log() ...

2) 외부 모듈 어떻게 사용하지? => NPM!

 

라이브러리(=모듈) vs 프레임워크 

🤔 도서관

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

- 장점 : 내가 원하는 것 빌릴 수 있고 

- 단점 : 너무 많아 고르기가 힘듦, 찾는 시간이 오래걸리고, 도서관 가는 시간... 

 

🤔 프레임 워크

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

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

- 원하는 라이브러리를 찾는 것보다, 프레임워크가 지원하는 라이브러리를 쓰게 됨

 

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

 

외부 모듈 실습

npm

: node를 사용하기 위해 필요한 패키지 관리자, 외부 모듈을 사용할 수 있게 해줌!

모듈을 찾을 수 있는 npm 사이트 :  https://www.npmjs.com/

 

https://www.npmjs.com/package/figlet

이 모듈 가져와와보자!

사이트에 나와있는 데로 그대로 실행가능!

 

const figlet = require('figlet');

figlet("Hello World!!", function (err, data) {

  if (err) {
    console.log("Something went wrong..."); 
    console.dir(err);
    return;
  }
  console.log(data);
});

 

💡 콜백함수 

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

 

- 익명의 함수를 쓰는 이유 : 함수를 쓸 일이 다른 데는 없어서, Figlet 만든 사람이, 매개변수로 함수를 받기로 했기 때문
- 첫번째 매개변수 "Hello world"라는 문자열을 받아서, 아스키 아트를 만든 다음에 두번쨰 매개변수 function 함수를 실행 == ✨콜백함수 

 

💡 블록 스코프

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

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

- const, let은 블록 스코프(지역변수)이기 때문에, if 밖을 벗어나면 인식 되지 못함

- 다른 언어에서의 변수들은 보통 지역변수이기 때문에, var 사용을 지양하는 것이 좋음.

 

이전에 코드 뜯어보자

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 모듈에 creawteServer 함수에서 할일을 다 한 다음에
//onRequest 콜백 함수를 실행시켜달라고 매개변수로 던짐

http require .. .등등 전부 내장 모듈이구나!

 

템플릿 문자열

    console.log(num1 + " X " + num2 + " = " + num3);
    console.log(`${num1} X ${num2} = ${num3}`);

두 코드가 동일함