๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Dev.log/Node.js

[Node.js ๊ต๊ณผ์„œ] #4. ๋…ธ๋“œ ๋‚ด์žฅ ๋ชจ๋“ˆ ์‚ฌ์šฉํ•˜๊ธฐ

๋…ธ๋“œ ๋‚ด์žฅ ๋ชจ๋“ˆ ์‚ฌ์šฉํ•˜๊ธฐ

๋…ธ๋“œ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์šด์˜์ฒด์ œ ์ •๋ณด์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ •๋ณด๋„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ”๋กœ ๋…ธ๋“œ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

1. OS ๋ชจ๋“ˆ

์›น ๋ธŒ๋ผ์šฐ์ €์— ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์šด์˜์ฒด์ œ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์ง๋‚˜, ๋…ธ๋“œ๋Š” os ๋ชจ๋“ˆ์— ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ ์žˆ์–ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

 

2. path ๋ชจ๋“ˆ

ํด๋”์™€ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์‰ฝ๊ฒŒ ์กฐ์ž‘ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ. path ๋ชจ๋“ˆ์ด ํ•„์š”ํ•œ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ์šด์˜์ฒด์ œ๋ณ„๋กœ ๊ฒฝ๋กœ ๊ตฌ๋ถ„์ž๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํฌ๊ฒŒ Windows ํƒ€์ž…๊ณผ POSIX ํƒ€์ž…์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. POSIX๋Š” ์œ ๋‹‰์Šค ๊ธฐ๋ฐ˜์˜ ์šด์˜์ฒด์ œ๋“ค๋กœ macOS์™€ ๋ฆฌ๋ˆ…์Šค๊ฐ€ ์†ํ•ด์žˆ๋‹ค.

  • Windows : \๋กœ ๊ตฌ๋ถ„ (ex. C:\Users\Zero)
  • POSIX : /๋กœ ๊ตฌ๋ถ„ (ex. /home/zerocho)

 

 

 

 

 

โ˜‘ Note ์–ด๋–ค ๋•Œ \\๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์–ด๋–ค ๋•Œ \๋ฅผ ์‚ฌ์šฉํ•˜๋‚˜์š”?

์ฝ˜์†” ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์–ด๋–ค ๋•Œ๋Š” \\๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์–ด๋–ค ๋•Œ๋Š” ๊ทธ๋ƒฅ \๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Windows ๊ฒฝ๋กœ๋ฅผ ํ‘œ์‹œํ–ˆใ„ท. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒฝ๋กœ๋Š” \ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ‘œ์‹œํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ์ž์—ด์—์„œ๋Š” \๊ฐ€ ํŠน์ˆ˜๋ฌธ์ž์ด๋ฏ€๋กœ \๋ฅผ ๋‘ ๊ฐญ ๋ถ™์—ฌ ๊ฒฝ๋กœ๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค. 

ex. \n์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ์ž์—ด์—์„œ ๊ฐœํ–‰์„ ๋œปํ•จ. ๋”ฐ๋ผ์„œ C:\node์™€ ๊ฐ™์€ ๊ฒฝ๋กœ์—์„œ ์˜๋„์น˜ ์•Š๊ฒŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ C:\\node์ฒ˜๋Ÿผ ํ‘œ์‹œ

path ๋ชจ๋“ˆ์€ ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค. → Windows์—์„œ path ๋ชจ๋“ˆ์ด ๊ผญ ํ•„์š”ํ•œ ์ด์œ 

 

โ˜‘ Note ์ƒ๋Œ€๊ฒฝ๋กœ์™€ ์ ˆ๋Œ€๊ฒฝ๋กœ

  • ์ ˆ๋Œ€๊ฒฝ๋กœ : ํ‘ธํŠธ ํด๋”Windows์˜ C:\๋‚˜ POSIX์˜ /)๋‚˜ ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ์œ„์น˜๊ฐ€ ๊ธฐ์ค€์ด ๋œ๋‹ค.
  • ์ƒ๋Œ€๊ฒฝ๋กœ : ํ˜„์žฌ ํŒŒ์ผ์ด ๊ธฐ์ค€์ด ๋œ๋‹ค. ํ˜„์žฌ ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ๋ฉด ์  ํ•˜๋‚˜(.)๋ฅผ, ํ˜„์žฌ ํŒŒ์ผ๋ณด๋‹ค ํ•œ ๋‹จ๊ณ„ ์ƒ์œ„ ๊ฒฝ๋กœ๋ฉด ์  ๋‘ ๊ฐœ(..)๋ฅผ ์‚ฌ์šฉํ•ด ํ‘œํ˜„ํ•œ๋‹ค.

