Skip to content

Node.js 소개

Node.js는 오픈 소스 및 크로스 플랫폼 JavaScript 런타임 환경입니다. 거의 모든 종류의 프로젝트에서 널리 사용되는 도구입니다!

Node.js는 브라우저 외부에서 Google Chrome의 핵심인 V8 JavaScript 엔진을 실행합니다. 이를 통해 Node.js는 매우 뛰어난 성능을 제공할 수 있습니다.

Node.js 앱은 모든 요청에 대해 새 스레드를 생성하지 않고 단일 프로세스에서 실행됩니다. Node.js는 JavaScript 코드가 차단되는 것을 방지하는 비동기 I/O 기본 요소 세트를 표준 라이브러리에 제공하며 일반적으로 Node.js의 라이브러리는 비차단 패러다임을 사용하여 작성되므로 차단 동작은 일반적인 것이 아닌 예외입니다.

Node.js가 네트워크에서 읽거나, 데이터베이스 또는 파일 시스템에 액세스하는 것과 같은 I/O 작업을 수행할 때 스레드를 차단하고 CPU 사이클을 낭비하여 기다리는 대신, Node.js는 응답이 돌아오면 작업을 다시 시작합니다.

이를 통해 Node.js는 스레드 동시성을 관리하는 부담 없이 단일 서버에서 수천 개의 동시 연결을 처리할 수 있으며 이는 버그의 주요 원인이 될 수 있습니다.

Node.js는 브라우저용 JavaScript를 작성하는 수백만 명의 프런트엔드 개발자가 완전히 다른 언어를 배울 필요 없이 클라이언트 측 코드 외에 서버 측 코드를 작성할 수 있기 때문에 독점적인 이점을 가지고 있습니다.

Node.js에서는 모든 사용자가 브라우저를 업데이트할 때까지 기다릴 필요 없이 새로운 ECMAScript 표준을 문제없이 사용할 수 있습니다. Node.js 버전을 변경하여 사용할 ECMAScript 버전을 결정하고 Node.js를 플래그와 함께 실행하여 특정 실험 기능을 활성화할 수도 있습니다.

Node.js 애플리케이션 예시

가장 일반적인 Node.js Hello World 예시는 웹 서버입니다.

js
import { createServer } from 'node:http'
const hostname = '127.0.0.1'
const port = 3000
const server = createServer((req, res) => {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/plain')
  res.end('Hello World')
})
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`)
})

이 스니펫을 실행하려면 server.js 파일로 저장하고 터미널에서 node server.js를 실행합니다. 코드의 mjs 버전을 사용하는 경우 server.mjs 파일로 저장하고 터미널에서 node server.mjs를 실행해야 합니다.

이 코드는 먼저 Node.js http 모듈을 포함합니다.

Node.js에는 네트워킹에 대한 일급 지원을 포함하여 환상적인 표준 라이브러리가 있습니다.

httpcreateServer() 메서드는 새로운 HTTP 서버를 만들고 반환합니다.

서버는 지정된 포트와 호스트 이름에서 수신하도록 설정됩니다. 서버가 준비되면 콜백 함수가 호출되며 이 경우 서버가 실행 중임을 알려줍니다.

새 요청이 수신될 때마다 request 이벤트가 호출되어 요청(http.IncomingMessage 객체)과 응답(http.ServerResponse 객체)이라는 두 개의 객체를 제공합니다.

이 두 객체는 HTTP 호출을 처리하는 데 필수적입니다.

첫 번째 객체는 요청 세부 정보를 제공합니다. 이 간단한 예에서는 사용되지 않지만 요청 헤더와 요청 데이터에 액세스할 수 있습니다.

두 번째 객체는 호출자에게 데이터를 반환하는 데 사용됩니다.

이 경우 다음을 사용하여:

js
res.setHeader('Content-Type', 'text/plain')

상태 코드 속성을 200으로 설정하여 성공적인 응답임을 나타냅니다.

Content-Type 헤더를 설정합니다:

js
res.setHeader('Content-Type', 'text/plain')

그리고 콘텐츠를 end()에 인수로 추가하여 응답을 닫습니다.

js
res.end('Hello World')

이렇게 하면 클라이언트에 응답이 전송됩니다.