1.Node.js란
JavaScript가 단순한 스크립트 언어를 넘어서 프로그래밍 언어로서의 역할을 할 수 있는 플랫폼
Node.js를 사용함으로써 우리는 JavaScript로 백엔드 서버 개발을 진행할 수 있다.
2.Node.js 서버 기본 틀 작성
강의 에서 설명한 코드는 기본적인 HTTP 서버와 라우팅 메커니즘을 설정하여, 주소에 따라 다른 페이지를 보여주는 구조로 구성되어 있다.
index.js
이 파일은 서버, 라우터, 그리고 요청 핸들러 모듈을 가져와서 서버를 시작
server.start 함수를 호출하여 라우팅 및 요청 처리를 초기화
//let server = require('./server_url.js')//url방식
let server = require('./server_whatwg.js')//whatwg방식
let router = require('./router.js')
let requestHander = require('./requestHander.js')
server.start(router.route, requestHander.handle)
server.js(X)
Node.js의 http와 url 모듈을 사용하여 서버를 구축
start 함수는 HTTP 요청을 처리하는 서버를 생성, 요청의 URL을 파싱하여 경로명을 추출하고, 해당 경로명에 맞는 핸들러 함수를 실행
*url 요청시 특정 경로 (예: /favicon.ico) 같이 찍혀 무시하는 코드 추가
서버는 로컬호스트의 8888 포트에서 리스닝
let http = require('http');
let url = require('url');
function start(route,handle) {
function onRequest(request,response){
let pathname = url.parse(request.url).pathname;
// /favicon.ico 요청을 무시하거나 적절히 처리
if (pathname === '/favicon.ico') {
return;
}
route(pathname,handle,response)
}
http.createServer(onRequest).listen(8888);
// localhost:8888
}
//내장 함수 외부에서 사용할 수 있도록하기
exports.start = start;
server_whatwg.js
url.paser 함수는 더이상 권하지 않는다고 취소선이 그어졌다.
찾아보니 WHATWG URL API 방식이 있어 추가 작성
let http = require('http');
const { URL } = require('url'); // WHATWG URL API 사용
function start(route,handle) {
function onRequest(request,response){
const reqUrl = new URL(request.url, `http://${request.headers.host}`);
let pathname = reqUrl.pathname;
// /favicon.ico 요청을 무시하거나 적절히 처리
if (pathname === '/favicon.ico') {
return;
}
route(pathname,handle,response)
}
http.createServer(onRequest).listen(8888);
// localhost:8888
}
//내장 함수 외부에서 사용할 수 있도록하기
exports.start = start;
router.js
route 함수는 주어진 경로명에 따라 적절한 핸들러 함수를 호출
경로명이 핸들러 목록에 존재하면 해당 함수를 호출하고, 그렇지 않으면 404 오류를 응답
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('Not Found');
response.end();
}
}
exports.route = route;
requestHandler.js
main 함수와 login 함수는 각각 메인 페이지와 로그인 페이지를 처리
각 경로 (/ 및 /login)에 대해 특정 함수를 매핑하여 응답을 관리
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 = {}; // key:value
handle['/'] = main;
handle['/login'] = login;
exports.handle = handle;
*handle 객체는 요청된 경로에 대응하는 함수들을 관리하기 위한 매핑 객체 이 객체는 경로 문자열을 키로 사용하고, 해당 경로에 대한 요청이 있을 때 호출될 함수를 값으로 가진다. 이 방식은 Node.js 애플리케이션에서 라우팅 로직을 구현하는데 자주 사용되며, 사용자의 요청에 따라 적절한 콘텐츠나 데이터를 동적으로 제공하는 데 유용하다.
코드는 모듈화된 방식으로 작성되어 각 구성 요소의 역할이 명확하며, 확장성과 유지보수가 용이한 구조를 가지고 있다.
이를 통해 더 많은 경로와 핸들러를 쉽게 추가하거나 변경할 수 있다.
3.느낀점
Node.js를 이용해 서버 동작하는 기본적인 구조를 간단히 설명하고
이를 통한 기본 개념만 이해하기
4.출처
내용 요약 GPT
'클라우딩 어플리케이션 엔지니어링 TIL > 3주차' 카테고리의 다른 글
[파트9] HTML 두번째 (0) | 2024.04.24 |
---|---|
[파트8] HTML 첫번째 (0) | 2024.04.23 |
[파트7] 환경실습(vscode) (0) | 2024.04.23 |
[파트4] Node.js에 db연동 준비(npm 사용) (0) | 2024.04.23 |
[파트3] 데이터베이스란(도커 이용한 DB 설치) (0) | 2024.04.22 |