Request: ์š”์ฒญํ•  ๋Œ€์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์— ๋งŒ๋“  2019๋…„ 04์›” 01์ผ  ยท  86์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: request/request

"์œ ์ง€ ๊ด€๋ฆฌ ๋ชจ๋“œ"๋กœ ๋“ค์–ด๊ฐ€๋Š” ์š”์ฒญ ๋ฐœํ‘œ ์ดํ›„(์ž์„ธํ•œ ๋‚ด์šฉ์€ #3142 ์ฐธ์กฐ) ์‚ฌ์šฉํ•  ๋Œ€์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชฉ๋ก์„ ์ˆ˜์ง‘ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์— ๋Œ“๊ธ€์„ ๋‹ฌ์•„์ฃผ์‹œ๋ฉด ์ด ํ‘œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ๋Œ€์•ˆ ๋ชฉ๋ก์ด ์žˆ์„ ๋•Œ ์ด๋ฅผ ์ถ”๊ฐ€ ์ •๋ณด์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŠน๋ณ„ํ•œ ์ˆœ์„œ๊ฐ€ ์—†๊ณ  ๋”์ฐํ•  ์ •๋„๋กœ ๋ถˆ์™„์ „ํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ์ด๋ฆ„ | ๋ฒˆ๋“ค ํฌ๊ธฐ | API ์Šคํƒ€์ผ | ์š”์•ฝ
------------ | -------------- | -------------- | --------------
๋…ธ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ | 0.4kb | ์•ฝ์† / ์ŠคํŠธ๋ฆผ | window.fetch๋ฅผ Node.js๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ๋Ÿ‰ ๋ชจ๋“ˆ
๊ตฌ๋ถ€๋Ÿฌ์ง„ | 1kb | fp / ์•ฝ์† / ์ŠคํŠธ๋ฆผ | ๊ธฐ๋Šฅ์  HTTP ํด๋ผ์ด์–ธํŠธ w/ async/await
์–ป์—ˆ๋‹ค | 48.4kb | ์•ฝ์† / ์ŠคํŠธ๋ฆผ | ๋‹จ์ˆœํ™”๋œ HTTP ์š”์ฒญ
๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐœ์ƒ | 442kb | ์•ฝ์† / ์ŠคํŠธ๋ฆผ | make-fetch-happen์€ HTTP ์บ์‹œ ์ง€์›, ์š”์ฒญ ํ’€๋ง, ํ”„๋ก์‹œ, ์žฌ์‹œ๋„ ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ node-fetch๊ฐ€ ํฌํ•จํ•˜์ง€ ์•Š์„ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ node-fetch-npm์„ ๋ž˜ํ•‘ํ•˜๋Š” Node.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค!
์•ก์‹œ์˜ค์Šค | 11.9kb | ์•ฝ์† / ์ŠคํŠธ๋ฆผ | ๋ธŒ๋ผ์šฐ์ € ๋ฐ node.js๋ฅผ ์œ„ํ•œ Promise ๊ธฐ๋ฐ˜ HTTP ํด๋ผ์ด์–ธํŠธ
์–ธํŽ˜์น˜ | 1kb | ์•ฝ์† / ์ŠคํŠธ๋ฆผ | ์ž‘์€ 500b ํŽ˜์น˜ "๊ฑฐ์˜ ํด๋ฆฌํ•„"
์Šˆํผ ์—์ด์ „ํŠธ | 18kb | ์ฒด์ธ / ์•ฝ์† | ์ž‘์€ ํ”„๋กœ๊ทธ๋ ˆ์‹œ๋ธŒ ํด๋ผ์ด์–ธํŠธ ์ธก HTTP ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๋™์ผํ•œ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Node.js ๋ชจ๋“ˆ์€ ๋งŽ์€ ๊ณ ๊ธ‰ HTTP ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ž‘์€-json-http | 22kb | ์•ฝ์† | JSON ํŽ˜์ด๋กœ๋“œ GET ๋ฐ POST๋ฅผ ์œ„ํ•œ ๋ฏธ๋‹ˆ๋ฉ€๋ฆฌ์ŠคํŠธ HTTP ํด๋ผ์ด์–ธํŠธ
๋ฐ”๋Š˜ | 164kb | ์ฒด์ธ / ์•ฝ์† | Nodelands์—์„œ ๊ฐ€์žฅ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ฉ‹์ง„ HTTP ํด๋ผ์ด์–ธํŠธ
URLlib | 816kb | ์ฝœ๋ฐฑ / ์•ฝ์† | ๊ธฐ๋ณธ ๋ฐ ๋‹ค์ด์ œ์ŠคํŠธ ์ธ์ฆ, ๋ฆฌ๋””๋ ‰์…˜, ์ฟ ํ‚ค ๋“ฑ ๋ณต์žกํ•œ ์„ธ๊ณ„์—์„œ URL(๋Œ€๋ถ€๋ถ„ HTTP)์„ ์—ฌ๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

neverstale

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํ…Œ์ด๋ธ”์— ๋‹ค์Œ ์—ด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • Github์˜ ๋ณ„ ์ˆ˜(์˜ˆ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•  ๋•Œ ์ด๊ฒƒ์ด ์œ ์ผํ•œ ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค)
  • npm ๋‹ค์šด๋กœ๋“œ ์ˆ˜(๋งค์ฃผ, npm ์›น์‚ฌ์ดํŠธ์™€ ๋™์ผํ•œ ํ†ต๊ณ„, ์˜ˆ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•  ๋•Œ ์ด๊ฒƒ์ด ์œ ์ผํ•œ ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค)

์ด ์ˆ˜์น˜๋ฅผ ๋‚˜๋ž€ํžˆ ๋†“๊ณ  ๋ณด๋ฉด ์ผ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋งค์ฃผ ์ˆ˜์ฒœ ๊ฐœ์˜ ๋ณ„๊ณผ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ๋‹ค์šด๋กœ๋“œ๋ฅผ ๊ธฐ๋กํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์— ๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚ด 2์„ผํŠธ, ๋ฌด์‹œํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋„ ๋ฉ๋‹ˆ๋‹ค. ๋Œ“๊ธ€์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ด์˜๋ฅผ ์ œ๊ธฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  86 ๋Œ“๊ธ€

๋•Œ๋•Œ๋กœ node.js๋„ ํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ์— ์ง‘์ค‘ํ•˜๋Š” ์‚ฌ๋žŒ์œผ๋กœ์„œ, axios๋Š” ์ œ๊ฐ€ ๊ฐ€๋ณธ ๊ณณ์ž…๋‹ˆ๋‹ค.
Facebook์˜ Easy API๋Š” ๋ธŒ๋ผ์šฐ์ €์™€ ๋…ธ๋“œ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ์™„๋ฃŒ

@mikeal ๊ณผ์˜ ์ตœ๊ทผ ํ† ๋ก ์— ๋”ฐ๋ฅด๋ฉด Bent๊ฐ€ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•œ๋™์•ˆ request๋ฅผ ์‚ฌ์šฉํ•ด ์˜จ Node.js ๊ฐœ๋ฐœ์ž๋กœ์„œ, ๋ฒคํŠธ๋Š” ํ™•์‹คํžˆ ์‰ฌ์šด ์ „ํ™˜์ด์—ˆ์Šต๋‹ˆ๋‹ค - ์ ๊ทน ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค ๐Ÿ’–

@reconbot got , needle , urllib ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‚ด ์ž์‹ ์˜ ์ž‘์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—ฌ๊ธฐ์—์„œ ํ™๋ณดํ•˜๋Š” ๊ฒƒ์€ ์ผ์ข…์˜ ์ž˜๋ชป๋œ ๋Š๋‚Œ์ด ๋“ค์ง€๋งŒ ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ์˜ ๋ชฉํ‘œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. request-compose ๋Š” ์•ฝ์†, ์ŠคํŠธ๋ฆผ ๋ฐ ๋งŽ์€ ๋‹ค๋ฅธ ์œ ์šฉํ•œ ์˜ต์…˜์€ ๋Œ€๋ถ€๋ถ„ ์š”์ฒญ์—์„œ ์ฐพ์€ ์˜ต์…˜๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๊ทธ๊ฒƒ์— ๊ด€ํ•œ ๊ธฐ์‚ฌ ๋ฅผ ์ผ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์•„์ด๋””์–ด๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ž์‹ ์˜ ํ•„์š”์— ๋งž๊ฒŒ ํŠน๋ณ„ํžˆ ์กฐ์ •๋œ ์ž์‹ ์˜ HTTP ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋„๋ก ๊ถŒ์žฅ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฒˆ๋“ค ํฌ๊ธฐ์— ๊ด€ํ•ด์„œ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ด ํด๋ผ์ด์–ธํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๊ฝค ์ž‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”์— ๋‹ค์Œ ์—ด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • Github์˜ ๋ณ„ ์ˆ˜(์˜ˆ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•  ๋•Œ ์ด๊ฒƒ์ด ์œ ์ผํ•œ ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค)
  • npm ๋‹ค์šด๋กœ๋“œ ์ˆ˜(๋งค์ฃผ, npm ์›น์‚ฌ์ดํŠธ์™€ ๋™์ผํ•œ ํ†ต๊ณ„, ์˜ˆ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•  ๋•Œ ์ด๊ฒƒ์ด ์œ ์ผํ•œ ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค)

์ด ์ˆ˜์น˜๋ฅผ ๋‚˜๋ž€ํžˆ ๋†“๊ณ  ๋ณด๋ฉด ์ผ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋งค์ฃผ ์ˆ˜์ฒœ ๊ฐœ์˜ ๋ณ„๊ณผ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ๋‹ค์šด๋กœ๋“œ๋ฅผ ๊ธฐ๋กํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์— ๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚ด 2์„ผํŠธ, ๋ฌด์‹œํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋„ ๋ฉ๋‹ˆ๋‹ค. ๋Œ“๊ธ€์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ด์˜๋ฅผ ์ œ๊ธฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@csantanapr ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ์„ธํŠธ๋„ ๋น„๊ตํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ์ง€์›, ์บ์‹œ ์ง€์›, ์ธ์ฆ ๊ธฐ๋Šฅ ๋“ฑ. ์š”์ฒญ์˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ฐพ์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ์ข‹์€ ์‹œ๊ฐ„์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

axios ๋Š” ํŠนํžˆ ํ”„๋ก ํŠธ ์—”๋“œ์—์„œ ๋‚ด ํˆฌํ‘œ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

์‚ดํŽด๋ณผ ๊ฐ€์น˜: ky (ํ”„๋ก ํŠธ์—”๋“œ) ๋ฐ ky-universal (๋™ํ˜•)

์—ฌ๊ธฐ Axios ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋“  ํŒ€์ด ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” nodejs(์„œ๋ฒ„ ๋˜๋Š” ์„œ๋ฒ„๋ฆฌ์Šค์—์„œ ์‹คํ–‰)์™€ ๊ฐ™์€ ํ™˜๊ฒฝ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ์ž˜ ๊ด€๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

$ got readme์—์„œ got , request , node-fetch , axios , superagent ๋ฅผ ์ž˜ ๋น„๊ตํ–ˆ์Šต๋‹ˆ๋‹ค. : https://github.com/sindresorhus/got#comparison
(๋ถ€์ •ํ™•ํ•œ ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด PR ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ํ•œ ์ค‘๋ฆฝ์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.)

Got์—๋Š” request ์—์„œ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/sindresorhus/got/blob/master/migration-guides.md

๋‚˜๋ฅผ ์œ„ํ•ด, ๋‚˜๋Š” fetch api ์ฃผ์œ„์— ๋ž˜ํผ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์œผ๋ฏ€๋กœ node-fetch๊ฐ€ ๋‚˜์˜ goto์ž…๋‹ˆ๋‹ค. ๋ถ€์ •์ ์ธ ์ธก๋ฉด์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ๋…ธ๋“œ์˜ global.fetch ์— ๋กœ๋“œํ•˜๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•ญ์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฏฟ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด์ „ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒฝ์šฐ ํด๋ฆฌํ•„์„ ํ†ตํ•ด). isomorphic-fetch ๋…ธ๋“œ์— ๋Œ€ํ•œ node-fetch์™€ ๋ธŒ๋ผ์šฐ์ €์—์„œ fetch polyfill(๋˜๋Š” ์ด๋ฏธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ fetch)์„ ๋‘˜๋Ÿฌ์‹ผ ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ๊ฑฐ์‹œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง€์›ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ „์—ญ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Hey, Wreck(https://www.npmjs.com/package/wreck)๋Š” ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š”

ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ API๋ฅผ ๋ชจ๋ฐฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. axios, superagent ๋“ฑ๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ‘œ์ค€ ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์œ„์— ์žˆ๋Š” ๋” ๋†’์€ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™”์ž…๋‹ˆ๋‹ค. ์ €์ˆ˜์ค€ ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋Œ€์ฒดํ’ˆ์œผ๋กœ ๋ฒ”์šฉ js ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์—์„œ ์ €์ˆ˜์ค€์— ์ƒ์‘ํ•˜๋Š” ๊ฒƒ์„ ๋ฏธ๋Ÿฌ๋งํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. axios ๋ฐ superagent์™€ ๊ฐ™์€ Lib๋Š” ๊ทธ ์œ„์— ์Šค์Šค๋กœ๋ฅผ ๋‹ค์‹œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž๋Š” ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ์œ„ํ•œ ๊ธฐ์ดˆ๋กœ ๊ฐ„์ฃผ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

@Velveeta ๊ฐ€์„œ axios ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์‚ดํŽด๋ณด์•˜๋Š”๋ฐ "์ €์ˆ˜์ค€ ํ‘œ์ค€ ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ"๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค๋Š” ์ฆ๊ฑฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฌ๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ๋ง์”€ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

@sindresorhus ์˜ ๋น„๊ต๋Š” ์œ„์˜ ๋‚ด ๋ชฉ๋ก๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋‚˜์€ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. https://github.com/sindresorhus/got#comparison

node-fetch/isomorphic-fetch ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํด๋ผ์ด์–ธํŠธ์— ์ ํ•ฉํ•œ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๋นŒ๋”ฉ ๋ธ”๋ก์ž…๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ ๊ธฐ๋ฐ˜ ์š”์ฒญ ์‹ฌ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

@mikeal ์ด ์ง์ ‘ ๋งŒ๋“  r2 ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. request ์˜ ์˜์  ํ›„๊ณ„์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Promise API๊ฐ€ ์žˆ์œผ๋ฉฐ 16kb๋กœ ์••์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Axios๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Node.js์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋” ์ด์ƒ ํ™œ๋ฐœํžˆ ์œ ์ง€๋˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

image

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

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

๋ญ, axios๋„ ๊ฐ™์€ ๋ฏฟ์Œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ..

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

@ofrobots ๋Š” ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์•ฝ๊ฐ„์˜ ์„ ํƒ์  ์Šคํฌ๋ฆฐ์ƒท์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋‚ด ๊ฒƒ:
Screen Shot 2019-04-04 at 1 58 24 PM

FWIW ๋ฐฑ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ท€ํ•˜์˜ ์ฃผ์žฅ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์— ์—†์Šต๋‹ˆ๋‹ค.

@Velveeta ๋‚˜๋Š” ๋‹น์‹ ์ด ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์–ด๋””๋กœ ๊ฐ€๊ณ  ์žˆ๋Š”์ง€ ์•Œ์ง€๋งŒ, meta-libs๊ฐ€ ๊ฐˆ ๊ธธ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

Frontend์—์„œ ๋‚ด ํˆฌํ‘œ๋Š” axios ์ž…๋‹ˆ๋‹ค. ์ž‘๊ณ  ์•ˆ์ •์ ์ด๋ฉฐ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ FE ๋ฐ BE ํ”„๋กœ์ ํŠธ ๋ชจ๋‘์— wretch ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ API๊ฐ€ ์ •๋ง ์ง๊ด€์ ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ ๋ž˜ํผ - ๋…ธ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ์™€๋„ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

fetch API ์œ„์— axios ๊ฐ™์€ ๊ฒฝํ—˜์„ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด gaxios ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Google์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ตฌ์ถ•ํ–ˆ์œผ๋ฉฐ ํ˜„์žฌ Google API์˜ Node.js ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  HTTP ์ƒํ˜ธ ์ž‘์šฉ์„ ์ง€์›ํ•˜๋ฏ€๋กœ ์ „ํˆฌ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค!

(๐Ÿ‘‹ @JustinBeckwith์—์„œ)

Hey, Wreck(https://www.npmjs.com/package/wreck)๋Š” ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š”

๋˜ํ•œ hapijs ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ณธ http ํด๋ผ์ด์–ธํŠธ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„์€ ๋ถ€ํŒ…ํ•˜๊ธฐ์— ๋งค์šฐ ๊นจ๋—ํ•ฉ๋‹ˆ๋‹ค.

@mikeal ์ด ์ง์ ‘ ๋งŒ๋“  r2 ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. request ์˜ ์˜์  ํ›„๊ณ„์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Promise API๊ฐ€ ์žˆ์œผ๋ฉฐ 16kb๋กœ ์••์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์œ ์ง€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น„์Šทํ•œ API๋ฅผ ์›ํ•œ๋‹ค๋ฉด ky ๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. $ got ์™€ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์ด ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ~1kb ์ถ•์†Œ ๋ฐ gzip ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

Axios๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Node.js์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋” ์ด์ƒ ํ™œ๋ฐœํžˆ ์œ ์ง€๋˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Node์—์„œ axios๋ฅผ ๋งค์šฐ ๋งŒ์กฑ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋žŒ๋‹ค์—์„œ ์ฃผ๋กœ ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•˜์ง€๋งŒ ๋ฏธ์นœ ์ข…์†์„ฑ ์ฒด์ธ์ด ์ œ๊ณต๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. @ofrobots Node์—์„œ ์‚ฌ์šฉํ•œ ๊ฒฝํ—˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋…ธ๋“œ js๋ฅผ ๋•Œ๋•Œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ์— ์ง‘์ค‘ํ•˜๋Š” ์‚ฌ๋žŒ์œผ๋กœ์„œ ๊ณต๋ฆฌ๋Š” ์ œ๊ฐ€ ๊ฐ€๋ณธ ๊ณณ์ž…๋‹ˆ๋‹ค. Facebook์˜ Easy API๋Š” ๋ธŒ๋ผ์šฐ์ €์™€ ๋…ธ๋“œ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ์™„๋ฃŒ

ํŽ˜์ด์Šค๋ถ์ธ์ค„ ๋ชฐ๋ž์–ด? ํ•˜์ง€๋งŒ ์˜ˆ, ์ด๊ฒƒ์€ ๋ชจ๋“  API ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•œ ๋‚ด goto ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ tinkoff-request https://github.com/TinkoffCreditSystems/tinkoff-request๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์†Œํ˜•, ๋ธŒ๋ผ์šฐ์ € ๋ฐ ์„œ๋ฒ„์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ์œ ํ˜•์˜ ๋ณตํ•ฉ ์บ์‹ฑ์„ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.

Microsoft ์˜ typed-rest-client ๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? TypeScript๋กœ ์ž‘์„ฑ๋œ ์ž˜ ๊ด€๋ฆฌ๋œ ํŒจํ‚ค์ง€์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค(์ €์—๊ฒŒ๋Š” ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค).

์—ฌ๊ธฐ์—๋Š” wreck ( hapi ์ƒํƒœ๊ณ„์—์„œ)๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ตœ๊ทผ์— https://github.com/grantila/fetch-h2 ๋ฅผ ํฐ ์„ฑ๊ณต์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์•Œ๋ ค์ง„ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ๊ต์ฒดํ’ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ? KOA์— ํ†ตํ•ฉ๋˜์–ด ์ŠคํŠธ๋ฆผ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ €๋Š” bent ๋ผ๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ๋™์•ˆ bent ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ API๊ฐ€ ๊ฝค ์•ˆ์ •์ ์ด๊ธฐ ๋•Œ๋ฌธ์— fetch ์œ„์— ๋ธŒ๋ผ์šฐ์ € ๋ฒ„์ „์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. Node.js ๋ฒ„์ „์„ ๋ธŒ๋ผ์šฐ์ €ํ™”ํ•˜๋Š” ๋Œ€์‹ , ๋ธŒ๋ผ์šฐ์ € ๋ฒ„์ „์€ package.json์˜ ์ž์ฒด ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค.

์ด์ œ bent ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›๋˜๋ฉฐ ์ƒ๋‹นํžˆ ์ข‹์Šต๋‹ˆ๋‹ค.

  • ์ข…์†์„ฑ ๋˜๋Š” ํด๋ฆฌํ•„ ์—†์Œ(์™„์ „ํžˆ fetch ๋ฐ ArrayBuffer์— ๊ตฌ์ถ•๋˜๋ฏ€๋กœ Buffer ๋˜๋Š” Stream ํด๋ฆฌํ•„ ๋ฐ ๋ฒˆ๋“คํ•  deps ์—†์Œ)
  • ~2K webpack ๋ฒˆ๋“ค un-minified ๋˜๋Š” gzipped(๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์„ ํ˜ธํ•˜๋Š” minifier ๋ฐ ์••์ถ•๊ธฐ ๋‹ค์Œ์— ์ด๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์•ผ ํ•จ).
  • ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋Š” Node.js ๋ฒ„์ „์—์„œ 100% ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ์žˆ๋Š” ํ—ค๋“œ๋ฆฌ์Šค ํฌ๋กฌ์—์„œ ํ†ต๊ณผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์•„์ง๋„ ์ž๋™ํ™”๋œ ๋ธŒ๋ผ์šฐ์ € ์ปค๋ฒ„๋ฆฌ์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†์Œ)

๋ฉ‹์ง€๋„ค์š” @mikeal

@csantanapr ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! :)

