기본 내장 모듈인 http 모듈과 달리 외부 모듈인 express로 서버를 실행시키고 http와 코드를 비교해 보겠습니다. Express 모듈은 터미널에서 `npm i express` 명령어를 사용해 설치할 수 있습니다. 설명이 궁금하시다면 npm 사이트-express를 참고하시면 되겠습니다.
express의 readme를 보면 기본적으로 사용하는 방법에 대한 간단한 코드가 제공됩니다.
let http = require("http");
function onRequest(request, response) {
response.writeHead(200, { "Content-Type": "text/html" });
response.wirte("Hello Node.js");
response.end();
}
http.createServer(onRequest).listen(8888);
조금의 차이는 있지만 require로 모듈을 불러오고, listen 함수가 있다는 공통점이 있습니다. 둘 모두 실행하면 정상적으로 작동하는 것을 볼 수 있습니다.
🍯tip! 가끔 입력한 포트 번호가 사용되고 있는 경우가 있는데 그럴 때는 원하는 숫자로 바꿔서 사용하시면 됩니다. 실행 시 에러 메시지를 잘 보면 'already use'라고 나옵니다.
express의 코드를 보면 express() 함수를 실행시킨 app을 통해 get 함수를 사용하는 것을 볼 수 있습니다. get 함수는 HTTP Method의 GET을 구현한 것입니다. get 함수 외에도 post, put, delete 등 Method로 봤던 것들이 함수로 구현되어 있습니다. get 함수의 첫 인수(argument)는 사용하는 주소를 의미합니다. '/' 앞에는 'http://localhost:포트번호'가 생략되어 있습니다. 그리고 뒤에 오는 콜백 함수의 경우 req(uest)와 res(ponse)를 사용할 수 있습니다. 그중 res의 send 함수를 통해 화면에 전송합니다. http 모듈의 response의 write 함수와 비슷한 역할입니다.
🍯tip! 함수에 대해 자세한 코드가 궁금하다면 윈도우를 이용하는 경우 'Ctrl + 함수 마우스 클릭'을 통해 더 자세한 내용을 볼 수 있습니다.
📖JSON
이제 우리가 데이터를 전송하기 위해서 send 함수를 통해 여러 데이터를 전달해 보겠습니다.
app.get("/products/1", function (req, res) {
res.send('Node.js를 공부해보자');
res.send(20000);
});
위 코드 실행 결과 화면
위 코드와 같이 책의 제목과 가격에 대한 정보를 '/products/1'에 담아 보내려고 합니다. 하지만 실제 결과는 제목만이 화면에 보이는 것을 볼 수 있습니다. 그래서 이제 여러 데이터를 보내기 위해 JSON을 알아보겠습니다.
JSON은 JavaScript Object Notation의 약자로 키-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.
좀 더 쉽게 보면 Javascript의 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷입니다. 그렇기 때문에 형태가 다음과 같습니다.
{
title : 'Node.js를 배워보자'
price : 20000,
description : '이 책을 통해 Node.js를 쉽게 이해해보자'
}
:(콜론)을 기준으로 좌측이 키(key)이고 우측이 값(value)인 형태입니다.
값에 들어갈 수 있는 자료형
수(Number)
문자열(String)
불리언(Boolean)
배열(Array)
객체(Object)
null
객체(Object)는 주어 자리에 해당 단어가 왔을 때 문장이 만들어지면 객체이다 by. 김송아 강사님
📄JSON 실습
express에서 JSON을 보내는 방법은 send와 json이 있습니다. 함수를 들어가서 자세히 보시면 다음과 같은 예시를 보여줍니다.
express의 send, json 코드
응답(response)을 보낼 때 무엇을 사용하든 상관은 없지만 JSON의 경우 json으로 보내는 것이 좀 더 좋아 보입니다. 객체를 만들고 json 함수를 이용해 정보를 보내보겠습니다.
const express = require("express");
const app = express();
let nodejsBook = {
title: "Node.js를 공부해보자",
price: 20000,
description: "이 책 좋음 왜? 김송아가 지음",
};
app.get("/products/1", function (req, res) {
res.json(nodejsBook);
// res.send(20000);
});
app.listen(1234);
'localhost:1234/products/1' 결과 화면
🍯tip! 지금은 JSON이 짧기 때문에 기본 형태로 보더라도 볼 수 있지만 길어질수록 보기가 어려워집니다. 이를 위해 JSON을 깔끔하게 보여주는 Chrome extension을 하나 추천해 드리겠습니다. 'localhost:1234/products/1'에 extension을 사용한 결과 화면
📄Params 실습
이제 express를 활용해 서버도 실행해 보고 데이터도 JSON을 통해 보냈습니다. 이제 API 설계했을 때 상품이 여러 가지인 경우를 대비해 id 값으로 구분했던 것이 기억나시나요? 이를 해결하기 위해 http 모듈을 사용할 때에는 쿼리 스트링(Query String)을 활용했습니다. express에서는 Params를 활용해 보겠습니다.
정말 간단합니다. get 함수에 요청할 때 주소를 입력하는 첫 번째 인수에 '/:param이름'을 사용하고, 'req.params.param이름'으로 접근할 수 있습니다.