Cli: [BUG] 429 ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ

์— ๋งŒ๋“  2020๋…„ 02์›” 17์ผ  ยท  266์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: npm/cli

๋ญ? ์™œ

E429 ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์–ธ์ œ



  • npm ci ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค (์ ์–ด๋„ ์˜ค๋Š˜๋ถ€ํ„ฐ)

์–ด๋””



  • npm ๊ณต์šฉ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ

ํ˜„์žฌ ํ–‰๋™

  • npm ci ๋ช…๋ น์€ E429 ์˜ค๋ฅ˜ ( Too Many Requests )๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ํŒจํ‚ค์ง€ ์„ค์น˜๋ฅผ ์™„๋ฃŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„

  • npm ci

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘

  • ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

๋ฌธ์ œ ๋Œ“๊ธ€์— ์ง์ ‘ ์‚ฌํ›„ ๋ถ„์„์„ ์ œ๊ณตํ•˜๋Š” Cloudflare์˜ ์•ˆ๋…•ํ•˜์„ธ์š”.

์ €๋Š” DDoS ๋ณดํ˜ธ ํŒ€์˜ ์—”์ง€๋‹ˆ์–ด๋ง ๊ด€๋ฆฌ์ž์ด๋ฉฐ ์˜ค๋Š˜ ์˜ค์ „ 11:06 UTC์— ์‹ ํ˜ธ ์ค‘ ํ•˜๋‚˜์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ทœ์น™์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ ํ˜ธ๋Š” HTTP ๋ฆฌํผ๋Ÿฌ ํ—ค๋”์™€ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฆฌํผ๋Ÿฌ ํ—ค๋”๋ฅผ ๋ณด๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ "๋ช…๋ฐฑํ•œ ์“ฐ๋ ˆ๊ธฐ"๋ฟ๋งŒ ์•„๋‹ˆ๋ผ "HTTP ์‚ฌ์–‘์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๊ฒƒ"์„ ํฌํ•จํ•˜๋„๋ก ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฆฌํผ๋Ÿฌ๊ฐ€ URI์ž…๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋‚˜์œ ๊ตํ†ต์— ๋Œ€ํ•œ ์ง€์‹์— ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ... ์™œ ์ด๊ฒƒ์ด npmjs.org์— ์˜ํ–ฅ์„ ๋ฏธ์ณค์Šต๋‹ˆ๊นŒ? ๋งŽ์€ NPM ํŠธ๋ž˜ํ”ฝ์ด HTTP ์‚ฌ์–‘์— ๋”ฐ๋ผ ์ž˜๋ชป๋œ "์„ค์น˜"๋กœ ๋ฆฌํผ๋Ÿฌ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. NPM์€ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์‚ฌ์ดํŠธ์ด๊ธฐ๋„ํ•˜๋ฏ€๋กœ DDoS ์‹œ์Šคํ…œ์ด์ด๋ฅผ ์„ ํƒํ•˜๊ณ  ํŠธ๋ž˜ํ”ฝ์„ HTTP ํ”Œ๋Ÿฌ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์†๋„ ์ œํ•œ์„ ์ ์šฉํ•ด์•ผํ•œ๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

NPM์ด HTTP 429s (Twitter์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Œ)์˜ ์ฆ๊ฐ€๋ฅผ ํ™•์ธํ•˜๊ณ  NPM์— ์—ฐ๋ฝํ•˜์—ฌ ๋‚ด๋ถ€ ์กฐ์‚ฌ๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ณธ ์›์ธ์„ ํ™•์ธํ•˜์ž๋งˆ์ž 13:00 UTC์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ ๋ ธ์Šต๋‹ˆ๋‹ค.

NPM ๋ฐ 1 ๊ฐœ์˜ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋Š” HTTP ์‚ฌ์–‘ ์ด์™ธ์˜ ๋ชฉ์ ์œผ๋กœ ๋ฆฌํผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด๋Ÿฌํ•œ ์ผ์ด ๋‹ค์‹œ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์‹œ์Šคํ…œ์„ ์—…๋ฐ์ดํŠธ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์˜ํ–ฅ์„ ๋” ๋นจ๋ฆฌ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ž๋™์œผ๋กœ ๋กค๋ฐฑ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๋Ÿฌํ•œ ์„ฑ๊ฒฉ์˜ ๋ณ€ํ™”์— โ€‹โ€‹๋Œ€ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๊ฐœ์„  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์—ฌ๊ธฐ๋„ ๋™์ผํ•˜์ง€๋งŒ npm -g install @vue/cli .

npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
npm ERR! code E429
npm ERR! 429 Too Many Requests - GET https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz

805 ์œ ์‚ฌํ•œ isseue-๋ฌด์ž‘์œ„ 403 ๋˜๋Š” 429

ํŒŒ์ดํ”„ ๋ผ์ธ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‘๋‹ต์€ 403 Forbidden ์—์„œ 420 Too Many Requests

AWS์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  CI ์ž‘์—…์—์„œ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Step 8/11 : RUN npm ci
 ---> Running in 87051ac87a51
npm ERR! code E429
npm ERR! 429 Too Many Requests - GET https://registry.npmjs.org/@types/xxhashjs/-/xxhashjs-0.2.1.tgz
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-02-17T11_49_35_151Z-debug.log
The command '/bin/sh -c npm ci' returned a non-zero code: 1
ERROR: Job failed: exit code 1

๋˜ํ•œ ๋Œ€๋‚˜๋ฌด ๋นŒ๋“œ์— ๋Œ€ํ•œ ๋‚˜๋ฅผ ์œ„ํ•ด :

error   17-feb-2020 12:49:46    npm ERR! code E429
error   17-feb-2020 12:49:46    npm ERR! 429 Too Many Requests - GET https://registry.npmjs.org/@snyk/configstore/-/configstore-3.2.0-rc1.tgz

