분류 Nodejs

78 NodeJS 인터뷰 질문 및 답변

컨텐츠 정보

  • 조회 360 (작성일 )

본문

소개 


Node.js 인터뷰가 나옵니까?


Node.js에 대한 광범위한 잠재적 질문과 JavaScript 또는 일반 프로그래밍 아키텍처 주제와 관련된 모든 것을 준비해야 합니다.


이 문제를 해결하기 위해 질문과 답변을 준비하는 데 도움이 되는 다양한 질문과 답변 목록을 만들었습니다. 여기에는 Node.js의 기본 사항과 주요 특징이 다른 소프트웨어 아키텍처의 장단점에 관한 광범위한 질문이 포함되어 있습니다.


https://coderrocketfuel.com/article/node-js-interview-questions-and-answers 


1. Node.js는 무엇입니까? 


Node.js는 Chrome의 JavaScript V8 엔진을 기반으로 하는 JavaScript 플랫폼 / 런타임입니다. 이를 통해 브라우저 외부의 시스템에서 JavaScript를 사용할 수 있으며 개발자는 JavaScript를 사용하여 명령 행 도구 및 서버 측 스크립트와 같은 것을 작성할 수 있습니다.


결과적으로 Node.js는 서버 및 클라이언트 측에서 사용되는 다른 언어가 아닌 단일 프로그래밍 언어를 중심으로 웹 응용 프로그램 개발을 통합하여 모든 곳의 JavaScript 패러다임을 나타냅니다.


2. Node.js는 무엇에 사용됩니까? 


Node.js는 일반적으로 비 차단 및 이벤트 중심 서버에 사용됩니다.


따라서 정적 파일 서버, 웹 응용 프로그램 프레임 워크, REST API, 메시징 미들웨어, 실시간 서비스 (채팅, 게임 등), 명령 줄 응용 프로그램, 브라우저 게임 및 CPU가 아닌 다른 것들을 구축하는 데 유용합니다. 집중적이거나 긴 처리 시간이 필요하지 않습니다.


이러한 사용 사례 중 웹 응용 프로그램은 개발자가 가장 일반적으로 사용합니다.


3. Node.js는 어떤 언어로 작성됩니까? 


Node.js는 V8 엔진을 사용하여 런타임 동안 JavaScript를 기본 머신 코드로 컴파일합니다.


JavaScript 코드를 V8 엔진 (C ++로 작성)과 바인딩 하기 위해 대부분의 Node.js 코드는 C ++로 작성됩니다. 그러나 Node.js에는 JavaScript로 작성된 많은 부분이 있습니다.


Node.js는 오픈 소스이므로 코드를 직접 확인할 수 있습니다. 


4. Node.js의 최초 작성자 / 작성자는 누구입니까? 그리고 누가 Node.js에서 일하고 있습니까? 


Node.js는 2009 년 Ryan Dahl에 의해 처음 만들어졌으며 Joyent가 후원했습니다. 현재 Node.js는 오픈 소스 소프트웨어 개발자가 유지 관리합니다.


5. Node.js의 주요 기능은 무엇입니까? 


V8 


Node.js는 V8 엔진을 사용하여 JavaScript를 머신 코드로 컴파일하므로 런타임 성능이 뛰어납니다 (즉, 정말 빠름).


단일 스레드 실행 


JavaScript를 실행하는 기본 스레드에서 Node.js는 단일 스레드입니다 (여러 스레드가 V8에서 기본적으로 사용됨). 이는 Node.js가 대부분의 경우 비 블로킹 (대부분의 경우)이며, 대부분의 함수 (콜백)가 이벤트 루프에 위임되어 비동기 적으로 실행됨을 의미합니다.


비동기 


Node.js에 대한 여러 요청은 서로에 대한 종속성 없이 처리 할 수 ​​있으므로 처리량과 효율성이 모두 향상됩니다.


NPM이 제공하는 풍부한 생태계 


NPM이라는 Node.js의 기본 패키지 관리자는 기본적으로 Node.js에 포함 된 명령 줄 유틸리티입니다. 또한 오픈 소스 코드를 선택할 수 있는 거대한 온라인 저장소도 제공합니다. NPM을 사용하면 코드 줄을 검색, 설치, 공유 및 재사용 할 수 있습니다.


풀 스택 JavaScript 개발 


Node.js를 통해 개발자는 서버 측에서 JavaScript를 사용할 수 있었습니다. 이제 응용 프로그램을 작성할 때 프론트 엔드와 백엔드에서 동일한 스크립팅 언어를 사용할 수 있습니다. 이를 통해 개발자는 더 빠르게 빌드하고 이미 JavaScript에 능숙한 개발자의 학습 곡선의 크기를 줄일 수 있습니다.


6. Node.js의 단점은 무엇입니까? 


주요 단점은 CPU를 많이 사용하는 작업이나 장기 실행 작업을 처리 할 때 비효율적이라는 것입니다. 이러한 유형의 작업에는 오디오 및 비디오 생성 또는 그래픽 편집이 포함됩니다.


7. JavaScript 엔진 Node.js의 이름은 무엇입니까? 


The V8 engine.


8. V8 엔진은 어떻게 작동합니까? 


V8은 JavaScript 소스 코드를 기계 코드로 컴파일 및 실행하고 객체의 메모리 할당을 처리하며 더 이상 필요 없는 객체를 가비지 수집합니다. V8을 사용하면 모든 C ++ 애플리케이션이 자체 오브젝트 및 함수를 JavaScript 코드에 노출 할 수 있습니다.


9. Node.js의 이벤트 루프는 무엇입니까? 


이벤트 루프는 Node.js가 가능할 때마다 시스템 커널에 작업을 오프로드 함으로써 비 차단 입력 / 출력 작업을 수행 할 수 있게 합니다.


이벤트 루프의 주요 역할은 특정 시점에서 단일 스레드가 수행해야 하는 작업을 예약하는 것입니다.


이벤트 루프 작동 방식에 대한 자세한 내용 


더 읽을 수 있는 또 다른 훌륭한 자료입니다. 


10. libuv 란 무엇입니까? 


libuv는 비동기 I / O에 중점을 둔 다중 플랫폼 지원 라이브러리입니다. 주로 Node.js에서 사용하도록 개발되었지만 Luvit, Julia, pyuv 등에서도 사용됩니다.


Node.js의 비하인드 스토리에서 네트워크 및 파일 작업을위한 I / O를 수행하는 데 사용됩니다.


자세한 내용은 libuv 설명서를 확인하십시오.


11. Node.js는 자식 스레드를 어떻게 처리합니까? 


Node.js는 단일 스레드 프로세스이며 기본적으로 하위 스레드 및 스레드 관리를 개발자에게 공개하지 않습니다. 뒤에서 Node.js는 비동기 입력 / 출력 작업과 같은 특정 작업에 대해 자식 스레드를 생성합니다. 그러나 백그라운드에서 실행되며 응용 프로그램 JavaScript 코드를 실행하거나 기본 이벤트 루프를 차단하지 않습니다.


