๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ๏ธ 21-2 IPP/Node.js study

Node.js - 8 ์—์…‹, ๋ผ์šฐํŠธ exports

by hanwitjus 2021. 10. 15.

์—์…‹ ์ œ๊ณต

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ์—์…‹์ด๋ž€ ์ด๋ฏธ์ง€, ์Šคํƒ€์ผ ์‹œํŠธ, JavaScript ํŒŒ์ผ์„ ๋œปํ•˜๋ฉฐ 

ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋ทฐ ํŽ˜์ด์ง€์™€ ํ•จ๊ป˜ ๋™์ž‘ํ•œ๋‹ค.

 

HTML ํŒŒ์ผ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ํŒŒ์ผ ํƒ€์ž…, ์˜ˆ๋ฅผ ๋“ค์–ด .jpg, css๋„ ๊ฐ์ž ๊ณ ์œ ์˜ ๋ผ์šฐํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

์ด๊ฒƒ์„ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— public ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ํ•˜์œ„์— image, css, js ํด๋”๋ฅผ ๋งŒ๋“ค์–ด ์—์…‹๋“ค์„ ๋ถ„๋ฆฌํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ํŒŒ์ผ ๊ตฌ์กฐ๋Š”

 

์ด๋ ‡๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

 

 

์ด์ œ main.js๋ฅผ ๋ณผ ์ฐจ๋ก€.

 

์ „์ฒด ๋กœ์ง์€ ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ด๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด๋†“๊ณ  if ๊ตฌ๋ฌธ์œผ๋กœ ์ง€์ •๋œ ํŒŒ์ผ ์š”์ฒญ ์œ ํ˜•์— ๋งž๊ฒŒ ๋ถˆ๋Ÿฌ๋“ค์ด๋Š” ๊ฒƒ ๋ฟ์ด๋‹ค.

 

 

๋จผ์ € ์ด๋ ‡๊ฒŒ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

 

 

๊ทธ๋ฆฌ๊ณ  ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ์š”์ฒญ URL์„ ๋ณ€์ˆ˜ url์— ์ €์žฅํ•œ๋‹ค.

๊ฐ if๋ฌธ ์กฐ๊ฑด์— ๋งž์ถฐ ํŒŒ์ผ ํ™•์žฅ์ž๋“ฑ url์„ ์ฒดํฌํ•œ๋‹ค.

 

 

 

customReadFile์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์„œ ์š”์ฒญ๋œ ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ์„ ์ฐพ๊ณ 

ํ•ด๋‹น ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ๋กœ ์‘๋‹ต์„ ์ž‘์„ฑํ•˜๋ฉฐ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ˜์†”์— ๊ธฐ๋กํ•˜๋„๋ก ํ•œ๋‹ค.

 

์ด ํ•จ์ˆ˜๋Š” fs.readFile์„ ์‚ฌ์šฉํ•ด ์š”์ฒญ๋œ ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” ์•„๊นŒ์™€ ๊ฐ™์ด ์ž˜ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

๋ผ์šฐํŠธ๋ฅผ ๋‹ค๋ฅธ ํŒŒ์ผ๋กœ ๋ฐ”๊ฟ” ์—ฐ๊ฒฐํ•˜๊ธฐ

 

๋งŒ์ผ ๋ชจ๋“  ๋ผ์šฐํŠธ๋ฅผ ์œ„์—์„œ ์ฒ˜๋Ÿผ if-else ๊ตฌ๋ถ„์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ๋ผ์šฐํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ปค์งˆ ๊ฒƒ์ด๋‹ค.

 

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์šฐํŠธ ๋ถ€๋ถ„์„ router.js ๋ผ๋Š” ์ƒˆ๋กœ์šด ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ.

 

์—ฌ๊ธฐ์— POST์™€ GET์š”์ฒญ์— ๋งคํ•‘๋˜๋Š” ๋ผ์šฐํŠธ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ routes ๊ฐ์ฒด๋ฅผ ์ •์˜ํ–ˆ๋‹ค.

 

์—ฌ๊ธฐ์— ๋ผ์šฐํŠธ์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ handle ํ•จ์ˆ˜๋„ ์ƒ์„ฑํ–ˆ๋‹ค. 

์ด ํ•จ์ˆ˜๋Š” routes[req.method]๋ฅผ ์‚ฌ์šฉํ•ด ์š”์ฒญ HTTP ๋ฉ”์†Œ๋“œ์— ๋”ฐ๋ผ route ๊ฐ์ฒด์— ์•ก์„ธ์Šคํ•˜๋ฉฐ

์ดํ›„ ๊ด€๋ จ๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ [req.url]์„ ์‚ฌ์šฉํ•ด ์š”์ฒญ์˜ ํƒ€๊นƒ URL์„ ํ†ตํ•ด ์ฐพ๋Š”๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, /index.html ๋ผ์šฐํŠธ๋ฅผ ํ†ตํ•ด GET ์š”์ฒญ์„ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด route["GET"]["index.html"]์€ route ๊ฐ์ฒด์—์„œ ์‚ฌ์ „ ์ •์˜๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋Œ๋ ค์ค„ ๊ฒƒ์ด๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ routes ๊ฐ์ฒด์— ์žˆ๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ์ „๋‹ฌ๋˜๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ ์ ˆํ•˜๊ฒŒ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. 

๋ผ์šฐํŠธ๊ฐ€ ์—†์œผ๋ฉด httpStatus.NOT_FOUND๋ฅผ ๋Œ๋ ค์ค€๋‹ค.

(๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๋ญ” ์†Œ๋ฆฐ์ง€ ์ •ํ™•ํžˆ ๋ชจ๋ฅด๊ฒ ๋‹คใ…‹)

 

handle ํ•จ์ˆ˜๋Š” ๋ฐ›์€ ์š”์ฒญ์ด HTTP ๋ฉ”์†Œ๋“œ์™€ URL์„ ํ†ตํ•ด routes ๊ฐ์ฒด์˜ ๋ผ์šฐํŠธ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ 

์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋กœ๊น…ํ•œ๋‹ค.

 

try-catch ๋ฅผ ์‚ฌ์šฉํ•ด ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•˜๊ณ , ์ž˜๋ชป๋œ ๋ผ์šฐํŒ…์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

์•„๋ฌดํŠผ ์ด๊ฒƒ์„ require("./router")๋ฅผ ์‚ฌ์šฉํ•ด์„œ main.js์— ์ถ”๊ฐ€ํ•˜๊ณ , ๋ผ์šฐํŠธ๊ฐ€ main.js์—์„œ ์ƒ์„ฑ๋˜๋ฉด ๋ฉ”์†Œ๋“œ ํƒ€์ž…(GET/POST)์— ๋”ฐ๋ผ routes ๊ฐ์ฒด์— ์ถ”๊ฐ€๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

 

 

๊ฒฐ๊ณผ๋Š” ์ด๋ ‡๊ฒŒ ์ž˜ ๋‚˜์˜จ๋‹ค.

 

POST ์š”์ฒญ ํ–ˆ์„ ์‹œ ์ด๋ ‡๊ฒŒ ์ž˜ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

LIST

๋Œ“๊ธ€