들어가기 전
NodeJS를 통해 우리가 서버를 만들 수 있다. 그래서 많이들 오해하는 것이 있다. "NodeJs는 서버" 라는 것이 그 대표적인 예시다. 사실 NodeJs는 서버가 아니다. 그럼 NodeJs는 무엇이며 어떤것인지 알아보도록 하겠다.
[이 글은 작년에 포스팅 했지만 내가 부족한 것을 다시 채워넣고 다시 상기시키고자 글을 다시 수정하려고 한다.]
[출처] : https://www.youtube.com/watch?v=i47_HXjGjA0
목차
1. NodeJs란?
2. NodeJs의 특징
3. NodeJs의 장점
1. NodeJs 란?
위에서 언급했듯이 NodeJs는 서버가 아니다. JavaScript를 실행 시켜주는 런타임 환경 중 하나다. 원래 JavaScript는 브라우저에서만 실행할 수 있는 언어였다. 시간이 지남에 따라 JavaScript 엔진의 기능이 많아지면서 브라우저뿐만 아니라 JavaScript를 실행할 수 있는 환경을 필요로 하게 됐다. 그렇게 생겨난 것이 CommonJs 이고 NodeJs다.
"나중에 기회가 되면 NodeJs의 역사에 대해서 글을 써보려고 한다"
[NodeJs 요약]
- Javascript *런타임 환경이다.
런타임 환경 : 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태이다.
(쉽게 말해 프로그램이 실행할 수 있는 환경을 의미한다.)
- 자바스크립트를 사용해서 서버측 로직 코드를 작성하고 서버를 구축할 수 있게 도와준다.
- 크롬 *v8 Javascript 엔진으로 빌드되었다.
2. NodeJs의 특징
NodeJs의 특징으로는 크게 4가지가 있다.
1) Event-driven architecture
이벤트를 실행하면 이벤트로 등록한 작업을 수행
자바스크립트로 클릭같은 이벤트에 콜백함수를 작성하고
이벤트 기반의 특정 이벤트 발생하면 전달한 콜백함수를 호출해서 실행시킨다.
(이와 같은 내용을 '이벤트 리스너에 콜백함수를 등록한다.'라고 한다.)
2) Asynchronous programming
nodeJs에서 '비동기 I/O' 작업을 진행하는 동안 또 다른 작업을 실행할 수 있다.
3) Non-blocking I/O
Input/Output : 파일 시스템(브라우저에서 파일을 조작할 수 없고) 네트워크 디스크 등 데이터를 읽거나 쓰거나 하는 작업
(NodeJs는 무거운 작업의 속도가 빠르다.)
NodeJs는 I/O 작업을 수행하는 동안 다른 코드들을 실행할 있게 하는 논블로킹 I/O 에 해당한다.
반대로 블로킹은 한 작업이 끝날 때까지 다른 작업을 수행하지 않는 것을 의미하며
수행하는 동안 다른 코드를 중단시킬 수 있다.
4) Single-threaded execution
위의 네가지의 공통점은 멀티태스킹을 편리하게 만드는 개념이라는 것이다.
3. NodeJs의 장점
1) 하나의 언어로 프론트와 백엔드를 개발할 수 있다
JavaScript를 이용해 백엔드, 프론트엔드 구축 가능
2) npm과 같은 서드파티 모듈이 많다.
서드파티 모듈이란 NodeJs 제작 업체와 개발자 외에 다른 사람이 만들어 놓은 기능
(이미 다른 사람들이 만들어 놓은 모듈이 많으므로 가져다 사용하면 된다.)
3) 개발자 커뮤니티가 크고 다양하다.
커뮤니티가 많다는 것은 여러 환경에서 사용자들끼리 피드백이 활발하고 지역별 또는 주제별로 다양한 논의가 이루어진다는 것을 의미한다.
마무리
NodeJs가 무엇인지 어떤 특징을 가졌는지에 대해 알아봤다. 프론트엔드도 NodeJs를 통해 백엔드를 공부해본 다면 진짜 폭넓은 지식을 가질 수 있을 것이다. JavaScript를 통해 백엔드를 구축할 수 있는 시대에(?) 태어난 것에 감사한 마음이 들기도한다.
'BackEnd > NodeJs' 카테고리의 다른 글
스트림(Stream) 사용 예제 (0) | 2024.06.12 |
---|---|
버퍼 (Buffer) / 스트림 (Stream) (1) | 2024.06.11 |
TCP 서버 간단하게 구현하기 (0) | 2024.06.10 |
[NodeJs] 모듈, require, module.exports와 exports (0) | 2024.06.05 |
[NodeJs] REPL 모드 (0) | 2024.06.04 |