본문 바로가기
TIL with Programmers

[TIL] 8/29 모듈, 라이브러리, 프레임워크, npm, Node.js 특징

by 보먀 2024. 8. 28.
728x90
반응형

1. HTTP method = HTTP 에 담아 보내는 목적

  • 생성(=등록): POST
  • 조회: GET
  • 수정: PUT(무조건 덮어쓰기) / PATCH(바뀐 값만 덮어씀, 일부 변경 또는 부분수정)
  • 삭제: DELETE
  • HEAD, OPTIONS, CONNECT, TRACE

 

2. Node.js

 

사실 Node.js 는 백엔드에만 쓰이는 것이 아니다. Node.js 는 자바스크립트 언어 이상으로 프로그래밍 언어 역할을 지원하는 플랫폼으로 특정 로직을 위한 기술을 넘어서 자바스크립트를 위한 운동장을 깔아주는 기술이라고 생각하면 된다. 

 

 

2.1. Node.js 특징

  1. 싱글 스레드 (참고로 스프링도 싱글 스레드)
  2. 이벤트 기반
  3. 논블록킹 I/O

1. 싱글 스레드

-> 쉽게 말해 주방에 요리사가 한 명인 것. 주문이 아무리 밀려도 한 명의 요리사가 모든 것을 해내야 함.

-> 하나의 스레드가 하나의 요청만을 수행

 

2. 이벤트 기반

-> 요리사는 주문이 들어와야만 일을 함 ( = 주문이 없으면 일을 안함)

-> 등록해둔 콜백을 실행하는 방식으로 동작

 

3. 논블록킹 I/O

-> 한 명의 요리사가 일을 하는데, 요리를 순차적으로 하는 것이 아니라, 중간에 비는 시간이 있으면 다른 요리를 함

-> setTimeout 같은 시간이 걸리는 함수가 왔을 때 현재 작업이 차단(대기) 되지 않고 다른 작업을 수행

function first() {
    console.log('첫번째');
}

function second() {
    console.log('두번째');
}

function third() {
    console.log('세번째');
}

first();
setTimeout(second, 2000); // 2초 뒤에 second 실행
third();

/*
출력 -> second를 기다리는 동안 first, third 먼저 실행됨

첫번째
세번째
두번째
*/

 

 

2.2. 모듈

 

내가 만든 것이 아니라, 선배 개발자들이 미리 만들어둔 유용한 코드 덩어리이다. 모듈이라고 하면 조금 생소할 수 있는데, 그냥 라이브러리라고 생각하면 된다

 

 

라이브러리(모듈)

-> 내가 필요한 코드 덩어리들을 찾아서 씀  (도서관에서 원하는 책 찾는 것처럼)

 

그렇다면 라이브러리와 붙어다니는 "프레임워크" 라는 것은 무엇일까?

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

-> 즉, 서비스를 완성하는 데 필요한/필요해보이는 라이브러리(모듈)을 미리 다 틀 안에 넣어둔 것

 

 

그렇다면 node.js 는 프레임워크인가? X

-> 자바스크립트를 웹 브라우저 안에서만 돌리는 게 아니라, 밖에서도 사용할 수 있도록 해준 운동장

-> 자바스크립트가 구동될 수 있는 환경을 구축해 준 것

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

 

 

모듈은 어떻게 가져와서 쓸 수 있지?

 

1) 내장 모듈 

-> 사실 setTimeout 도 내장 모듈, setTimeout 사용하듯이 그냥 사용하면 된다

2) 외부 모듈

-> npm

 

npm 

-> node.js 위에서 돌릴 수 있는 자바스크립트로 된 모듈들을 잔뜩 모아두고 필요한 모듈이 있을 때 와서 설치하거나 필요한 모듈을  만들어올릴 수 있는 모듈 관리자

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

 

설치

npm install 모듈명

 

삭제

안쓰는 모듈은 삭제하는 것이 좋다. 

npm uninstall 모듈명

 

-g 옵션

g = global 로 모든 프로젝트에 모듈이 설치된다. 하지만, 모듈을 사용하지 않는 곳에 설치는 불필요한 일이므로 사용할 곳에만 모듈을 설치하는 것이 좋다. 

npm install 모듈명 -g

 

모듈은 npm 사이트에 들어가서 필요한 모듈을 검색해서 사용할 수 있다. 예시로 figlet 모듈을 설치해보자. 

 

 

- figlet 이라는 외부 모듈을 가져와서 사용해보기

npm install figlet

 

 

설치가 완료되고 나서 pakage.json 파일을 보면 dependencies 안에 figlet 모듈이 추가되어 있는 것을 확인할 수 있다. 

dependencies 는 의존성도 맞지만, "내가 사용할 모듈들" 정도로 생각해주면 된다. 

 

 

설치하고 figlet 모듈을 만든 사람이 올려놓은 figlet 사용하는 기본 코드를 가져와 보았다. figlet 함수의 첫번째 인자로 넣은 문자열을 아스키 아트 형태로 출력해준다. 

var figlet = require('figlet');

// 콜백함수로 익명함수를 쓰는 이유 = 이 함수를 쓸 일이 다른 데는 없기 때문
// 콜백함수는 첫번째 매개변수로 들어온 문자열을 받아 아스키 아트를 만들고 난 후에 실행시킴 = 콜백
figlet("bomya", function (err, data) {
    if (err) {
        console.log("Something went wrong...");
        console.dir(err);
        return;
    }
    console.log(data);
});

 

 

3. Server 파헤치기

 

지난 번 서버 코드 살펴보기

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 콜백 함수를 실행시켜달라고 매개변수로 던진 것

 

 

 

※ 추가 - 자바스크립트 스코프, let, const

if (true) {
    var num1 = 7; // 사실 var 사용은 추천하지 않음
    const num2 = 3; // 블록 {} 스코프, 초기화 이후 값을 못 바꿈
    let num3 = 5; // 블로 {} 스코프, 초기화 이후 값 바꿀 수 있음
    num3 = 21;


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

 

 

 

 

728x90
반응형