NodeJS란 무엇인가? (기타 기술면접)

cptkuk91·2022년 6월 13일
2

Algorithm

목록 보기
11/161
post-custom-banner

NodeJS란?

Chrome V8엔진을 이용해 브라우저에서 JavaScript를 해석하듯이 서버에서 JavaScript를 동작할 수 있도록 하는 환경(플랫폼)입니다.

서버 웹 응용프로그램을 만들 때 사용됩니다. Node.js는 비동기식 이벤트 기반 모델을 사용해 데이터 집약적인 애플리케이션에 적합합니다. 실시간 웹 애플리케이션, 네트워크, 범용 및 분산 시스템 개발에 사용할 수 있습니다.

NodeJs를 사용하는 이유

Node.js를 사용하면 확장 가능한 네트워크 프로그램을 쉽게 구축할 수 있습니다.

뛰어난 동시성을 제공하고, 비동기적으로 작동해 빠릅니다.

(자바스크립트는 싱글쓰레드입니다. 따라서 병렬성을 지원할 수 없습니다. 동시성: 흐름을 실행시키는 것은 하나입니다. 다른 흐름을 돌아가면서 실행시켜 동시에 일어나는 것 처럼 보이게 하는 방식입니다. 병렬성: 실제 흐름을 실행시키는 것이 여러개라서, 각각 실행 흐름을 할당받아 동시에 실행시킵니다.)

NodeJS 작동 원리

  1. 클라이언트는 웹 애플리케이션과 상호작용하기 위해 웹 서버에 요청을 보냅니다.
  2. 데이터를 쿼리합니다.
  3. 데이터를 업데이트 합니다.
  4. NodeJS는 요청을 검색해 이벤트 대기열에 추가합니다.
  5. 이벤트루프를 통해 하나씩 전달됩니다.
  6. 이벤트루플는 I/O 요청을 처리하고 해당 클라이언트에 응답을 반환합니다.

NodeJS가 단일 스레드인 이유

NodeJS는 비동기처리를 위한 싱글 스레드입니다. 웹 로드를 할 때 단일 스레드에서 비동기처리를 수행하면 일반적인 스레드 기반 구현 대신 더 많은 성능과 확장성을 얻을 수 있습니다.

NodeJS에서 Callback이란?

콜백함수는 주어진 작업 후 호출 됩니다. 그동안 다른 코드를 실행할 수 있으며 블로킹을 방지합니다. 비동기이기 때문에 NodeJS는 콜백에 크게 의존합니다. Node의 모든 API는 콜백을 지원하도록 작성되었습니다.
(비동기 처리 방식의 문제점을 해결하기 위해 사용하는 함수입니다.)
(비동기 처리 방식이란? 시간이 오래걸리는 일은 요청 시 백그라운드에서 작업을 하고 요청과 결과가 동시에 일어나지 않습니다.)

(추가 질문)
(콜백지옥에 문제에 대한 해결방법)

1번 세탁기를 돌린다. // 1시간
2번 커피를 내린다. // 10분
3번 장을 본다. // 30분

세탁기를 돌리고 세탁기가 돌아가는 동안 커피를 내려놓고 장을 봐온다. 동기식은 요청과 결과가 동시에 일어나기 때문에 1시간 40분이라는 시간이 소요된다. 하지만 비동기식으로 작업한다면 1시간 + @로 작업을 효율적으로 할 수 있다.

NodeJS가 가장 많이 사용될까?

  • 실시간 채팅
  • 사물 인터넷
  • 복잡한 SPA
  • 스트리밍 애플리케이션
  • 마이크로 서비스 아키텍처

(SPA란?, 마이크로 서비스 아키텍처란?)
SPA: Single Page Application으로 어떤 웹 사이트의 전체 페이지를 하나의 페이지에 담아 동적으로 화면을 바꿔가며 표현하는 것이 SPA입니다. 클락하거나 상호작용 시 최소한의 요소만 변경이 일어나고 페이지 변경이 일어난다고 보여지는 것 또한 최초 로드된 자바스크립트를 통해 미리 브라우저에 올라간 템플릿만 교체됩니다.)

