🌳목표
노드의 기본 모듈 중 네트웍 기능을 제공하는 http 모듈을 알아 봅니다. 헬로월드 코드로 http모듈을 이용한 서버 어플레케이션을 만드는 것이 목표입니다.
왜 http 모듈부터 시작하나요?
우리는 웹 어플리케이션을 만들어 볼겁니다. 웹 서버를 만들기 위해서는 꽤 많은 네트웍 지식을 알고 있어야 합니다. 가령 tcp, listen, 3way handshaking 처럼 컴퓨터공학에서 배우는 전문 지식들이죠.
노드에서는 이러한 개념들을 구현한 http 모듈을 기본으로 제공합니다. 네트웍 기술을 구현한 것이 이 기본 모듈인데요, 우리는 이것을 이용해서 좀 더 편리하게 웹 어플리케이션을 개발할 수 있습니다.
문서를 같이 살펴 볼까요?
노드를 학습하기 위한 교과서는 노드 공식 홈페이지의 문서입니다. 기본 모듈이 어떻게 있나 한 번 살펴 볼까요?
자주 사용하는 것만 짚어 볼게요.
- Console: 콘솔 로깅
- Crypto: 암호화
- Events: 이벤트 관리
- File System: 파일 관리
- Http: 네트웍 기능
- OS: 운영체제 정보
- Path: 경로 관리
- Stream: 스트림 관리
우리가 사용할 http 모듈에 대해 더 알아 봅시다.
- http.createServer(): 서버 인스턴스를 만들어 반환
- http.server: 서버 클래스
- server.listen(): 서버를 클라이언트 요청 대기 상태(listen)로 만듬
위 세 개 API만으로 간단한 헬로월드 서버를 만들수 있습니다. 아래 링크에서 확인해 볼까요?
Hello word
링크에 있는 코드를 우리 프로젝트에서 실행해 보겠습니다. 먼저 지난 글에서 작성한 코드를 미리 저장해 놓은 브랜치로 이동 하겠습니다.
$ git checkout -f scaffolding/unittest
코드를 제대로 따라오신분은 체크아웃(브랜치 이동)하지 않고 계속 진행하시고요. 그렇지 않은 분은 체크아웃 한 뒤 이어서 코딩하시기 바랍니다.
링크에 있는 코드를 복사해서 우리 프로젝트의 server.js에 붙여 넣어 봅시다.
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") // 응답 헤더 중 Content-Type 설정
res.end("Hello, World!\n") // 응답 데이터 전송
})
// 서버를 요청 대기 상태로 만든다
server.listen(port, hostname, () => {
// 요청 대기가 완료되면 실행되는 콜백 함수
// 터미널에 로그를 기록한다
console.log(`Server running at http://${hostname}:${port}/`)
})
추가로 달아놓은 주석을 자세히 읽어보세요. 충분히 이해할 수 있을 겁니다.
저장하고 터미널에서 서버를 실행해 보죠.
$ node server.js
Server running at http://127.0.0.1:3000/
이런 메세지가 나오죠? 서버가 구동된 것입니다. http.server 인스턴스가 만들어 져서 127.0.0.1 컴퓨터(내 컴퓨터)의 3000번 포트에서 요청 대기하고 있는 상태인 것이죠.
그럼 curl 명령어로 서버에 요청해서 응답을 확인해 볼까요?
$ curl localhost:3000
Hello, world
"Hello, world" 문자열이 제대로 오네요.
-v
옵션을 추가하고 curl 요청을 보내면 http 헤더까지 볼 수 있습니다.
curl localhost:3000 -v
* Rebuilt URL to: localhost:3000/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 3000 (#0)
> GET / HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/plain
< Date: Wed, 12 Dec 2018 10:48:33 GMT
< Connection: keep-alive
< Content-Length: 14
<
Hello, World!
>
문자로 시작하면 요청 정보이고 <
문자로 시작하면 응답 정보 입니다.
응답 부분을 보면 200 상태코드와 text/plain 헤더가 오는 것을 확인할 수 있습니다.
정리
- 노드 기본 모듈인 http를 살펴 봤습니다.
- http로 헬로월드 서버를 만들었습니다.