axios๋Š” ๋…ธ๋“œ ์„œ๋น„์Šค๋ฅผ ์ถฉ๋Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/axios/axios/issues/1804

์ €์—๊ฒŒ ๊ฐ€์žฅ ํฐ ๊ด€์‹ฌ์‚ฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํšŒ์‚ฌ ํ™˜๊ฒฝ์—์„œ ์ตœ์†Œ ๊ตฌ์„ฑ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? (๊ธฐ์—ฌ ์š”์†Œ: ํšŒ์‚ฌ ํ”„๋ก์‹œ๋Š” HTTP ๋ฐ HTTPS ๋Œ€์ƒ ๋ชจ๋‘์— ๋Œ€ํ•ด HTTP์ด๋ฉฐ ๋ชจ๋“  ํ”„๋ก์‹œ๊ฐ€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋“  ์ธ์ฆ์„œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ...)

    • ์ด๊ฒƒ์€ ํŠนํžˆ 1๋…„ ์ •๋„ ์ „์— Request๋ฅผ ๋„์ง€ ๋ชปํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ํ”„๋ก์‹œ ํŒŒ์ผ ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ?

๊ทธ ํ›„์—๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์ด ํŽธ๋ฆฌํ•œ ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ์ƒ๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ์„œ๋ฒ„ ์ธก์˜ ํฌ๊ธฐ์— ์ง€๋‚˜์น˜๊ฒŒ ๊ด€์‹ฌ์„ ๋‘์ง€ ์•Š์ง€๋งŒ ์–‘์ชฝ ๋์—์„œ ๋™์ผํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: Yeeeaaaah๋Š” ์ •ํ™•ํžˆ ๋‚ด๊ฐ€ ๋‹น์‹ ์„ ๋น„๋‚œํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ 2: node-libcurl ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@joedski ya, ํ”„๋ก์‹œ ํ•ญ๋ชฉ์€ ์š”์ฒญ ์™ธ๋ถ€์—์„œ ๋„๋ฆฌ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  TBH, ๊ทธ ์ผ์„ ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ์ง€์›ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฐ ์ž‘์—…์˜ ์–‘์„ ๊ณ ๋ คํ•  ๋•Œ ์ €๋ฅผ ํฌํ•จํ•˜์—ฌ ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์„ ํ•˜๊ณ  ์‹ถ์–ดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋†€๋ž์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๊ตฌ๋ถ€๋ ค ๐Ÿคท๐Ÿฝโ€โ™€๏ธ