์ค‘์•™ํ™” ๋œ ์ธํ”„๋ผ : ~ (
(์‚ฌํ›„๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์ง€๋งŒ ์ˆจ์„ ์ฐธ์ง€ ์•Š๊ณ  ...)

(ํ™•์ธ ๋œ) ๊ณต์šฉ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฏธ๋Ÿฌ ๋ชฉ๋ก์ด ์žˆ์œผ๋ฉด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€๋ฅผ ์ฐพ์•˜์ง€๋งŒ ๋ฏฟ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋™์ผ, ๋กœ์ปฌ ๋ฐ Circle CI ๋ชจ๋‘

Circle CI ๋ฐ ๋กœ์ปฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•˜๊ฒŒ ํ‘œ์‹œ

npm ERR! code E429 npm ERR! 429 Too Many Requests - GET https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค ..

"์ด ์›น ์‚ฌ์ดํŠธ (registry.npmjs.org)์˜ ์†Œ์œ ์ž๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ์ด ์›น ์‚ฌ์ดํŠธ์— ์•ก์„ธ์Šคํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ฐจ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค."

๊ณผ

"๋‹น์‹ ์€ ๋น„์œจ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค"

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ชจ๋‘ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

Heroku์— ๋ฐฐํฌ ํ•  ๋•Œ๋„์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

npm ERR! code E429
npm ERR! 429 Too Many Requests - GET https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz

heroku์— ๋ฐฐํฌ ํ•  ๋•Œ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

AWS CodeBuild ๋ฐ npm i -g aws-cdk์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

> npm ์˜ค๋ฅ˜! ์ฝ”๋“œ E429

28 | npm ์˜ค๋ฅ˜! 429 ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ-GET https://registry.npmjs.org/aws-cdk

์ผ๋ฐ˜์ ์ธ ์„œ๋ฒ„ ๋ฌธ์ œ?

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€
npm ์˜ค๋ฅ˜! ์ฝ”๋“œ E429
npm ์˜ค๋ฅ˜! 429 ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ-GET https://registry.npmjs.org/silent-error

ํŒจํ‚ค์ง€๋ฅผ ๋กœ์ปฌ๋กœ ์„ค์น˜ํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
์Šค์›จ๋ด.

```npm ERR! ์ฝ”๋“œ E429
npm ์˜ค๋ฅ˜! 429 ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ-GET https://registry.npmjs.org/lodash

๋„ค, Travis์—์„œ๋„ npm audit .

npm ERR! audit Your configured registry (https://registry.npmjs.org/) may not support audit requests, or the audit endpoint may be temporarily unavailable.

npm ERR! audit The server said:

Access denied | registry.npmjs.org used Cloudflare to restrict access
You are being rate limited
The owner of this website (registry.npmjs.org) has banned you temporarily from accessing this website.

์—ฌ๊ธฐ์„œ๋„ ๋˜‘๊ฐ™์€ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. npm update ์ˆ˜ํ–‰ ํ•  ๋•Œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

17-Feb-2020 11:47:48 npm ERR! code E429
17-Feb-2020 11:47:48 npm ERR! 429 Too Many Requests - GET https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz

์—ฌ๊ธฐ์—๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋‚˜๋ฌด ci๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์ฒด ์„ค์น˜.
ํŒŒ์ผ์€ ์„œ๋ฒ„ ์ž์ฒด์—์„œ ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

```$ wget https://registry.npmjs.org/@babel/plugin -transform-block-scoping /-/ plugin-transform-block-scoping-7.8.3.tgz
--2020-02-17 11 : 59 : 28-- https://registry.npmjs.org/@babel/plugin -transform-block-scoping /-/ plugin-transform-block-scoping-7.8.3.tgz
registry.npmjs.org (registry.npmjs.org) ํ•ด๊ฒฐ ์ค‘ ... 104.16.17.35, 104.16.24.35, 104.16.26.35, ...
registry.npmjs.org (registry.npmjs.org) | 104.16.17.35 | : 443์— ์—ฐ๊ฒฐ ์ค‘ ... ์—ฐ๊ฒฐ๋จ.
HTTP ์š”์ฒญ ์ „์†ก, ์‘๋‹ต ๋Œ€๊ธฐ ์ค‘ ... 200 OK
๊ธธ์ด : 6735 (6.6K) [์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ / ์˜ฅํ…Ÿ ์ŠคํŠธ๋ฆผ]
์ €์žฅ ์œ„์น˜ : 'plugin-transform-block-scoping-7.8.3.tgz'

plugin-transform-block-scoping-7.8.3.tgz 100 % [================================ ================================================ ==========================================>] 6.58K- .-KB / s (0 ์ดˆ)

2020-02-17 11:59:28 (95.5 MB / s)- 'plugin-transform-block-scoping-7.8.3.tgz'์ €์žฅ ๋จ [6735/6735] ''`

์ด ๋ฌธ์ œ๋„ ์ง๋ฉดํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ ๊ธ€๋กœ๋ฒŒ ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์ง€์—ญ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ž‘๋…„์— ๋…์ผ์—์„œ๋„ ๋น„์Šทํ•œ ์ผ์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Gitlab CI์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ๊ณผ ๋™์ผ

์—ฌ๊ธฐ ๋„ค๋œ๋ž€๋“œ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. (์•„์ผ๋žœ๋“œ์˜ AWS Codebuild)

๋Ÿฌ์‹œ์•„์—์„œ

์—ฌ๊ธฐ ์ด์Šคํƒ„๋ถˆ

์ด๋Š” registry.npmjs.org ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ Cloudflare ๊ด€๋ จ ๋ฌธ์ œ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ์‹œ ๋‹ค์Œ html ์‘๋‹ต์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

<!DOCTYPE html>
npm ERR! <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
npm ERR! <!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
npm ERR! <!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
npm ERR! <!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->
npm ERR! <head>
npm ERR! <title>Access denied | registry.npmjs.org used Cloudflare to restrict access</title>
npm ERR! <meta charset="UTF-8" />
npm ERR! <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
npm ERR! <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
npm ERR! <meta name="robots" content="noindex, nofollow" />
npm ERR! <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />
npm ERR! <link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/cf.errors.css" type="text/css" media="screen,projection" />
npm ERR! <!--[if lt IE 9]><link rel="stylesheet" id='cf_styles-ie-css' href="/cdn-cgi/styles/cf.errors.ie.css" type="text/css" media="screen,projection" /><![endif]-->
npm ERR! <style type="text/css">body{margin:0;padding:0}</style>
npm ERR!
npm ERR!
npm ERR! <!--[if gte IE 10]><!--><script type="text/javascript" src="/cdn-cgi/scripts/zepto.min.js"></script><!--<![endif]-->
npm ERR! <!--[if gte IE 10]><!--><script type="text/javascript" src="/cdn-cgi/scripts/cf.common.js"></script><!--<![endif]-->
npm ERR!
npm ERR!
npm ERR!
npm ERR! </head>
npm ERR! <body>
npm ERR!   <div id="cf-wrapper">
npm ERR!     <div class="cf-alert cf-alert-error cf-cookie-error" id="cookie-alert" data-translate="enable_cookies">Please enable cookies.</div>
npm ERR!     <div id="cf-error-details" class="cf-error-details-wrapper">
npm ERR!       <div class="cf-wrapper cf-header cf-error-overview">
npm ERR!         <h1>
npm ERR!           <span class="cf-error-type" data-translate="error">Error</span>
npm ERR!           <span class="cf-error-code">1015</span>
npm ERR!           <small class="heading-ray-id">Ray ID: REDACTED &bull; 2020-02-17 11:26:27 UTC</small>
npm ERR!         </h1>
npm ERR!         <h2 class="cf-subheadline">You are being rate limited</h2>
npm ERR!       </div><!-- /.header -->
npm ERR!
npm ERR!       <section></section><!-- spacer -->
npm ERR!
npm ERR!       <div class="cf-section cf-wrapper">
npm ERR!         <div class="cf-columns two">
npm ERR!           <div class="cf-column">
npm ERR!             <h2 data-translate="what_happened">What happened?</h2>
npm ERR!             <p>The owner of this website (registry.npmjs.org) has banned you temporarily from accessing this website.</p>
npm ERR!           </div>
npm ERR!
npm ERR!
npm ERR!         </div>
npm ERR!       </div><!-- /.section -->
npm ERR!
npm ERR!       <div class="cf-error-footer cf-wrapper">
npm ERR!   <p>
npm ERR!     <span class="cf-footer-item">Cloudflare Ray ID: <strong>REDACTED</strong></span>
npm ERR!     <span class="cf-footer-separator">&bull;</span>
npm ERR!     <span class="cf-footer-item"><span>Your IP</span>: REDACTED</span>
npm ERR!     <span class="cf-footer-separator">&bull;</span>
npm ERR!     <span class="cf-footer-item"><span>Performance &amp; security by</span> <a href="https://www.cloudflare.com/5xx-error-landing?utm_source=error_footer" id="brand_link" target="_blank">Cloudflare</a></span>
npm ERR!
npm ERR!   </p>
npm ERR! </div><!-- /.error-footer -->
npm ERR!
npm ERR!
npm ERR!     </div><!-- /#cf-error-details -->
npm ERR!   </div><!-- /#cf-wrapper -->
npm ERR!
npm ERR!   <script type="text/javascript">
npm ERR!   window._cf_translation = {};
npm ERR!
npm ERR!
npm ERR! </script>
npm ERR!
npm ERR! </body>
npm ERR! </html>

AWS Codebuild us-east-1์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์•ฝ 30 ๋ถ„ ์ „์— ํ˜„์ง€์—์„œ ํ•ด์ฒด๋˜์—ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๋‹ค์‹œ ์ž‘๋™ (์•„์ผ๋žœ๋“œ์—์„œ ํ˜„์ง€)

์ด๋Š” registry.npmjs.org ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ Cloudflare ๊ด€๋ จ ๋ฌธ์ œ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

cloudflare๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฏธ๋Ÿฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ™์€ ๋ฌธ์ œ! ๋นŒ๋“œ ํŒŒ์ดํ”„ ๋ผ์ธ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๋™์ผ : npm ERR! code E429

๊ทธ๊ฒŒ ๋‹ค์•ผ. ์ธํ„ฐ๋„ท์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ ์•ˆ๋…•ํžˆ ๊ณ„์‹ญ์‹œ์˜ค.

์ ์‹ฌ์„ ๋จน๊ณ  ํ•œ ์‹œ๊ฐ„ ์ด๋‚ด์— ๋Œ์•„ ์˜ค๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด npm ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ๊ฑฐ์˜ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒํƒœ ํŽ˜์ด์ง€์—๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ ์ค‘์œผ๋กœ ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด npm ์ƒํƒœ ํŽ˜์ด์ง€์˜ ๋ชฉ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฐ™์€ ๋ฌธ์ œ. us-east-1 AWS

npm ERR! code E429
npm ERR! 429 Too Many Requests - GET https://registry.npmjs.org/archy/-/archy-1.0.0.tgz

๋ฐฉ๊ธˆ ํŠธ์œ„ํ„ฐ์— ์—ฐ๋ฝํ•ด ๐Ÿคž ์šฐ๋ฆฌ๊ฐ€ ์ •๋ณด๋ฅผ ๋นจ๋ฆฌ ์–ป์„ ์ˆ˜์žˆ์„ ๊ฑฐ๋ผ๊ณ  ์š”.

๊ฐ™์€...

npm ERR! code E429
npm ERR! 429 Too Many Requests - GET https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.0.tgz

๊ฐ™์€. ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค๋ฅด์ง€๋งŒ ์˜ค๋Š˜ ์ด์ „๋ถ€ํ„ฐ npm ์„ค์น˜ ๋ฐ npm ci๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ 429 ๊ฐœ์˜ ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์ด ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

:(

์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ ์•„์นจ๋ถ€ํ„ฐ ๋ชจ๋‘ ๋‹ค์šด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. NPM์ด ๊นจ์กŒ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋”๋ธ”๋ฆฐ

์ง€๊ธˆ์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. 5 $ / ํŒจํ‚ค์ง€. ๋ฉ”์„ธ์ง€ ๋ณด๋‚ด์ฃผ์„ธ์š”.

์ง€๊ธˆ์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. 5 $ / ํŒจํ‚ค์ง€. ๋ฉ”์„ธ์ง€ ๋ณด๋‚ด์ฃผ์„ธ์š”.

๋„ˆ๋ฌด ์‹ธ๋‹ค

ํ•œ๊ตญ์—์„œ๋„์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

$ npm install --save-dev typescript
npm ERR! code E429
npm ERR! 429 Too Many Requests: [email protected]

๋ชจ๋“  NPM ํŒจํ‚ค์ง€๋Š” ์„ค์น˜ํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
NPM์€ ์–ด๋–ป๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ๊ทธ๋ƒฅ ์•‰์•„์„œ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ด์š”
์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ๊ฑด์„ค ๋…ธ๋™์ž์ด๊ณ  ๊ฐ‘์ž๊ธฐ ๋ชจ๋“  ๋ง์น˜๊ฐ€ ์ „ ์„ธ๊ณ„์—์„œ ์ž‘๋™์„ ๋ฉˆ์ท„๋‹ค ๊ณ  ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค.

๋นŒ๋“œ์— yarnpkg ๋ฏธ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๋ชจ๋‘ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค http://status.npmjs.org/

๋ชจ๋‘ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค http://status.npmjs.org/

image

๊ณผ์—ฐ ๐Ÿ˜„

์ด ํ† ๋ก ์€ ์˜ค๋ž˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

https://github.com/yarnpkg/yarn/issues/5891

https://github.com/open-services/open-registry๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# npm
npm config set registry https://npm.open-registry.dev

# yarn
yarn config set registry https://npm.open-registry.dev

์—ฌ๋Ÿฌ ํ™˜๊ฒฝ (travis, ๋กœ์ปฌ, ์„œ๋ฒ„)์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

NPM : ๊ฑฐ์˜ ์™„๋ฒฝํ•œ ๊ฑฐ์šธ

NPM : ์›”์š”์ผ์— ๊ณต์—ฐํ•˜์ง€ ์•Š์Œ

NPM : ์›”์š”์ผ ๋ฌธ์ œ ์—†์Œ

Gitlab ์‹คํ–‰๊ธฐ ๋‚ด์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ

heroku์—์„œ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์„ ๋•Œ๋„ ๊ฐ™์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. CF ์˜ค๋ฅ˜ ์ฝ”๋“œ 1015.

์ด ์›น ์‚ฌ์ดํŠธ (registry.npmjs.org)์˜ ์†Œ์œ ์ž๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ์ด ์›น ์‚ฌ์ดํŠธ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

npm install ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ๋„์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. " ์•ก์„ธ์Šค๊ฐ€ ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์›น ์‚ฌ์ดํŠธ ์•ก์„ธ์Šค์—์„œ. ".
์ €๋Š” ํ•„๋ฆฌํ•€ ์„ธ๋ถ€์—์„œ ์™”์Šต๋‹ˆ๋‹ค. ์ด CloudFlare ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด NPM์ž…๋‹ˆ๊นŒ?

download

์ด ์›น ์‚ฌ์ดํŠธ (registry.npmjs.org)์˜ ์†Œ์œ ์ž๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ์ด ์›น ์‚ฌ์ดํŠธ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„,์ด๊ฒŒ ์žฌ๋ฏธ ์žˆ์„์ง€ ๋ชจ๋ฅด์ง€๋งŒ, ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์‹œ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ค์ œ๋กœ ์œ ์šฉํ•œ ๊ฒƒ์œผ๋กœ ์ œํ•œํ•˜๋„๋ก ํ•ด์ฃผ์„ธ์š”.

์ด ๋ฌธ์ œ๋Š” ๊ฝค ๋„๋ฆฌ ํผ์ ธ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด "X์—์„œ ๋‚˜์—๊ฒŒ ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ๊ธ€์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ๋ณด๋‹ค NPM์—์„œ ๋ญ”๊ฐ€๋ฅผ๋“ค์„ ๋•Œ๊นŒ์ง€ ๊ฝ‰ ๋ถ™์žก๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”? ๋˜๋Š” ์˜ํ–ฅ์„๋ฐ›๋Š” ๊ฒฝ์šฐ ๋Œ“๊ธ€์„ +1 ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NPM : ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ์•„๋‹˜

์šฐ๋ฆฌ๋Š” ์Šค์›จ๋ด์—์„œ๋„ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ‘Œ ๐Ÿ™†โ€โ™‚

์ด ๋ฌธ์ œ๋Š” ๊ฝค ๋„๋ฆฌ ํผ์ ธ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด "X์—์„œ ๋‚˜์—๊ฒŒ ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ๊ธ€์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ๋ณด๋‹ค NPM์—์„œ ๋ญ”๊ฐ€๋ฅผ๋“ค์„ ๋•Œ๊นŒ์ง€ ๊ฝ‰ ๋ถ™์žก๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”? ๋˜๋Š” ์˜ํ–ฅ์„๋ฐ›๋Š” ๊ฒฝ์šฐ ๋Œ“๊ธ€์„ +1 ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ, ๋ฐˆ๊ณผ ์“ธ๋ชจ์—†๋Š” ๋Œ“๊ธ€

AWS ๋นŒ๋“œ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ

์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๋‘ ๋ฒˆ์งธ ์ ์‹ฌ์„ ์œ„ํ•ด ๋– ๋‚  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

CircleCi ๋นŒ๋“œ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ

Github Actions์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค!

https://github.com/verdaccio/verdaccio/ ์„ค์น˜ ์‹œ๊ฐ„

image

์™€์šฐ, ๋Œ“๊ธ€์˜ ๋ฐˆ XD

์–˜๋“ค ์•„, ์šฐ๋ฆฌ๊ฐ€ ์ŠคํŠธ๋ ˆ์Šค๋ฅผ๋ฐ›๋Š” ๋™์•ˆ ๋ชจ๋‘๊ฐ€ ๊ฐ™์€ ๋ฐฐ๋ฅผ ํƒ€๊ณ  ์‚ฌ๋ž‘์„ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์€ ๊ต‰์žฅํ•œ ์ผ์ด์ง€๋งŒ ... ์šฐ๋ฆฌ๊ฐ€ ์„œ๋กœ "๋‚˜๋„"๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์„ ๊ทธ๋งŒ ๋‘˜ ์ˆ˜ ์žˆ์„๊นŒ์š”?

๋ฐˆ์€ ํ•ญ์ƒ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค, btw!

์ด๊ฒƒ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ปดํ“จํ„ฐ ์— ๊ณผ๋„ํ•˜๊ฒŒ ์˜์กด ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. @phaberest ๋‹น์‹ ์€ ๋ฌด์˜๋ฏธํ•˜๊ณ  ๋‚˜๋„ :-}

giphy

๊ฐ™์€!

NPM์€ ๋ฐฉ๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ๋‚˜๋จธ์ง€ ์‹œ๊ฐ„์„ ์‰ด ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๊ฐ™์€ ๋ฌธ์ œ

3pg17i

Screenshot 2020-02-17 at 14 40 56

๊ทธ๋ž˜๋„ ์ ์šฉ ๋˜๋‚˜์š”?

๊ฐ™์€

ํ˜„์žฌ Npm ๋ณธ์‚ฌ :