3. url ๋ชจ๋“ˆ

์ธํ„ฐ๋„ท ์ฃผ์†Œ๋ฅผ ์‰ฝ๊ฒŒ ์กฐ์ž‘ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ.

 

url ์ฒ˜๋ฆฌ์˜ 2๊ฐ€์ง€ ๋ฐฉ์‹

  • WHATWG ๋ฐฉ์‹ (๋…ธ๋“œ ๋ฒ„์ „ 7์—์„œ ์ถ”๊ฐ€) ๋ฐฉ์‹์˜ url (์•„๋ž˜ ๊ทธ๋ฆผ์˜ ์•„๋žซ ๋ถ€๋ถ„)
  • ๊ธฐ์กด ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋˜ ๋ฐฉ์‹์˜ url (์•„๋ž˜ ๊ทธ๋ฆผ์˜ ์œ— ๋ถ€๋ถ„)

https://thebook.io/080229/ch03/05/03/

โ‘  ๊ธฐ์กด ๋…ธ๋“œ URL ๋ฐฉ์‹

  • url.parse(์ฃผ์†Œ) : ์ฃผ์†Œ๋ฅผ ๋ถ„ํ•ดํ•œ๋‹ค. WHATWG ๋ฐฉ์‹๊ณผ ๋น„๊ตํ•˜๋ฉด username๊ณผ password ๋Œ€์‹  auth ์†์„ฑ์ด ์žˆ๊ณ , searchParams ๋Œ€์‹  query๊ฐ€ ์žˆ๋‹ค.
  • url.format(๊ฐ์ฒด) : ๋ถ„ํ•ด๋˜์—ˆ๋˜ url ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ์›๋ž˜ ์ƒํƒœ๋กœ ์กฐ๋ฆฝํ•œ๋‹ค. WHATWG ๋ฐฉ์‹์˜ url๊ณผ ๊ธฐ์กด ๋…ธ๋“œ์˜ url ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

โ‘ก WHATWG URL ๋ฐฉ์‹

WHATWG์™€ ๋…ธ๋“œ์˜ url์€ ์ทจํ–ฅ์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ, ๋…ธ๋“œ์˜ url ํ˜•์‹์„ ๊ผญ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์†Œ๊ฐ€ host ๋ถ€๋ถ„ ์—†์ด pathname ๋ถ€๋ถ„๋งŒ ์˜ค๋Š” ๊ฒฝ์šฐ(/book/bookList.aspk), WHATWG ๋ฐฉ์‹์€ ์ด ์ฃผ์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค. 

WHATWG ๋ฐฉ์‹์€ search ๋ถ€๋ถ„์„ searchParams๋ผ๋Š” ํŠน์ˆ˜ํ•œ ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ์œ ์šฉํ•˜๋‹ค. search ๋ถ€๋ถ„์€ ๋ณดํ†ต ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. search๋Š” ๋ฌผ์Œํ‘œ(?)๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๊ทธ ๋’ค์˜ ํ‚ค=๊ฐ’ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์—ฌ๋Ÿฌ ํ‚ค๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” &๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

ex) http://www.gilbut.co.kr/?page=3&limit=10&category=nodejs&category=javascript 

→ ?page=3&limit=10&category=nodejs&category=javascript ๋ถ€๋ถ„์ด search

 

 

 

 

 

query ๊ฐ™์€ ๋ฌธ์ž์—ด๋ณด๋‹ค searchParams๊ฐ€ ์œ ์šฉํ•œ ์ด์œ ๋Š” query์˜ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” queryString ๋ชจ๋“ˆ์„ ํ•œ ๋ฒˆ ๋” ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

4. queryString ๋ชจ๋“ˆ

WHATWG ๋ฐฉ์‹์˜ url ๋Œ€์‹  ๊ธฐ์กด ๋…ธ๋“œ์˜ url์„ ์‚ฌ์šฉํ•  ๋•Œ search ๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๋ชจ๋“ˆ์ด๋‹ค.

 

 

