make sever with node.js javascript -1

zenibako.lee
6 min readOct 9, 2019

--

node.js 노드 서버 만들기

const http = require('http'); 
// createServer메소드를 사용하기 위해, http 모듈을 import.
const PORT = 5000;
// server.listen에 파라미터로 넘겨 줄 포트넘버
const ip = 'localhost';
// server.listen에 들어갈 hostname
const defaultCorsHeader = {'access-control-allow-origin': '*','access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS','access-control-allow-headers': 'content-type, accept','access-control-max-age': 10,'Content-Type':'text/json'};// response.writeHead의 두번째 인자, 헤더정보로 전달할 내용.

server객체 생성 및, listen의 코드를 살펴보기 전,

해당 작업을 하기 전, 미리 작업한 코드들이 상단에 있다.

추가적으로 이해가 필요한 부분을 다시 짚어보자.

HTTP Module

Node.js는 내장 모듈로, http module을 갖고 있다.

해당 모듈의 기능은 Node.js로 하여금 Http 통신규격으로 데이터를 전송할 수 있게 한다.

해당 모듈의 메소드들은

.createServer() : http 규격의 서버를 생성.

.get() : 메소드를 GET으로 설정하고 유저의 리퀘스트를 포함한 객체를 return

.request() : 유저의 request를 포함한 객체를 return

.globalAgent() : HTTP Agent를 return

.listen()

http서버에게 연결에 대한 listening을 시작시킴.

Server.listen(port?: number, hostname?: string, listeningListener?: () => void)

서버객체의 메소드이고, 첫번째 인자로 listening할 포트넘버를,

두번째 인자로, hostname을 받는다.

그렇다면 hostname이 무엇일까?

호스트네임은 컴퓨터네트워크에 연결된 장치에 부여되는 label이다.

호스트네임은 DNS(Domain Name System)의 이름이 붙을 경우, 호스트 네임은 domain name이라고 불리기도 한다.

그 중에서도, 아래와 같이 규격화된 도메인 네임 시스템을 따르는 경우,

fully qualified domain name (FQDN)이라고 불린다.

var url = new URL('https://developer.mozilla.org/en-US/docs/Web/API/URL/hostname');
var result = url.hostname;
// Returns:'developer.mozilla.org'
https://slideplayer.com/slide/6599225/

간단하게 보면, 호스트 네임은

프로토콜과 path사이에 존재하는, 포트넘버 이전의 부분이라고 볼 수 있다.

response.writeHead(status code, header)

HTTP response 객체의 header정보를 상태코드와 함께 적시한다.

무조건 response.send() 이전에 호출이 되어야 한다.

response.setHeader() 를 통해 이미 헤더정보가 선언이 되었어도,

해당 메소드를 통해 merge가 가능하다.

따라서, 헤더정보에 대한 변경 가능성이 있는 경우, setHeader()를 사용하는것이 권장된다.

header는 어떠한 정보를 갖고있는가?

전달하려는 main data가 아닌, 추가적인 어떠한 정보를 담고있다.

그 정보는 매우 다양하며,

get의 결과로 받은 response의 header정보는 아래와 같다.

200 OK
Access-Control-Allow-Origin: *
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Mon, 18 Jul 2016 16:06:00 GMT
Etag: "c561c68d0ba92bbeb8b0f612a9199f722e3a621a"
Keep-Alive: timeout=5, max=997
Last-Modified: Mon, 18 Jul 2016 02:36:04 GMT
Server: Apache
Set-Cookie: mykey=myvalue; expires=Mon, 17-Jul-2017 16:06:00 GMT; Max-Age=31449600; Path=/; secure
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding
X-Backend-Server: developer2.webapp.scl3.mozilla.com
X-Cache-Info: not cacheable; meta data too large
X-kuma-revision: 1085259
x-frame-options: DENY

만약, http서버의 response가 html로 보여질 것으로 예상된다면,

http header를 통해, content-type을 적시해줘야 한다.

res.writeHead(200, {'Content-Type': 'text/html'});

--

--

zenibako.lee
zenibako.lee

Written by zenibako.lee

backend engineer, JS, Node, AWS

No responses yet