๋งˆ์ง€๋ง‰์œผ๋กœ nodejs์—์„œ ์š”์ฒญ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด node-libcurl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ์„ฑ์ˆ™ํ•˜๊ณ  ์ˆ˜๋…„๊ฐ„ ์ƒ์‚ฐ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์นœ ๊ธฐ๋ณธ ์ปฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํ”„๋ก์‹œ, ๋ฆฌ๋””๋ ‰์…˜๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ ์•ฝ์† ๋ฐ ์ŠคํŠธ๋ฆผ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์กฐ๊ทธ๋งˆํ•œ ์š”์ฒญ (>1mio ์ฃผ๊ฐ„ ๋‹ค์šด๋กœ๋“œ)

์š”์ฒญ์— ๋Œ€ํ•œ ๋“œ๋กญ์ธ ๊ต์ฒด์ด์ง€๋งŒ ํ›จ์”ฌ ๋” ์ž‘๊ณ  ์˜ต์…˜๋„ ์ ์Šต๋‹ˆ๋‹ค. ํ›„๋“œ ์•„๋ž˜์—์„œ node-fetch ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. request ์„ ์‚ฌ์šฉํ•  ์œ„์น˜์— ํŒ๋‹ˆ๋‹ค.

node-fetch ๊ฐ€ ์ž˜๋ชป ๋ณด๊ณ ๋˜๊ณ  "๋ธŒ๋ผ์šฐ์ €" ๋ฒ„์ „๋งŒ ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค(_Node.js_ ๋ชฉ๋ก์˜ ํฌ์ธํŠธ๋ฅผ ๊บพ์Œ). ๋‹ค์Œ์€ ์ž˜๋ชป ์ธก์ •๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋Œ€์‹  ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ธก์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ๋ชจ๋‘ ์•ฝ 40kb์ž…๋‹ˆ๋‹ค.

