자바스크립트는 Html 태그를 동적으로 추가하고 웹의 동적인 동작을 처리할 때 사용된다.
뿐만 아니라 클라이언트에 동적인 기능을 제공함과 동시에
단일 언어로 클라이언트와 서버를 모두 개발할 수 있는 가능성이 있다.
자바스크립트를 통해 서버를 개발하고 구동할 수 있는 방법엔 두 가지가 있다.
바로 Node.js와 express다.
오늘은 이 두가지를 통해 서버를 구동하고그 문법에는 어떤 차이가 있으며 각 특징은 어떤지 포스팅하고자 한다.
Node.js 특징
1. 비동기 I/O
Node.js는 비동기식 입출력을 기본으로 하여 높은 성능을 발휘한다. 이는 많은 요청을 동시에 처리할 수 있게 한다.
ex:) 채팅 애플리케이션
많은 사용자가 동시에 메시지를 주고받는 실시간 애플리케이션에 비동기 I/O를 사용하면 각 메시지를 보내고 받는 요청이 병렬로 처리되므로, 서버는 수백 또는 수천 명의 사용자가 동시에 메시지를 주고받는 상황에서도 성능 저하 없이 빠르게 응답할 수 있다. 예를 들어, Slack과 같은 채팅 애플리케이션은 비동기 I/O 덕분에 수많은 사용자가 실시간으로 소통할 수 있다!
2. 단일 스레드
Node.js는 단일 스레드 이벤트 루프 구조를 사용하지만, 비동기 처리를 통해 많은 동시 연결을 효율적으로 관리합니다.
ex:) 실시간 온라인 게임 서버
Node.js의 단일 스레드 이벤트 루프는 각 사용자의 요청을 빠르게 처리하며, 비동기 처리를 통해 네트워크 지연 없이 실시간으로 데이터를 주고받을 수 있다.
다음 글을 참고하자.
[javascript] 콜 스택과 이벤트 루프 | 동기/비동기 처리 차이?
동기 처리란, 쉽게 말해 순차적인 처리를 의미한다.만약 응답과 요청이 동기라면, 어떤 일이 발생할까?A 클라이언트가 요청을 보냈다고 하자. Aa서버는 요청을 받고 응답을 한다.문제 없다. 케이
hansjour.tistory.com
3. NPM (Node Package Manager)
풍부한 모듈 생태계를 자랑하는 NPM을 포함하고 있어 다양한 패키지를 쉽게 설치하고 사용할 수 있다.
ex:) 실시간 데이터 처리 애플리케이션(주식 거래 플랫폼,IoT 센서 데이터 모니터링 시스템)
NPM을 통해 쉽게 설치할 수 있는 다양한 패키지들(예: socket.io, express, mongoose 등)을 활용하면 실시간 데이터 스트리밍, 웹소켓 통신, 데이터베이스 연결 등을 손쉽게 구현할 수 있다. 예를 들어, 주식 거래 플랫폼에서는 socket.io를 사용하여 실시간 주식 가격 변동을 클라이언트에게 푸시하고, mongoose를 통해 MongoDB에 데이터를 저장하고 조회할 수 있다.
=> 실시간 애플리케이션의 강점이 있다!
채팅 애플리케이션, 온라인 게임 서버, 실시간 데이터 처리 시스템 등과 같은 애플리케이션들은 수많은 동시 연결을 효율적으로 처리하고, 빠른 응답성을 유지해야 하는데, Node.js의 비동기 I/O와 단일 스레드 이벤트 루프는 이러한 요구사항을 충족시키기에 적합하다.
express 특징

const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
// http 모듈 사용 예시
const http = require('http');
// 서버를 생성하고 요청을 처리하는 콜백 함수 작성
const server = http.createServer((req, res) => {
// 요청된 URL에 따라 분기 처리
if (req.url === '/') {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello, World!\n');
} else if (req.url === '/about') {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('About Page\n');
} else {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('Page Not Found\n');
}
});
// 서버를 지정된 포트에서 실행
const PORT = 3000;
server.listen(PORT, () => {
console.log(`Server running at http://localhost:${PORT}/`);
});
// express 모듈 사용 예시
const express = require('express');
const app = express();
// 라우트 설정
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.get('/about', (req, res) => {
res.send('About Page');
});
// 404 처리 미들웨어
app.use((req, res) => {
res.status(404).send('Page Not Found');
});
// 서버를 지정된 포트에서 실행
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server running at http://localhost:${PORT}/`);
});
2. 미들웨어
<미들웨어 3가지 종류>
-라우팅 분석 (요청 분석,분기 처리) / 응답 처리 / 응답 모양 만들기
const express = require('express');
const app = express();
// 미들웨어 예시
app.use((req, res, next) => {
console.log(`${req.method} request for '${req.url}'`);
next();
});
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
3. 플러그인 생태계
4. 유연성
'Backend-dev > nodeJS & express' 카테고리의 다른 글
nodejs로 라우팅 서버 실습해보기! (0) | 2024.07.30 |
---|---|
[javascript] express로 사용자 req 분석하기 (0) | 2024.05.27 |
[javascript] Buffer(버퍼)란? | 장,단점과 노드js를 활용한 예시 (0) | 2024.05.26 |
[javascript] Stream(스트림)이란? | 장,단점과 노드js를 활용한 예시 (0) | 2024.05.25 |
[javascript] 콜 스택과 이벤트 루프 | 동기/비동기 처리 차이? (0) | 2024.05.25 |