백엔드 면접 스크립트 - Node.js

2022. 12. 6. 20:56·BE Study
반응형
해당 자료는 SimpliLearn에서 제공하는 Top 50+ Node.js Interview Questions and Answers for 2023을 토대로 작성되었습니다.

 

 


< 해당 자료는 여러 번의 검토를 통해 최대한 오류 없이 작성하였습니다 >

 

Node.js

 

1. Node.js는 무엇이고 어디에 사용하는가?

- Node.js는 브라우저 외부에서 application을 실행하기 위한 자바스크립트 런타임 환경입니다. 웹 프로그램의 서버를 만드는데 주로 사용됩니다. Node.js는 비동기식 이벤트 중심 모델을 사용하므로 입출력이 많은 데이터 집약적 애플리케이션에 적합합니다. 

 

2. Node.js를 사용하는 이유는?

- I/O요청이 많은 서버에 사용하기 적합하다. (논블로킹 방식으로 처리하기 때문에)

- 따라서, 실시간 데이터를 주고받는 작업에 적합하다.

- 싱글 스레드 방식이기 때문에 상대적으로 서버 구축이 쉽다.

- 한 가지 언어로 웹 페이지 전체를 만들 수 있다.

- npm을 통한 다양한 확장 모듈을 사용할 수 있다(확장성이 높다)

 

3. Node.js는 어떻게 작동하나?

- 기본적으로 Node.js는 싱글 스레드로 동작하는 언어입니다. 하지만, 동시성을 위하여 Event loop라는 개념을 가지고 Non-blocking I/O를 실행할 수 있습니다. 

 

4. Node.js가 단일 스레드인 이유는?

- 동시성을 위해 node.js의 백그라운드에서는 콜백에 대한 처리가 멀티 스레드에서 이루어진다. 그렇기에 Node.js를 단일 스레드라 할 수 없지만, 이벤트 루프 자체가 JavaScript로 이루어져 있고 이는 싱글 스레드로 작동되기에 싱글 스레드라 표현하는 것이 일반적이다.

 

5. Node.js에서 callback이란?

- 다른 함수에 인자로 이용되는 함수 또는 어떠한 이벤트에 의해 호출되는 함수를 callback 함수라 한다.  callback 함수가 실행되는 동안 다른 코드를 실행할 수 있으며 차단을 방지합니다. 비동기 방식이기 때문에 Node.js는 콜백에 크게 의존한다. 

 

6. I/O란?

- Input과 Ouput을 의미한다. 파일 시스템 접근하여 읽기 쓰기 등을 하거나 네트워크를 통한 요청 같은 작업도 I/O의 일종입니다.

 

7. Node.js가 어디에 많이 사용되나?

- 비동기식 이벤트 중심적 모델을 사용하는 데이터 집약적 애플리케이션에 적합하므로 실시간 채팅, iot, 스트리밍, 주식 차트 서비스 등과 같이 데이터를 많이 주고받는 API 서버에 많이 사용한다.

 

8. NPM이란?

- Node.js의 모든 패키지와 모듈을 관리하는 Node package Manager의 약자이다. 다른 사용자들이 만들어 놓은 모듈을 NPM을 통해 간단히 다운로드하여 사용할 수 있다.

 

9. Node.js Module?

- 독립된 기능을 갖는 함수들의 모임이라고 표현할 수 있다. legercy 방식인 절차 지향으로 모든 기능을 써내려 가는 것과 달리 기능별로 함수를 만들어 필요 부분에 함수를 호출하는 방식으로 프로그램의 유지보수성을 높일 수 있다. 모듈에는 node.js에 기본적으로 저장되어있는 core module이 있고, 이를 제외한 직접 만든 모듈이나 npmjs.com에서 받아서 사용할 수 있는 모듈들을 local mudule이라고 합니다.

 

10. Java, PHP 등에 대비한 Node.js의 장점은?

- compile 등의 과정이 없이 소스코드를 바로 번역하여 즉각적으로 실행하여 결과를 바로바로 확인할 수 있다.

- API가 데이터를 반환할 때까지 기다리지 않기 때문에 데이터 집약적 실시간 웹에 적합하다.

- NPM에 개발자들이 사용할 수 있는 무수히 많은 라이브러리들이 있다.

- 동일안 언어 사용으로 클라이언트와 서버의 동기화를 향상한다.

- 진입장벽이 낮다.(single thread 방식이기 때문에)

 

11. Node.js에서 가장 일반적으로 사용되는 라이브러리는?

- Express: 서버를 쉽게 구성할 수 있게 만드는 프레임 워크이다.

