티스토리 뷰
● Node.js로 서버를 만드는 이유
- Node.js는 Non-blocking I/O 이라는 처리 방법 때문에 사용한다.
ex) Non-blocking 예시
- 서버는 요청을 받으면 요청한 내용을 보내주는 프로그램(= 요청을 처리할 수 있는 기계)이라고 했다.
- 온라인 영화 예매 사이트가 있다고 했을 때 여기서 서버는 간단히 말해 예매한 티켓 수 만큼 온라인 티켓을 보내주는 역할
- 2가지 종류의 서버가 있다고 해보자
1. 일반 프로그래밍 언어로 만든 서버(python 등)
요청1) 영화 1장 예매
요청2) 영화 1장 예매
요청3) 영화 200장 예매
요청4) 영화 1장 예매
- 위와 같이 4개의 요청이 차례대로 들어왔을 경우에 서버는 위에서부터 하나씩 요청을 처리해준다.
- 이 중 200장을 예매하는 요청3)은 시간이 오래걸리는 요청이다.
- 어쨌든 서버는 요청3)을 처리할 것이고 처리 순서는 아래와 같이 될 것이다.
요청1 - 요청2 - 요청3(200초 대기) - 요청4
cf) (1장 예매 = 1초)가 걸린다고 했을 때
- 이때 요청4)를 하는 사람은 속도가 느려 불편함을 느낄것이다.
- 자기는 얼마 걸리지도 않는 요청인데 요청3) 때문에 200초를 기다려야 하는 것이다.
2. Node.js로 만든 서버
요청1) 영화 1장 예매
요청2) 영화 1장 예매
요청3) 영화 200장 예매
요청4) 영화 1장 예매
- 동일하게 4개의 요청이 차례대로 들어왔을 경우 일단 요청부터 전부 다 받은 후 빨리 완료되는 것부터 처리해준다.
- 어떤 요청이 먼저 왔고 늦게 왔는지는 상관없다. 그저 결과가 빨리 나오는 순으로 처리해주는 것이다.
- 처리 순서는 아래와 같이 될 것이다.
요청1 - 요청2 - 요청4 - 요청3
- 이렇게 되면 요청4)를 하는 사람도 빠르게 예매가 가능해진다.
- 위와 같이 Node.js는 완료가 빨리되는 것부터 처리할 수 있도록 설계된 Runtime(실행환경, 실행창)이다.
- 따라서 heavy한 요청을 받았을 때에도 server가 중간에 멈추는 것을 막아준다.(계속해서 server가 요청을 받을 수 있다.)
- 전통적인 서버의 경우 대량의 요청이거나 오래걸리는 요청이면 서버가 중간에 멈추어 대기시간이 발생한다.
cf) 동작 원리가 궁금하면 Event Loop에 대해 검색해보자
● Node.js가 강점인 분야
- SNS, 채팅서비스 등의 웹서버
- SNS 같은 플랫폼에서 가장 중요한 것은 "한 번에 많은 요청을 감당(처리)할 수 있는가"이다.
- 1초에 10만개의 요청이 들어왔다고 했을 때 일반 서버의 경우 이를 바로 처리하려면 아래의 방법 등을 사용해야한다.
1. 똑같은 서버를 몇 만대 복사해서 만들어둔다.(Scaling)
2. CPU 멀티쓰레딩을 이용
3. Node 처럼 Non-blocking 스타일로 코드를 작성
- 반면 Node.js 서버는 설계 자체가 한 번에 많은 요청을 받아줄 수 있도록 되어 있으니 서버의 규모에 대한 걱정 자체가 적다고 할 수 있다.
- 단, 처리 속도는 다른 얘기이다. Node.js가 빠른 연산 속도로 유명해진 것은 아니라는 것을 알아두자
cf) Node.js를 이용해 피보나치 수열 계산을 시키면 시간이 오래 걸린다고 한다.
● Node.js로 자주 만드는 것들
1. SNS, 채팅 서비스에 특화된 언어
- 이러한 서비스들은 요청을 처리하는데 있어 대단한 수학적 연산을 요구하지 않기 때문이다.
- 상대방에게 텍스트 전달, 여러명에게 텍스트 전달 등이 전부이다.
- 그렇기에 대량이지만 처리 자체는 간단한 요청이 들어오는 채팅, SNS 서비스에 Node.js를 많이 사용한다.
2. 스타트업 혹은 프로토타입 제작
- 빠르게 시범서비스를 만들고 싶을 때 사용하면 좋다.
1. Node.js 자체가 초보자에게도 쉽고
2. 템플릿 몇 개만 복붙해도 빠르게 서버를 만들 수 있다.(빠른 개발 가능)
3. 사용자가 갑자기 늘어나 대량의 요청이 들어와도 어느정도 감당 가능(서버가 죽진 않는다.)
4. JS 문법만으로 프론트, 백엔드 전부 가능
- 물론 단점도 있다.
1. 처리 속도가 떨어질 수 있다.
2. 수학 연산이나 이미지 처리 같은 라이브러리가 부족할 수 있다.(웹 서비스가 아닌 경우 Node.js의 활용도가 떨어진다.)
3. Node.js가 제공하는 Non-blocking 처리 방식은 다른 언어에서도 비슷하게 구현 가능
'흥미 > Node.js+MongoDB' 카테고리의 다른 글
#5 GET 요청 (0) | 2023.04.03 |
---|---|
#4 Node.js, Express 라이브러리 설치 (0) | 2023.03.30 |
#3 Non-blocking I/O, Event Loop, Event-driven with chatGPT (0) | 2023.03.27 |
#1 서버? Node.js? (0) | 2023.03.21 |
#0 왜 하는가 (0) | 2023.03.21 |
- Total
- Today
- Yesterday
- db
- Phaser
- nosql
- SQL
- 알고리즘
- 프로그래머스
- Advanced Stream
- 코딩테스트
- 운영체제
- node.js
- MongoDB
- Java8
- 코테
- 빅데이터 분석기사
- jpa
- OS
- git
- 자료구조
- Spring Boot
- java
- MySQL
- 프로세스
- spring
- 메모리
- DART
- API
- Stream
- SpringBoot
- 빅데이터
- Phaser3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |