Javascript/Node.js

[Node.js] (5) ์š”์ฒญ๊ณผ ์‘๋‹ต ์—ฐ๊ฒฐํ•˜๊ธฐ, ๋ฒ„ํผ ๊ฐœ๋… (๋ฆฌ๋””๋ ‰์…˜, ์œ ์ €์ž…๋ ฅ๊ฐ’ ํŒŒ์ผ์ƒ์„ฑ ํ›„ ์ €์žฅ)

Rainbow๐ŸŒˆCoder 2022. 11. 24. 14:44
728x90

(1)~(4)๊นŒ์ง€๋Š” ์„œ๋ฒ„๋ฅผ ์Šคํ•€ ์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ, ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ์š”์ฒญ ๊ฐ์ฒด๋ฅผ ๋ฐ›๊ณ , ์‘๋‹ต์„ ๋Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋Š” ์‘๋‹ต ๊ฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•˜์˜€๋‹ค.

 

ํ„ฐ๋ฏธ๋„
์„œ๋ฒ„ ์ข…๋ฃŒ  ctrl + c
์„œ๋ฒ„ ์žฌ์‹œ์ž‘ node app.js

 

1. ์‹ค์Šต์šฉ ์›น์„œ๋ฒ„ ์ฝ”๋“œ ์ž‘์„ฑ

 

์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ด์ค€๋‹ค.

 

