Node.js

Node.js란??

svdjcuwg4638 2023. 5. 17. 16:11

node.js를 알기전에 서버부터 알아보자

'요청을 받으면 데이터를 보내주는 기계'입니다.

 

비유하자면 서버는 닭갈비집 알바생과 똑같은 역할을 합니다. 

닭갈비 2인분 주세요~ 하면 닭갈비 2인분 가져다주죠?

웹서버도 마찬가지로

네이버 웹툰 페이지 주세요~ 하면 네이버 웹툰 페이지를 가져다줍니다. 

그게 서버입니다. 그리고 우리는 그런 역할을 하는 프로그램을 만들 것이고요. 

 

그래서 서버개발자가 짜고 있는 코드를 잠깐 살펴보자면 

(흔한 서버 코드 예시)
if 누군가가 네이버 웹툰 메인페이지 요청을 하면 
네이버 웹툰 메인페이지 html을 보내줌

서버개발자는 위와 같은 코드를 하루종일 짜고 있는 사람들입니다.

"누가 A로 요청하면 B라는 파일을 보내줍니다~" 라는 코드를 100개 만들고 있는 사람들이에요. 

그래서 우리도 앞으로 이런 코드를 100개 짤것이니 각오하십시오. 

 

서버에 요청할 수 있는 4가지 방법 

웹서버에 유저가 정식으로 할 수 있는 요청은 4 종류가 있습니다. 

1. 읽기(GET) 요청 (웹페이지를 읽을 때)

2. 쓰기 혹은 생성 (POST) 요청 (글쓸 때, 로그인할 떄)

3. 수정 (PUT) 요청 (글이나 댓글 수정)

4. 삭제 (DELETE) 요청 (글이나 댓글 삭제)

 

이렇게 4개가 있습니다. 

 

가장 쉬운 GET 요청 방법만 한번 살펴보자

가장 쉬운 GET 요청은 웹페이지를 읽을 때 사용합니다. 

여러분 코딩하다가 갑자기 웹툰이 보고싶으면 어떡합니까.

네이버 서버에게 "네이버 웹툰 페이지를 읽고 싶어요~"

이렇게 요청하면 되겠죠?

 

정확히 말하면 네이버 서버에게 GET 요청(읽기 요청)을 하시면 됩니다. 

★ GET 요청을 하는 가장 쉬운 방법은 바로 브라우저 주소창에 URL을 입력하는 것입니다. 

 

브라우저의 URL입력란이 바로 GET 요청하는 곳입니다. (몰랐죠?)

여기에 알맞은 URL을 입력하면 네이버 웹툰을 자유자재로 읽을 수 있습니다.

그런데 URL을 외우는건 매우 어렵기 떄문에 웹개발자들은 버튼을 누르면 URL 이동을 할 수 있게 HTML을 짜놓는 것이와요.

 

그래서 서버를 어떻게 만드냐면

 

서버만드는 법은 그냥 코드를 이렇게 짜놓으면 끝입니다.

"어떤놈이 naver.com 으로 접속하면 메인페이지 HTML을 보내줌"

 

node.js

태초에 HTML이라는 언어가 있었습니다.

 

HTML은 별거 아니고 그저 웹페이지를 만들 때 사용하는 언어입니다. 

<p>안녕하세요</p>

이렇게 생겼고 웹페이지에 글, 그림, 버튼 이런걸 넣을 때 사용합니다. 

 

 

그리고 HTML과 함께 사용하던 JavaScript라는 언어가 있었습니다.

 

JavaScript는 별거 아니고 그저 웹페이지를 움직이게 만들 때 사용하는 언어입니다. 

document.getElementById('hello').innerHTML = '안녕';

대충 이렇게 생겼고 HTML을 마음대로 조작해서 내용을 바꾸고, 클릭하면 움직이게 만들고 이런게 가능합니다.

그래서 자바스크립트를 사용하면 로그인 모달창, 애니메이션 메뉴 이런 것들을 만들 수 있었죠.

 

JavaScript 구동 엔진인 V8의 등장

 

크롬, 파이어폭스, 익스플로러 이런 브라우저들이 자바스크립트를 읽고 해석하는 역할을 합니다.

자바스크립트를 빠르게 읽고 해석하면 웹사이트 렌더링 성능도 빨라지니

