Hello Ocean! ๐ŸŒผ

[Node.js] ์„œ๋ฒ„ ์ƒ์„ฑ ๋ณธ๋ฌธ

Web

[Node.js] ์„œ๋ฒ„ ์ƒ์„ฑ

bba_dda 2021. 1. 26. 19:43
๋ฐ˜์‘ํ˜•

์ฐธ๊ณ ํ•œ ๋งํฌ

www.zerocho.com/category/NodeJS/post/57774a8eacbd2e9803de0195

๊ณผ์ • 1

* ์ด์ „์—, node.js๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•จ.

1. ์›ํ•˜๋Š” ํด๋”์— server.js ํŒŒ์ผ ์ƒ์„ฑ

2. ํŒŒ์ผ ์•ˆ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑ

const http = require('http'); // ์„œ๋ฒ„ ๋งŒ๋“œ๋Š” ๋ชจ๋“ˆ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
http.createServer((request, response) => { // ์„œ๋ฒ„ ์ƒ์„ฑ ๋ฉ”์†Œ๋“œ
    console.log('server start!');
}).listen(8080);

3. cmd ์‹คํ–‰

4. server.js๊ฐ€ ์œ„์น˜ํ•œ ํด๋”๋กœ ์ด๋™

5. node server.js ๋ช…๋ น์–ด ์ž…๋ ฅ

6. http://localhost:8080 ์ ‘์†

๊ฒฐ๊ณผ 1

server.js ์ฝ”๋“œ ๋‚ด์—์„œ console๋ช…๋ น์–ด๋งŒ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €์—๋Š” ์•„์ง ์•„๋ฌด๊ฒƒ๋„ ๋œจ์ง€ ์•Š๋Š”๋‹ค.

ํ•˜์ง€๋งŒ ์„œ๋ฒ„๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค !

์„ค๋ช… 1

node.js ๋Š” ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ๋‹ค.

  • ๋ชจ๋“ˆ : ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ์ชผ๊ฐœ์ ธ์žˆ๋Š” ๊ฒƒ

http ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, http ๋ชจ๋“ˆ์„ require()๋กœ ๋ถˆ๋Ÿฌ์™€ http๋ณ€์ˆ˜์— ์ €์žฅ.

callback ํ•จ์ˆ˜ : ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋œ ํ›„์˜ ๋™์ž‘

createServer() ์ฝœ๋ฐฑ ๋งค๊ฐœ๋ณ€์ˆ˜ : request, response

  • request : ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์ •๋ณด.

  • response : ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๋กœ ๋Œ๋ ค์ค„ ์‘๋‹ต์— ๋Œ€ํ•œ ์ •๋ณด.

์„œ๋ฒ„๋Š” ๋Œ€๊ธฐ์ค‘์ด๋‹ค๊ฐ€ request๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ํ•ด๋‹นํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ response ๊ฐ์ฒด๋กœ ๋Œ๋ ค์ค€๋‹ค.

request์™€ response๋Š” header, body๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • header : ํ•ด๋‹น ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ •๋ณด (์ข…๋ฅ˜, ํฌ๊ธฐ, ์บ์‹œ ์—ฌ๋ถ€ ๋“ฑ)

  • body : ์ฃผ๊ณ ๋ฐ›๊ณ ์ž ํ•˜๋Š” ๋‚ด์šฉ

๊ณผ์ • 2

๊ณผ์ • 1๊ณผ ๋™์ผํ•˜์ง€๋งŒ server.js ์ฝ”๋“œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ

const http = require('http'); // ์„œ๋ฒ„ ๋งŒ๋“œ๋Š” ๋ชจ๋“ˆ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
http.createServer((request, response) => {
    // console.log('server start!');
    return request
        .on('error', (err) => { //request์— error๊ฐ€ ์žˆ์œผ๋ฉด 
            console.error(err);
        })
        .on('data', (data) => { //request์— data๊ฐ€ ์žˆ์œผ๋ฉด 
            console.log(data);
        })
        .on('end', () => { // request์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ๋ฐ›์•„์กŒ์œผ๋ฉด
            response.on('error', (err) => { // ์‘๋‹ต์„ ๋ณด๋‚ด๋Š”๋ฐ ์‘๋‹ต์— ์—๋Ÿฌ๊ฐ€ ์žˆ์œผ๋ฉด
                console.error(err);
            });
            response.statusCode = 200; // ์„ฑ๊ณต ์ƒํƒœ ์ฝ”๋“œ
            response.setHeader('Content-Type', 'text/plain'); // header ์„ค์ •
            response.write("hi\n"); // response์˜ body์— ์ •๋ณด ํƒ‘์žฌ
            response.end('the end!'); // ์ •๋ณด ํƒ‘์žฌ ํ›„ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†ก
        });
}).listen(8080);

๊ฒฐ๊ณผ 2

์„ค๋ช… 2

createServer()์˜ ์ธ์ž์ธ request์™€ response ์‚ฌ์šฉ

์ˆœ์„œ๋Œ€๋กœ ์‚ดํŽด๋ณด๋ฉด

๋จผ์ €, request์— error๊ฐ€ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • ์—๋Ÿฌ๊ฐ€ ์žˆ์œผ๋ฉด ์„œ๋ฒ„๊ฐ€ ์ฃฝ๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค.

request์— data๊ฐ€ ์žˆ์œผ๋ฉด ์ฒ˜๋ฆฌํ•˜๊ณ , data์ฒ˜๋ฆฌ๊ฐ€ ๋‹ค ๋๋‚ฌ์Œ์„ ์•Œ๋ ค์ค€๋‹ค.

request(์š”์ฒญ)์ด ๋๋‚˜๋ฉด response(์‘๋‹ต)์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

end์˜ ์ฝœ๋ฐฑ์— response ํ•ด์ค€๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ response์—๋„ error๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ ,

์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์„ฑ๊ณต(200)์œผ๋กœ ์„ค์ •ํ•œ๋‹ค -> ์ด ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ์ž์„ธํžˆ ์•Œ์•„๋ด์•ผ ํ•จ

setHeader() : ์ „์†กํ•  ์ปจํ…์ธ ์˜ ์œ ํ˜• ์„ค์ • (ํ‰๋ฌธ ๋ณด๋‚ผ๊ฑฐ๋‹ˆ๊นŒ text/plain)

  • html์„ ์ „์†กํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด text/html๋กœ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.

body์„ค์ •์˜ ๋‘ ๋ฉ”์†Œ๋“œ : write() , end()

  • end() : write()ํ•˜๊ณ  response ์ข…๋ฃŒ. ์ข…๋ฃŒํ•˜๋Š” ์ˆœ๊ฐ„ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋จ

๋‘ ์ค„์˜ ์ „์†ก๋œ ๋ฌธ์ž์—ด์ด ๋ธŒ๋ผ์šฐ์ €์— ํ‘œ์‹œ๊ฐ€ ๋œ๋‹ค.

๋ฐ˜์‘ํ˜•