Notice
Recent Posts
Recent Comments
Link
«   2024/06   »
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
Tags
more
Archives
Today
Total
관리 메뉴

JS Coding

Node.js 서버 관련 정보 설명 본문

ETC

Node.js 서버 관련 정보 설명

JSKJS 2024. 1. 5. 14:36

두 개의 서버(=요청을 처리하는 기계)가 있습니다.
Node.js로 만들어 진 거 하나, 일반 서버 하나 이렇게 두 개가 있다고 가정해봅시다.
이 서버는 동일한 작업을 수행하는 서버입니다. 예를 들어 CGV 페이지라고 생각해봅시다.

손님이 예매할 영화의 티켓 수를 얘기(요청)하면
CGV 페이지의 서버가 요청을 받고 티켓을 줍니다(응답).
손님은 서버가 준 티켓을 받습니다.

일반 서버의 경우

손님이 4명 있다고 생각해봅시다.
1번째 손님은 티켓 1장을 요구해서 서버가 티켓 1장을 줬습니다.
2번째 손님은 1번째 손님이 가기를 기다렸다가 차례가 되면 예매를 합니다. 1장을 요구하고 서버에게 1장을 받고 갑니다.
그런데 3번째 손님이 200장을 예매합니다. 그러면 서버는 200장의 티켓을 준비하고, 3번째 손님은 기다립니다. 근데 문제는 4번째 손님도 3번째 손님이 마무리될 때까지 기다려야한다는 겁니다.

Node.js로 개발한 서버인 경우

모든 손님의 요청을 한번에 받습니다. 그리고 순서와 상관없이 처리 속도가 빠른 것부터 결과를 가져다줍니다. 처리 속도가 빠른 것부터 처리하기 때문에 요청을 놓치지 않고, 4번째 손님이 굳이 3번째 손님의 요청이 끝날 때까지 기다리는 문제도 사라졌습니다.
이게 Node.js의 Non-blocking I/O의 개념입니다.

Node.js의 강점

SNS나 채팅서비스에 많이 사용됩니다. 이런 서비스들의 특징이 요청이 매우 많다는 것입니다.
일반 서버로 구현하면 요청이 많거나 오래 걸리는 요청이 있으면 멈추거나 대기 시간 발생합니다. (일반 서버에서도 스케일링을 하거나 멀티쓰레드를 사용하면 사용할 수도 있긴합니다)
Node.js 서버로 구현하면 요청이 많거나 오래걸리는 요청이 있어도 멈추거나 요청 대기 시간이 발생하지 않습니다. 이런 Non-blocking 덕분에 채팅이나 SNS에 자주 사용됩니다.

Node.js는 코드가 매우 짧고 쉬워서 빠른 개발 가능(Pivoting이 잘됨)합니다.
정리하자면, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데 적합해서, 실시간 채팅이나 주식 차트 등에 노드를 많이 사용합니다.

이미 안정성과 보안성 측면의 문제도 충분히 검증되었습니다. 규모가 큰 에어비엔비, 넷플릭스, 링크드인 등에서 노드를 사용하고 있고, 페이팔이나 월마트 같이 결제 시스템을 사용하는 대기업에서도 노드로 서비스를 운영하고 있습니다.

Node.js의 단점

Node.js는 모두 스레드 하나에서 처리됩니다. 코드가 CPU 연산을 많이 요구하면 스레드 하나가 감당하기 어렵습니다. 그렇기 때문에 이미지나 비디오 처리, 대규모 데이터 처리 같이 CPU를 많이 사용하는 작업을 위한 서버로는 권장하지 않습니다. 노드보다 더 적합한 다른 언어들이 많기 때문입니다.