Node.js란 자바스크립트를 실행시키는 런타임환경으로,
특징은 단일쓰레드 이벤트 루프 기반과 비동기, 논블로킹 I/O모델입니다.
< 첫번째 특징 : 싱글쓰레드 이벤트루프 >
Node.js는 멀티쓰레드 대신에 이벤트루트 기반의 싱글쓰레드를 선택했습니다.
멀티쓰레드의 경우, 자원의 낭비가 발생하고, 상대적으로 비효율적이고, 교착상태(데드락)을 발생시킬 가능성이 높습니다.
이벤트루프 : https://pyoja.tistory.com/243
이벤트 루프는 자바스크립트에서 비동기 작업을 처리하는 방식입니다.
이벤트 루프는 스택이 비어있는지 계속 확인하고, 비어있다면 큐에서 작업을 하나씩 꺼내서 스택에 넣습니다.
이 방식을 통해 자바스크립트는 싱글 스레드임에도 비동기 처리가 가능하게 됩니다.
< 두번째 특징: 비동기, 논 블로킹 I/O 모델 >
Node.js에서 I/O를 직접 수행하는 함수는 거의 없으므로 프로세스는 블로킹 되지 않습니다.
그러므로 Node.js에서는 확장성 있는 시스템을 개발하는 것이 아주 자연스럽습니다.
동기/비동기 : https://pyoja.tistory.com/244
동기는 요청을 보낸 후 응답을 받아야지만 다음 동작이 이루어지는 방식입니다.
어떠한 작업을 처리한 동안, 나머지 작업은 대기합니다.
실제로 CPU가 느려지는 것은 아니지만 시스템의 전체적인 효율은 저하된다고 할 수 있습니다.
반면에 비동기는 요청을 보낸후, 응답 수락 여부와는 상관없이 다음 작업이 동작하는 방식입니다.
자원을 효율적으로 사용할 수 있으며, 비동기 요청이 완료되었을 때 콜백 함수가 자동으로 호출되어 작업을 처리합니다.
하지만 비동기 처리를 위해 여러개의 콜백함수를 중첩시키면 콜백지옥이 발생합니다.
이를 해결하기 위해 Promise를 도입하였고, 코드의 가독성을 높이기 위해 Async / Await가 추가로 도입되었습니다.
< 예상되는 질문리스트>
1. Node.js에 대해 설명해주세요.
Node.js는 확장성 있는 네트워크 애플리케이션 (특히 서버 사이드)에 사용되는 소프트웨어입니다.
자바스크립트를 활용하며, 논블로킹 I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있습니다.
( 서버 사이드(server-side)란 클라이언트-서버 모델에서 서버 측에서 일어나는 일을 말합니다.)
2. Node.js가 확장성이 크다는 이유는 무엇일까요?
Node.js는 비동기 I/O를 사용함으로써 상대적으로 적은 리소스 사용량으로 많은 수의 동시 연결을 처리할 수 있습니다.
이벤트 루프는 여러 요청의 실행을 효율적으로 관리하여 하나의 요청이 다른 요청을 차단하지 않도록 합니다.
Node.js는 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능합니다.
V8의 기능을 활용하여 높은 처리량과 낮은 대기 시간을 달성하여 성능이 뛰어난 네트워크 애플리케이션을 개발하는 것에 적합합니다.
또한 NPM을 통해 다양한 모듈을 사용함으로써 개발속도와 효율성이 크게 향상됩니다.
이러한 이유로 Node.js가 확장성이 큰 네트워크 어플리케이션에 사용되는 소프트웨어라고 할 수 있습니다.
3. Node.js를 어떻게 웹 애플리케이션 구축할 수 있을까요?
일반적으로 Node.js에서는 Express와 같은 웹 프레임워크를 사용하여 웹 애플리케이션을 구축합니다. Express는 Node.js에서 가장 널리 사용되는 웹 프레임워크 중 하나로, 미들웨어와 라우팅 기능을 제공하여 웹 애플리케이션 개발을 쉽게 할 수 있도록 도와줍니다.
4. Express에 대해 설명해주세요.
Express는 Node.js에서 가장 널리 사용되는 웹 프레임워크 중 하나입니다.
Express는 웹 애플리케이션 개발을 쉽게 할 수 있도록 미들웨어와 라우팅 기능을 제공합니다.
미들웨어는 요청과 응답 사이에서 실행되는 함수로, 요청을 처리하거나 응답을 수정하는 등의 작업을 수행할 수 있습니다.
Express에서는 다양한 미들웨어가 제공되며, 개발자가 직접 미들웨어를 작성할 수도 있습니다.
라우팅은 클라이언트로부터 들어오는 요청을 적절한 핸들러 함수로 전달하는 기능입니다.
Express에서는 간단한 API를 통해 라우팅을 설정할 수 있습니다.
5. NPM에 대해 설명해주세요.
NPM은 Node Package Manager의 약자로, Node.js의 패키지 관리자입니다.
NPM은 수많은 패키지를 제공하므로 개발 속도와 효율성을 크게 향상시킬 수 있습니다.
6. Node.js는 멀티스레딩을 지원합니까? (= Node.js는 CPU 집약적인 작업을 어떻게 처리합니까?)
Node.js는 기본적으로 단일 스레드로 작동합니다. 하지만 Node.js에서는 멀티스레딩을 지원하는 몇 가지 방법이 있습니다.
Node.js의 child_process 모듈을 사용하면 자식 프로세스를 생성하여 멀티스레딩과 유사한 작업을 수행할 수 있습니다.
또한, cluster 모듈을 사용하면 다수의 코어에 로드 밸런싱이 가능하도록 프로세스 간에 소켓을 공유할 수 있습니다.
그리고 worker_threads 모듈을 사용하여 멀티스레딩을 지원합니다. worker_threads 모듈을 사용하면
새로운 스레드를 생성하고 데이터를 주고받을 수 있습니다.
7. Node.js를 프런트엔드 JavaScript 프레임워크와 통합할 수 있습니까?
Node.js는 프런트엔드 JavaScript 프레임워크와 통합하여 사용할 수 있습니다.
Node.js는 백엔드에서 사용되는 JavaScript 런타임이며, 프런트엔드 JavaScript 프레임워크는 클라이언트 사이드에서 사용됩니다.
Node.js와 프런트엔드 JavaScript 프레임워크를 통합하여 사용하면, 백엔드와 프런트엔드 간의 데이터 교환을 쉽게 할 수 있습니다.
예를 들어, Node.js에서 Express와 같은 웹 프레임워크를 사용하여 RESTful API를 구현하고,
프런트엔드에서는 이 API를 호출하여 데이터를 주고받을 수 있습니다.
Node.js는 React, Angular, Vue.js 등의 다양한 프런트엔드 JavaScript 프레임워크와 함께 사용할 수 있습니다.
8. 프로젝트에서 Node.js를 사용하는 장점과 단점은 무엇입니까?
Node.js를 사용하는 장점으로는 다음과 같은 것들이 있습니다.
빠른 개발 속도: Node.js는 JavaScript 언어를 사용하며, npm을 통해 다양한 패키지를 제공합니다. 이를 통해 개발 속도를 높일 수 있습니다.
확장성: Node.js는 이벤트 기반, Non-blocking I/O 모델을 사용하여 확장성이 높습니다. 높은 부하에서도 안정적으로 작동할 수 있습니다.
통합성: Node.js는 JavaScript 프레임워크와 쉽게 통합할 수 있습니다. 백엔드와 프런트엔드 간의 데이터 교환을 쉽게 할 수 있습니다.
Node.js의 단점으로는 다음과 같은 것들이 있습니다.
단일 스레드: Node.js는 단일 스레드로 작동하기 때문에 CPU 집약적인 작업을 처리하는 데 어려움이 있을 수 있습니다.
콜백 지옥: Node.js에서 비동기 작업을 처리할 때 콜백 함수를 사용하는 경우, 코드의 가독성이 떨어지고 콜백 지옥에 빠질 수 있습니다.
'코딩공부 > 개발지식' 카테고리의 다른 글
[20회 - 데일리과제] JWT / 완전탐색 (0) | 2023.05.11 |
---|---|
[2회] Nest.js (0) | 2023.05.11 |
[19회 - 데일리과제] TCP와 UDP / MST 알고리즘 (0) | 2023.05.10 |
[18회 - 데일리과제] OSI 7계층 / DP 알고리즘 (0) | 2023.05.08 |
[17회 - 데일리과제] DFS & BFS / Isolation level (0) | 2023.05.08 |