unfetch ๋„ ์ž˜๋ชป ๋ณด๊ณ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ํ™ˆํŽ˜์ด์ง€์—๋Š” "Node.JS์—์„œ์˜ ์‚ฌ์šฉ์€ isomorphic-unfetch์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋œ๋‹ค"๊ณ  ๋‚˜์™€ ์žˆ์œผ๋ฏ€๋กœ ๋‘˜์˜ ์กฐํ•ฉ์„ ๋ณด๊ณ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • isomorphic-unfetch ๋Š” Node.js์šฉ node-fetch( code , docs )๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ณด๊ณ ๋œ ํฌ๊ธฐ๋Š” ์ตœ์†Œํ•œ node-fetch์˜ ํฌ๊ธฐ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ด์ „ ์ฃผ์„ ์ฐธ์กฐ).

๊ทธ๊ฒƒ์ด ๋„ˆ๋ฌด ๋งŽ์ด ์ œ๊ธฐ๋˜์—ˆ์œผ๋ฏ€๋กœ node-fetch ์— ๋Œ€ํ•œ ๋‚˜์˜ ๊ฒฝํ—˜์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šฐ์„  ์ƒ๋‹นํ•œ ์„ฑ๊ณผ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋“ค์–ด๊ฐ„ ์ฝ”๋“œ์™€ ์—”์ง€๋‹ˆ์–ด๋ง ๋…ธ๋ ฅ์˜ ์–‘์€ ์šฐ๋ฆฌ๊ฐ€ ์š”์ฒญํ•œ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์Šต๋‹ˆ๋‹ค. fetch ๋Š” ์ž‘์€ API์ฒ˜๋Ÿผ ๋ณด์ด๊ณ  ์‚ฌ๋žŒ๋“ค์€ Node.js์—์„œ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ API๋ฅผ ์ œ๊ณตํ•˜๋ ค๋Š” ๋…ธ๋ ฅ์ด ๋ช…๋ชฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์€ ๋ฐฉ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ๋ฒˆ๋“ค์—์„œ๋Š” ์ „ํ˜€ ๋ณผ ์ˆ˜ ์—†๋Š” Node.js์˜ ์ƒ๋‹นํ•œ ์ข…์†์„ฑ์ด์ง€๋งŒ ์ข…์†์„ฑ ํฌ๊ธฐ๊ฐ€ Node.js, ํŠนํžˆ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

