닭갈비집 알바생이라고 생각하자. 알바생이 손님이 주문을 하면 음식을 서빙해주는 것처럼, server는 요청을 받으면 요청한 내용을 보내주는 프로그램이다.
- 어떤 요청인가?
요청에는 4개의 방식이 있다.
1) 읽기(GET) - 나는 어떤 페이지를 읽고 싶어!라는 요청
2) 쓰기(POST) - 댓글 작성, 블로그 포스트 작성해서 무언가 생성하고 싶을 때 사용, 이 글 좀 올려주세요~~할 때 요청
3) 수정(PUT) -뭔가 수정할 때 요청
4) 삭제(DELETE) - 뭔가 삭제할 때 요청
=> 사용자는 GET/POST/PUT/DESETE 요청 가능
이제 Node.js 환경에서 JavaScript 문법으로 서버를 만들 예정이다.
JavaScript 런타임이다.
JavaScript는 HTML파일을 위해 만들어진, HTML에 종속된 언어이다. HTML은 정적인 언어라 안움직이기 때문에, JavaScript를 통해 HTML 조작과 변경을 함.
그럼 JavaScript는 누가 돌릴까? 누가 해석할까?
=> 브라우저!
그래서 브라우저마다 JavaScript를 해석할 수 있는 엔진이 존재한다. (크롬은 V8, 익스플로러는 Chakra, 모질라는 SpiderMonkey)
크롬의 JavaScript 해석엔진인 V8이 너무 뛰어나서, 해석엔진만 크롬에서 떼어내 출시를 하게 된다. 이게 바로 Node.js
즉 Node.js는 크롬의 자바스크립트 해석엔진으로 이루어짐. JavaScript라는 언어를 브라우저 내에서 말고도 다른 환경에서도 JavaScript를 실행할 수 있게 만들어놓은 것이 Node.js이다.
=> 쉽게 말하면 JavaScript 실행창, 실행환경(=런타임)이다.
Node.js로 서버도 만들 수 있는데, 왜 사용할까?
=> Non-blocking I/O가 좋기 때문이다.
예를 들어 영화예매 웹서버를 만들 때, 다른 언어들은 요청을 한 명씩 받다가, 단체석 예매처럼 오래걸리는 작업이 들어오면 그 작업을 하는동안 멈춘다. 즉 버거운 요청이 들어오면 서버가 잠시 멈추기 때문에 뒤에 다른 작업들은 계속 대기해야한다.
Node.js는 예매하려고 줄 서 있는 사람들의 요청을 한꺼번에 다 받는다. 그리고 순서에 상관없이 처리속도가 빠른 요청부터 하나씩 처리한다. 즉 중간에 어려운 요청이 들어오면, 그거 하나 처리하느라 시간을 쏟지않고 빠르게 해결할 수 있는 것부터 처리한다. => Node.js의 Non-blocking I/O