브라우저 개발자들은 자바스크립트를 해석할 수 있는 엔진 개발에 열성이었습니다. 

그러다가 구글 사내에 있던 '크롬 브라우저 개발자'들이 문제를 일으킵니다.

자바스크립트 해석엔진인 V8이라는 프로그램을 만들었는데 성능이 너무나도 뛰어난 나머지

V8을 자랑하려고 이것만 똑 떼어서 살을 붙여 출시하게 됩니다. 

그리고 Node.js라고 이름을 짓습니다. 

 

Node.js 를 한줄 요약하자면

 

자바스크립트를 브라우저 말고도 로컬 PC에서도 실행시켜줄 수 있는 실행창(런타임)입니다.

Node.js를 실행하면 그냥 자바스크립트 입력란이 하나가 뿅 뜨고요

거기다가 자바스크립트 입력하면 바로바로 해석해서 실행시켜줍니다. 

그게 Node.js의 끝입니다. 

 

근데 Node.js의 매력에 빠진 개발자들이 Node.js로 많은 프로그램들을 만들어내기 시작했습니다. 

Node.js 덕분에 하찮은 역할만 하던 자바스크립트를 일반 프로그래밍 언어처럼 다룰 수 있게 된겁니다.

 

noe-blocking

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는 그냥 이렇게 완료가 빨리된 것부터 처리할 수 있게 설계된 런타임입니다.

왜 그런지 동작 원리가 궁금하신 분들은 Event Loop에 대해 검색해보십시오.

저보다 설명잘하는 유튜브 영상이 하나 나옵니다.

(근데 영어임 ㅅㄱ)

 

 

 

 

Node.js가 강점을 보이는 분야는

 

바로 SNS, 채팅서비스 웹서버입니다. SNS같은 플랫폼 만들 때 가장 중요한게 '한번에 많은 요청을 감당할 수 있냐' 입니다. 

일반 서버의 경우 1초에 10만개의 요청이 들어오면.. 바로 처리해주기 위해선

- 똑같은 서버를 몇만대 복사해서 만들어 두거나 (Scaling)

- CPU 멀티쓰레딩을 이용하거나

- Node 처럼 Non-blocking 스타일로 코드를 짜거나

합니다. 

 

 

반면 Node.js 서버의 경우엔 애초에 설계상 한꺼번에 많은 요청을 받아줄 수 있으니

애초에 서버 덩치를 키울 걱정 자체가 적겠죠.

하지만 처리 속도라든지 이건 다른 문제입니다.

Node.js자체가 연산속도가 빠르다고 유명해진게 아니니까요.

(귀여운 노드쨩에게 피보나치 수열 계산 이런거 시키면 한참 걸립니다)

 

 

 

 

Node.js로 자주 만드는 것들

 

1. 노드쨩은 위에서 설명한 SNS, 채팅 서비스에 특화된 언어라고 보시면 됩니다.

이런 서비스는 요청처리에 힘든 수학적 연산을 요구하지 않습니다. 

- 글자를 저쪽에 전달해주기
- 가끔은 여러명에게 전달해주기

이게 끝입니다. 채팅 서비스가 이런 요청 말고 더 필요한 요청이 있나요?

그래서 대량, 하지만 처리가 간단한 요청이 들어오는 채팅, SNS 서비스에 Node.js를 많이 사용합니다. 

 

2. 노드쨩은 스타트업, 프로토타입 만들기에서도 많이 사용합니다. 

빠르게 시범서비스를 만들고 싶다면 Node.js는 좋은 선택입니다.  

- 일단 초보자에게도 쉽고

- 진짜 템플릿 몇개만 복붙해도 2시간만에 빠르게 서버를 만들 수 있습니다. 

- 갑자기 사용자가 터져서 대량의 요청이 들어와도 나름 감당가능 (서버가 죽진 않음)

- 자바스크립트 문법만으로 프론트, 백엔드 전부 가능하다는 장점

 

 

단점

은 .. 처리속도가 떨어질 수 있다, 수학연산이나 이미지처리 같은 라이브러리가 부족할 수 있다, Node.js가 제공하는 Non-blocking 처리방식은 다른 언어에서도 비슷하게 구현 가능하다 이런게 있습니다.