node-fetch ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ API๋ฅผ ์™„์ „ํžˆ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธํ•  ๋•Œ ํ•„์ˆ˜ ๋ถˆ๊ฐ€๊ฒฐํ•˜์ง€๋งŒ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Node.js ๋ฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋„ ๊ทธ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์ฝ”๋“œ์™€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฐ„์ ‘ ์ฐธ์กฐ.

IMO, ํ˜„์žฌ Node.js์™€ ๋ธŒ๋ผ์šฐ์ € ๋ชจ๋‘์—์„œ http ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋˜๊ณ ์ž ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ fetch ๋ฐ require(โ€˜httpโ€™) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„ํ•  ๊ตฌํ˜„์œผ๋กœ ๊ท ์ผํ•œ API๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Node.js์˜ fetch ๋˜๋Š” require(โ€˜httpโ€™) ๋ฅผ ์ง์ ‘ ๋Œ€์ƒ์œผ๋กœ ํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ ์–‘์ชฝ์—์„œ ์ด๋Ÿฌํ•œ API๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๋Š” ๋ฐ ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฏฟ์„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์ž‘์€ bent ๊ตฌํ˜„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์‹ค์ œ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค. https://github.com/mikeal/bent/tree/master/src

@mikeal ์ œ๊ณฑํ•˜๊ธฐ ํž˜๋“ค์–ด์š”

๊ฒฐ๊ณผ์ ์œผ๋กœ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์€ ๋ฐฉ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ๋ฒˆ๋“ค์—์„œ๋Š” ์ „ํ˜€ ๋ณผ ์ˆ˜ ์—†๋Š” Node.js์˜ ์ƒ๋‹นํ•œ ์ข…์†์„ฑ์ด์ง€๋งŒ ์ข…์†์„ฑ ํฌ๊ธฐ๊ฐ€ Node.js, ํŠนํžˆ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

OP์— ๋‚˜์—ด๋œ 0.4kB ๋ฒˆ๋“ค ํฌ๊ธฐ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋œ ๋ชจ๋“  ๋Œ€์•ˆ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@domenic ๋ธŒ๋ผ์šฐ์ € API๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๋Š” ๋ณต์žก์„ฑ์ด ์ฃผ์š” ๋ฌธ์ œ์ด๋ฉฐ ๋””๋ฒ„๊ทธ๋ฅผ ์‹œ๋„ํ•  ๋•Œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ์™€ ๊ฐ„์ ‘ ์ฐธ์กฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. Blob API ๊ฐ€ ์žˆ๊ณ  body header marshalling ์˜ ๊ฑฐ์˜ 400ํ–‰์ด ์žˆ์œผ๋ฉฐ ์ด๋Š” ๋ณด๊ณ  ์žˆ์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๋…ธ์ถœ๋˜๋Š” ์‹ค์ œ API.

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ ์ด ๊ทธ๊ฒƒ์€ ์ธ์ƒ์ ์ด์ง€๋งŒ fetch API๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๋Š” ๊ฒƒ ์™ธ์— ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ๊ฐ„๊ฒฐํ•˜๊ณ  ์˜๋ฆฌํ•˜๋ฉฐ ๊ถ๊ทน์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

@mikeal ๋‹น์‹ ์€ node-fetch๊ฐ€ fetch API์™€ 100% ํ˜ธํ™˜๋˜๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์–ธ๊ธ‰์กฐ์ฐจ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค: what-wg(ํ™˜๊ฒฝ์„ ์—๋ฎฌ๋ ˆ์ด์…˜ํ•  ๋•Œ ํ•„์š”ํ•œ ๊ฒƒ)์—์„œ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Cloudflare ์ž‘์—…์ž์ฒ˜๋Ÿผ.

