node.js와 npm

wltjd1688·2025년 2월 10일

풀사이클

목록 보기
11/74

Node.js란
Node.js는 자바스크립트를 스크립트 언어 이상으로 프로그래밍 언어 역할을 할 수 있도록 지원하는 플랫폼이다. node.js를 이용해서 자바스크립트로 백엔드를 구현할 수 있으며, 대부분의 자바스크립트를 실행할 수 있게 해주는 엔진이다.
공식 홈페이지에서는 "V8 JavaScript엔진으로 빌드된 JavaScript 런타임"이라고 나와있다.
stackoverflow에서는 1번째로 많이 사용되는 프레임 워크라고 한다.
node.js를 사용하는 곳으로는 넷플릭스, 에어비앤비, 링크드인, NASA가 있다.

node.js 특징

  1. 싱글 스레드: 한 개의 스레드에서 모든 작업을 처리한다. => 요리사가 한명

    • 장점: 메모리 효율성, 단순성
    • 단점: cpu 집약적인 작업에 취약
  2. 이벤트 루프 기반: 비동기적으로 작업을 처리함 => 주문이 들어와야만 일함

    • 장점: 비동기 처리로 인해 높은 효율성을 가지
    • 단점: 싱글 스레드로 인해 I/O 외의 작업이 많을 경우 성능을 줌
  3. 논블로킹 I/O: I/O 작업이 완료될 때까지 기다리지 않고 다른 작업을 처리함 => 한명이 일하는데, 노련해서 라면 1개 물 올려놓고, 볶음밥 함

    • 장점: 빠른 처리속도와 높은 확장성
    • 단점: 복잡한 에러 핸들링

논 블로킹 I/O에 대한 예제

스프링과 비교
1. 멀티 스레드: 각 요청을 별도의 스레드에서 처리한다.

  • 장점: CPU 집약적인 작업 처리에 유리, 멀티코어 활용
  • 단점: 스레드 관리가 복잡할 수 있으며, 메모리 소비가 많을 수 있음
  1. 동기적 처리, 비동기 지원: 기본적으로 동기적으로 요청을 처리하고, 비동기 작업을 지원한다.
    • 장점: 동기적 작업은 직관적이고, 비동기 작업은 @Async와 CompletableFuture 등을 통해 추가할 수 있다.
    • 단점: 비동기 처리를 위해 추가적인 설정이 필요하며, 복잡한 구조가 될 수 있음
  2. 블로킹 I/O, 논블로킹 I/O 지원: 기본적으로 블로킹 I/O 방식을 사용하고, Spring WebFlux 등을 통해 논블로킹 I/O를 사용할 수 있다.
    • 장점: 비동기 I/O 처리가 가능하면 높은 확장성을 제공
    • 단점: 기본적으로 블로킹 I/O에 의존하기 때문에, I/O 작업이 많은 애플리케이션에서는 성능에 제한이 있을 수 있음

모듈이란

모듈은 애플리케이션에서 재사용 가능한 코드 덩어리로, 특정 기능이나 작업을 수행하는 파일이다.
이러한 모듈은 코드의 구조화와 재사용성을 높이는데 중요한 역할을 한다.
크게 내장모듈사용자 정의 모듈, 외부 라이브러리 모듈로 나눌 수 있다.

내장 모듈(built-in Modules)

내장 모듈은 node.js의 핵심적인 기능을 제공하는데 사용된다.
대표적인 내장 모듈은 다음과 같다.

  • fs(파일 시스템): 파일 읽기, 쓰기, 수정, 삭제 등의 작업을 수행할 수 있는 모듈
  • http: HTTP서버와 클라이언트를 만들 수 있게 도와주는 모듈
  • path: 파일 및 디렉토리 경로를 다루는 유틸리티 모듈
  • url: url을 분석하고 처리하는데 사용되는 모듈
  • events: 이벤트 기반 프로그래밍을 할 때 사용하는 모듈
  • os: 운영체제와 관련된 정보를 제공하는 모듈
  • crypto: 보안 관련 기능

사용자 정의 모듈

개발자가 애플리케이션의 요구 사항에 맞게 직접 작성한 모듈이다. node.js는 개발자가 원하는 대로 모듈을 정의하여 애플리케이션에서 재사용할 수 있도록 지원한다. 사용자 정의 모듈을 불러올 때는 require()를 통해 불러올 수 있다.

만드는 방법은 다음과 같다.

