Node.js를 사용하는 이유 중 하나는 Non-blocking 이라는 장점 때문에 사용한다.
Non-blocking이라는 특성을 일단 예시를 들어서 보자.
CGV.com 같은 온라인 영화예매 사이트의 서버를 하나 만들었다고 가정하자.
서버는 요청처리하는 기계라고 했다.
즉, 이 서버는 그냥 사용자가 "영화 1석 예매해주세요~" 하면 온라인 티켓 보내주는 사이트라고 보면된다.
일반 프로그래밍언어로 만든 서버 vs Node.js 서버 두 경우를 한번 비교해보자.
1. 일반 프로그래밍 언어로 만든 서버
요청1) 영화 1장 예매좀요
요청2) 영화 1장 예매좀요
요청3) 영화 200장 예매좀요
요청4) 영화 1장 예매좀요
이렇게 4개의 요청이 차례로 들어왔을 경우, 위에서 부터 차례로 하나씩 처리해준다.
그런데 중간에 시간이 오래걸리는 요청3) 영화 200장 예매 라는 요청이 하나 있죠?
영화 1장 예매가 1초 걸린다고 했을 때 이건 200초 이상 걸리는 무거운 작업인 것이다.
그럼 요청3)에서 서버가 200초동안 열심히 요청을 처리한다.
처리 순서는 요청1 - 요청2 - 요청3 (200초 대기) - 요청4 이렇게 된다.
요청4에서 아마 불만이 나오지 않을까?
요청4를 한 사람은 얼마 걸리지도 않는 요청인데 200초를 대기해야한다니...
2. Node.js로 만든 서버
요청1) 영화 1장 예매좀요
요청2) 영화 1장 예매좀요
요청3) 영화 200장 예매좀요
요청4) 영화 1장 예매좀요
이렇게 4개의 요청이 차례로 들어왔을 경우, 일단 접수부터 다 받고 빨리 완료된 것부터 처리해준다.
누가 먼저 왔는지 상관없이 그냥 빨리 결과가 나오는 순으로 예매해주는 것이다.
아마 처리 순서는 요청1 - 요청2 - 요청4 - 요청3 이런게 되겠죠?
그래서 아까 요청4 했던 사람도 빠르게 영화표를 받아볼 수 있게 되는 것이다.
Node.js가 강점을 보이는 분야는?
위와 같은 Non-Blocking 특성때문에 Node.js는 SNS, 채팅서비스 웹서버에서 강점을 보인다.
SNS같은 플랫폼 만들 때 가장 중요한게 '한번에 많은 요청을 감당할 수 있냐' 이기 때문이다.
일반 서버의 경우 1초에 10만개의 요청이 들어오면 바로 처리해주기 위해선
- 똑같은 서버를 몇만대 복사해서 만들어두거나(Scaling) 즉, 티켓창구를 늘리거나
- CPU 멀티쓰레딩을 이용하거나
- Node처럼 Non-blocking 스타일로 코드를 짜거나
하는 것이다.
반면 Node.js 서버의 경우엔 애초에 설계상 한꺼번에 많은 요청을 받아줄 수 있으니 애초에 서버 덩치를 키울 걱정 자체가 적다.
하지만 처리 속도라든지 이건 다른 문제이다. Node.js자체가 연산속도가 빠르다고 유명해진게 아니니까.
Node.js로 자주 만드는 것들
1. Node.js는 위에서 말한 SNS, 채팅 서비스 등에 특화된 언어라고 보면 된다.
이런 서비스는 요청처리에 힘든 수학적 연산을 요구하지 않는다.
- 글자를 저쪽에 전달해주기
- 가끔은 여러명에게 전달해주기
이게 끝이다. 채팅 서비스가 이런 요청 말고 더 필요한 요청이 없지..않나?
그래서 대량, 하지만 처리가 간단한 요청이 들어오는 채팅, SNS 서비스에 Node.js를 많이 사용한다.
2. Node.js는 스타트업, 프로토타입 만들기에서도 많이 사용한다.
빠르게 시범서비스를 만들고 싶다면 Node.js는 좋은 선택이다.
- 일단 초보자에게도 쉽고
- 템플릿 몇개만 복붙해도 빠르게 서버를 만들 수 있다.
- 갑자기 사용자가 터져서 대량의 요청이 들어와도 나름 감당가능 (서버가 죽진 않음)
- 자바스크립트 문법만으로 프론트, 백엔드 전부 가능하다는 장점
물론 단점도 있다.
단점은 .. 처리속도가 떨어질 수 있다.
수학연산이나 이미지처리 같은 라이브러리가 부족할 수 있다.
Node.js가 제공하는 Non-blocking 처리방식은 다른 언어에서도 비슷하게 구현 가능하다.
이런게 있다.
<출처 : 코딩애플 : Node.js, MongoDB로 2시간 만에 빠르게 웹서비스 만들기>
'Node.js' 카테고리의 다른 글
폼에 입력한 데이터를 서버에 전송하는 법 (POST요청) (0) | 2022.06.09 |
---|---|
Basic GET request (0) | 2022.06.03 |
Node.js와 Express 라이브러리 설치하기 (0) | 2022.06.03 |
What is NodeJS? (0) | 2022.06.03 |
What is SERVER? (0) | 2022.06.03 |