ํ , ๋‚˜๋Š” ์—ฌ์ „ํžˆ "0.4 kB, ํ…Œ์ด๋ธ”์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ํ•ญ๋ชฉ๋ณด๋‹ค ์ž‘๊ณ  ๊ตฌ๋ถ€๋Ÿฌ์ง„ ํฌ๊ธฐ์˜ 0.25x"๋กœ "๊ถ๊ทน์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ" ์ฝ”๋“œ์˜ "ํ†ค"์„ ์ œ๊ณฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค(์•„๋งˆ๋„ "์˜ค๋ฅธ์ชฝ ์ ‘๊ทผ" ๋ฐ "๋ฏฟ์„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์ž‘์Œ").

@domenic ๋ธŒ๋ผ์šฐ์ € ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? Node.js์—์„œ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ณต์žก์„ฑ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ node-fetch ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๋ฏ€๋กœ ๋ฌด์—‡์„ ๋น„๊ตํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

OP์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ธก์ •๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ธก์ •๋˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” OP๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ์ข‹์€ ์ •๋ณด๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

@domenic ์•„ ์˜ˆ, ์ด๊ฒƒ๋“ค์€ ๋ชจ๋‘ ๋ธŒ๋ผ์šฐ์ € ๋ฒˆ๋“ค ํฌ๊ธฐ์ด๋ฉฐ, ๊ฒŒ์‹œ๋ฌผ์ด ๊ฝค ์˜ค๋ž˜๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— bent ์ˆ˜์น˜๊ฐ€ ์—ฌ์ „ํžˆ ์ถฉ๋ถ„ํžˆ ๋น„์Šทํ•˜์ง€๋งŒ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์ตœ์‹ ์ด ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@root/request - 500 LoC ๋ฐ ZERO ์ข…์†์„ฑ์œผ๋กœ ์ž‘์„ฑ๋œ 80/20 ๋“œ๋กญ์ธ ๊ต์ฒด:

์˜๋„์ ์œผ๋กœ request.js์˜ ๋™์ž‘์— ๋Œ€ํ•ด ๋งŒ๋“ค๊ณ  ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

https://git.rootprojects.org/root/request.js

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„! ๋‚ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์š”์ฒญ์˜ ํ•ฉ๋‹นํ•œ ๋Œ€์ฒด๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ ์กฐ์‚ฌ๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/emanuelcasco/http-packages-benchmark

์ถ”์ฒœ๊ณผ ์˜๊ฒฌ์€ ๋ฌผ๋ก  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

ร€s request ๋Š” ์ด์ œ ๊ณต์‹์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. postman-request ๋ฅผ request ๋ฐ @root/request ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ๋“œ๋กญ์ธ ๋Œ€์ฒดํ’ˆ์œผ๋กœ ๊ณต์‹์ ์œผ๋กœ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์˜ ์ค‘์š”์„ฑ์„ ๋” ๊ฐ•์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. request ์˜ ์ œํ•œ๋œ ํ•˜์œ„ ์ง‘ํ•ฉ์ด ํ•„์š”ํ•˜๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ $#$. ์ŠคํŠธ๋ฆผ.

์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ request ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋ช‡ ๋ถ„ ์ด์ƒ์˜ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€ ์•Š๊ณ  ์ „์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ์•ฑ์„ ๋ฆฌํŒฉํ† ๋งํ•  ํ•„์š” ์—†์ด ์„ฑ๊ฐ€์‹  ์‚ฌ์šฉ ์ค‘๋‹จ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋Œ€์ฒดํ’ˆ์ด ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์กฐ์ฐจ ๊นจ๋‹ซ๋Š” ๋ฐ์—๋Š” ์ƒ๋‹นํ•œ ์‹œ๊ฐ„๊ณผ ์ขŒ์ ˆ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์ €๋Š” "์ง€์› ์ค‘๋‹จ"์ด "์ง€์› ์ข…๋ฃŒ" ๋˜๋Š” "์œ ์ง€ ๊ด€๋ฆฌ ์ข…๋ฃŒ"๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ์ •๋ง ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ postman-request ์™€ ๊ฐ™์ด ๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜๊ณ  ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€๋˜๋Š” ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ๋“œ๋กญ์ธ ๊ต์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ตฌ์ž…ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋œ ๊ท€์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์‹ค, ์ด ํŒจํ‚ค์ง€์˜ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์šฐํŽธ ๋ฐฐ๋‹ฌ๋ถ€ ํŒ€์— ๋„˜๊ธธ ์ƒ๊ฐ์„ ํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? request ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋Œ€์‹  postman-request ๋ฅผ request ๋กœ ์ด์‹ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ณต์‹ ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ๋˜๋„๋ก ์ œ์•ˆํ•˜์ง€ ์•Š์œผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์—์„œ ๋‚ด ์ž‘์€ ๋„์„œ๊ด€ ์„ ํ™๋ณดํ•˜๊ฒŒ ๋˜์–ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

nodejs์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„

const http = require('@zhangfuxing/http');
const assert = require('assert');

(async () => {
  // http
  const httpRes = await http.get('http://baidu.com');
  assert(httpRes.includes('<html>'));

  // https
  const httpsRes = await http.get('https://cnodejs.org/api/v1/topics?limit=1&mdrender=false');
  assert(httpsRes.success === true);

  // download file: use pipe
  const fs = require('fs');
  const res = await http.get('http://localhost:3000', {
    responseType: "stream"
  })
  res.pipe(require('fs').createWriteStream('zfx.txt'))
  // or use pipeline
  const stream = require('stream');
  const util = require('util');
  const pipeline = util.promisify(stream.pipeline);
  const res = await http.get(`${url}/stream`, {
    responseType: "stream"
  });
  await pipeline(res, fs.createWriteStream('zfx.txt'));

  // post Buffer
  const res = await http.post('http://localhost/upload', Buffer.from('abc'));
  assert(res.success === true);

  // post Stream
  const fs = require('fs');
  const readStream = fs.createReadStream('./index.js');
  const res = await http.post('http://localhost/upload', readStream);
  assert(res.success === true);

  // post json
  const data = {
    username: 'zfx',
    password: 'password'
  };
  const res = await http.post('http://localhost/upload', data);
  assert(res.success === true);

  // post application/x-www-form-urlencoded
  const data = {
    username: 'zfx',
    password: 'password'
  };
  const options = {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  };
  const res = await http.post('http://localhost/upload', data, options);
  assert(res.success === true);

  // post FormData
  const FormData = require('form-data');
  const form = new FormData();
  const fs = require('fs');
  const readStream = fs.createReadStream('./index.js');
  form.append('my_field', 'my value');
  form.append('my_buffer', Buffer.from('abc'));
  form.append('my_file', readStream);
  // Set filename by providing a string for options
  form.append('my_file', readStream, '1.js' );
  // provide an object.
  form.append('my_file', readStream, { 
    filename: 'bar.jpg', 
    contentType: 'image/jpeg', 
    knownLength: 19806
  });
  const formHeaders = form.getHeaders();
  const res = await http.post('http://localhost/upload', form, {
    headers: {
      ...formHeaders,
    },
  });
  assert(res.success === true);

  // head
  const res = await http.head(url);
  assert(res.statusCode === 200);
  assert(res.statusMessage === 'OK');
  assert(res.headers && typeof res.headers === 'object');
  assert(res.statusCode === 200);
  assert(res.data === '');

  // options
  const res = await http.options(url);
  assert(res === 'GET,HEAD,POST,PUT,PATCH,DELETE'); 
})().catch(console.error);