// math.js
const add = (a,b) => a+b;
const subtract = (a,b) => a-b;
// 내보내기
module.exports = {add,subtract}
//불러오기
const math = require('./math');

const sum = math.add(5,3);
const diff = math.subtract(5,3);

console.log(sum) // 8
console.log(diff) // 2;

라이브러리

라이브러리는 여러 개의 모듈이 모여서 특정 작업을 효율적으로 처리할 수 있도록 미리 작성된 코드의 집합이다. 개발자는 라이브러리를 통해 복잡한 작업을 직접 구현하지 않고, 필요한 기능만을 선택적으로 사용할 수 있다. 즉, 라이브러리가 도서관이라는 뜻 처럼 모듈을 책을 빌리듯이 내가 필요한 것을 골라내어 사용할 수 있다는 말과 같다.

npm

Node.js에서 사용하는 기본적인 패키지 관리 도구로 외부 라이브러리나 모듈을 설치하고 관리하는데 사용된다. npm 사이트에 들어가서 라이브러리를 검색하여 찾고자 하는 라이브러리가 존재하는지를 찾아볼 수 있다.
1. 모듈 설치: 외부 라이브러리나 패키지 설치

npm install <패키지명>
npm i <패키지명>
  1. 프로젝트 초기화: 해당 명령어를 통해 package.json파일을 생성할 수 있다. 이파일은 프로젝트에 필요한 의존성과 설정 정보를 포함한다.(버전같은게 들어있다.)
npm init
  1. 패키지 업데이트 및 삭제: 설치된 패키지를 업데이트하거나 삭제할 수 있다.
npm update <패키지명>
npm uninstall <패키지명>
  1. 읜존성 관리: 아까만든 package.json파일에 의존성이 기족되므로, 이를 통해 팀원과 동일한 환경에서 작업할 수 있도록 도와준다.
  2. 스크립트 실행: package.json에 정의된 스크립트를 실행할 수 있도록 도와준다. 대표적으로 빌드, 테스트, 서버시작 등을 쉡게 실행할 수 있도록 해준다.
npm run <스크립트명>

package.json 와 package-lock.json 및 추가설명

  • install -g <패키지명>
    라이브러리를 설치할때 다음과 같은 명령어로 되어있을 텐데, 이는 글로벌의 약자로 내 컴퓨터에 있는 모든 프로젝트에 해당 패키지를 다운로드 하는것이므로 되도록이면 빼고 설치하는것을 권장함
  • package.json
    npm을 이용해서 다운받은 라이브러리를 표시해줌
  • package-lock.json
    package.json에 기록된 버전을 더욱 정확하게 기록한 파일이다.

figlet

아스키코드로 아트를 할때 사용하는 라이브러리이다.

  1. 설치
npm install figlet
  1. 사용 예제
var figlet = require("figlet");

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

3.이를 실행해 보면

  _   _      _ _        __        __         _     _ _ _
 | | | | ___| | | ___   \ \      / /__  _ __| | __| | | |
 | |_| |/ _ \ | |/ _ \   \ \ /\ / / _ \| '__| |/ _` | | |
 |  _  |  __/ | | (_) |   \ V  V / (_) | |  | | (_| |_|_|
 |_| |_|\___|_|_|\___/     \_/\_/ \___/|_|  |_|\__,_(_|_)

콜백함수
콜백 함수는 함수의 매개변수로 변수 또는 값을 전달하는 것이 아니라, 함수를 전달하는 것을 말한다.

figlet의 사용예제
figlet의 사용예제를 보면 figlet함수를 불러와서 앞에는 텍스트를, 뒤에는 function을 사용하는걸 볼 수 있다. 이때 익명함수를 쓰는것은 다시 쓰이지 않기 때문이다.
이렇게 되면 figlet은 Hellow world!!라는 문자열을 받아서 아스키 아트를 만든 다음에 두번째 매개변수 function 함수를 실행하여 콜백함수가 된다.
http 모듈

http 모듈에 createServer함수에서 할일을 다 한 다음에, onRequest 콜백 함수를 실행시켜준다.

프레임워크
내가 만들고 싶은 서비스를 구현하는데 필요한 모든 일을 틀 안에서 하는것
프레임워크는, 필요해보이는 라이브러리(모듈)을 미리 다 틀 안에 넣어뒀다.
!!! node.js는 플랫폼이지 프레임워크나 라이브러리 아님

profile
일단 해!!!!

0개의 댓글