Node.js를 이용해서 아주 간단한 서버를 만들어보자
// server.js 파일
let http = require('http'); // http 기능을 사용할 수 있도록 모듈을 받아온다
function onRequest(request, response) { // onRequest: client에게 요청이 온다면
// http의 head + body 구조 템플릿을 생각하자
response.writeHead(200, {'Content-Type' : 'text/html'}); // 200(정상)
response.write('Hello Node.js'); // write = writeBody
response.end();
}
http.createServer(onRequest).listen(8888);
// http 기능을 이용해서 서버를 생성했는데 onRequest 함수를 이용해서 통신을 할 거고
// client와 통신할 때 주파수(포트 넘버)를 8888로 맞춰야 한다
// localhost:8888
// localhost는 내 컴퓨터 주소를 의미한다
<server.js 파일을 다른 파일에서도 사용할 수 있게 모듈화 시켜주기>
Node.js가 미리 만들어 둔 모듈을 우리가 require('모듈 이름'); 이렇게 사용한 것처럼, 우리가 만든 server도 모듈처럼 다른 javascript 파일에서 사용할 수가 있다
// index.js 파일
let server = require('./server.js');
server.start();
// server.js 파일
let http = require('http');
function start() {
function onRequest(request, response) {
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Hello Node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
// localhost:8888
}
// 이 start 함수를 다른 파일에서도 start 함수로 사용할 수 있게 export 해주겠다
exports.start = start;
<URL 모듈 사용하기>
*URL(Uniform Resource Locator): 인터넷상에서 웹 페이지가 어디 있는지 "위치"를 알려주는 주소
쉽게 말해서 웹 페이지 주소이다
서버(server): client의 request를 받는다
라우터(router): client의 request URL에 따라 루트(route)를 정해준다(어디로 갈지 길만 정해준다)
// index.js 파일
let server = require('./server.js');
let router = require('./router.js');
server.start(router.route);
// server.js 파일
let http = require('http');
let url = require('url');
function start(route) {
function onRequest(request, response) {
let pathname = url.parse(request.url).pathname;
route(pathname);
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Hello Node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
// localhost:8888
}
exports.start = start;
// router.js 파일
function route(pathname) {
console.log('pathname: ' + pathname);
}
exports.route = route;
<URL에 따라 다른 콘솔 찍기> (백엔드만 구현)
// index.js 파일
let server = require('./server.js');
let router = require('./router.js');
let requestHandler = require('./requestHandler.js');
server.start(router.route, requestHandler.handle);
// server.js 파일
let http = require('http');
let url = require('url');
function start(route, handle) {
function onRequest(request, response) {
let pathname = url.parse(request.url).pathname;
route(pathname, handle);
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Hello Node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
// localhost:8888
}
exports.start = start;
// router.js 파일
function route(pathname, handle) {
console.log('pathname: ' + pathname);
handle[pathname]();
}
exports.route = route;
// requestHandler.js 파일
function main() {
console.log('main');
}
function login() {
console.log('login');
}
let handle = {}; // key:value 쌍으로 이루어진 변수 상자
handle['/'] = main;
handle['/login'] = login;
exports.handle = handle;
<URL에 따라 프론트엔드에 다른 response 보내기>
// index.js 파일
let server = require('./server.js');
let router = require('./router.js');
let requestHandler = require('./requestHandler.js');
server.start(router.route, requestHandler.handle);
// server.js 파일
let http = require('http');
let url = require('url');
function start(route, handle) {
function onRequest(request, response) {
let pathname = url.parse(request.url).pathname;
route(pathname, handle, response);
}
http.createServer(onRequest).listen(8888);
// localhost:8888
}
exports.start = start;
// router.js 파일
function route(pathname, handle, response) {
console.log('pathname: ' + pathname);
if (typeof handle[pathname] == 'function') {
handle[pathname](response);
} else { // 예외처리
response.writeHead(404, {'Content-Type' : 'text/html'});
response.write('404 Not Found - CLAREMONT');
response.end();
}
}
exports.route = route;
// requestHandler.js 파일
function main(response) { // 메인 페이지
console.log('main');
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Main Page');
response.end();
}
function login(response) { // 로그인 페이지
console.log('login');
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Login Page');
response.end();
}
let handle = {};
handle['/'] = main; // main 함수 호출
handle['/login'] = login; // login 함수 호출
exports.handle = handle;
참고 및 출처: 프로그래머스 웹 서비스 개발의 이해(김송아)
'프레임워크 > Node.js' 카테고리의 다른 글
[Node.js] MQTT, MAVLink, JSON 라이브러리 (0) | 2024.10.20 |
---|