- Mongoose, mysql: 애플리케이션을 데이터 베이스에 쉽게 연결할 수 있게 해 주는 프레임 워크이다.

 

12. Node.js의 장단점은?

- 장점

  - 클라이언트와 동일한 자바스크립트를 사용하여 서로 간의 동기화를 향상할 수 있다.

  - Non-blocking 이벤트 기반 비동기 방식으로 처리되어 높은 처리 성능을 가지고 있다.

  - npm을 통해 다양한 패키지를 제공받을 수 있다.

 

- 단점

  - 비동기 방식이 콜백을 이용하여 로직이 작성되는데 이로 인해 로직이 복잡할 경우 콜백 지옥에 빠질 수 있다.

  - Single Thread이기 때문에 하나의 작업 자체가 복잡한 웹서비스에는 어울리지 않는다.

  - Node.jsd의 언어인 JavaScript가 인터 프리티 방식이기 때문에 코드가 수행되어야 에러의 여부를 파악할 수 있고, 에러가 날 경우 프로

    프로세스가 멈추기 때문에 케이스별 테스트 과정이 필요하다.

 

13. 외부 라이브러리를 가져오는 방법은?

- "require / exports"명령를 통해 외부 라이브러리를 가져올 수 있다. ES6부터 새로 도입된 "import / export"도 있지만 서로 차이를 알고 써야 한다.

  - require는 CommonJS를 사용하는 node.js문이지만 import는 ES6에서만 사용 가능하다.

  - require / exports는 모듈 전체를 치환하여 내보내고, import / export는 모듈 내에 정의된 특정한 부분만을 불러올 수 있다.

  - require는 사용될 코드 파일 안에 있으면 가능하지만 import는 항상 맨 위에 있어야 한다.

  - 하나의 프로그램에서 두 키워드를 동시에 사용할 수 없다.

 

14. 이벤트 중심 프로그램이란?

- 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다. Node.js는 이벤트 리스너에 등록해둔 콜백 함수를 실행하는 방식으로 동작한다.

 

15. Event Loop?

- 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 ㅅㄹ행 순서를 결정하는 역할을 담당합니다. 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 부른다.

 

16. Package.json 파일이란 무엇인가?

- 서비스를 만들다 보면 여러 가지 패키지를 추가하게 되는데 패키지가 계속 늘어나게 되면 해당 패키지를 기록해둘 곳이 필요해진다. 이를 Package.json에 저장할 수 있다. 뿐만 아니라 같은 패키지라도 버전별로 기능이 다를 수 있기 때문에 프로젝트를 설치할 때 패키지도 동일한 버전으로 설치해야 한다. 이 또한 package.json에 기록하고 관리해야 한다. 따라서, 노드 프로젝트를 시작하기 전에는 폴더 내부에 무조건 package.json을 만들고 시작해야 한다.

 

23. Node.js의 Stream?

- 영상파일과 같이 용량이 큰 데이터를 처리해야 하거나, 비동기적으로만 얻을 수 있는 network input 등을 처리할 때 사용하는 node에서 가장 중요한 데이터 타입 중 하나입니다.

- stream이 가능한 source(file, network input)로 부터 핸들러에게 해당 data를 여러 개의 chunk로 나누어 입출력하는 형태의 구현 방식을 취하고 있다.

- data, error, end 등의 이벤트 핸들러를 달아 처리한다.

- 데이터 타입을 특별히 지정하지 않으면 data는 buffer가 된다.

 

24. Node.js로 Hello World를 반환하는 간단한 서버는 어떻게 만드나?

const http = require('http');
const PORT = 3000;

const server = http.createServer((req, res) => {
	res.writeHead(200, {'Content-type':'text/plan'});
	res.end('Hello World');
});

server.listen(PORT, () => {
	console.log(`this server is listening at port: ${PORT}`);
});

 

25. Node.js의 비동기 및 Non-blocking?

- 모든 Node.js 라이브러리 API는 비동기식이므로 non-block이다.

- Node.js 기반 서버는 API가 데이터를 반환할 때까지 기다리고 있지 않는다. 대신 호출 후 다음 API로 이동하고 Node.js 이벤트의 알림 메커니즘이 이전 API 호출에 대해 서버에 응답합니다.

 

26. Node.js에서 비동기를 어떻게 구현하나?

- Promise/then 또는 async/await 구문을 통해 비동기 코드를 구현할 수 있다.

- Promise/then

  - Promise는 순차적으로 여러 콜백 함수를 실행시켜야 할 때 복잡도와 예외처리의 어려움을 해결해준다

  - 성공 여부에 따라 resolve, reject 함수를 실행시킬 수 있다. 성공 여부에 따라 then과 catch로 결괏값을 가져올 수 있다.

