* JavaScript 구동 엔진인 V8의 등장
내가 짠 자바스크립트, 해석은 누가할까?
크롬(V8), 파이어폭스(SpiderMonkey), 익스플로러(Chakra) 이런 브라우저들이 자바스크립트를 읽고 해석하는 역할을 한다.
자바스크립트를 빠르게 읽고 해석하면 웹사이트 렌더링 성능도 빨라지니
브라우저 개발자들은 자바스크립트를 해석할 수 있는 엔진 개발에 열성이었습니다.
그러다가 구글 사내에 있던 '크롬 브라우저 개발자'들이 자바스크립트 해석엔진인 V8이라는 프로그램을 만들었는데 성능이 너무나도 뛰어난 나머지 V8에 살을 붙여 출시하게 됩니다.
그리고 Node.js라고 이름을 짓습니다.
* Node.js를 요약하자면
Node.js는 크롬의 자바스크립트 해석엔진으로 이루어져있다.
자바스크립트를 브라우저 말고도 로컬 PC에서도 실행시켜줄 수 있는 실행창(런타임)입니다.
Node.js를 실행하면 그냥 자바스크립트 입력란이 뜨고
거기다가 자바스크립트 입력하면 바로바로 해석해서 실행시켜줍니다.
근데 Node.js의 매력에 빠진 개발자들이 Node.js로 많은 프로그램들을 만들어내기 시작했습니다.
Node.js 덕분에 자바스크립트를 일반 프로그래밍 언어처럼 다룰 수 있게 된겁니다.
하지만 Node.js로 왜 웹서버를 만들기 시작했는가??
> Node.js를 Non-blocking 이라는 장점 때문에 사용합니다.
* Non-blocking이라는 특성의 예시
일단 서버를 하나 만들었다고 가정합시다. 온라인 영화예매 사이트입니다.
사용자가 영화를 예매하면 온라인 티켓을 보내주는 사이트라고 가정
일반 프로그래밍언어로 만든 서버와 Node.js 서버 두 경우를 한번 비교해보자
1. 일반 프로그래밍 언어로 만든 서버 ex) Python
요청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는 그냥 이렇게 완료가 빨리된 것부터 처리할 수 있게 설계된 런타임입니다.
왜 그런지 동작 원리가 궁금하신 분들은 Event Loop에 대해 확인해볼것
(참고) https://latte1114.tistory.com/348
* Node.js가 강점을 보이는 분야
바로 SNS, 채팅서비스 웹서버입니다.
SNS같은 플랫폼 만들 때 가장 중요한게 '한번에 많은 요청을 감당할 수 있냐' 입니다.
일반 서버의 경우 1초에 10만개의 요청이 들어오면 바로 처리해주기 위해선
- 똑같은 서버를 몇만대 복사해서 만들어 두거나 (Scaling)
- CPU 멀티쓰레딩을 이용하거나
- Node처럼 Non-blocking 스타일로 코드를 짜기
반면 Node.js 서버의 경우엔 애초에 설계상 한꺼번에 많은 요청을 받아줄 수 있으니
> 요청이 많거나 오래걸리는 요청이 있어도 멈추거나 요청 대기시간 x
> 코드가 매우 짧고 쉬워서 빠른 개발가능 (Pivoting 잘됨)
애초에 서버 덩치를 키울 걱정 자체가 적겠죠.
하지만 처리 속도라든지 이건 다른 문제입니다.
Node.js자체가 연산속도가 빠르다고 유명해진게 아니니까요.
(Node.js에게 피보나치 수열 계산 이런거 시키면 한참 걸립니다.)
* Node.js로 자주 만드는 것들
1. Node.js는 위에서 설명한 SNS, 채팅 서비스에 특화된 언어라고 보시면 됩니다.
이런 서비스는 요청처리에 힘든 수학적 연산을 요구하지 않습니다.
- 글자를 저쪽에 전달해주기
- 가끔은 여러명에게 전달해주기
대량, 하지만 처리가 간단한 요청이 들어오는 채팅, SNS 서비스에 Node.js를 많이 사용
2. Node.js는 스타트업, 프로토타입 만들기에서도 많이 사용합니다.
빠르게 시범서비스를 만들고 싶다면 Node.js는 좋은 선택이다.
- 일단 초보자에게도 쉽고
- 진짜 템플릿 몇개만 복붙해도 빠르게 서버를 만들 수 있습니다.
- 갑자기 사용자가 터져서 대량의 요청이 들어와도 나름 감당가능 (서버가 죽진 않음)
- 자바스크립트 문법만으로 프론트, 백엔드 전부 가능하다는 장점
Node.js의 단점으로는
처리속도가 떨어질 수 있습니다.
웹서비스에 특화 되어있어서 수학연산이나 이미지처리 같은 라이브러리가 부족할 수 있다.
Node.js가 제공하는 Non-blocking 처리방식은 다른 언어에서도 비슷하게 구현 가능하다.
'Study > Node.js' 카테고리의 다른 글
[Node.js_study] 서버에 GET 요청 처리 해보기 (0) | 2022.04.15 |
---|---|
[Node.js_study] npm과 yarn의 차이 (0) | 2022.04.15 |
[Node.js_study] Node.js와 Express 라이브러리 설치하기 (0) | 2022.04.15 |
[Node.js_study] 소스코드 수정시 자동으로 재시작 해주는 PM2, Nodemon (0) | 2021.12.22 |
[Node.js_study] npm 지역 설치와 전역 설치 (0) | 2021.12.21 |