์ฒ˜์Œ๋ถ€ํ„ฐ TS๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ตœ์‹  ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ SPA๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒฝ์šฐ Wretch ๊ฐ€ ์ตœ์ƒ์˜ ์˜ต์…˜์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค์ƒ Axios์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์ด๋ฉฐ ์ถ”๊ฐ€ ๋ฏธ๋“ค์›จ์–ด ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. API๋„ Ky์— ๋น„ํ•ด ๋ช‡ ๊ตฐ๋ฐ ๋” ์ข‹์€ ๊ฒƒ ๊ฐ™์•„์š”.

์ด๋“ค ์ค‘ ์–ด๋–ค ๊ฒƒ์ด http2๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ?

@sakalys got ์—๋Š” ์‹คํ—˜์ ์ธ HTTP2 ์ง€์›์ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๋‹ค์Œ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค(๊ณง ์ถœ์‹œ)์—์„œ ๋‚ด์žฅ๋˜์–ด ์•ˆ์ •์ ์œผ๋กœ ์ œ๊ณต๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๊ฑฐ์˜ ๋“œ๋กญ ์ธ ๊ต์ฒด?

https://github.com/googleapis/teeny-request

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด๋‹ˆ ์ •๋ง ์Šฌํ”•๋‹ˆ๋‹ค. ๋‚˜๋Š” axios๋ฅผ ์ข‹์•„ํ•˜์ง€๋งŒ ์–ด๋–ค ๋ชฉ์ ์œผ๋กœ ์ , ๋‚˜์˜ ์ฒซ ๋ฒˆ์งธ ์„ ํƒ์€ ์š”์ฒญ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ง€์› ์š”์ฒญ ํƒ€์ด๋ฐ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ๊นŒ์ง€์˜ ์‹œ๊ฐ„, ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ๋“ฑ?
ํ”„๋กœ์ ํŠธ์— ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํƒ€์ด๋ฐ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Google์€ gaxios๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. https://github.com/googleapis/gaxios - ๋…ธ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ํ†ตํ•œ axios API

$ got readme์—์„œ got , request , node-fetch , axios , superagent ๋ฅผ ์ž˜ ๋น„๊ตํ–ˆ์Šต๋‹ˆ๋‹ค. : https://github.com/sindresorhus/got#comparison
_(๋ถ€์ •ํ™•ํ•œ ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด PR ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ํ•œ ์ค‘๋ฆฝ์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.)_

Got์—๋Š” request ์—์„œ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/sindresorhus/got/blob/master/migration-guides.md

request ์—์„œ ๋‹ค์Œ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•œ Got์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ๊ฐ€ _์ด๋™_ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/sindresorhus/got/blob/master/documentation/migration-guides.md

์šฐํŽธ ๋ฐฐ๋‹ฌ๋ถ€ ์š”์ฒญ์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ ์ด๊ฒƒ์„ ์‹œ๋„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ์ด๊ฒƒ์€ ๋ฌธ์„œ์— ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋งํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค ...

Postman Runtime ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์šฐ์ˆ˜ํ•œ ์š”์ฒญ ๋ชจ๋“ˆ์˜ ํฌํฌ์ž…๋‹ˆ๋‹ค. ์š”์ฒญ์—์„œ ์ˆ˜์ •๋˜์ง€ ์•Š์€ ๋ช‡ ๊ฐ€์ง€ ๋ฒ„๊ทธ์ˆ˜์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Redaxios๋Š” ๊ธฐ๋ณธ ๊ฐ€์ ธ์˜ค๊ธฐ https://github.com/developit/redaxios ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” 800๋ฐ”์ดํŠธ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ!! ๋‚˜๋Š” 3์‹œ๊ฐ„ ๋™์•ˆ ๋‚ด ์ฝ”๋“œ๋ฅผ ๊ณ„์†ํ•ด์„œ ํ™•์ธํ•˜๋ฉด์„œ ์ด๊ฒƒ์„ ์•Œ์•„๋‚ด๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜ค๋ฅ˜ 404๋ฅผ ์ฃผ์—ˆ๊ณ , ๋‚˜๋Š” ์ขŒ์ ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” Fetch์™€ ํ•จ๊ป˜ ๊ฐˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

https://www.npmjs.com/package/teeny-request ๋Š” Google API์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

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

node-fetch ๋˜๋Š” ํ˜„์žฌ PostMan์—์„œ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” requests ์˜ ๋ถ„๊ธฐ ๋ฒ„์ „์ด ๋” ๋‚ซ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด์ œ ๋ง‰ Node ์—ฌ์ •์„ ์‹œ์ž‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•œ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

axios์˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” ์ˆ˜์ •๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค๐Ÿ‘Ž๐Ÿฟ

์—ฌ๊ธฐ์„œ ํ•€์ด ๋ณด์ด์ง€ ์•Š์•„ ๋งค์šฐ ๋†€๋ž์Šต๋‹ˆ๋‹ค.

https://github.com/etherent/phin

url-request ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

https://github.com/Debdut/Url

url-request ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

https://github.com/Debdut/Url

์•„์ง ์•ฝ๊ฐ„ ์–ด๋ฆฌ๊ณ (1์ผ!) ์ผ๋ถ€ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜์ง€๋งŒ ์œ ๋งํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

@cjk ํ”ผ๋“œ๋ฐฑ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๊ธฐ๋Šฅ์ด ๋งˆ์Œ์— ๋“œ์‹œ๋‚˜์š”? ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋ง์”€ํ•ด ์ฃผ์‹ ๋‹ค๋ฉด.

๋น ๋ฅธ Q. ๊ธฐ๋ณธ nodejs http ๋Œ€์‹  ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@cgarrovillo ์ž‘์€ ์ฝ”๋“œ => ๋” ๋งŽ์€ ์˜ํ–ฅ