const url = req.url;  url์ด ๋ญ”์ง€์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋‚ด์šฉ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด์ฃผ๋„๋ก ํ•˜์ž.
if (url === '/') {

const http = require('http');

const server = http.createServer((req, res) => {
	const url = req.url;
	if (url === '/') {
		res.write('<html>');
		res.write('<head><title>My First Page</title></head>');
		res.write(
			'<body><form action="/message" method="POST"><input type="text" name="message"><button = "submit">Send</button></form></body>');
		res.write('</html>');
		return res.end();
	}
	res.setHeader('Content-Type', 'text/html');
	res.write('<html>');
	res.write('<head><title>My First Page</title></head>');
	res.write('<body><h1>Hello from my Node.js Server!</h1></body>');
	res.write('</html>');
	res.end('Hello Node'); //์ด ์‹œ์ ๋ถ€ํ„ฐ๋Š” ๋” ์ด์ƒ ์•„๋ฌด ๊ฒƒ๋„ ์ž…๋ ฅํ•ด์„œ๋Š” ์•ˆ๋จ
	//์ด ๋ถ€๋ถ„์€ ์šฐ๋ฆฌ๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ, Node.js๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ 
});

server.listen(3000);

 

 

์ฃผ์†Œ์ฐฝ์— http://localhost:3000/ ํ˜น์€ http://localhost:3000

 

์ฒซํ™”๋ฉด

 

์•„๋ฌด๊ฑฐ๋‚˜ ์ž…๋ ฅํ•˜๊ณ  Send๋ฅผ ํด๋ฆญ!

 

 

์œ„์—์„œ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ๋” ๋Š˜๋ ค๋ณธ ์˜ˆ์ œ

const http = require('http');

const server = http.createServer((req, res) => {
	const url = req.url;
	if (url === '/') { //url์ด ์•„๋ฌด๋Ÿฐ ๊ฒฝ๋กœ๊ฐ€ ์—†๋‹ค๋ฉด,
		res.write('<html>');
		res.write('<head><title>My First Page</title></head>');
		res.write(
			'<body><form action="/message" method="POST"><input type="text" name="message"><button = "submit">Send</button></form></body>');
		res.write('</html>');
		return res.end();
	} else if(url === '/Course') {
    	res.write('<html>');
		res.write('<head><title>My First Page</title></head>');
		res.write('<body><h1>course</h1></body>');
		res.write('</html>');
    	return res.end();
    }
	res.setHeader('Content-Type', 'text/html');
	res.write('<html>');
	res.write('<head><title>My First Page</title></head>');
	res.write('<body><h1>Hello from my Node.js Server!</h1></body>');
	res.write('</html>');
	res.end('Hello Node'); //์ด ์‹œ์ ๋ถ€ํ„ฐ๋Š” ๋” ์ด์ƒ ์•„๋ฌด ๊ฒƒ๋„ ์ž…๋ ฅํ•ด์„œ๋Š” ์•ˆ๋จ
	//์ด ๋ถ€๋ถ„์€ ์šฐ๋ฆฌ๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ, Node.js๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ 
});

server.listen(3000);

 

 

2.  ๋ฆฌ๋‹ค์ด๋ ‰์…˜

์ด์ œ GET ์š”์ฒญ ๋ง๊ณ  POST ์š”์ฒญ์„ ๋‹ค๋ฃจ๋„๋ก ํ•ด๋ณธ๋‹ค.

request method์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์•„๋ž˜์˜ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด๋ณด์ž.

else if (url === '/message' && method === 'POST')

์ด์ œ ํ•ด๋‹น ์กฐ๊ฑด๋ฌธ์— ๋‹ฟ์œผ๋ฉด ์œ ์ €๋ฅผ ๋‹ค์‹œ /๋กœ ๋ณด๋‚ด์–ด Course์— ๋‚จ๊ฒจ๋‘์ง€ ์•Š์œผ๋ ค๊ณ  ํ•œ๋‹ค!

๋Œ€์‹  ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•ด์ฃผ๋„๋ก ํ•œ๋‹ค.

 

๊ฒฝ๋กœ ์žฌ์ง€์ •๊ณผ ํŒŒ์ผ ์ƒ์„ฑ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ณธ๋‹ค.

๋‹ค๋ฅธ ํŒจํ‚ค์ง€, ๋‹ค๋ฅธ ์ฝ”์–ด ๋ชจ๋“ˆ์ด ํ•„์š”ํ•˜๋‹ค. (ํŒŒ์ผ์‹œ์Šคํ…œ ์ฝ”์–ด๋ชจ๋“ˆ)  ์ƒ์ˆ˜์— ์ €์žฅํ•ด์„œ ๋ถˆ๋Ÿฌ์™€ ์›ํ•˜๋Š” ์ด๋ฆ„์„ ๋ถ™์—ฌ๋„ ๋œ๋‹ค.

์ด ํฌ์ŠคํŒ…์—์„œ๋Š” fs

const fs = require('fs');

 

wirteFile์€ ํŒŒ์ผ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋ฅผ ์ทจํ•˜๊ฒŒ ๋˜๋ฉฐ ์ด๋ฆ„์€ ๊ฐ„๋‹จํ•˜๊ฒŒ message.txt

 

writeHead๋Š” ํ•œ๋ฒˆ์— ๋ช‡๊ฐ€์ง€ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉฐ

๋‹ค์Œ์œผ๋กœ ๊ฒฝ๋กœ ์žฌ์ง€์ •์„ ์˜๋ฏธํ•˜๋Š” ์ƒํƒœ์ฝ”๋“œ 302 ์„ค์ •, ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” js ๊ฐ์ฒด์™€ ์„ค์ •ํ•˜๊ธธ ์›ํ•˜๋Š” ํ—ค๋” ์ „๋‹ฌ

const http = require('http');
const fs = require('fs');

const server = http.createServer((req, res) => {
	const url = req.url;
	const method = req.method;
	if (url === '/') { //url์ด ์•„๋ฌด๋Ÿฐ ๊ฒฝ๋กœ๊ฐ€ ์—†๋‹ค๋ฉด,
		res.write('<html>');
		res.write('<head><title>My First Page</title></head>');
		res.write(
			'<body><form action="/message" method="POST"><input type="text" name="message"><button = "submit">Send</button></form></body>');
		res.write('</html>');
		return res.end();
	} else if (url === '/message' && method === 'POST') {
		fs.writeFileSync('message.txt', '๋”๋ฏธํ…์ŠคํŠธ');
		//res.writeHead(302, {});
		res.statusCode = 302;
		res.setHeader('Location', '/')//๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ˆ˜๋ฝํ•˜๋Š” ๋””ํดํŠธ ํ—ค๋”,
		//์œ„์น˜์˜ ๊ฒฝ์šฐ /๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด ๋‚ด๊ฐ€ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ํ˜ธ์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
		return res.end();

	}
	res.setHeader('Content-Type', 'text/html');
	res.write('<html>');
	res.write('<head><title>My First Page</title></head>');
	res.write('<body><h1>Hello from my Node.js Server!</h1></body>');
	res.write('</html>');
	res.end('Hello Node'); //์ด ์‹œ์ ๋ถ€ํ„ฐ๋Š” ๋” ์ด์ƒ ์•„๋ฌด ๊ฒƒ๋„ ์ž…๋ ฅํ•ด์„œ๋Š” ์•ˆ๋จ
	//์ด ๋ถ€๋ถ„์€ ์šฐ๋ฆฌ๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ, Node.js๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ 
});

server.listen(3000);

 

๋‹ค์‹œ ์„œ๋ฒ„๋ฅผ ๋Œ๋ฆฌ๊ณ  ์•„๋ฌด ๊ฐ’์ด๋‚˜ ์ž…๋ ฅํ•˜๊ณ  ๋ฒ„ํŠผ ๋ˆŒ๋ €์„ ๋•Œ์˜ ๋„คํŠธ์›Œํฌ ํƒญ

ํŽธ์ง‘๊ธฐ์—์„œ๋„ message.txt ๊ฐ€ ์ž˜ ์ƒ์„ฑ๋˜์–ด ์žˆ์„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!

 

์ฐฝ์€ ๋‹น์—ฐํžˆ

 

 

3. ์œ ์ € ์ž…๋ ฅ๊ฐ’์„ ํŒŒ์ผ ์ƒ์„ฑํ•˜์—ฌ ์ €์žฅํ•˜๊ธฐ

 

์ด์ œ ์œ ์ €๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ํŒŒ์‹ฑํ•˜๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ์— ์“ฐ๋Š” ์ž‘์—…์„ ํ•ด๋ณด๋„๋ก ํ•œ๋‹ค.

๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๋ถ„์„ํ•ด์„œ ์š”์ฒญ์˜ ์ผ๋ถ€์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•œ๋‹ค.

 

๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์€ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณด๋‚ด์ง„๋‹ค..

 

* ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์ด๋ž€?

 

- ์ŠคํŠธ๋ฆผ์€ ์ง€์†์ ์ธ ํ”„๋กœ์„ธ์Šค์ด๋‹ค.

๋…ธ๋“œ๊ฐ€ ๋งŽ์€ ์–‘์˜ ์š”์ฒญ์„ ํ•œ ์ฒญํฌ์”ฉ ์ฝ๊ณ  ์–ด๋А ์‹œ์ ์—๋Š” ๋‹ค ์ฝ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

์•„๋ฌด ๊ฒƒ๋„ ์•ˆ ํ•˜๋ฉด์„œ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

๋ฒ„ํผ๋Š” ๋ฒ„์Šค ์ •๋ฅ˜์žฅ๊ณผ ๊ฐ™๋‹ค. //๋ฒ„์Šค๋Š” ๊ณ„์† ๋‹ฌ๋ฆฌ๊ฒ ์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘๊ฐ„์—๋„ ์ฐพ์•„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”..

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฒญํฌ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ํŒŒ์‹ฑ์ด ๋๋‚˜๊ธฐ ์ „์— ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

https://levelup.gitconnected.com/streams-and-how-they-fit-into-node-js-async-nature-a08723055a67
https://levelup.gitconnected.com/streams-and-how-they-fit-into-node-js-async-nature-a08723055a67
https://levelup.gitconnected.com/streams-and-how-they-fit-into-node-js-async-nature-a08723055a67
https://levelup.gitconnected.com/streams-and-how-they-fit-into-node-js-async-nature-a08723055a67

๊ฐœ๋…์ด ์ถ”์ƒ์ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฒ„ํผ๋Š” ๋‹ค๋ฃจ๊ธฐ ์‰ฝ๋‹ค!

๋ฐ”๋กœ ์ฝ”๋“œ๋กœ ๋Œ์•„๊ฐ€๋ณด์ž

 

 

req.on(data)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ๋ฐ›๋„๋ก chunk๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

์ด์ œ ์ด chunk๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด์•ผ๋งŒ chunk์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

req.on(end)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ ๋ฐ์ดํ„ฐ ํ˜น์€ ๋“ค์–ด์˜ค๋Š” ์ „๋ฐ˜์ ์ธ ์š”์ฒญ์„ ๋ถ„์„ํ•œ ํ›„์— ๋ฐœ์ƒํ•œ๋‹ค.

		req.on('data', (chunk) => {
			console.log(chunk);
			body.push(chunk); //์ด์ œ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๊ฒƒ
		});
		req.on('end');

์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ์—์„œ const parsedBody = Buffer.concat(body); ๋ผ์ธ์ด ์ฃผ๋Š” ์˜๋ฏธ๋Š”,

์ƒˆ ๋ฒ„ํผ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๋ณธ๋ฌธ ์•ˆ์— ์žˆ๋˜ ๋ชจ๋“  ์ฒญํฌ๊ฐ€ ์ถ”๊ฐ€๋  ๊ฒƒ์ด๋‹ค.

	if (url === '/message' && method === 'POST') {
		//์š”์ฒญ ๋ณธ๋ฌธ์„ ์ง€์„ ๊ฒƒ์ด๋ฏ€๋กœ ์ƒ์ˆ˜๋ช… body๋กœ ์ž‘์„ฑ ํ›„, ๋นˆ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด ์ฃผ์ž.
		const body = [];
		//post ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ๋•Œ ์‘๋‹ต์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ํŒŒ์ผ์— ์“ฐ๊ธฐ ์ „์— ์š”์ฒญ ๋ฐ์ดํ„ฐ ๋ฐ›์œผ๋ ค๋ฉด
		//req.๋ฅผ ์ž…๋ ฅํ•ด์„œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋“ฑ๋กํ•˜๋ฉด ๋œ๋‹ค. 
		//createServer๊ฐ€ ๋Œ€์‹  ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ฐ˜๋ฉด, on ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ง์ ‘ ํ•  ์ˆ˜ ์žˆ๋‹ค.
		req.on('data', (chunk) => {
			console.log(chunk);
			body.push(chunk); //์ด์ œ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๊ฒƒ
		});
		req.on('end', () => {
			const parsedBody = Buffer.concat(body);
			// ์ฒญํฌ๋“ค์„ ๋ฐ›์€ ๋‹ค์Œ์— ์ฒญํฌ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฒ„ํผ(๋ฒ„์Šค์ •๋ฅ˜์žฅ) ๊ฐ™์€ ์žฅ์†Œ์—์„œ ์ƒํ˜ธ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
		});

 

parsedBody๋ผ๋Š” ๋ฒ„ํผ์— toString์„ ํ˜ธ์ถœํ•ด ๋ฌธ์ž์—ด๋กœ ์ „ํ™˜ํ•œ๋‹ค.

์ด์ œ ๋ฒ„์Šค์ •๋ฅ˜์žฅ(๋ฒ„ํผ)์— ๋ฒ„์Šค๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค.

์ด์ œ ๋ฒ„ํผ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ „ํ™˜ํ•˜๋Š”๋ฐ ์š”์ฒญ์˜ ๋ณธ๋ฌธ์ด ํ…์ŠคํŠธ, ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋„ ํ…์ŠคํŠธ๋ผ์„œ ๋ฌธ์ž์—ด๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

const parsedBoddy = Buffer.concat(body).toString();

 

const http = require('http');
const fs = require('fs');

const server = http.createServer((req, res) => {
	//createServer : ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์— ์‹คํ–‰๋  ํ•จ์ˆ˜๋ฅผ ์ •์˜
	const url = req.url;
	const method = req.method;
	if (url === '/') { //url์ด ์•„๋ฌด๋Ÿฐ ๊ฒฝ๋กœ๊ฐ€ ์—†๋‹ค๋ฉด,
		res.write('<html>');
		res.write('<head><title>My First Page</title></head>');
		res.write(
			'<body><form action="/message" method="POST"><input type="text" name="message"><button = "submit">Send</button></form></body>');
		res.write('</html>');
		return res.end();
	}
	if (url === '/message' && method === 'POST') {
		//์š”์ฒญ ๋ณธ๋ฌธ์„ ์ง€์„ ๊ฒƒ์ด๋ฏ€๋กœ ์ƒ์ˆ˜๋ช… body๋กœ ์ž‘์„ฑ ํ›„, ๋นˆ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด ์ฃผ์ž.
		const body = [];
		//post ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ๋•Œ ์‘๋‹ต์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ํŒŒ์ผ์— ์“ฐ๊ธฐ ์ „์— ์š”์ฒญ ๋ฐ์ดํ„ฐ ๋ฐ›์œผ๋ ค๋ฉด
		//req.๋ฅผ ์ž…๋ ฅํ•ด์„œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋“ฑ๋กํ•˜๋ฉด ๋œ๋‹ค. 
		//createServer๊ฐ€ ๋Œ€์‹  ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ฐ˜๋ฉด, on ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ง์ ‘ ํ•  ์ˆ˜ ์žˆ๋‹ค.
		req.on('data', (chunk) => {
			console.log(chunk);
			body.push(chunk); //์ด์ œ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๊ฒƒ
		});
		req.on('end', () => {
			const parsedBoddy = Buffer.concat(body).toString(); //๋ฒ„ํผ๊ฐ€ ์ƒ๊ธด ์ฒญํฌ์— ์ž‘์—…
			console.log(parsedBoddy);
			// ์ฒญํฌ๋“ค์„ ๋ฐ›์€ ๋‹ค์Œ์— ์ฒญํฌ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฒ„ํผ(๋ฒ„์Šค์ •๋ฅ˜์žฅ) ๊ฐ™์€ ์žฅ์†Œ์—์„œ ์ƒํ˜ธ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
		});
		//on ๋ฉ”์„œ๋“œ๋Š” ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ๋“ค์„ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
		//์ฒซ๋ฒˆ์งธ ์ธ์ž : data์ด๋ฒคํŠธ๋Š” ์ƒˆ ์ฒญํฌ๊ฐ€ ์ฝํž ์ค€๋น„๊ฐ€ ๋  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์— ๋ฒ„ํผ๊ฐ€ ๋„์›€์„ ์ค€๋‹ค.
		//๋‘๋ฒˆ์งธ ์ธ์ž : ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ด๋ฒคํŠธ์— ์‹คํ–‰๋  ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค. 
		// ์—ฌ๊ธฐ์„œ๋Š” ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ์‹คํ–‰๋  ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค.
		fs.writeFile('message.txt', '๋”๋ฏธํ…์ŠคํŠธ');
		//res.writeHead(302, {});
		res.statusCode = 302;
		res.setHeader('Location', '/')//๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ˆ˜๋ฝํ•˜๋Š” ๋””ํดํŠธ ํ—ค๋”,
		//์œ„์น˜์˜ ๊ฒฝ์šฐ /๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด ๋‚ด๊ฐ€ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ํ˜ธ์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
		return res.end();

	}
	res.setHeader('Content-Type', 'text/html');
	res.write('<html>');
	res.write('<head><title>My First Page</title></head>');
	res.write('<body><h1>Hello from my Node.js Server!</h1></body>');
	res.write('</html>');
	res.end('Hello Node'); //์ด ์‹œ์ ๋ถ€ํ„ฐ๋Š” ๋” ์ด์ƒ ์•„๋ฌด ๊ฒƒ๋„ ์ž…๋ ฅํ•ด์„œ๋Š” ์•ˆ๋จ
	//์ด ๋ถ€๋ถ„์€ ์šฐ๋ฆฌ๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ, Node.js๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ 
});

server.listen(3001);

 

 

์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์™„์„ฑํ•˜๊ณ , ์„œ๋ฒ„๋ฅผ ์žฌ์‹คํ–‰์‹œ์ผœ๋ณด์ž.

๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด ๋‘๊ฐœ์˜ ์š”์†Œ๊ฐ€ ์žˆ๋‹ค. 

์ฒซ๋ฒˆ์งธ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์ฒญํฌ์ด๋‹ค <Buffer ..~~~> conosole.log(chunk)

๋ฐ˜๋ฉด, parsedBody๋Š” ์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•„์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฐ์ถœํ–ˆ๋‹ค.

(input์˜ name์„ message ๋กœ ์ง€์–ด์„œ message๋กœ ์‹œ์ž‘ํ•จ)

 

์—ฌ๊ธฐ form์ด ๋ชจ๋“  ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์ž๋™์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด ์š”์ฒญ ๊ฐ์ฒด์— ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋„ฃ๋Š”๋‹ค.

<form action="/message" method="POST">

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ๊ฐ’์ด๋ฉฐ, ์ž…๋ ฅ์— ์ฃผ์–ด์ง€๋Š” ์ด๋ฆ„์ด ํ‚ค์ด๋‹ค.  

<input type="text" name="message">

๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด ํ‚ค์™€ ๊ฐ’์€ ๋“ฑํ˜ธ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค. ๊ทธ๋Ÿผ ๋น„๋กœ์†Œ ํŒŒ์ผ์— ์ž…๋ ฅ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿผ ๋ฐ”๋กœ req.on(end)์— ์ƒˆ๋กœ์šด ์ƒ์ˆ˜ message๋ฅผ ๋งŒ๋“ค๊ณ  paresdBody.split์— ๋“ฑํ˜ธ๋ฅผ ๋„ฃ์€ ํ›„ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์˜ ๋‘๋ฒˆ์งธ ์š”์†Œ์ธ ์ธ๋ฑ์Šค 1์„ ์š”์†Œ๋กœ ๋‘๋Š” ์ƒ๊ฐ์„ ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. 

 

		req.on('end', () => {
			const parsedBody = Buffer.concat(body).toString(); //๋ฒ„ํผ๊ฐ€ ์ƒ๊ธด ์ฒญํฌ์— ์ž‘์—…
			console.log(parsedBody);
			const message = parsedBody.split('=')[1];
			console.log(message);
			// ์ฒญํฌ๋“ค์„ ๋ฐ›์€ ๋‹ค์Œ์— ์ฒญํฌ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฒ„ํผ(๋ฒ„์Šค์ •๋ฅ˜์žฅ) ๊ฐ™์€ ์žฅ์†Œ์—์„œ ์ƒํ˜ธ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
		});

์ด์ œ writeFileSync๋ฅผ ํ•จ์ˆ˜์˜ ๋งˆ์ง€๋ง‰์— ๋ง๋ถ™์ธ๋‹ค. ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” message๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

		req.on('end', () => {
			const parsedBody = Buffer.concat(body).toString(); //๋ฒ„ํผ๊ฐ€ ์ƒ๊ธด ์ฒญํฌ์— ์ž‘์—…
			console.log(parsedBody);
			const message = parsedBody.split('=')[1];
			console.log(message);
			fs.writeFileSync('message.txt', message);
			// ์ฒญํฌ๋“ค์„ ๋ฐ›์€ ๋‹ค์Œ์— ์ฒญํฌ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฒ„ํผ(๋ฒ„์Šค์ •๋ฅ˜์žฅ) ๊ฐ™์€ ์žฅ์†Œ์—์„œ ์ƒํ˜ธ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
		});

 

์˜คํ˜ธ ๋‹ค์‹œ ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๊ณ 

LESSERAFIM์„ ์ž…๋ ฅํ•˜๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์œ ์ €์˜ ์ž…๋ ฅ๊ฐ’์ด ์ƒˆ๋กœ์šด ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ์ €์žฅ๊นŒ์ง€ ์ž˜ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค!

 

 

์ „์ฒด ์ฝ”๋“œ

const http = require('http');
const fs = require('fs');

const server = http.createServer((req, res) => {
	//createServer : ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์— ์‹คํ–‰๋  ํ•จ์ˆ˜๋ฅผ ์ •์˜
	const url = req.url;
	const method = req.method;
	if (url === '/') { //url์ด ์•„๋ฌด๋Ÿฐ ๊ฒฝ๋กœ๊ฐ€ ์—†๋‹ค๋ฉด,
		res.write('<html>');
		res.write('<head><title>My First Page</title></head>');
		res.write(
			'<body><form action="/message" method="POST"><input type="text" name="message"><button = "submit">Send</button></form></body>');
		res.write('</html>');
		return res.end();
	}
	if (url === '/message' && method === 'POST') {
		//์š”์ฒญ ๋ณธ๋ฌธ์„ ์ง€์„ ๊ฒƒ์ด๋ฏ€๋กœ ์ƒ์ˆ˜๋ช… body๋กœ ์ž‘์„ฑ ํ›„, ๋นˆ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด ์ฃผ์ž.
		const body = [];
		//post ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ๋•Œ ์‘๋‹ต์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ํŒŒ์ผ์— ์“ฐ๊ธฐ ์ „์— ์š”์ฒญ ๋ฐ์ดํ„ฐ ๋ฐ›์œผ๋ ค๋ฉด
		//req.๋ฅผ ์ž…๋ ฅํ•ด์„œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋“ฑ๋กํ•˜๋ฉด ๋œ๋‹ค. 
		//createServer๊ฐ€ ๋Œ€์‹  ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ฐ˜๋ฉด, on ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ง์ ‘ ํ•  ์ˆ˜ ์žˆ๋‹ค.
		req.on('data', (chunk) => {
			console.log(chunk);
			body.push(chunk); //์ด์ œ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๊ฒƒ
		});
		req.on('end', () => {
			const parsedBody = Buffer.concat(body).toString(); //๋ฒ„ํผ๊ฐ€ ์ƒ๊ธด ์ฒญํฌ์— ์ž‘์—…
			console.log(parsedBody);
			const message = parsedBody.split('=')[1];
			console.log(message);
			fs.writeFile('message.txt', message);
			// ์ฒญํฌ๋“ค์„ ๋ฐ›์€ ๋‹ค์Œ์— ์ฒญํฌ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฒ„ํผ(๋ฒ„์Šค์ •๋ฅ˜์žฅ) ๊ฐ™์€ ์žฅ์†Œ์—์„œ ์ƒํ˜ธ์ž‘์šฉ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
		});
		//on ๋ฉ”์„œ๋“œ๋Š” ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ๋“ค์„ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
		//์ฒซ๋ฒˆ์งธ ์ธ์ž : data์ด๋ฒคํŠธ๋Š” ์ƒˆ ์ฒญํฌ๊ฐ€ ์ฝํž ์ค€๋น„๊ฐ€ ๋  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์— ๋ฒ„ํผ๊ฐ€ ๋„์›€์„ ์ค€๋‹ค.
		//๋‘๋ฒˆ์งธ ์ธ์ž : ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ด๋ฒคํŠธ์— ์‹คํ–‰๋  ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค. 
		// ์—ฌ๊ธฐ์„œ๋Š” ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ์‹คํ–‰๋  ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค.
		//fs.writeFile('message.txt', '๋”๋ฏธํ…์ŠคํŠธ');
		//res.writeHead(302, {});
		res.statusCode = 302;
		res.setHeader('Location', '/')//๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ˆ˜๋ฝํ•˜๋Š” ๋””ํดํŠธ ํ—ค๋”,
		//์œ„์น˜์˜ ๊ฒฝ์šฐ /๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด ๋‚ด๊ฐ€ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ํ˜ธ์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
		return res.end();

	}
	res.setHeader('Content-Type', 'text/html');
	res.write('<html>');
	res.write('<head><title>My First Page</title></head>');
	res.write('<body><h1>Hello from my Node.js Server!</h1></body>');
	res.write('</html>');
	res.end('Hello Node'); //์ด ์‹œ์ ๋ถ€ํ„ฐ๋Š” ๋” ์ด์ƒ ์•„๋ฌด ๊ฒƒ๋„ ์ž…๋ ฅํ•ด์„œ๋Š” ์•ˆ๋จ
	//์ด ๋ถ€๋ถ„์€ ์šฐ๋ฆฌ๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ, Node.js๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ 
});

server.listen(3005);

 

์ง€๊ธˆ๊นŒ์ง€๋Š” Node.js์˜ ๋ฏธ๊ฐ€๊ณต ๋…ผ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด์•˜๊ณ 

๋‚˜์ค‘์—๋Š” ์ด๋Ÿฌํ•œ ๋ฏธ๊ฐ€๊ณต ๋…ผ๋ฆฌ๋ฅผ ์ˆจ๊ธฐ๋Š” Express.js๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ๊นŒ์ง€์˜ ํ•™์Šต์œผ๋กœ

Express.js ๊ฐ™์€ ํˆด์ด ์–ด๋–ป๊ฒŒ ๊ณผ์ •์„ ๋‹จ์ˆœํ™”ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

728x90