๐ฉ๐ป๐ป Dev/Back-End
๋ฐฑ์๋์ ๊ตฌ์กฐ์ Node.js ๊ธฐ์ด
yesolz
2024. 8. 22. 23:29
728x90
๋ฐฑ์๋ ๊ตฌ์กฐ
์น ์๋ฒ (Web Server)
- ์น ์๋ฒ๋ ์ ์ ํ์ด์ง์ ๋ํด ๋์ํจ
- ๋์ ํ์ด์ง์ ๋ํ ์ฒ๋ฆฌ๋ ์ง์ ์ฒ๋ฆฌํ์ง ์๊ณ , ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์๊ฒ ์ ๋ฌ
* ์ ์ ํ์ด์ง: ํ๋ฉด์ ๋ด์ฉ/๋ฐ์ดํฐ ๋ฑ์ ๋ณ๋์ด ์๋ ํ์ด์ง
* ๋์ ํ์ด์ง: ๋ฐ์ดํฐ ์ฒ๋ฆฌ/์ฐ์ฐ์ ํตํด ํ๋ฉด์ ๋ด์ฉ, ๋ฐ์ดํฐ๊ฐ ๋ณํ๋ ํ์ด์ง
์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ(Web Application Server, WAS)๋ ๋์ ํ์ด์ง๋ฅผ ์ฒ๋ฆฌ
- ํ์ํ ๋ฐ์ดํฐ ์ฐ์ฐ์ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ ๋ฐ์ดํฐ ์กฐํ/์์ /์ญ์ ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์์ฒญ
* ๋ฐ์ดํฐ๋ฒ ์ด์ค: ๋ฐ์ดํฐ๋ฅผ ํตํฉํ์ฌ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ฐ์ดํฐ ์งํฉ์ฒด
-> ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ํฌ์ปค์ฑ !
Node.js
- Node.js๋ JavaScript๋ฅผ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ ๋ฐ์์๋ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐํ์ ํ๊ฒฝ
- JavaScript๊ฐ ๋จ์ํ ํด๋ผ์ด์ธํธ ์ธก ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ๋์ด์, ์๋ฒ ์ธก ํ๋ก๊ทธ๋๋ฐ์์๋ ์ฌ์ฉํ ์ ์๊ฒ ๋จ
- ์ด๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ฐฑ์๋ ๊ตฌํ ๊ฐ๋ฅ (์น ์๋ฒ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ)
HTTP ํ๋กํ ์ฝ ํ ํ๋ฆฟ
Head:
- HTTP Status Code: ์์ฒญ์ ๋ํ ์๋ฒ์ ์๋ต ์ํ (์: 200 OK, 404 Not Found).
- Content-Type: ์๋ต ๋ณธ๋ฌธ์ ๋ฐ์ดํฐ ํ์ (์: text/html, application/json).
Body:
- ๋ด์ฉ: ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋ ์ค์ ๋ฐ์ดํฐ ๋๋ ์น ํ์ด์ง ์ฝํ ์ธ .
Uniform Resource Locator (URL)
- ์ธํฐ๋ท ์์์ ์น ํ์ด์ง๊ฐ ์ด๋์๋์ง ์์น๋ฅผ ์๋ ค์ฃผ๋ ์ฃผ์ (์น ํ์ด์ง ์ฃผ์)
- localhost๋ ์ปดํจํฐ๊ฐ ์ค์ค๋ก ์๋ณํ๊ธฐ ์ํด ์ฌ์ฉํ๋ IP ์ฃผ์์ธ `127.0.0.1`์ ์๋ฏธํ๋ค.
- ์ฆ, http://localhost:8888 ์ http://127.0.0.1:8888/๋ ๋์ผํ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์น ์๋ฒ ๊ตฌ์ถ ์ค์ต
index.js์์ ์๋ฒ๋ฅผ ์์ํ๋ฉด -> server.js๊ฐ HTTP ์๋ฒ๋ฅผ ์์ฑํ๊ณ ์์ฒญ์ ์ฒ๋ฆฌ
-> ์์ฒญ์ด ๋ค์ด์ค๋ฉด, router.js๊ฐ ์์ฒญ๋ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์ ์ ํ ํธ๋ค๋ฌ ํจ์๋ฅผ ํธ์ถ
-> requestHandler.js์์ ์ ์๋ ์๋ต์ ํด๋ผ์ด์ธํธ์ ๋ฐํ
index.js
let server = require("./server");
let router = require("./router");
let requestHandler = require("./requestHandler");
server.start(router.route, requestHandler.handle);
- requireํจ์๋ฅผ ํตํด ์ ์ํ ๋ชจ๋์ ๊ฐ์ ธ์ค๊ณ , ์๋ฒ๋ฅผ ์์ํ๋ค.
- server.start ํจ์์ router์ route, requestHandler์ handle์ ์ ๋ฌํ์ฌ ์๋ฒ ์์
- ํฐ๋ฏธ๋์์ node index.js๋ก ๋ก์ปฌ์์ ์๋ฒ ์คํ.
server.js
let http = require("http");
function start(route, handle) {
function onRequest(request, response) {
const url = new URL(request.url, `http://${request.headers.host}`);
let pathname = url.pathname;
route(pathname, handle, response);
}
http.createServer(onRequest).listen(8888);
}
exports.start = start;
- http ๋ชจ๋ ๋ก๋: HTTP ์๋ฒ๋ฅผ ๋ง๋ค๊ธฐ ์ํด http ๋ชจ๋์ ์ฌ์ฉ
- start ํจ์: ์๋ฒ๋ฅผ ์์ํ๊ณ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํจ์
- onRequest ํจ์: ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค URL ๊ฒฝ๋ก๋ฅผ ์ถ์ถํ๊ณ ๋ผ์ฐํ ํจ์์ ์ ๋ฌ
- URL ๊ฐ์ฒด ์ฌ์ฉ: ์์ฒญ๋ URL์์ ๊ฒฝ๋ก(pathname)๋ฅผ ์ถ์ถ
- ์๋ฒ ์์ฑ ๋ฐ ์คํ: ํฌํธ 8888์์ HTTP ์๋ฒ๋ฅผ ์คํ
- ๋ชจ๋ ๋ด๋ณด๋ด๊ธฐ: 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");
response.end();
}
}
exports.route = route;
- route ํจ์๋ ์์ฒญ๋ ๊ฒฝ๋ก(pathname)์ ๋ฐ๋ผ ์์ฒญ์ ์ฒ๋ฆฌ.
- handle ๊ฐ์ฒด์ pathname์ ํด๋นํ๋ ํจ์๊ฐ ์์ผ๋ฉด ๊ทธ ํจ์๋ฅผ ํธ์ถํ์ฌ ์๋ต(response) ์ฒ๋ฆฌ.
- ํจ์๊ฐ ์์ผ๋ฉด 404 ์ค๋ฅ๋ฅผ ๋ฐํํ์ฌ "404 Not Found" ๋ฉ์์ง๋ฅผ ์ ์ก.
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;
handle["/login"] = login;
exports.handle = handle;
- main ํจ์: "/" ๊ฒฝ๋ก ์์ฒญ ์ "Main page" ์๋ต.
- login ํจ์: "/login" ๊ฒฝ๋ก ์์ฒญ ์ "Login page" ์๋ต.
- handle ๊ฐ์ฒด: ๊ฒฝ๋ก๋ณ๋ก ํธ๋ค๋ฌ ํจ์ ๋งคํ.
728x90