마이크로서비스 아키텍처: 하나의 큰 애플리케이션을 여러 개의 작은 서비스 유닛으로 쪼개 변경과 조합이 가능하도록 만든 아키텍처를 말합니다. 서비스 전체 사이클은 몇 가지 단일 기능 모듈 합으로 이루어지며, 해당 모듈은 개별적으로 배포되고 운영됩니다.
(전통적인 방식은 모든 기능 코드가 한 서버에 배포됩니다. 마이크로 서비스를 통해 개별 서버를 갖고 있게 됩니다. 각 마이크로 서비스를 통해 상호 통신이 가능하고 전체 서비스를 구성하게 됩니다.)

NPM이란?

NodeJS의 모든 패키지와 모듈을 관리하는 Node Package Manager의 약자입니다.

package-lock.json
package.json은 특정 버전이 아니라 버전의 범위를 의미합니다. package-lock.json의 경우 특정 버전을 명확하게 선언하기 때문에 의존성 트리에 대한 정확한 정보를 가지고 있게 됩니다. 안정성을 유지하는 데 도움을 줍니다.

모듈이란?

(생각해보지 못했다.)

NodeJS의 장점과 단점

장점: 빠른 처리 및 이벤트 기반 모델 JavaScript의 높은 접근성 NPM을 통해 50,000개 이상 패키지 사용이 가능합니다.

단점: 무거운 계산 작업에 부적합하고, 여러 중첩 콜백으로 복잡도가 올라갑니다. 싱글 쓰레드이기 때문에 CPU 집약적 작업에 부적합합니다.

EventLoop란?

이벤트루프란 NodeJS에서 비동기 콜백을 처리합니다. NodeJS의 논블로킹 I/O의 기반이 되며 가장 중요한 환경 기능 중 하나입니다.
(좀 더 자세하게 적어보기..)

Express.js란?

Express는 웹 및 모바일 애플리케이션을 모두 개발할 수 있는 다양한 기능을 제공하는 유연한 NodeJS 웹 애플리케이션 프레임워크입니다. request 객체는 HTTP 요청을 나타내며, response는 HTTP 응답을 나타냅니다.

NodeJS에서의 비동기 구현

Async, Await을 이용해 비동기 구현이 가능합니다.

async function foo(req, res) {
	let response = await request.get("http://localhost:3000");
    if(response.err){
    	console.log(err);
    } else {
        console.log("Hello World");
    }
}

Async/Await이 Callback, Promise 보다 좋은 점
코드가 간결해지고, 가독성이 높아진다. (try, catch를 통해 에러를 핸들링 할 수 있다.)
에러가 어디서 발생하는지 알 수 있다.

NodeJS에서 미들웨어란?

(추가적인 자료 조사가 필요합니다.)
미들웨어는 요청 및 응답 객체를 수신하는 기능입니다.
(모든 코드 실행, 요청 및 응답 업데이트 또는 수정)

HTTP

  • GET: 데이터 검색에 사용
  • POST: 일반적으로 서버 상태 또는 반응을 변경할 때 사용
  • HEAD: 응답 본문 없이 응답 요청
  • DELETE: 소정의 자원을 삭제할 때 사용

ES5와 ES6의 차이

let, const 키워드가 추가됐습니다.
let의 경우 재할당이 가능하고, const는 재할당이 불가능합니다.

클로저 함수란?

클로저는 어떤 함수가 자신의 내부가 아닌 외부에서 선언된 변수에 접근하는 것을 뜻합니다.
함수 내에서 함수를 정의하고 사용하면 클로저라고 합니다.

클로저 함수를 통해 캡슐화 은닉화가 가능합니다.
(캡슐화 은닉화란?)

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)
post-custom-banner

0개의 댓글