- async/await

  - 비동기 처리에 절차적인 프로그래밍이 가능하도록 가독성을 높인 문법이고 에러가 어디서 발생하는지 알기 쉽다.

  - 외부 함수에 async를 앞에 붙여주고 내부 비동기 처리 함수에 await을 앞에 붙여준다. 성공 여부는 try와 catch 문법으로 구분할 수 있다.

 

27. module.exports의 목적은?

- Node.js의 모듈은 모든 관련 코드를 단일 코드 단위로 캡슐화하는 데 사용되며 모든 관련 함수를 단일 파일로 해석할 수 있습니다. module.exports를 사용하여 모듈을 내보낼 수 있으며 필수 키워드를 사용하여 다른 파일로 가져올 수 있습니다.

 

 

28. Node.js의 콜백 함수는 무엇인가?

- 콜백은 주어진 작업이 진행된 후 호출되는 함수이다. 비동기적으로 실행할 수 있다. 하지만 복잡한 로직에 의해 콜백 헬에 빠지게 될 수도 있으므로, Promise, then이나 async/await을 활용하여 가독성 있는 코드를 짤 수 있다.

 

29. 제어 흐름 기능은?

- 비동기적으로 실행되는 함수를 동기적으로 흐름을 제어하는 행위이다.

- Promise/then을 사용하거나, async/await을 이용하여 흐름을 제어할 수 있다.

 

30. Node.js의 버퍼 클래스는 무엇인가?

- 버퍼 클래스는 정수 배열과 유사한 원시 데이터를 저장하지만 V8 힙 외부의 메모리 할당에 해당합니다.

- 순수 JavaScript는 이진 데이터와 호환되지 않기 때문에 버퍼 클래스가 사용됩니다.

 

 

31. 콜백 지옥이란 무엇인가?

- 함수의 매개변수로 넘겨지는 콜백 함수가 반복되어 코드의 들여 쓰기 수준이 감당하기 힘들 정도로 깊어지는 현상을 말한다.

- Promise 객체나, async/await을 통해 콜백 지옥을 탈출할 수 있다.

 

 

32. Node.js의 미들웨어 개념을 설명해라

- 요청-응답 사이에 request, response 객체에 대한 접근 권한을 갖고 변형시킬 수 있으며 미들웨어 내에서 다음 미들웨어 함수 접근권한을 next인자로 갖는 함수입니다.

 

33. NODE_ENV의 목적은 무엇인가?

- 환경변수를 통해 개발환경과 운영환경에 따른 설정 정보를 다르게 가져올 수 있다.

 

 

 

참조 : SimpliLearn ( Top 50+ Node.js Interview Questions and Answers for 2023 )

https://www.simplilearn.com/tutorials/nodejs-tutorial/nodejs-interview-questions

반응형
저작자표시 (새창열림)

'BE Study' 카테고리의 다른 글

[Google Cloud] 서버 배포 오류  (0) 2022.12.25
Node.js + MongoDB App 만들기 (1)  (0) 2022.12.16
백엔드 면접 스크립트 - Database  (0) 2022.11.15
백엔드 면접 스크립트 - 운영체제  (0) 2022.10.21
백엔드 면접 스크립트 - Network  (0) 2022.10.21
'BE Study' 카테고리의 다른 글
  • [Google Cloud] 서버 배포 오류
  • Node.js + MongoDB App 만들기 (1)
  • 백엔드 면접 스크립트 - Database
  • 백엔드 면접 스크립트 - 운영체제
OverFlowBIN
OverFlowBIN
    반응형
  • OverFlowBIN
    OverFlowBIN BE Tech Blog
    OverFlowBIN
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 전체보기
      • Computer Science
      • BE Study
      • MySQL
      • Algorithm
      • Language
        • TypeScript
        • JavaScript
        • Python
        • JAVA
      • Spring Boot
      • Programing Tool
      • Group Study
      • HTTP
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    httpie
    python #내장함수 #자료구조
    back-end
    게시판 만들기
    논리연산자
    backend
    thymeleaf
    단축평가
    Java
    기술면접
    일급 함수
    동작원리
    백엔드
    코딩테스트
    spring boot
    node.js
    Google Cloud
    javascript
    의존성 주입
    programers
    axios
    일급함수
    app engine
    bootstrap
    MongoDB
    algorithm
    이분탐색
    Spring
    Nullish
    이진검색
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
OverFlowBIN
백엔드 면접 스크립트 - Node.js
상단으로

티스토리툴바