그러나 개발자는 child_process 모듈 및 작업자 스레드와 같은 도구를 사용하여 자체 외부 자식 프로세스를 생성해야 합니다.


12. 동기식 프로그래밍과 비동기식 프로그래밍의 차이점은 무엇입니까? 


  • 동기식 : 코드를 동기적으로 실행하면 다른 작업으로 이동하기 전에 코드가 완료 될 때까지 기다립니다.
  • 비동기 : 코드를 비동기 적으로 실행하면 다른 작업이 끝나기 전에 계속 진행할 수 있습니다.

13. Node.js에서 비동기 프로그래밍이 중요한 이유는 무엇입니까? 


사용자 인터페이스는 사용자가 이벤트 루프를 중단하고 이벤트 핸들러를 트리거하기를 기다리는 데 대부분의 시간을 소비한다는 점에서 본질적으로 비동기 적입니다.

따라서 Node.js도 기본적으로 비동기 적이며 서버는 동일한 방식으로 작동합니다. 네트워크의 요청을 기다리고 첫 번째 요청이 처리되는 동안 추가 수신 요청을 수락 할 수 있습니다. 이것은 서버의 성능에 매우 유익합니다.


14. 비동기 코드를 다룰 때 오류를 어떻게 처리합니까? 


콜백 함수에 첫 번째 매개 변수로 오류 반환 


Node.js에서 비동기 함수의 오류를 처리하는 표준 방법은 오류를 함수의 콜백에서 첫 번째 인수로 반환하는 것입니다. 오류가 존재하면 첫 번째 매개 변수는 오류에 대한 정보가 포함 된 Error 오브젝트로 전달됩니다. 오류가 없으면 첫 번째 매개 변수는 널입니다.


코드에서 이것을 사용하는 예는 다음과 같습니다.


Node.js
 
function (error, returnValue) {
  if (error) {
    console.log(error)
    return
  } else {
    console.log(returnValue)
  }
}


예제에서 볼 수 있듯이 오류가 없으면 콜백은 첫 번째 인수로 null 값을 반환합니다. 오류가 존재하면 첫 번째 매개 변수는 Error 객체를 반환합니다.


비동기 / 대기 함수 내부에 Try ... Catch 문 사용 


비동기 코드에서 오류를 처리하는 또 다른 방법은 내부에 try ... catch 문이 있는 비동기 함수를 사용하여 발생하는 오류를 포착하는 것입니다.


코드 예제는 다음과 같습니다.


Node.js
 
async function main() {
  try {
    const data = await getData()
    console.log(data)
  } catch (error) {
    console.log(error)
  }
}


코드 예제에서 try 블록에서 catch 블록이 발생하면 catch 블록이 구문 분석 오류를 처리합니다.


15. 일부 코드는 왜 "차단"으로 간주됩니까? 


차단 코드는 Node.js 프로세스에서 추가 JavaScript 실행이 JavaScript 이외의 작업이 완료 될 때까지 기다려야 하는 경우입니다. 차단 작업이 진행되는 동안 이벤트 루프에서 JavaScript를 계속 실행할 수 없기 때문에 발생합니다.


차단 방법은 동 기적으로 실행되고 비 차단 방법은 비동기 적으로 실행됩니다.


https://nodejs.org/de/docs/guides/blocking-vs-non-blocking/ 


16. process.nextTick ()은 무엇을 위해 사용됩니까? 


Node.js에서 이벤트 루프의 각 반복을 틱이라고 합니다. process.nextTick () 메소드는 Node.js 이벤트 루프에서 다음 반복까지 함수의 실행을 연기하는 데 사용됩니다.


다음과 같이 process.nextTick ()에 함수를 전달할 수 있습니다.


Node.js
 
