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
'Nodejs' 카테고리의 다른 글
[NodeJs] MVC 모델을 활용한 간단한 로그인 기능 구현 (0) | 2023.05.22 |
---|---|
[NodeJs] MVC 디자인 패턴을 활용한 서버 만들기 (0) | 2023.05.22 |
[NodeJs] MySQL에 연결 및 테이블 만들기 (0) | 2023.05.01 |
[NodeJs] http, fs 내장 모듈을 활용한 html 불러오기 (0) | 2023.05.01 |
[NodeJs] TCP를 이용한 간단한 server - client 연결 테스트 (0) | 2023.04.28 |