Eyes on the Stars
Node.js 첫 예제 따라하기 본문
프로그래밍 언어의 시작은 무엇일까요?
저는 언어들 배울때 모두들 "Hello World"로부터 시작한다고 생각합니다.
오늘은 Node.js 홈페이지 About에 나와있는 예제를 한줄씩 살펴보며
Node.js의 Hello World를 만나보도록 하겠습니다.
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
01| const http = require('http');
const란 상수를 선언하기 위한 변수 선언자입니다.
Javascript에는 const 이외에도 let, var 등이 있는데요,
const는 변수의 선언 이후 재할당이 불가능하다는 특징이 있습니다.
※ 변수의 선언 방식은 다음과 같습니다.
(변수 선언자) (변수명) = (할당할 변수 값 / 내용)
첫 줄의 내용은
" require('http')를 통해 받은 내용을 http라는 이름의 상수로 저장한다. "
라는 내용을 담고 있는 것입니다.
그럼 require는 어떤 역할을 하는 것일까요?
require는 단어의 뜻 그대로 특정한 '모듈' 혹은 '파일'을 '요구'하는 전역 함수입니다.
require의 인자로 들어오는 것은
'현재 파일에 대한 목표 파일의 상대적 경로'
또는
'node_modules 폴더 내부에 설치되어 있거나 전역으로 설치되어 있는 모듈의 이름'
입니다.
프로젝트별로 필요한 모듈의 경우에는 node_modules 폴더를 통해 관리하고,
http 처럼 기본적으로, 공통적으로 쓰이는 모듈의 경우에는 전역으로 설치되어 있습니다.
목표 파일을 불러오는 과정에 대해서는 다른 포스팅에서 알려드리도록 하겠습니다.
정리하자면
const http = require('http');
는 http 모듈을 불러와서 http라는 이름의 상수에 저장하라는 의미입니다.
03| const hostname = '127.0.0.1';
04| const port = 3000;
hostname이란
네트워크에 연결된 장치들에게 부여되는 고유한 이름으로서,
127.0.0.1은 현재 서버 프로그램이 설치되어 있는 기기 자체를 지칭하는 주소입니다.
port는
TCP나 UDP 등에서 어플리케이션의 상호구분을 위해 사용하는 번호입니다.
같은 host 내부에서 프로세스 간의 구분을 위해 지정됩니다.
즉 hostname을 127.0.0.1로 지정하고 port는 3000으로 지정하여
해당 컴퓨터의 3000번 포트에 서버를 실행하겠다는 의미입니다.
(참고로 서버를 해당 주소와 포트에서 실행하는 코드 자체는 아래에 구현되어 있습니다.)
06| const server = http.createServer((req, res) => {
07| res.statusCode = 200;
08| res.setHeader('Content-Type', 'text/plain');
09| res.end('Hello World\n');
10| });
본 단락은 node.js 홈페이지 HTTP 트랜잭션 해부를 참고하였습니다.
웹 서버 객체를 생성하는 부분입니다.
이 서버로 오는 HTTP 요청마다 createServer에 전달된
함수(본 예제에서는 (req, res) => { ... (중략) ... })가
한번씩 호출됩니다.
res.statusCode = 200 은
http 상태 코드를 200(성공적 응답)으로 설정하라는 것이며,
보다 다양한 status code handling을 알아보기 위해서는 관련 문서를 확인하세요.
res.setHeader('Content-Type', 'text/plain')
에서는 응답 헤더를 설정해줍니다.
본 내용은 내용의 형태가 평문 텍스트임을 알려주고 있습니다.
res.end('Hello World\n')
res 객체는 WritableStream으로,
res.write("contents")와 같은 형태로 내용을 작성할 수 있습니다.
마지막으로 response를 보내기 위해서 res.end 함수를 사용하며,
res.write 내용을 모두 res.end 함수에 담아서 한 번 만 호출할 수도 있습니다.
본 내용은 'Hello World\n'라는 내용을 보내는 것으로 응답을 끝낸다고 알려주고 있습니다.
12| server.listen(port, hostname, () => {
13| console.log(`Server running at http://${hostname}:${port}/`);
14| });
만들어진 웹 서버 객체가 접근할 port와 hostname을 설정하는 부분입니다.
서버에서 요청을 실제로 처리하기 위해 listen 메서드가 호출되었습니다.
서버가 시작될 때 log를 남기게 됩니다.
본 코드를 작성하여 실행하게 되면
서버의 콘솔에는 "Server running at http://127.0.0.1:3000/"이라는 로그가 남게 되며,
실제로 해당 주소로 접근하면 Hello World라는 텍스트를 볼 수 있습니다.
<서버 실행 / 접속 방법>
1. 위의 내용을 app.js 와 같이 확장자가 js인 파일로 저장합니다.
2. 해당 폴더의 콘솔창에서 node app.js 를 입력하여 서버를 실행할 수 있습니다.
3. 인터넷 브라우저에서 http://127.0.0.1:3000/으로 접속합니다.
* 혹시 본 글을 따라 예제를 실행했음에도 제대로 확인할 수 없다면 댓글로 알려주세요.
다음 포스팅에서는 보다 편리하게 서버를 작성할 수 있게 해주는 모듈들에 대해 알아보겠습니다.
'서버 개발 이야기 > Node.js' 카테고리의 다른 글
NPM에 대해 알아보자 (0) | 2018.04.11 |
---|---|
Node.js 설치 (0) | 2018.03.30 |
Node.js 소개 (0) | 2018.03.30 |