process.nextTick(() => {
  // do something here
}


이것은 Node.js 엔진이 현재 작업이 끝날 때와 다음 이벤트 루프 틱이 시작되기 전에 해당 함수를 호출하도록 지시합니다.


다음 이벤트 루프 반복에서 실행할 코드를 설정하는 또 다른 방법은 setImmediate() 함수를 사용하는 것입니다.


코드는 다음과 같습니다.


Node.js
 
setImmediate(() => {
  // do something here
})


process.nextTick()으로 전달 된 함수는 현재 작업이 종료 된 후 이벤트 루프의 현재 반복에서 실행될 것입니다. 즉, setImmediate() 전에 항상 실행됩니다.


17. 이벤트 중심 프로그래밍이란 무엇입니까? 


이벤트 중심 프로그래밍은 프로그램 동작이 사용자 동작 (클릭 또는 키 누르기) 또는 다른 프로그램의 메시지와 같은 이벤트에 의해 결정되는 패러다임입니다. 이벤트 중심 응용 프로그램에는 일반적으로 특정 이벤트를 수신하고 이벤트 중 하나가 수신 될 때 콜백 함수를 트리거하는 기본 루프가 있습니다.


18. Node.js의 "EventEmitter"는 무엇입니까? 


EventEmitter는 Node.js에서 객체 간의 통신 / 상호 작용을 용이하게 하는 모듈입니다. 이미 터 객체는 명명 된 이벤트를 감지하여 이전에 생성 된 리스너가 명명 된 이벤트를 감지하면 호출되도록 합니다.


펍 / 서브 또는 옵저버 디자인 패턴의 작동 방식과 유사합니다.


자세한 내용은 Node.js 설명서를 확인하십시오. 


19. Node.js를 사용하여 HTTP 서버를 작성할 수 있습니까? 그렇다면 필요한 코드를 설명 할 수 있습니까? 


예, Node.js를 사용하여 HTTP 서버를 만들 수 있습니다.


기본 HTTP 서버가 HTTP 모듈을 사용하는 모습은 다음과 같습니다


Node.js
 
const http = require("http")
 
http.createServer(function (req, res) {
  res.writeHead(200, {"Content-Type": "text/plain"})
  res.write("Hello World!")
  res.end()
}).listen(8080)


면접을 준비 할 때, 면접관이 이 코드를 당신의 머리 위로 알기를 기대하지는 않을 것입니다. 

그러나 어떻게 구성되어 있는지에 대한 일반적인 아이디어를 가지고 HTTP 서버의 전반적인 아이디어를 통해 이야기하는 것이 도움이 될 수 있습니다. 

자신의 프로젝트에서 사용한 다른 HTTP 프레임 워크에 대해 이야기하는 것도 도움이 될 수 있습니다.


20. 제어 흐름 기능이란 무엇입니까? 그리고 하나를 실행하는 단계는 무엇입니까? 


제어 흐름은 컴퓨터가 스크립트에서 명령문을 실행하는 순서입니다. 제어 흐름 기능은 다른 코드 조각이 실행되는 순서를 처리하거나 수정하는 기능입니다. 그리고 종종 비동기 함수 호출 사이에서 실행되는 코드입니다


제어 흐름 기능을 실행하려면 다음 단계를 따라야 합니다.


  1. 실행 순서를 제어하십시오.
  2. 필요한 데이터를 수집하십시오
  3. 동시성을 제한하십시오.
  4. 프로그램의 다음 단계를 호출하십시오.


21. Node.js는 멀티 코어 컴퓨팅 플랫폼을 지원합니까? 둘 이상의 CPU 코어를 사용할 수 있습니까? 


Node.js의 단일 인스턴스는 단일 스레드에서 실행됩니다. 멀티 코어 시스템을 이용하기 위해 때때로 로드를 처리하기 위해 Node.js 프로세스 클러스터를 시작하려고 할 수 있습니다.


클러스터 모듈을 사용하면 모두 동일한 서버 포트를 공유하는 여러 하위 프로세스를 쉽게 만들 수 있습니다.


자세한 내용은 여러 CPU 코어에서 Node.js 애플리케이션을 실행하는 방법에 대한 기사를 확인하십시오. 


22. Node.js에 스트림이 무엇인지 설명 하시겠습니까? 


Node.js에서 스트림은 Node.js의 스트리밍 데이터 작업을 위한 추상 인터페이스입니다. 스트림은 네트워크 통신, 파일 읽기 / 쓰기 및 데이터가 한 장소에서 다른 장소로 이동하는 다른 종류의 종단 간 교환을 처리하는 방법입니다.


파일을 읽는 프로그램을 만들려면 일반적인 방법은 파일을 처음부터 끝까지 메모리로 읽어서 처리하는 것입니다. 스트림을 사용하면 파일을 하나씩 읽고 메모리에 전체 내용을 저장하지 않고 파일을 처리 할 수 ​​있습니다.


예를 들어 Node.js 기반 HTTP 서버에서 요청은 읽기 가능한 스트림이고 응답은 쓰기 가능한 스트림입니다. 둘 다 한 대상에서 다른 대상으로 데이터를 이동합니다.


fs 모듈을 사용하면 읽을 수있는 파일 스트림과 쓰기 가능한 파일 스트림을 모두 사용할 수 있는 다른 예를 찾을 수 있습니다.


스트림을 사용하면 두 가지 주요 이점이 있습니다.

  • 적은 메모리 사용 : 데이터 청크 만 메모리에 저장되므로 훨씬 적은 컴퓨팅 리소스를 사용합니다.
  • 데이터 처리 시간 단축 : 모든 데이터가 수신 될 때까지 기다리지 않고 즉시 데이터 처리를 시작할 수 있으므로 많은 시간이 절약됩니다.

스트림에 대한 자세한 내용. 


23. Node.js에는 몇 가지 유형의 스트림이 있습니까? 


Node.js의 세 가지 유형의 스트림은 세 가지입니다.

  • Writable:  데이터를 쓸 수 있는 스트림.
  • Readable: 데이터를 읽을 수 있는 스트림.
  • Duplex:  쓰기 가능하고 읽기 가능한 스트림.
  • Transform:  데이터를 쓰거나 읽을 때 데이터를 수정할 수 있는 이중 스트림.

24. 스트림으로 어떤 종류의 이벤트를 시작할 수 있습니까? 


Node.js의 각 스트림 유형은 EventEmitter 인스턴스이며 서로 다른 시간에 여러 유형의 이벤트를 발생 시킬 수 있습니다.


이들은 일반적으로 사용되는 것입니다 :

  • data:  데이터를 읽을 수 있을 때마다 발생합니다.
  • end: 더 이상 읽을 데이터가 없으면 시작됩니다.
  • error: 데이터를 받거나 쓸 때 오류가 발생하면 시작됩니다.
  • finish:  모든 데이터가 기본 시스템으로 플러시 되면 시작됩니다.

Node.js 문서에서 전체 목록을 찾을 수 있습니다. 


25. Node.js의 파이핑은 무엇입니까? 


Node.js에서는 파이프를 처리 할 때 스트림을 사용합니다. 그리고 읽을 수 있는 스트림을 쓰기 가능한 스트림에 연결하는 데 사용되는 방법의 이름입니다. 이것은 stream.pipe 함수를 사용하여 파일 스트림을 처리 할 때 일반적인 방법입니다.


자세한 내용은. 


26. Node.js에서 Buffer 클래스의 목적은 무엇입니까? 


버퍼는 V8 JavaScript 엔진 외부에 할당 된 메모리 청크를 나타냅니다. 그리고 각 값이 1 바이트의 데이터를 나타내는 정수 배열로 생각할 수 있습니다.


본질적으로 버퍼는 데이터를 덤프하여 추가 처리에 사용할 수 있는 메모리의 임시 위치로 사용됩니다.


Buffer 클래스는 TCP 스트림, 파일 시스템 작업 및 기타 컨텍스트에서 옥텟 스트림과 상호 작용할 수 있도록 Node.js API의 일부로 도입되었습니다.


자세한 내용은 Node.js 설명서를 확인하십시오. 


27. Node.js에서 readFile()과 createReadStream()의 차이점은 무엇입니까? 


  • readFile(): 파일은 처리를 위해 버퍼로 완전히 푸시 되고 전체가 버퍼로 푸시 되어 읽을 때만 응답을 리턴 합니다. 많은 메모리를 사용하며 큰 파일을 처리 할 때 속도가 매우 느릴 수 있습니다.
  • createReadStream(): 청크로 버퍼에 푸시되고 각 청크는 처리 될 때 제거됩니다. 파일은 청크로 전송되며 한 청크 프로세스가 완료되면 응답을 보내고 버퍼에서 제거합니다. 더 큰 파일을 처리 할 때 더 효과적이고 메모리 효율적입니다.

createReadStream() 함수에 대한 자세한 내용은.


readFile() 함수에 대한 자세한 내용 


28. Node.js 응용 프로그램을 빌드 할 때 디버깅에 일반적으로 사용하는 방법은 무엇입니까?


이 질문에 대해 과거에 사용한 몇 가지 디버깅 방법을 설명하십시오. 

이것들은 당신에게 고유 할 수도 있지만 다음과 같은 일반적인 주제에 대해 이야기 할 수 있습니다.


내장 디버거 


Node.js 디버거는 응용 프로그램을 디버깅 하는 기본 제공 방법입니다. 소스 코드에 배치하여 특정 지점에서 코드가 손상 될 수 있는 디버거 문을 노출합니다. 이것이 작동하려면 Node.js 애플리케이션을 디버그 모드에서 실행해야 합니다 (노드 디버그 your-app).


코드에서 다음과 유사합니다.


Node.js
 
setTimeout(() => {
  debugger
  console.log("world")
}, 1000)
 
console.log("hello")


디버그 플래그를 사용하여 해당 코드를 실행하면 코드를 검사 할 수 있는 명령 줄 인터페이스가 표시됩니다.


노드 인스펙터 


Node Inspector는 Node.js 애플리케이션을위한 디버거 인터페이스를 제공하는 NPM 패키지입니다.


디버깅을 위해 이 도구 나 다른 도구 중 하나를 사용하는 것에 대해 이야기 할 수 있습니다.


테스트 작성 


응용 프로그램에 대한 광범위한 테스트를 작성하면 응용 프로그램 작동 방식에 대한 이해를 높이고 버그가 발생할 때 쉽게 버그를 발견하는 프로세스를 만들 수 있습니다.


29. 디버그 중단 점으로 작동하기 위해 코드에 어떤 키워드를 삽입 할 수 있습니까? 


Node.js 디버거는 응용 프로그램을 디버깅 하는 기본 제공 방법입니다. 소스 코드에 배치하여 특정 지점에서 코드가 손상 될 수 있는 디버거 문을 노출합니다. 이것이 작동하려면 Node.js 애플리케이션을 디버그 모드에서 실행해야 합니다 (노드 디버그 your-app).


코드에서 다음과 유사합니다.

Node.js
 
setTimeout(() => {
  debugger
  console.log("world")
}, 1000)
 
console.log("hello")


디버그 플래그를 사용하여 해당 코드를 실행하면 코드를 검사 할 수 있는 명령 줄 인터페이스가 표시됩니다.


30. 프로그래머 오류와 운영 오류의 차이점은 무엇입니까? 


작동 오류 


작동 오류는 올바르게 작성된 프로그램에서 발생하는 런타임 문제입니다. 이들은 반드시 프로그램의 버그 일 필요는 없으며 일반적으로 시스템 자체, 시스템 구성, 네트워크 또는 원격 서비스 관련 문제로 인해 발생합니다.


몇 가지 구체적인 예는 다음과 같습니다.

  • 서버에 연결하지 못했습니다
  • 호스트 이름을 확인하지 못했습니다
  • 서버가 500 응답을 반환
  • 시스템 메모리가 부족합니다

프로그래머 오류 


프로그래머 오류는 프로그램의 버그이며 개발자가 원인입니다. 이것들은 코드를 변경하여 해결할 수 있는 것들입니다.


31. Node.js에서 사용되는 콜백은 무엇입니까? 


Node.js API는 콜백 함수를 많이 사용합니다. 콜백은 함수가 종료 될 때 호출 될 다른 함수에 인수로 전달되는 함수입니다. 함수와 비동기식으로 동일하며 주어진 작업이 완료되면 호출됩니다.


32. Node.js 콜백 함수에 전달 된 첫 번째 인수는 무엇입니까? 


에러 객체.


오류가 발생하면 첫 번째 오류 인수에 의해 반환 됩니다. 콜백의 두 번째 인수는 일반적으로 성공적인 응답 데이터를 위해 예약됩니다.


33. 약속(Promise)이란 무엇입니까?


약속은 미래의 어느 시점에서 단일 값을 생성 할 수 있는 객체이며 비동기 함수의 결과를 나타냅니다. 이 값은 해결 된 값이거나 해결되지 않은 이유 (오류) 일 수 있습니다.


약속은 세 가지 다른 상태에 있을 수 있습니다.

  1. 보류 중
  2. 이행
  3. 거부

이행 가치 또는 거부 사유를 처리하겠다는 약속에 콜백을 첨부 할 수 있습니다.


자세한 내용은.


34. 비동기 함수란 무엇입니까? 왜 사용됩니까? 


aync 함수는 이벤트 루프를 통해 비동기식으로 작동하며 Promise를 사용하여 결과를 반환합니다. 이들은 비동기 함수 구문을 사용하여 선언됩니다.


비동기 함수는 await 표현식을 사용하여 비동기 함수의 실행을 일시 중지하고 약속이 해결 될 때까지 기다릴 수 있습니다 (실행 스레드가 아닌 비동기 함수 블록 만 대기). 그런 다음 비동기 함수의 실행을 재개하고 확인 된 값으로 평가합니다.


다음은 코드에서 어떻게 보이는지에 대한 예입니다.


Node.js
 
async function main() {
  try {
    const data = await getData()
    console.log(data)
  } catch (error) {
    console.log(error)
  }
}


비동기 함수의 목적은 개발자가 약속 기반 코드를 동기식 인 것처럼 실행 스레드를 차단하지 않고 작성할 수 있도록 하는 것입니다.


자세한 내용은 MDN 웹 문서를 확인하십시오.


35. 콜백 지옥이란 무엇입니까?


콜백 지옥은 깊이 중첩 된 비동기 함수로 인해 발생하는 JavaScript 반 패턴입니다. 콜백 지옥은 콜백 내의 콜백 내에 콜백이 있을 때 발생하며 추론하기가 어렵지 않으면 코드가 어려워집니다.


36. 콜백 지옥을 어떻게 막거나 고치나요? 


콜백 지옥을 피하는 가장 중요한 방법은 함수를 방해하지 않고 수 마일의 함수와 콜백을 거치지 않고 프로그램을 더 쉽게 이해할 수 있도록 하는 것입니다.


콜백 지옥을 방지하는 다른 방법은 다음과 같습니다.

  1. 함수를 중첩 하지 말고 이름을 지정하고 프로그램 상단에 배치하십시오.
  2. 함수 호이스팅을 활용하여 기능을 방해하지 않습니다.
  3. 각 콜백의 모든 오류를 처리하십시오.
  4. 재사용 가능한 함수를 작성하고 자체 모듈에 배치하여 코드를 모듈화 하십시오.

출처 


37. NPM이란 무엇입니까? 


NPM은 세계 최대 소프트웨어 레지스트리 인 Node.js 및 서버의 기본 패키지 관리자입니다. 모든 대륙의 오픈 소스 개발자는 npm을 사용하여 패키지를 공유하고 빌리 며 많은 조직에서 npm을 사용하여 개인 개발을 관리합니다.


38. Node.js 애플리케이션을 빌드 할 때 NPM이 제공하는 기능은 무엇입니까? 


NPM은 명령 줄 클라이언트와 NPM 레지스트리라는 공용 및 유료 개인 패키지의 온라인 데이터베이스로 구성됩니다. 레지스트리는 클라이언트를 통해 액세스되며 사용 가능한 패키지는 NPM 웹 사이트를 통해 찾아보고 검색 할 수 있습니다.


39. NPM 패키지와 Node.js 핵심 모듈의 차이점은 무엇입니까? 


Node.js 핵심 모듈은 Node.js의 최소한의 기능을 제공합니다. 이들은 Node.js의 바이너리 배포판으로 컴파일 되어 Node.js 프로세스가 시작될 때 자동으로 로드 됩니다. 따라서 아무것도 설치하지 않고도 Node.js 코드로 직접 가져올 수 있습니다.


반면 NPM 패키지는 NPM 레지스트리를 통해 Node.js 응용 프로그램으로 가져올 수 있는 코드입니다. 이들은 NPM 명령 줄 유틸리티를 통해 설치해야 합니다.


40. NPM 종속성의 전역 설치 란 무엇입니까? 


컴퓨터에 전체적으로 설치된 NPM 종속성은 설치 스크립트를 실행하는 위치에 관계없이 시스템의 단일 위치에 저장됩니다. 패키지의 대상은 OS, 배포 또는 구성 설정에 따라 다릅니다.


그러나 글로벌 패키지를 Node.js 애플리케이션으로 직접 가져올 수는 없습니다.


npm install 명령에 -g 플래그를 추가하여 Node.js 패키지를 전체적으로 설치할 수 있습니다.


41. NPM 종속성의 로컬 종속성은 무엇입니까? 


로컬로 설치된 NPM 패키지는 지정된 Node.js 응용 프로그램의 node_modules 디렉토리에 설치됩니다. 이러한 패키지는 설치된 Node.js 애플리케이션으로 직접 가져올 수 있습니다.


이것은 NPM 패키지 설치를 위한 기본 동작이므로 npm install 명령에 플래그를 추가 할 필요가 없습니다.


42. Node.js에서 NPM을 새 버전으로 어떻게 업데이트합니까? 


다음 명령을 사용하여 NPM을 최신 버전으로 업데이트 할 수 있습니다. npm install -g npm @ latest.


43. NPM의 가장 보편적 인 대안은 무엇입니까? 그 장점은 무엇입니까? 


Yarn은 NPM의 일반적인 대안입니다.


많은 사람들이 Yarn이 캐싱 메커니즘으로 인해 NPM에 비해 훨씬 빠른 설치 시간을 제공한다고보고했습니다. 또한 체크섬을 사용하여 코드가 실행되기 전에 설치된 모든 패키지의 무결성을 확인함으로써 보안을 핵심 가치로 만듭니다.


44. package.json 파일이란 무엇입니까? 그리고 무엇을 위해 사용됩니까? 


package.json 파일은 Node.js 프로젝트와 관련된 다양한 메타 데이터를 보유합니다. NPM에 정보를 제공하여 프로젝트를 식별하고 종속성을 처리 할 수 ​​있습니다.


또한 프로젝트 설명, 프로젝트 버전, 라이센스 정보 및 구성 데이터와 같은 다른 유형의 메타 데이터도 보유 할 수 있습니다. 일반적으로 Node.js 애플리케이션의 루트 디렉토리에 저장됩니다.


45. package-lock.json 파일이란 무엇입니까? 그리고 왜 사용됩니까? 


package-lock.json 파일은 NPM이 node_modules 디렉토리 또는 package.json 파일을 수정하는 모든 작업에 대해 자동으로 생성됩니다. 후속 설치가 중간 종속성 업데이트에 관계없이 동일한 트리를 생성 할 수 있도록 생성 된 정확한 트리를 설명합니다.


몇 가지 목적으로 사용됩니다.

  • 팀원, 배포 및 지속적인 통합이 정확히 동일한 종속성을 설치하도록 보장합니다.
  • 사용자가 디렉토리 자체를 커밋 하지 않고도 이전 상태의 node_modules로 "시간 여행"할 수 있는 기능을 제공합니다.
  • 읽을 수 있는 소스 제어 차이를 통해 트리 변경에 대한 가시성을 향상시킵니다.
  • NPM이 이전에 설치된 패키지에 대해 반복되는 메타 데이터 해상도를 건너 뛸 수 있도록 하여 설치 프로세스를 최적화 합니다.

출처 


46. ​​NPM을 사용하여 종속성을 어떻게 업데이트합니까? 


npm update app-name 명령을 사용하여 하나 이상의 NPM 종속성을 업데이트 할 수 있습니다.


47. package.json 파일에서 의존성과 devDependency의 차이점은 무엇입니까? 


devDependencies는 개발 프로세스 중에 만 필요한 모듈입니다. 또한 종속성은 런타임에 필요한 모듈입니다.


48. Node.js의 종료 코드는 무엇입니까? 


더 이상 비동기 작업이 보류되지 않으면 Node.js는 일반적으로 0 상태 코드로 종료됩니다. 다른 환경에서 사용되는 다른 코드가 있습니다.


몇 가지 예는 다음과 같습니다.

  • 1-잡히지 않은 치명적인 예외 : 잡히지 않은 예외가 있었고 도메인이나 이벤트 처리기가 처리하지 않았습니다.
  • 3 - 내부 JavaScript 구문 분석 오류 : 노드의 부트 스트랩 프로세스에서 내부의 JavaScript 소스 코드가 구문 분석 오류를 일으켰습니다.
  • 4 - 내부 JavaScript 평가 실패 : 노드 부트 스트랩 프로세스의 내부 JavaScript 소스 코드가 평가시 함수 값을 리턴하지 못했습니다.


출처 


49. Node.js의 REPL은 무엇입니까? 


Node.js는 REPL이라는 가상 머신과 함께 제공되며 노드 쉘이라고도 합니다. REPL은 Read-Eval-Print-Loop의 약자이며 가상 환경은 간단한 Node.js 코드를 테스트하는 빠르고 쉬운 방법으로 사용할 수 있습니다.


50. Node.js 프로젝트에서 일관된 코딩 스타일을 유지하는 것이 왜 중요합니까? 


일관성이 없는 코드는 코드가 레거시 코드와 매우 상호 연결되어 있거나 코드가 훨씬 큰 라이브러리의 일부인 경우 문제를 일으킬 수 있습니다. 또한 많은 사람들이 코드베이스에서 작업하는 경우 문제가 발생할 수 있으므로 많은 사람들이 이를 이해하고 작업해야 합니다.


일관된 코딩 스타일을 유지하면 이러한 잠재적 인 문제를 완화하는 데 도움이 됩니다.


51.이를 보장하기 위해 어떤 도구를 사용할 수 있습니까? 


VS 코드와 같은 JavaScript IDE를 사용하면 기본적으로 코드 형식을 지정할 수 있습니다. 또한 ESLint와 같은 패키지를 사용하여 코드에 대한 일련의 형식 규칙을 구성하고 테스트 및 배포 프로세스 중에 규칙을 적용 할 수 있습니다.


52. .env 파일은 어떤 용도로 사용됩니까? 


.env 파일은 Node.js 프로젝트에 사용 된 환경 변수를 저장하는 데 사용됩니다.


환경 변수는 API 키 및 비밀번호와 같은 민감한 정보를 저장하는 데 사용되며 전체 Node.js 애플리케이션에서 해당 변수를 전체적으로 쉽게 처리하는 데 사용할 수 있습니다.


.env 파일은 일반적으로 응용 프로그램의 루트 디렉토리에 저장되며 암호 및 사용자 이름과 같은 민감한 정보가 포함되기 때문에 소스 코드 저장소에 커밋해서는 안됩니다.


.env 파일에 선언 된 변수를 사용하려면 일부 유형의 로더를 사용해야 합니다. 그 방법을 다루는 기사가 있습니다.


53. setTimeout()과 setInterval() 함수의 차이점은 무엇입니까? 


setTimeout() 


setTimeout() 함수를 사용하면 일정 시간이 경과 한 후 (개발자가 지정한) 함수를 한 번 실행할 수 있습니다.

코드 예제는 다음과 같습니다.


Node.js
 
setTimeout(() => {
  console.log("Hello!")
}, 1000)


메시지는 1000 밀리 초 시간 간격이 지난 후에 기록됩니다.


setInterval() 


setInterval() 함수를 사용하면 시간 간격이 경과 한 후 (개발자가 지정한) 시작한 후 해당 간격으로 계속 반복하여 함수를 반복적으로 실행할 수 있습니다.


코드 예제는 다음과 같습니다.


Node.js
 
setInterval(() => {
  console.log("Hello!")
}, 5000)


먼저 5000 밀리 초 동안 기다린 다음 매 5000 밀리 초가 지나면 메시지를 기록합니다.


짧은 시간 동안 setTimeout() 함수를 사용하는 것은 위험합니다. 백업 되지 않도록 장기간 동안 만 사용해야 합니다.


54. Node.js를 사용하여 디렉토리를 어떻게 만드나요? 


Node.js에는 새 디렉토리나 폴더를 쉽게 만들 수 있는 fs.mkdir() 함수를 제공하는 Fs 핵심 모듈이 있습니다.


코드는 다음과 같습니다.


Node.js
 
const fs = require("fs")
 
fs.mkdir("./new-directory-name", function(err) {
  if (err) {
    console.log(err)
  } else {
    console.log("New directory successfully created.")
  }
})


이 함수로  new-directory-name이라는 새 디렉토리가 작성됩니다.


fs.mkdir()이 기본 상태에서 중첩 또는 종속 디렉토리를 작성하지 않는다는 점도 주목할 가치가 있습니다.


자세한 내용은.


55. 디렉토리를 어떻게 삭제합니까? 


Node.js에는 빈 디렉토리를 삭제할 수있는 fs.rmdir() 함수를 제공하는 Fs 핵심 모듈이 있습니다.


파일이나 다른 하위 디렉토리가 포함 된 디렉토리를 삭제하려면 먼저 모든 개별 파일을 재귀 적으로 살펴보고 제거해야 합니다. rimraf와 같이 이를 처리하는 NPM 패키지가 있습니다.


다음은 직접 구현하는 방법입니다.


56. 디렉토리의 내용을 어떻게 읽습니까? 


Node.js에는 지정된 디렉토리의 내용을 쉽게 읽을 수 있는 fs.readdir() 함수를 제공하는 Fs 핵심 모듈이 있습니다.


다음과 같이 코드에서 사용됩니다.


const path = require("path")
const fs = require("fs")
 
const directoryPath = path.join(__dirname"files")
 
fs.readdir(directoryPath, function(err, files) {
  if (err) {
    console.log("Error getting directory information.")
  } else {
    files.forEach(function(file) {
      console.log(file)
    })
  }
})


결과는 파일과 디렉토리가 되므로 어느 것을 구별하기 위해 fs.stat()가 필요합니다.


이것을 구현하는 방법에 대한 자세한 내용은.


57. Node.js에서 처리되지 않은 예외를 해결하는 기본 방법은 무엇입니까? 


Process는 애플리케이션에서 사용 중인 현재 Node.js 프로세스에 대한 정보를 제공하는 글로벌 오브젝트입니다. 또한 특정 이벤트가 발생하는 것을 수신하는 리스너 함수입니다.


이러한 이벤트 중 일부는 다음과 같습니다.

  • exit
  • disconnect
  • uncaughtException
  • rejectionHandled

unhandledException 이벤트가 발생한 시기를 감지하고 오류를 안전하게 처리하기 위해 고유 코드를 작성할 수 있습니다.

Node.js
 
process.on("uncaughtException"function(err) {
  // handle the error
  console.log(err)
})


자세한 정보는 Node.js 문서를 확인하십시오.


58. Node.js 개발자에게 중요한 프로그래밍 패러다임의 이름을 지정할 수 있습니까? 


4 가지 중요한 프로그래밍 패러다임 :

  • Functional Programming
  • Object-Oriented Programming
  • Procedural Programming
  • Imperative Programming

59. 함수형 프로그래밍이 무엇인지 설명 할 수 있습니까? 


함수형 프로그래밍은 대부분 함수를 사용하여 코드를 구성하는 프로그래밍 패러다임입니다. 이러한 함수는 입력 (인수)을 사용하여 함수에 제공된 입력을 기반으로 출력을 표시합니다.


또한 돌연변이 또는 공유 상태를 허용하지 않으며 기능은 표현에 순수하게 유지하고 부작용을 피하기 위한 것입니다.


함수형 프로그래밍 언어의 예로는 Lisp, Haskell, Erlang, Clojure 및 Elm이 있습니다.


함수형 프로그래밍 패러다임의 일부 기능에는 일류 시민 함수, 고차 함수 및 함수 구성이 포함됩니다.


함수형 프로그래밍을 사용하면 얻을 수 있는 주요 이점은 많은 부작용이 없고 변경이 불가능하므로 코드에서 버그를 추적하기가 어려워 질 가능성이 줄어 듭니다. 또한 코드가 더 깨끗하고 간단하며 간결해 집니다.


60. 객체 지향 프로그래밍이란 무엇입니까? 


객체 지향 프로그래밍은 객체를 사용하여 애플리케이션 내부에서 표현하려는 실제 사물을 모델링 하는 코딩 패러다임입니다. 또한 사용하기 어렵거나 불가능한 기능에 액세스하는 간단한 방법을 제공합니다.


자세한 내용은 MDN 웹 문서를 확인하십시오.


61.이 두 패러다임 사이의 장단점은 무엇입니까? 함수형 프로그래밍과 객체 지향 프로그래밍? 


Object-Oriented Programming 


Pros:

  • 객체와 메소드 호출의 기본 개념은 개발자가 이해하기 쉽습니다.
  • 선언적이 아닌 명령형 스타일은 컴퓨터가 따라야 할보다 간단한 지침 세트와 같습니다.


Cons:

  • 객체와 행동은 동일한 개체에 함께 고정되며 종종 공유 상태를 사용합니다. 즉, 결정적이지 않은 순서로 다른 기능에 의해 임의로 액세스 될 수 있으며 이는 경쟁 조건과 같은 바람직하지 않은 동작으로 이어질 수 있습니다.


Functional Programming 


Pros:

  • 함수형 패러다임에서 공유 상태 및 / 또는 부작용을 피할 수 있습니다. 이는 동일한 리소스를 사용하여 동일한 기능에서 버그가 발생할 가능성을 제거합니다.
  • 순수한 함수를 사용하는 프로그램은 일반적으로 경쟁 조건이나 스레드 리소스 문제 없이 여러 개의 추가 프로세서 나 분산 클러스터로 확장하기가 더 쉽습니다.
  • 함수형 프로그래밍은 일반적으로 선언적 스타일을 사용하므로 작업에 대한 단계별 지침을 제공하지 않습니다. 대신해야 할 일에 중점을 두고 기본 기능이 어떻게 해야 하는지 파악하게 합니다. 이것은 리팩토링 및 성능 최적화를 위한 많은 여지를 남겨둔다.

Cons:

  • 코드에서 함수형 프로그래밍 스타일을 너무 많이 사용하면 결과 코드가 추상적이고 간결하며 구체적이지 않기 때문에 가독성이 떨어질 수 있습니다.
  • 더 많은 사람들이 객체 지향 프로그래밍 스타일에 익숙하므로 기능 프로그래밍의 일반적인 아이디어는 새로운 팀원에게 혼란을 줄 수 있습니다.

출처 


62. 순수한 함수란 무엇입니까? 


순수한 함수는 부작용을 일으키지 않으며 외부에서 어떠한 상태도 변경할 수 없습니다. 동일한 입력이 주어지면 항상 동일한 출력을 반환해야 합니다.


모든 함수가 순수하지는 않지만 가능할 때 종종 좋은 선택입니다.


자세한 내용은.


63. 함수 구성이란 무엇입니까? 


함수 구성은 하나 이상의 함수를 결합하여 새로운 함수를 생성하는 프로세스입니다.


자세한 내용은.


64. 프로토 타입과 클래식의 두 가지 상속 유형의 차이점은 무엇입니까? 


고전 상속 (Classical Inheritance) 


이들은 클래스에서 고유하며 계층 클래스 분류법이라고 하는 하위 클래스 관계를 만듭니다. 인스턴스는 일반적으로 new 키워드와 함께 생성자 함수를 사용하여 생성됩니다.


클래스 상속은 ES6의 클래스 키워드를 사용하거나 사용하지 않을 수 있습니다.


JavaScript의 고전적 구문은 프로토 타입 상속에 대한 대부분의 설탕 역할을 하며 실제로 JavaScript에 실제로 사용되는 것입니다. 이는 대규모 개체 / 클래스 구문 집합에 중첩 된 계층 구조가 성능에 부정적인 영향을 줄 수 있기 때문입니다.


프로토 타입 상속 


이들은 다른 객체에서 직접 상속되며 일반적으로 팩토리 함수 또는 Object.create() 메서드를 사용하여 생성됩니다. 인스턴스는 다양한 방법으로 구성 될 수 있습니다.


65. 클로저란 무엇입니까? 


클로저는 함수를 둘러싼 상태 (어휘 환경)에 대한 참조와 함께 묶음 (동봉)으로 조합 한 것입니다. 즉, 클로저를 사용하면 내부 함수에서 외부 함수의 범위에 액세스 할 수 있습니다. JavaScript에서는 함수 작성시 함수가 작성 될 때마다 클로저가 작성됩니다.


클로저는 특정 함수에서 범위 내에 있는 것과 그렇지 않은 것을 제어하고 같은 포함 범위에 있는 형제 함수간에 변수를 공유하기 때문에 중요합니다. 코드와 작동 방식을 이해하려면 변수와 함수가 서로 어떻게 관련되는지 이해하는 것이 중요합니다.


다른 함수 내부에 함수를 정의하여 클로저를 사용한 다음 반환하거나 다른 함수로 전달하여 노출 할 수 있습니다. 그러면 내부 함수는 외부 함수 범위의 변수에 액세스 할 수 있습니다.


ES6 릴리스부터 let 및 const가 클로저의 범위 인 루프와 객체로 클로저를 만들 수 있습니다. 주제에 관한 기사가 있습니다.


자세한 내용은.


66. 클로저의 일반적인 용도는 무엇입니까? 


클로저는 데이터를 해당 데이터에서 작동하는 함수와 연결할 수 있기 때문에 유용합니다. 이것은 객체 지향 프로그래밍과 명백한 유사점이 있는데, 여기서 객체를 통해 일부 데이터 (객체의 속성)를 하나 이상의 메소드와 연결할 수 있습니다.


클로저의 일부 사용 사례에는 이벤트 핸들러, 콜백, 간격, 타임 아웃 및 주어진 함수 내에서 변수를 비공개로 유지하는 것이 포함됩니다.


클로저는 올바르게 처리되지 않으면 메모리 및 / 또는 메모리 누수가 과도하게 소비 될 수 있습니다.


클로저에 대해 더 자세히 알고 싶다면 


67. Git의 용도는 무엇입니까? 


Git은 무료 오픈 소스 분산 버전 제어 시스템입니다.


즉, 코드와 과거에 변경된 모든 내용을 추적하는 응용 프로그램입니다. 또한 코드를 다른 사람과 공유하고 서로의 변경 사항을 덮어 쓰지 않고 공동 작업 할 수 있습니다.


Git에 대한 완전한 소개. 


68. 리버스 프록시 란 무엇입니까? 


리버스 프록시는 요청을 받아서 다른 HTTP 서버로 요청을 전달하고 응답을 수신 한 다음 데이터를 원래 요청자에게 전달하는 웹 서버 유형입니다.


69. Node.js 애플리케이션에 리버스 프록시 (Nginx 또는 Apache 포함)를 사용하면 어떤 이점이 있습니까? 


몇 가지 이점이 있습니다.

  • SSL termination: Node.js 앱에서 직접 SSL 종료 (HTTP에서 HTTPS로 변경)를 처리하는 것은 번거롭고 보안 위험에 노출 될 수 있습니다. 리버스 프록시 만 SSL 종료를 수행 할 수 있으면 리버스 프록시 만 SSL 인증서에 액세스 할 수 있습니다. 리버스 프록시가 없으면 애플리케이션의 모든 코드 (타사 모듈 포함)가 인증서에 액세스 할 수 있습니다.
  • Clustering: Node.js는 하나 이상의 프로세스에서 응용 프로그램을 실행할 수 있는 내장 클러스터 모듈과 함께 제공됩니다. 그러나 Nginx와 같은 소프트웨어를 사용하여 리버스 프록시를 실행하는 것이 Node.js 솔루션보다 더 효율적이며 캐시를 덜 사용합니다.
  • Gzip compression: 애플리케이션에서 리버스 프록시로 gzip 압축을 오프로드 하면 각 애플리케이션에 대해 구성 할 필요 없이 조직 레벨에서 동일한 압축 로직을 가질 수 있습니다.
  • Performance benefits: SSL 암호화, 클러스터링 및 gzip 압축은 높은 CPU 바인딩 작업입니다. Nginx와 같은 전용 리버스 프록시 도구는 일반적으로 Node.js보다 빠른 작업을 수행합니다.
  • Simplified application code: 리버스 프록시를 사용하면 애플리케이션이 프로토콜 및 프로세스 관리가 아닌 비즈니스 로직에 집중할 수 있습니다. 결과적으로 코드가 크게 단순화됩니다.

추가 정보.


70. SQL과 NoSQL 데이터베이스의 차이점은 무엇입니까? 


  • SQL: 관계형 데이터베이스 관리 시스템, 수직 확장 가능, 고정 스키마, 계층 적 데이터 저장에 적합하지 않으며 복잡한 쿼리에 사용할 수 있습니다.
  • NoSQL: 수평 적으로 확장 가능한 분산 데이터베이스 관리 시스템은 동적 스키마를 가지며 계층 적 데이터 스토리지에 가장 적합하며 복잡한 쿼리에는 적합하지 않습니다.

71. const, var 또는 let으로 변수를 선언하는 것의 차이점은 무엇입니까? 


  • let: 변수가 재 할당 될 수 있음을 의미합니다 (루프의 카운터 또는 알고리즘의 값 스왑과 같은 항목에 사용됨).
  • const: 식별자를 재 할당 할 수 없고 재 할당 할 수 없음을 의미합니다.
  • var: 변수가 재 할당되거나 재 할당되지 않고 전체 기능에 사용되거나 사용되지 않을 수 있음을 의미합니다.

자세한 내용은.


72. null, undefined 및 undeclared 변수 값의 차이점은 무엇입니까? 


  • null: 변수의 값이며 객체의 유형입니다.
  • undefined: 선언되었지만 변수가 존재하지 않는 변수입니다.
  • undeclared: var, let 또는 const 키워드 없이 선언 된 변수입니다.

73. 가장 인기 있는 Node.js 패키지는 무엇입니까? 


이 답변은 사용자가 구축 한 응용 프로그램에서 사용한 것에 고유 할 수 있습니다. 그러나 아래는 귀하가 응답 할 수 있는 몇 가지 아이디어입니다.

  • Express: 단일 페이지, 다중 페이지 및 하이브리드 웹 애플리케이션을 빌드하도록 설계된 Node.js 웹 애플리케이션 서버 프레임 워크입니다. node.js의 기본 서버 프레임 워크입니다.
  • Request: Request은 HTTP 호출을 할 수 있는 가장 간단한 방법으로 설계되었습니다.
  • Browserify: Browserify를 사용하면 모든 종속성을 묶어 브라우저에 require("modules")가 필요합니다.
  • PM2: PM2는로드 밸런서가 내장 된 Node.js 애플리케이션의 프로덕션 프로세스 관리자입니다. 응용 프로그램을 영구적으로 유지하고 다운 타임 없이 다시 로드 하며 일반적인 시스템 관리 작업을 용이하게 합니다.
  • Cheerio: 서버에서 사용하도록 설계된 빠르고 유연하며 간결한 JQuery 구현입니다.
  • Passport: Passport는 Node.js의 인증 미들웨어입니다. 매우 유연하고 모듈화 된 Passport는 모든 Express 기반 웹 응용 프로그램에 눈에 띄게 떨어질 수 있습니다.
  • Nodemailer: Node.js에서 이메일을 쉽게 보낼 수 있습니다.

74. 콘솔 객체의 목적은 무엇입니까? 


Node.js에서 console은 다양한 수준의 메시지를 stdout 및 stderr에 인쇄하는 데 사용되는 전역 객체입니다. 또한 정보 제공, 경고 및 오류 메시지를 인쇄하는 기본 제공 방법도 포함되어 있습니다.


콘솔 객체가 제공하는 가장 많이 사용되는 두 가지 방법과 주요 차이점은 다음과 같습니다.

  • console.log(): 표준 출력, 버퍼링 및 비동기 쓰기
  • console.error():stderr, 동기 및 차단에 기록

다음은 두 가지 코드 예제입니다.


Node.js
 
console.log("Hello")
// Prints: Hello, to stdout
 
console.error(new Error("Error occurred!"))
// Prints: [Error: Error occurred!], to stderr


75. Node.js에서 module.exports의 목적은 무엇입니까? 


module.exports는 JavaScript 코드 파일을 가져 와서 다른 파일에 노출 시켜 해당 함수 또는 변수를 가져올 수 있습니다. module.exports 또는 exports로 할당 한 변수 나 함수는 다른 파일의 모듈로 노출됩니다.


76. 모놀리식 애플리케이션 아키텍처를 어떻게 설명 하시겠습니까? 


모놀리식 아키텍처는 앱이 함께 작동하고 동일한 리소스를 공유하도록 설계된 구성 요소를 가진 하나의 응집력 있는 코드 단위로 빌드됨을 의미합니다.


77. 마이크로 서비스 애플리케이션 아키텍처를 어떻게 설명 하시겠습니까? 


마이크로 서비스 아키텍처는 앱이 자체 리소스로 실행할 수 있고 여러 컴퓨터에서 서로 독립적으로 확장 될 수 있는 더 작고 독립적 인 응용 프로그램으로 구성되어 있음을 의미합니다.


78. 마이크로 서비스와 모 놀리 식 아키텍처의 장단점은 무엇입니까? 


Monolithic 


Pros:

  • 모든 것이 동일한 응용 프로그램을 통해 실행되는 경우 교차 문제에 대한 구성 요소를 쉽게 연결할 수 있습니다.
  • 공유 메모리 액세스는 프로세스 간 통신보다 빠르므로 성능 이점이 있을 수 있습니다.

Cons:

  • 이러한 응용 프로그램은 응용 프로그램이 발전함에 따라 얽히게 되어 다른 서비스를 격리하기가 어렵습니다.
  • 모놀리식 아키텍처는 코드베이스의 특정 부분을 보지 않으면 분명한 종속성, 부작용 및 마법으로 인해 더 큰 것을 이해하기가 더 어려워집니다.

Microservice 


Pros:

  • 각 서비스는 모듈화되고 고유 한 작업이 있으므로 일반적으로 마이크로 서비스 아키텍처가 더 잘 구성됩니다.
  • 특정 서비스를 격리하고 나머지 응용 프로그램에서 개별적으로 확장 할 수 있기 때문에 성능이 향상 될 수 있습니다.

Cons:

  • 각 서비스가 자체 환경에서 실행되므로 테스트가 어려울 수 있습니다.
  • 배포 복잡성이 증가하고 여러 서비스 및 시스템을 배포하고 관리하는 운영 비용도 증가합니다.