5. crypto ๋ชจ๋“ˆ

๋‹ค์–‘ํ•œ ๋ฐฉ์‹์˜ ์•”ํ˜ธํ™”๋ฅผ ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ์ด๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๋Š” ์ตํ˜€๋‘๋ฉด ์‹ค์ œ ์„œ๋น„์Šค์—๋„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ •๋ง ์œ ์šฉํ•˜๋‹ค.

 

5-โ‘ . ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”

  • ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™” : ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์—†๋Š” ์•”ํ˜ธํ™” ๋ฐฉ์‹

๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋ณดํ†ต ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ์•”ํ˜ธํ™”ํ•œ๋‹ค. ์ฆ‰, ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”๋Š” ํ•œ ๋ฒˆ ์•”ํ˜ธํ™”ํ•˜๋ฉด ์›๋ž˜ ๋ฌธ์ž์—ด์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค.

๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ฃผ๋กœ ํ•ด์‹œ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. 

  • ํ•ด์‹œ ๊ธฐ๋ฒ• : ์–ด๋– ํ•œ ๋ฌธ์ž์—ด์„ ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ๋ฐฉ์‹

์ž…๋ ฅ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” ๋‹ค๋ฅด์ง€๋งŒ, ์ถœ๋ ค ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค.

 

โ˜‘ Note ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์—†๋Š” ์•”ํ˜ธํ™”๊ฐ€ ์™œ ํ•„์š”ํ• ๊นŒ?

๊ณ ๊ฐ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋กœ๊ทธ์ธํ•  ๋•Œ๋งˆ๋‹ค ์ž…๋ ฅ๋ฐ›์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฐ™์€ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์•”ํ˜ธํ™”ํ•œ ํ›„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๋น„๊ตํ•˜๋ฉด ๋œ๋‹ค. ์›๋ž˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์–ด๋””์—๋„ ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด๋กœ๋งŒ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

  • createHash(์•Œ๊ณ ๋ฆฌ์ฆ˜) : ์‚ฌ์šฉํ•  ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋„ฃ์–ด์ค€๋‹ค. md5, sha1, sha256, sha512 ๋“ฑ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, md5์™€ sha1์€ ์ด๋ฏธ ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ๋‹ค. ํ˜„์žฌ๋Š” sha512 ์ •๋„๋กœ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ, ๋‚˜์ค‘์— sha512๋งˆ์ €๋„ ์ทจ์•ฝํ•ด์ง€๋ฉด ๋” ๊ฐ•ํ™”๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค.
  • update(๋ฌธ์ž์—ด) : ๋ณ€ํ™˜ํ•  ๋ฌธ์ž์—ด์„ ๋„ฃ์–ด์ค€๋‹ค.
  • digest(์ธ์ฝ”๋”ฉ) : ์ธ์ฝ”๋”ฉํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋„ฃ์–ด์ค€๋‹ค. base64, hex, latin1์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š”๋ฐ ๊ทธ ์ค‘ base64๊ฐ€ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์ด ๊ฐ€์žฅ ์งง์•„ ์• ์šฉ๋œ๋‹ค. ๊ฒฐ๊ณผ๋ฌผ๋กœ ๋ณ€ํ™˜๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

๊ฐ€๋” nopqrst๋ผ๋Š” ๋ฌธ์ž์—ด์ด qvew๋กœ ๋ณ€ํ™˜๋˜์–ด abcdefgh๋ฅผ ๋„ฃ์—ˆ์„ ๋•Œ์™€ ๋˜‘๊ฐ™์€ ์ถœ๋ ฅ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๋€” ๋•Œ๋„ ์žˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์„ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ํ•ดํ‚น์šฉ ์ปดํ“จํ„ฐ์˜ ์—ญํ• ์€ ์–ด๋– ํ•œ ๋ฌธ์ž์—ด์ด ๊ฐ™์€ ์ถœ๋ ฅ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š”์ง€ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๋Ÿฌ ์ž…๋ ฅ ๋ฌธ์ž์—ด์ด ๊ฐ™์€ ์ถœ๋ ฅ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ abcdefgh๋กœ ์„ค์ •ํ–ˆ์–ด๋„ nopqrst๋กœ ๋šซ๋ฆฌ๋Š” ์‚ฌํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•ดํ‚น์šฉ ์ปดํ“จํ„ฐ์˜ ์„ฑ๋Šฅ์ด ๋ฐœ๋‹ฌํ•จ์— ๋”ฐ๋ผ ๊ธฐ์กด ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์ด ์œ„ํ˜‘๋ฐ›๊ณ  ์žˆ๋‹ค. ๋Œ€์‹  ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๋” ๊ฐ•๋ ฅํ•˜๊ฒŒ ์ง„ํ™”ํ•˜๊ณ  ์žˆ๋‹ค. ์–ธ์  ๊ฐ€ sha512๋„ ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ๋” ๊ฐ•๋ ฅํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ sha3์œผ๋กœ ์ด์ „ํ•˜๋ฉด ๋œ๋‹ค.