url-request ๋ฅผ ์‹œ๋„ํ•˜๊ณ  ๊ธฐ๋Šฅ ์„ธํŠธ์™€ ๊ฐ€๋Šฅ์„ฑ์„ ์‚ดํŽด๋ณด์„ธ์š” ๐ŸคŸ

@cjk ํ”ผ๋“œ๋ฐฑ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๊ธฐ๋Šฅ์ด ๋งˆ์Œ์— ๋“œ์‹œ๋‚˜์š”? ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋ง์”€ํ•ด ์ฃผ์‹ ๋‹ค๋ฉด.

@Debdut ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ž…์ฆ
  2. HTTP2
  3. ํ”„๋ก์‹œ ์ง€์›
  4. ์••์ถ•
  5. ์‹œ๊ฐ„ ์ดˆ๊ณผ ์ฒ˜๋ฆฌ
  6. ์‚ฌ์šฉ์ž ์ •์˜ ํ›„ํฌ
  7. ์š”์ฒญ ์ทจ์†Œ

url-request ๋ฌธ์„œ์—์„œ ์ง€์›๋˜๋Š” ํ•ญ๋ชฉ๊ณผ ๋ฐฉ๋ฒ•์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ๊ณตํ•˜๋Š” ๋งŽ์€ ์˜ˆ๋ฅผ ์ข‹์•„ํ–ˆ์Šต๋‹ˆ๋‹ค!

์ž‘๋™์ด ์ค‘์ง€๋  ๋•Œ๊นŒ์ง€ ์š”์ฒญ์„ ๊ณ„์† ์‚ฌ์šฉํ•˜์„ธ์š”.

Angular rxjs์—์„œ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•˜๊ณ  ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์š”์ฒญ๊ณผ ๊ฐ™์€ ์ฟ ํ‚ค ํ•ญ์•„๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ…Œ์ŠคํŠธ ๋…ธ๋“œ๊ฐ€ ๋นจ๊ฐ„์ƒ‰์ธ HTTP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. โœ‹

  • npm ์„ค์น˜
  • ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€๋จ
  • ์ด์ œ ํ๋ฆ„ ํŽธ์ง‘๊ธฐ์—์„œ ๋‚ด js ํ•จ์ˆ˜์—์„œ _got_์„ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ
HTTP ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. (๋‹จ์ผ ํ…Œ์ŠคํŠธ๋ฅผ ํ–ˆ๋‹ค).
HTTPS ์š”์ฒญ์„ ํ•  ๋•Œ ์‹คํŒจ โŒ . ๋‚˜๋Š” ์–ป์—ˆ๋‹ค :
RequestError: connect ECONNREFUSED 127.0.0.1:443

์ฒ˜์Œ์—๋Š” ์ด๊ฒƒ์ด node-red env์™€ ๊ด€๋ จ๋œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์ด๊ฒƒ์ด got repo: https://github.com/sindresorhus/got/issues/1414 ์˜ ๊ณต๊ฐœ ๋ฌธ์ œ์ž„์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘Ž
๊ทธ๋ฆฌ๊ณ  ์ œ ์ƒ๊ฐ์—๋Š” _axios_ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. โœ…
๋‹จ์ง€ ๋‹น์‹ ์ด ์•Œ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

@damdauvaotran ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์š”์ฒญ๊ณผ ๊ฐ™์€ ์ฟ ํ‚ค ํ•ญ์•„๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ got.js๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

gaxios ๊ฐ€ ์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

FWIW, ์—ฌ๊ธฐ์— ๋งจ ์œ„์— ์–ธ๊ธ‰๋œ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ๋น„๊ตํ•˜๋Š” NPM ๋™ํ–ฅ ๋งํฌ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ์ •์— ๊ด€๋ จ๋œ ์œ ์ผํ•œ ์š”์†Œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ธ๊ธฐ๋„๋Š” ์šฐ๋ฆฌ์™€ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ธ€์„ ์“ฐ๋Š” ์‹œ์ ์—์„œ node-fetch ๊ฐ€ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค.
Screen Shot 2020-09-03 at 1 14 41 PM

ํฅ๋ฏธ๋กœ์šด @ericsnap ... node-fetch ๋ฐ axios๋Š” ๊ฐ๊ฐ ์ธ๊ธฐ 1์œ„์™€ 3์œ„(๊ฑฐ์˜ 2์œ„)์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” gaxios ๋ฌธ์„œ ์—์„œ ๋‹ค์Œ ์ŠคํŠธ๋žฉ๋ผ์ธ์„ ์ฃผ๋ชฉํ•ฉ๋‹ˆ๋‹ค.

node-fetch ์œ„์— ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฐ™์€ axios๋ฅผ ์ œ๊ณตํ•˜๋Š” HTTP ์š”์ฒญ ํด๋ผ์ด์–ธํŠธ

๋”ฐ๋ผ์„œ gaxios๋Š” ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” gaxios๋กœ ์ „ํ™˜ํ•ด ์™”์œผ๋ฉฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์žฌ๋ฏธ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ธ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ / axios

https://www.npmtrends.com/node-fetch-vs-got-vs-axios-vs-superagent

image

ํ˜„์žฌ ์š”์ฒญ ๋Œ€์•ˆ์„ ๊ฒ€ํ† ํ•œ ํ›„ @sindresorhus ์— ๋›ฐ์–ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. API์— ์ต์ˆ™ํ•ด์ง€๋Š” ๋ฐ ํ•˜๋ฃจ ์ •๋„ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค(๋ฌธ์„œ๋Š” ์ƒ๋‹นํžˆ ์ข‹์•˜์Šต๋‹ˆ๋‹ค). extend ๋กœ ์ธํ•ด LoC๊ฐ€ ํฌ๊ฒŒ ๊ฐ์†Œํ•˜๊ณ  ํ•œ ๊ณณ์—์„œ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ์„ ์„ค์ •ํ•˜๋ฉด ํ˜ธ์ถœ ์‚ฌ์ดํŠธ ๋ฐ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์†Œ์ˆ˜์˜ LoC์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ, ์š”์ฒญ-์•ฝ์†, ์š”์ฒญ-์•ฝ์† ๋„ค์ดํ‹ฐ๋ธŒ ๋Œ„์Šค๋ณด๋‹ค ํ›จ์”ฌ ๋งค๋„๋Ÿฝ๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ ์„ธํŠธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. @sindresorhus ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ง€๊ธˆ์€ ํ›จ์”ฌ ๊นจ๋—ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