본문 바로가기
Nodejs

[NodeJs] NodeJs 알아보기

by 동복이 2023. 4. 27.

Nodejs 란?

nodejs는 chrome v8 javascript 엔진을 기반으로 한 서버 사이드 플랫폼으로 개발의 생산성을 높히기 위해 npm을 통해 모듈을 제공한다. javascript를 사용하기 때문에 접근성이 좋고 비동기 I/O 프레임워크로 효율적인 확장성을 가진 애플리케이션을 개발하기 적합하다.

 

npm(node package manager) 이란 ?

npm은 개발자들이 작성한 모듈을 공유할 수 있는 패키지 저장소이며 이를 통해 모듈을 쉽게 받아와 사용할 수 있고 프로젝트의 의존성 관리에도 사용된다.

 

블로킹과 논블로킹

nodejs는 논블로킹 I/O을 지원하여 여러 요청을 동시에 처리 할 수 있다. 

  • 블로킹 : 하나의 작업이 완료 될때까지 프로그램이 대기하는 방식
  • 논블로킹 : 하나의 작업이 완료되지 않아도 다른 작업을 진행 할 수 있는 방식. 

 

이벤트 기반 아키텍처

이벤트 기반 아키텍처는 프로그램이 이벤트를 생성하고 이벤트에 대한 처리를 콜백 함수를 통해 수행하는 방식을 말한다. nodejs는 이벤트가 발생하면 이벤트에 등록된 콜백 함수를 호출하고 이벤트를 다 처리하면 다음 이벤트가 발생할때까지 대기한다.

 

 

모듈이란?

프로그램의 작은 단위를 말하며 파일단위로 구분하여 필요한 기능들의 함수나 변수를 가진다. 모듈을 사용하면 코드를 재사용하기 쉽고 코드의 구조와 가독성을 향상 시킬 수 있다. nodejs에는 내장 모듈과 사용자 정의 모듈이 있다.

  • 내장 모듈 : nodejs에서 미리 만들어 놓은 모듈을 내장 모듈이라 하며 fs, http, path, os 등 다양한 기능을 제공한다. 
  • 사용자 정의 모듈 : 개발자가 작성한 코드를 모듈로 만들어 사용하는 것을 말하며 사용하기 위해선 코드를 작성 후 module.exports 객체를 사용하여 외부에서 사용할 수 있는 코드를 정의한다.

 

내장 모듈 예제

  • fs
const fs = require('fs');

// 파일을 utf8 형식으로 읽고 결과를 콜백 함수로 반환
fs.readFile('test.txt', 'utf8', (err, data) => {
  if (err) {
    console.error('Error :', err);
  } else {
    console.log('File data:', data);
  }
});
  • http
const http = require("http");

// createServer 메소드
// 서버 객체를 만들어 주고 클라이언트의 요청을 받으면 호출
// 전달된 콜백 함수는 클라이언트의 요청을 받아 처리 후 클라이언트에 응답
const server = http.createServer((req, res) => {
  // 받은 요청을 처리 후 응답
  res.end("server on");
});

// 포트 설정
const PORT = 4000;

// 서버 객체의 listen 메소드를 호출해서 클라이언트의 요청을 대기 상태로 만들어줌
// 이벤트 루프를 돌면서 요청을 기다리다가 요청이 오면 응답
// listen 메소드에 매개변수로 첫번째 매개변수로 port를 전달
server.listen(PORT, () => {
  // 콜백함수를 동록해서 서버가 열린것인지 확인 가능
  console.log("working " + PORT);
});
  • os
const os = require('os');

// os에 대한 정보를 가져와 보여줌
console.log('Platform:', os.platform());
console.log('CPU architecture:', os.arch());
console.log('Total memory:', os.totalmem());
console.log('Free memory:', os.freemem());

 

 

사용자 정의 모듈 예제

  • 객체를 다른 곳에서 불러오기 위해 moduletest1-1.js 에 불러올 객체를 생성해 exports
// moduletest1-1.js

const blockClass = [
  {
    name: "hi",
    age: 1,
    comment: function () {
      console.log(this.name + "하이");
    },
  },
  {
    name: "hello",
    age: 1,
    comment: function () {
      console.log(this.name + "헬로");
    },
  },
];

module.exports = blockClass;
  • moduletest1-2.js 에서 moduletest1-1.js의 모듈을 가져와 출력
// moduletest1-2.js

const blockClass = require("./moduletest1-1.js");

console.log(blockClass);

 

728x90