ํ˜„์žฌ๋Š” ์ฃผ๋กœ pbkdf2๋‚˜ bcrypt, scrypt๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ  ์žˆ๋‹ค. ์ด์ค‘์— ๋…ธ๋“œ์—์„œ ์ง€์›ํ•˜๋Š” pbkdf2์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. pbkdf2๋Š” ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด ๊ธฐ์กด ๋ฌธ์ž์—ด์— salt๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ฌธ์ž์—ด์„ ๋ถ™์ธ ํ›„ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ˜๋ณตํ•ด์„œ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

๋จผ์ € randomBytes() ๋ฉ”์„œ๋“œ๋กœ 64 ๋ฐ”์ดํŠธ ๊ธธ์ด์˜ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค์–ด์ค€๋‹ค. ์ด๊ฒƒ์ด salt๊ฐ€ ๋œ๋‹ค. ์œ„ ์ฝ”๋“œ๋Š” sha512๋กœ ๋ณ€ํ™˜๋œ ๊ฒฐ๊ด๊ฐ’์„ ๋‹ค์‹œ sha512๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ 10๋งŒ ๋ฒˆ ๋ฐ˜๋ณตํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

 

 

pbkdf2๋Š” ๊ฐ„๋‹จํ•˜์ง€๋งŒ bcrypt๋‚˜ scrypt๋ณด๋‹ค ์ทจ์•ฝํ•˜๋ฏ€๋กœ ๋‚˜์ค‘์— ๋” ๋‚˜์€ ๋ณด์•ˆ์ด ํ•„์š”ํ•˜๋ฉด scrypt ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

5-โ‘ก. ์–‘๋ฐฉํ–ฅ ์•”ํ˜ธํ™”

  • ์–‘๋ฐฉํ–ฅ ๋Œ€์นญํ˜• ์•”ํ˜ธํ™” : ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด์„ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ๋Š” ํ‚ค(์—ด์‡ )๋ผ๋Š” ๊ฒƒ์ด ์‚ฌ์šฉ๋œ๋‹ค. ์•”ํ˜ธ๋ฅผ ๋ณตํ˜ธํ™”ํ•˜๋ ค๋ฉด ์•”ํ˜ธํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ ํ‚ค์™€ ๊ฐ™์€ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

