JavaScript는 처음에는 웹 브라우저에서 동작하는 스크립트 언어로 개발되었습니다. 즉, 웹 페이지의 동적인 부분을 다루고 사용자와 상호작용하기 위한 목적으로 사용되었습니다. 이는 주로 브라우저에서 실행되는 클라이언트 측 언어로서의 역할입니다.
그러나 일부 상황에서는 JavaScript를 브라우저 외부에서도 실행해야 하는 필요성이 생깁니다. 예를 들면, 서버 측에서 웹 애플리케이션의 로직을 처리하거나 데이터베이스와 상호 작용하는 등의 작업이 필요한 경우가 그러한 상황입니다. 이것이 Node.js가 등장한 이유입니다.
Node.js는 JavaScript를 브라우저 외부에서 실행하기 위한 플랫폼 또는 런타임 환경입니다.
이를 통해 JavaScript를 사용하여 서버 측에서도 작업을 수행할 수 있게 되었습니다. 즉, JavaScript가 브라우저에서만 동작하는 것이 아니라 서버에서도 동작할 수 있게 되었습니다.
이러한 변화로써 JavaScript는 더 다양한 용도로 확장되었고, 전체 웹 애플리케이션 스택에서 프론트엔드와 백엔드에서 모두 사용될 수 있는 언어로 발전하게 되었습니다.
javaScript는 원래 브라우저에서 실행되는 언어로 개발되었습니다.
그러나 개발자들은 때로는 JS 코드를 브라우저 외부에서 실행해야 하는 상황이 발생합니다. 예를 들어 JS로 작성된 애플리케이션의 서버 측을 실행해야 할 때입니다.
이러한 목적을 위해 특별한 오픈 소스 도구가 있으며, 그것이 바로 Node.js입니다. 이 도구를 마스터하는 것은 숙련된 JS 개발자가 되기 위해 필수적입니다.
Node.js는 브라우저 외부에서 JavaScript 코드를 실행하기 위한 크로스 플랫폼 런타임 환경을 나타냅니다.
Node.js는 웹 사이트의 서버 측을 작성하기 위해 만들어졌습니다. 이것이 가장 일반적인 사용 사례이지만 데스크톱 프로그램을 작성하는 데도 사용될 수 있습니다.
JS 자체로는 브라우저 외부에서 파일을 읽거나 네트워크와 같은 입출력 장치와 상호 작용할 수 없습니다.
Node.js는 JS가 입출력 장치와 상호 작용할 수 있게 해줍니다.
주로 사용되는 용도는 사용자와의 정보 밀도가 높은 교환을 필요로 하는 웹 서비스를 생성하는 데 사용됩니다. 채팅 룸, 협업 시스템, 소셜 네트워크 등의 구현에 사용됩니다.
Node.js는 2009년에 소프트웨어 엔지니어인 라이언 달(Ryan Dahl)에 의해 만들어졌습니다. Node.js는 V8 엔진을 기반으로 합니다.
V8은 JavaScript 코드를 낮은 수준의 기계 코드로 변환하는 프로그램으로, 프로세서에서 이해할 수 있는 코드로 변환됩니다. 흥미로운 점은 이 엔진이 구글의 덴마크 지사에서 개발된 것이며 Chrome 브라우저의 기반이 되었다는 것입니다.
클라이언트 측 브라우저와 서버 측 언어로 **동일한 언어(JS)를 사용**합니다. 이는 개발 프로세스의 효율성을 높이며 코드를 재사용할 수 있게 합니다.
Node.js는 단일 스레드 및 비동기적인 특성을 가지고 있어 높은 속도를 제공합니다. 이는 이전 작업이 완료될 때까지 기다릴 필요가 없다는 것을 의미합니다.
파일을 읽거나 데이터를 요청하고 다른 작업을 동시에 수행할 수 있습니다.
npm(노드 패키지 매니저)을 사용할 수 있습니다. 이것은 Node.js와 함께 자동으로 설치되는 가장 큰 패키지 매니저입니다. 이를 통해 프로그래머는 새로운 프로젝트에서 작업할 때 동일한 버그를 반복하는 것을 피할 수 있습니다.
Node.js를 사용하려면 먼저 설치해야 합니다. 공식 사이트에서 운영 체제에 맞는 Node.js 버전을 찾아 설치할 수 있습니다. 사이트에서는 LTS(Long Term Support) 및 Current 두 가지 카테고리의 Node.js 버전을 설치할 수 있는 옵션을 제공합니다.
LTS(Long Term Support): 장기 지원을 의미합니다. 주로 안정적이며 새로운 기능을 시도하지 않으므로 상업적인 개발에 좋은 선택입니다.
Current: LTS보다 기능 면에서 앞서 있습니다. 개인 프로젝트를 개발하거나 새로운 기능을 실험하려는 경우 좋은 선택입니다.
Node.js를 올바르게 설치했는지 확인하려면 터미널에서 다음 명령을 입력하여 버전을 확인할 수 있습니다.
node --version
node -v
버전 번호가 표시되면 설치가 성공한 것이므로 Node.js를 사용할 수 있습니다.
"Runtime environment"은 프로그램이 실행되는 동안 필요한 모든 환경과 자원을 제공하는 컴퓨터 시스템 또는 플랫폼을 나타냅니다. 간단히 말해, 프로그램이 실행되면서 필요한 라이브러리, 파일 시스템, 메모리, 네트워크 등과 같은 모든 것이 포함된 환경을 말합니다.
Node.js에서의 "runtime environment"은 JavaScript 코드를 실행할 수 있는 환경을 제공합니다. 브라우저 외부에서 JavaScript 코드를 실행하려면 브라우저에 종속되지 않는 실행 환경이 필요한데, 이것이 바로 Node.js가 하는 역할입니다. Node.js는 JavaScript 엔진(V8 엔진 등)을 기반으로 하며, JavaScript 코드를 실행하면서 서버 측에서 필요한 다양한 기능을 지원하는 런타임 환경을 제공합니다.
이러한 Node.js의 런타임 환경은 파일 시스템 액세스, 네트워크 통신, HTTP 서버의 생성 등과 같은 기능을 포함하며, 브라우저에서는 제공되지 않는 서버 측 JavaScript 개발을 용이하게 합니다.
간단한 HTTP 서버를 구축한다는 것은 Node.js를 사용하여 기본적인 웹 서버를 만든다는 것을 의미합니다. HTTP 서버는 웹 브라우저로부터의 요청을 받아들이고, 요청에 대한 응답을 생성하여 클라이언트에게 보내는 역할을 합니다. 이것은 웹 애플리케이션 또는 웹 서비스를 개발할 때 기본이 되는 부분 중 하나입니다.
간단한 HTTP 서버를 구축하는 과정은 다음과 같습니다.
HTTP 모듈 로드: Node.js의 http 모듈을 로드합니다. 이 모듈을 사용하여 HTTP 서버를 생성할 수 있습니다.
서버 생성: http.createServer 메서드를 사용하여 서버를 생성합니다. 이 메서드는 서버를 만들고, 각 요청에 대해 처리할 콜백 함수를 전달합니다.
요청 처리: 콜백 함수에서는 들어오는 요청(request)에 대한 처리를 구현합니다. 이 예시에서는 GET 메서드이고 경로가 / 일 때만 특정 동작을 수행하도록 합니다.
응답 전송: 요청에 대한 처리가 완료되면, 응답(response)을 생성하고 클라이언트에게 보냅니다.
서버 리스닝: server.listen 메서드를 사용하여 서버를 지정된 포트에서 리스닝 상태로 만듭니다.
위 코드 예시에서는 / 경로로 들어오는 GET 요청에 대해서만 쿼리 매개변수를 추출하고 콘솔에 출력하는 동작을 구현했습니다. 이는 간단한 HTTP 서버를 구축한 예시 중 하나입니다
const http = require('http')
const url = require('url');
const server = http.createServer((req, res) => {
const queryObject = url.parse(req.url,true).query;
res.end('received paramters'+ + JSON.stringify(queryObject));
});
server.listen(3000);
주어진 코드는 Node.js를 사용하여 간단한 HTTP 서버를 만드는 것입니다. 이 서버는 클라이언트로부터 들어오는 HTTP 요청에서 쿼리 매개변수를 추출하고, 해당 매개변수를 JSON 형식으로 응답으로 보내는 역할을 합니다.
코드를 간략히 설명하면 다음과 같습니다:
http 모듈과 url 모듈을 require를 통해 로드합니다.
http.createServer를 사용하여 HTTP 서버를 생성합니다. 요청(request)에 대한 처리는 콜백 함수 안에서 이루어집니다.
url.parse(req.url,true).query를 사용하여 요청 URL에서 쿼리 매개변수를 추출합니다.
추출한 쿼리 매개변수를 JSON 형식으로 문자열화하고 응답(response)으로 보냅니다.
서버는 3000 포트에서 리스닝 상태로 동작합니다.
이제 이 코드를 실행하면, 예를 들어 http://localhost:3000/?name=John&age=25와 같은 URL로 요청이 오면 "received parameters" 다음에 해당 쿼리 매개변수를 JSON 형식으로 출력할 것입니다.
"해당 쿼리 매개변수를 JSON 형식으로 출력할 것입니다"라는 문장은 서버가 클라이언트로부터 받은 HTTP 요청에서 추출한 쿼리 매개변수를 JSON 형식의 문자열로 만들어 출력한다는 것을 의미합니다.
예를 들어, 클라이언트가 http://localhost:3000/?name=John&age=25와 같은 URL로 요청을 보내면, 서버는 이 요청에서 name과 age라는 두 개의 쿼리 매개변수를 추출합니다. 그리고 이 매개변수들을 JSON 형식으로 구성한 후, 클라이언트로 응답으로 보냅니다.
실제로 코드에서는 JSON.stringify(queryObject) 부분이 이 역할을 합니다. 이 부분은 JavaScript 객체인 queryObject를 JSON 형식의 문자열로 변환하여 출력합니다. 출력된 결과는 클라이언트가 받는 응답 내용입니다.