crypto.createCipher(์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ‚ค) : ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํ‚ค๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ aes-256-cbc๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ชฉ๋ก์€ crypto.getCipers()๋ฅผ ํ•˜๋ฉด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • cipher.update(๋ฌธ์ž์—ด, ์ธ์ฝ”๋”ฉ, ์ถœ๋ ฅ ์ธ์ฝ”๋”ฉ) : ์•”ํ˜ธํ™”ํ•  ๋Œ€์ƒ๊ณผ ๋Œ€์ƒ์˜ ์ธ์ฝ”๋”ฉ, ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฌผ์˜ ์ธ์ฝ”๋”ฉ์„ ๋„ฃ์–ด์ค€๋‹ค. ๋ณดํ†ต ๋ฌธ์ž์—ด์€ utf8๋กœ ์ด์ฝ”๋”ฉ์„, ์•”ํ˜ธ๋Š” base64๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
  • cipher.final(์ถœ๋ ฅ ์ธ์ฝ”๋”ฉ) : ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฌผ์˜ ์ธ์ฝ”๋”ฉ์„ ๋„ฃ์–ด์ฃผ๋ฉด ์•”ํ˜ธํ™”๊ฐ€ ์™„๋ฃŒ๋œ๋‹ค.
  • crypto.createDecipher(์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ‚ค) : ๋ณตํ˜ธํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์•”ํ˜ธํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํ‚ค๋ฅผ ๊ทธ๋Œ€๋กœ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • decipher.update(๋ฌธ์ž์—ด, ์ด์ฝ”๋”ฉ, ์ถœ๋ ฅ ์ธ์ฝ”๋”ฉ) : ์•”ํ˜ธํ™”๋œ ๋ฌธ์žฅ, ๊ทธ ๋ฌธ์žฅ์˜ ์ธ์ฝ”๋”ฉ, ๋ณตํ˜ธํ™”ํ•  ์ธ์ฝ”๋”ฉ์„ ๋„ฃ์–ด์ค€๋‹ค. createCipher์˜ update()์—์„œ utf8, base64 ์ˆœ์œผ๋กœ ๋„ฃ์—ˆ๋‹ค๋ฉด, createDecipher์˜ update()์—์„œ๋Š” base64, utf8 ์ˆœ์œผ๋กœ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.
  • decipher.final(์ถœ๋ ฅ ์ธ์ฝ”๋”ฉ) : ๋ณตํ˜ธํ™” ๊ฒฐ๊ณผ๋ฌผ์˜ ์ธ์ฝ”๋”ฉ์„ ๋„ฃ์–ด์ค€๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๋ฉ”์„œ๋“œ ์ด์™ธ์—๋„ crypto ๋ชจ๋“ˆ์€ ์–‘๋ฐฉํ–ฅ ๋น„๋Œ€์นญํ˜• ์•”ํ˜ธํ™”, HMAC ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์•”ํ˜ธํ™”๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋…ธ๋“œ ๊ณต์‹ ๋ฌธ์„œ(http://nodejs.org/api/crypto.html)์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

6. util ๋ชจ๋“ˆ

๊ฐ์ข… ํŽธ์˜ ๊ธฐ๋Šฅ์„ ๋ชจ์•„๋‘” ๋ชจ๋“ˆ์ด๋‹ค. ๊ณ„์†ํ•ด์„œ API๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ  ์žˆ๊ณ , ๊ฐ€๋” deprecated๋˜์–ด ์‚ฌ๋ผ์ง€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

 

โ˜‘ Note deprecated์ด๋ž€?

deprecated๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์šฉ์–ด๋กœ, '์ค‘์š”๋„๊ฐ€ ๋–จ์–ด์ ธ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ์•ž์œผ๋กœ๋Š” ์‚ฌ๋ผ์ง€๊ฒŒ ๋ ' ๊ฒƒ์ด๋ผ๋Š” ๋œป์ด๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ๋‚˜์™€์„œ ๊ธฐ์กด ๊ธฐ๋Šฅ๋ณด๋‹ค ๋” ์ข‹์„ ๋•Œ, ๊ธฐ์กด ๊ธฐ๋Šฅ์„ deprecated ์ฒ˜๋ฆฌํ•˜๊ณค ํ•œ๋‹ค. ์ด์ „ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๊ณง ์—†์•จ ์˜ˆ์ •์ด๋ฏ€๋กœ ๋” ์ด์ƒ ์‚ฌ์š”ํ•˜์ง€ ๋ง๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

 

util์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๋ฉ”์„œ๋“œ → deprecate, promisify

 

 

 

  • util.deprecate() : ํ•จ์ˆ˜๊ฐ€ deprecated ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์ค€๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋„ฃ์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์กฐ๋งŒ๊ฐ„ ์‚ฌ๋ผ์ง€๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋  ๋•Œ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์–ด ์œ ์šฉํ•˜๋‹ค.
  • util.promisify() : ์ฝœ๋ฐฑ ํŒจํ„ด์„ ํ”„๋กœ๋ฏธ์Šค ํŒจํ„ด์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ๋ฐ”๊ฟ€ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ์ œ๊ณตํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐ”๊พธ์–ด๋‘๋ฉด async/await ํŒจํ„ด๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ข‹๋‹ค. ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์ฝœ๋ฐฑ์œผ๋กœ ๋ฐ”๊พธ๋Š” util.callbackify๋„ ์žˆ์ง€๋งŒ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.