E429 ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
npm ci
์คํํ ๋๋ง๋ค (์ ์ด๋ ์ค๋๋ถํฐ)npm ci
๋ช
๋ น์ E429 ์ค๋ฅ ( Too Many Requests )๋ฅผ ๋ฐํํ๊ณ ํจํค์ง ์ค์น๋ฅผ ์๋ฃํ์ง ์์ต๋๋ค.npm ci
์ฌ๊ธฐ๋ ๋์ผํ์ง๋ง 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
ํ์ดํ ๋ผ์ธ์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ต์ 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์ ๋์ผํฉ๋๋ค.
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 • 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">•</span>
npm ERR! <span class="cf-footer-item"><span>Your IP</span>: REDACTED</span>
npm ERR! <span class="cf-footer-separator">•</span>
npm ERR! <span class="cf-footer-item"><span>Performance & 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/
๊ณผ์ฐ ๐
์ด ํ ๋ก ์ ์ค๋๋์ง ์์์ต๋๋ค.
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์
๋๊น?
์ด ์น ์ฌ์ดํธ (registry.npmjs.org)์ ์์ ์๊ฐ ์ผ์์ ์ผ๋ก์ด ์น ์ฌ์ดํธ์ ์ก์ธ์คํ๋ ๊ฒ์ ๊ธ์งํ์ต๋๋ค.
์ฌ๋ฌ๋ถ,์ด๊ฒ ์ฌ๋ฏธ ์์์ง ๋ชจ๋ฅด์ง๋ง, ์ฌ๋๋ค์ด ๋ค์ ์์ ์ ์์ํ ์ ์๋๋ก ์ค์ ๋ก ์ ์ฉํ ๊ฒ์ผ๋ก ์ ํํ๋๋ก ํด์ฃผ์ธ์.
์ด ๋ฌธ์ ๋ ๊ฝค ๋๋ฆฌ ํผ์ ธ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ชจ๋ ์ฌ๋๋ค์ด "X์์ ๋์๊ฒ ์ด๋ฐ ์ผ์ด ์ผ์ด๋๊ณ ์์ต๋๋ค"๋ผ๋ ๊ธ์ ์ฌ๋ฆฌ๋ ๊ฒ๋ณด๋ค NPM์์ ๋ญ๊ฐ๋ฅผ๋ค์ ๋๊น์ง ๊ฝ ๋ถ์ก๋ ๊ฑด ์ด๋จ๊น์? ๋๋ ์ํฅ์๋ฐ๋ ๊ฒฝ์ฐ ๋๊ธ์ +1 ํ ์ ์์ต๋๋ค.
NPM : ํจํค์ง ๊ด๋ฆฌ์ ์๋
์ฐ๋ฆฌ๋ ์ค์จ๋ด์์๋ ์ฌ๊ธฐ์ ์์ต๋๋ค ๐ ๐โโ
์ด ๋ฌธ์ ๋ ๊ฝค ๋๋ฆฌ ํผ์ ธ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ชจ๋ ์ฌ๋๋ค์ด "X์์ ๋์๊ฒ ์ด๋ฐ ์ผ์ด ์ผ์ด๋๊ณ ์์ต๋๋ค"๋ผ๋ ๊ธ์ ์ฌ๋ฆฌ๋ ๊ฒ๋ณด๋ค NPM์์ ๋ญ๊ฐ๋ฅผ๋ค์ ๋๊น์ง ๊ฝ ๋ถ์ก๋ ๊ฑด ์ด๋จ๊น์? ๋๋ ์ํฅ์๋ฐ๋ ๊ฒฝ์ฐ ๋๊ธ์ +1 ํ ์ ์์ต๋๋ค.
์๋, ๋ฐ๊ณผ ์ธ๋ชจ์๋ ๋๊ธ
AWS ๋น๋์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์
์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ ๋ฒ์งธ ์ ์ฌ์ ์ํด ๋ ๋ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น?
CircleCi ๋น๋์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์
Github Actions์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค!
https://github.com/verdaccio/verdaccio/ ์ค์น ์๊ฐ
์์ฐ, ๋๊ธ์ ๋ฐ XD
์๋ค ์, ์ฐ๋ฆฌ๊ฐ ์คํธ๋ ์ค๋ฅผ๋ฐ๋ ๋์ ๋ชจ๋๊ฐ ๊ฐ์ ๋ฐฐ๋ฅผ ํ๊ณ ์ฌ๋์ ๋๋๋ ๊ฒ์ ๊ต์ฅํ ์ผ์ด์ง๋ง ... ์ฐ๋ฆฌ๊ฐ ์๋ก "๋๋"๋ผ๊ณ ๋งํ๋ ๊ฒ์ ๊ทธ๋ง ๋ ์ ์์๊น์?
๋ฐ์ ํญ์ ํ์ํฉ๋๋ค, btw!
์ด๊ฒ์ ๋ค๋ฅธ ์ฌ๋์ ์ปดํจํฐ ์ ๊ณผ๋ํ๊ฒ ์์กด ํ ๊ฒฐ๊ณผ์ ๋๋ค. @phaberest ๋น์ ์ ๋ฌด์๋ฏธํ๊ณ ๋๋ :-}
๊ฐ์!
NPM์ ๋ฐฉ๊ธ ์ฐ๋ฆฌ๊ฐ ๋๋จธ์ง ์๊ฐ์ ์ด ์ ์๋ค๊ณ ๋งํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
์ฌ๊ธฐ์ ๊ฐ์ ๋ฌธ์
๊ทธ๋๋ ์ ์ฉ ๋๋์?
๊ฐ์
ํ์ฌ Npm ๋ณธ์ฌ :
๋๋ ์ง๊ธ npmjs ์ฌ๋ฌด์ค์ ๊ฐ์ ํฉ๋๋ค pic.twitter.com/wZy0Bo3PM8
โ Nick Hammond (@thehappypenguin) 2020 ๋ 2 ์ 17 ์ผ
์ด์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
https://status.npmjs.org/ ๋ ๋ น์๊น์ง์ ๋๋ค ๐
NPM :
NPM ํจํค์ง๊ฐ ์ฝ๋ก๋ ๋ฐ์ด๋ฌ์ค์ ๊ฐ์ผ๋์๋ค๋ ์๋ฌธ
NPM ๋ ์ง์คํธ๋ฆฌ ์ค๋จ์ผ๋ก ์ธํด ์ฑ์ ๋ฐฐํฌ ํ ์ ์์ ๋ ์ ์ฌํ ๋ฌธ์ ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ์์ฒด npm ๋ ์ง์คํธ๋ฆฌ / ํ๋ก์ ์ค์น๋ฅผ ์ ๊ทน ๊ถ์ฅํ๋ ์ข์ ์๋ผ๊ณ ์๊ฐํฉ๋๋ค.
NPM์ ์ฌ์ฉํ ์์์ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒฝ์ฐ
NPM์ ์ฐ๋ฆฌ๊ฐ ํด์์ ์ทจํ๊ธฐ๋ฅผ ์ํฉ๋๋ค
"same"์ด๋ผ๊ณ ์ฐ๋ ๊ฒ์ ๋ฎ์ ๋ฑ๊ธ์ ๋๋ค.
Casio FX-991ESPLUS์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
NPM : ์, ํฌ์คํธ ๋ฐ!
์ค๊ตญ์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
๋น๋ ์๋ฒ (Teamcity) ๋ฐ ๋ก์ปฌ์์ npm ์ค์น๋ฅผ ์คํํ ๋ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ง๊ธ ํ์ด์ฌ ์ฝ์ค๋ฅผ ์์ํ๊ณ ์์ต๋๋ค.
์ด๊ฒ์ ๋ํด ๋ด๊ฐ ์ข์ํ๋ ๊ฒ์์ด ๋ฌธ์ ๊ฐ ์ค์ ๋ก ๋๋ฅผ ์ผํ๋ ๊ฒ์ ๋ง์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ๋ฐ์ ๊ฒ์ํ๋ ์ฌ๋๋ค์ด ๋๋ฅผ ๋ง๊ณ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ข์ํ๋ค : D
๋๋ ์ด์ฝ๋ฆฟ ์ฐ์ ๋ฅผ ์ข์ํ๋ค
๊ด๋ จ ์ค๋ ๋ .. https://github.com/nextcloud/maps/issues/300
๋ด๊ฐ ๊ฒ์ผ ๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฑฐ๊ธฐ์์ ๋ด ๊ฒ์๋ฌผ์ ๋งํฌํฉ๋๋ค .. https://github.com/nextcloud/maps/issues/300#issuecomment -586973011
์, npm ci
ํ ์ ์์ต๋๋ค
NPM : ํจํค์ง ๋ฉ์ดํธ ์์
์ง๊ธ ๊ณ ๊ฐ ํ์ ์ค์ด๋ฉฐ ๋ฐ๋ชจ๋ฅผ ํ ์ ์์ต๋๋ค.
์ง๊ธ ๊ณ ๊ฐ ํ์ ์ค์ด๋ฉฐ ๋ฐ๋ชจ๋ฅผ ํ ์ ์์ต๋๋ค.
sooo. ๊ณ ๊ฐ์๊ฒ npm install
๋ฐ๋ชจ๋ฅผํ๊ณ ์์ต๋๊น?
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ์๋ค
์ธ๋์์๋ ์์์ผ ํ์ดํ ๋ผ์ธ ์์ ๐
์ธ์์, ๋๊ตฌ๋ ์ง node_modules
ํด๋๋ฅผ ๊ณต์ ํด์ฃผ์ธ์!
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง
"๋ชจ๋ ์์คํ ์ด์"-๊ฐ์ฅ ํฐ ๊ฑฐ์ง๋ง
๋ถ์์ ํ์ง๋ง ๊ฐ์ ๋์ง ์์ต๋๊น?
NPM : ๋ชฉ์ ๋ฐ์ง ๋ง์ญ์์ค
@ anant-k-singh ๊ทธ๋, ๋ฐ, ์ด๋ ์์ ๋ ? ;-) ์ง๊ธ ํ๋ฐํธ ์๋ ์ปค๋ฎค๋ํฐ์์ ๋ง์ ์์ง ์๊ฐ๋ฝ์ ๊ตด๋ฆฌ๊ณ ์์ต๋๋ค.
... ๊ทธ๋ฆฌ๊ณ ํ์ํ ๋ ๋ก์ปฌ / ์ฌ์ดํธ ๋ก์ปฌ ์บ์ฑ npm ํ๋ก์๋ ์ด๋์ ์์ต๋๊น?
https://status.npmjs.org/ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค ...
๋๊ตฐ๊ฐ๋ ์ฒ๊ตญ์ ์ํด angularjs node_modules ํด๋๋ฅผ Google ๋๋ผ์ด๋ธ์ ์ ๋ก๋ํด์ผํฉ๋๋ค.
์ง๊ธ ๊ณ ๊ฐ ํ์ ์ค์ด๋ฉฐ ๋ฐ๋ชจ๋ฅผ ํ ์ ์์ต๋๋ค.
FeelsBadMan, ๋๋ฌด ๋์ "๋ฐ๋ชจ์ ํ"์ด ์ ์ธ๊ณ์ ์ํฅ์ ๋ฏธ์น๊ณ ์์ต๋๋ค ..
๊ทธ๋ค์ ์ํ ํ์ด์ง๋ฅผ ์ ๋ฐ์ดํธํ์ต๋๋ค.
npm WARN deprecated request@2.88.2 : ์์ฒญ์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. https://github.com/request/request/issues/3142 ์ฐธ์กฐ
npm ์ค๋ฅ! ์ฝ๋ E429
npm ์ค๋ฅ! 429 ๋๋ฌด ๋ง์ ์์ฒญ-GET https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.5.tgz
npm ์ค๋ฅ! ์ด ์คํ์ ์ ์ฒด ๋ก๊ทธ๋ ๋ค์์์ ์ฐพ์ ์ ์์ต๋๋ค.
npm ์ค๋ฅ! C : UsersLenovoAppDataRoamingnpm-cache_logs2020-02-17T12_50_04_887Z-debug.log
๋๋ ๋จ์ง ๋ฐ์ ์ํด ์ฌ๊ธฐ์ ์์ต๋๋ค
์๋ ํ์ธ์,์ด GitHub ๋ฌธ์ ๊ฐ ์๋ ๊ฐ๊ฐ์ Slack / Discord / IRC ์ฑ๋์ ๋ฐ๊ณผ ๋๋ด์ ๋ณด๊ดํ ์ ์์๊น์? ๊ทธ๋ค์์ด ๋ฌธ์ ๋ฅผ ์๊ณ ์์ผ๋ฉฐ StatusPage๋ฅผ ์ ๋ฐ์ดํธํ์ต๋๋ค.
npm ์ค๋ฅ! ์ฝ๋ E429. ์ฌ๊ธฐ!
"๋ชจ๋ ์์คํ ์ด์"-๊ฐ์ฅ ํฐ ๊ฑฐ์ง๋ง
jq -r '.dependencies * .devDependencies | keys[]' package.json | xargs -L 1 -I {} sh -c "echo installing {}; npm i {}; sleep 10"
ํ ๋ฒ์ ๋ชจ๋ ํจํค์ง๋ฅผ ์ค์นํ์ง ์์ผ๋ฉด ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค ... ํ์ฌ์ ์ด๋ฉด ์๋ํ์ง๋ง ๊ฝค ๋๋ฆฝ๋๋ค ...
์ผ๋ถ ์ฌ์ฉ์๋ฅผ์ํ 403/429 Erros
๋ชจ๋ ์ด๋?
์๋ ํ์ธ์, ์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
E429
์ฌ๊ธฐ์์๋ (๋ค๋๋๋)
Azure DevOps์ ์ํด ํธ๋ฆฌ๊ฑฐ ๋ ์จ-ํ๋ ๋ฏธ์ค ๋จธ์ ์์ ๋น๋ํฉ๋๋ค.
๋ง์นจ๋ด ์๋ํ๊ธฐ ์์ํ์ต๋๋ค (์ํ ํ์ด์ง ๐).
1 ์๊ฐ 30 ๋ถ ์ดํ๋ก ๊ฐ์ํ์ต๋๋ค. ๊ณง ์์ ์ฌํญ์ ์ฐพ๊ธธ ๋ฐ๋๋๋ค.
๋๋ฅผ ์ํด ์ผํ๋ ์์ ์์ , package-lock.json ์ด๊ธฐ
https://registry.npmjs.org
์ฐพ์ https://registry.npmjs.com
npm ci
๋ด๊ฐ ํผ์๊ฐ ์๋์ ์๊ฒ๋์ด ๋ฐ๊ฐ์ต๋๋ค ๐คฃ
"์ผ๋ถ ์ฌ์ฉ์๊ฐ ๋ฐ์์ต๋๋ค", ๊ทธ๋ค์ ๋งํ๋ค
์ฌ๊ธฐ ํ์ฑ์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
๋ชจ๋ ํฌ๋ง์ ์์๋ค
npm์ด ์์ํ ๋ฉ์ถ๋ค๋ฉด ์ธ์์ ์ด๋ป๊ฒ ๋ ๊น์?
์ด ๋ฌธ์ ๋ก ์ธํด ์ค์ ์ฒ์์ผ๋ก .. ์ค์ ๋ก ์ฌ์ฉํด ๋ณด์์ต๋๋ค. ๋งค๋ ฅ์ผ๋ก ์๋ํฉ๋๋ค!
๋ด ์ ์ฑ๊ฐ๋์ด ์ฌ๊ฑด์ ์์ธกํ์ต๋๋ค.
์ง๊ธ ๊ณ ๊ฐ ํ์ ์ค์ด๋ฉฐ ๋ฐ๋ชจ๋ฅผ ํ ์ ์์ต๋๋ค.
sooo. ๊ณ ๊ฐ์๊ฒ
npm install
๋ฐ๋ชจ๋ฅผํ๊ณ ์์ต๋๊น?
์ ๋๋ฃ๋ ์ ๋
ธํธ๋ถ์ ๊ฐ์ ธ ์ค์ง ์์๊ณ ๊ทธ๋ฅ ๊ฐ์ ธ์ฌ ์ ์๋ค๊ณ ๋งํ์ต๋๋ค.
Teamviewer๋ ...
๋ฐ์ด NPM๋ณด๋ค ๋น ๋ฅด๊ฒ๋ก๋๋๋ ๊ฒฝ์ฐ
์๋ ํ์ธ์ npm ํ
์ปดํจํฐ๋ฅผ ๋ค์ ์์ ํ์๊ฒ ์ต๋๊น?
์น์ ํ๋
๋ฌธ์ ๋ฅผ ์ํด ์๊ณ , ๋ฐ์ ์ํด ๋จธ๋ฌผ ๋ ์ต๋๋ค.
์ด ์ค๋ ๋์ ๋ฐ ์ด์ธ์ ๋ด์ฉ์ ๊ฒ์ํ์ง ๋ง์๊ธฐ ๋ฐ๋๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
์ํ
npm ์ค์น๊ฐ ๋ง์นจ๋ด ๋๋ฅผ ์ํด ์ผํ์ต๋๋ค.
ํ๋งค์ฉ Angular9 node_modules ๋๋ ํ ๋ฆฌ๊ฐ ์์ต๋๋ค. DM me your offer
์ด์์์ด!
@npm
์, ๊ทธ๋ฆฌ ์ค๋ ๊ฐ์ง ์์, ๋ ์ด์ ๋ฐ ๋๋๊ฐ ์์ต๋๋ค :(
์ด๊ฒ์ npm ์์์ ๋ผ์ด๋ธ๋ก๋ณด๊ณ ํ๋ ๋์ ๋๋ค. ๋ค์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค!
๊ฑด๋ฐฐ
๋๋ฅผ ์ํด ์ผํ๋ ์์ ์์ , package-lock.json ์ด๊ธฐ
https://registry.npmjs.org
์ฐพ์https://registry.npmjs.com
npm ci
๊ฐ์ฌํฉ๋๋ค. ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์๋ํฉ๋๋ค.
์ผํ๊ธฐ ์์ํ ๊ฑด๋ฐฐ
์ค ์๋ผ ... ๋ด ๋ฉ์ผ ์๋ฆผ !! ๐
์ผ!
์ข์์ ์ฌ๋ฌ๋ถ, ์ด๊ฒ์ ์ฌ๋ฐ์์ต๋๋ค. ๋ค์์ ๋ง๋์
๋๋ฅผ ์ํด ์ผํ๋ ์์ ์์ , package-lock.json ์ด๊ธฐ
https://registry.npmjs.org
์ฐพ์https://registry.npmjs.com
npm ci
๋๋ฅผ ์ํด ์ผํ๋ค
๋ฌธ์ ์ ๋ชฉ์ด ' ์์ฒญ์ด ๋๋ฌด ๋ง์ '์์ ' ๋๊ธ์ด ๋๋ฌด ๋ง์ '์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๋ฏธ ๋ชฉ๋ก์์ ๊ฐ์ฅ ๋ง์ด ์ธ๊ธ ๋ ๋ฌธ์ ์
๋๋ค.
(github ๋ฌธ์ ๊ฐ npm ์ํ ํ์ด์ง๋ณด๋ค ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธ๋๋ ๊ฒฝ์ฐ)
๋์๊ฒ๋ ํจ๊ณผ์ ์ด๋ค
rm -rf node_modules/ package-lock.json && npm install
์ฌ์ฉํด ๋ณด์
จ์ต๋๊น?
๋ฐ๋ํ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ค
https://github.com/npm/cli/issues/836#issuecomment -586973004
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
์ open-registry
๋ํด ๋ชจ๋ ๋ฐ๋ ํฌํ๋ฅผํฉ๋๊น?
๋๋ npm config set registry https://registry.npm.taobao.org
์๋
์ฌ๋ฏธ ์์์ด
ํ๋งค๋ฅผ์ํ node_modules. ์ข์ ์ ์์ ์ํด ์คํ ๋๋ฅผ : D
rm -rf node_modules/ package-lock.json && npm install
์ฌ์ฉํด ๋ณด์ จ์ต๋๊น?
429 ๋๋ฌด ๋ง์ ๋ฐ๋ํ
NPMing์ ์ฆ๊ธฐ์ญ์์ค.
NPM์ด ๋ฐ ์ ์ถ์ ์ค๋จํ๋ผ๊ณ ํ ๋ ๋ด ๋ฐ์
PC๋ฅผ ๋ค์ ์์ํ๋ฉด ์ค๋ฅ๊ฐ ์ฌ๋ผ์ง ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋๋ฅผ ๋์๋ค.
๋ด ๋น๋๊ฐ ๋ค์ ์๋ํ๊ธฐ ์์ํ์ต๋๋ค! ๋ง์นจ๋ด ๊ป๋ค๊ฐ ์ผ์ง ๊ฒ ๊ฐ์์
ํด์คํด, ์ฌ๊ธฐ์ ์ผํ๊ณ ์์ด์.
๋์๊ฒ๋ ์ง๊ธ ์๋
ํ๋งค๋ฅผ์ํ node_modules. ์ข์ ์ ์์ ์ํด ์คํ ๋๋ฅผ : D
์๋ง๋ ์คํ ์์ค ์ปค๋ฎค๋ํฐ์์ ์์ฑํ ์์๋ ์ต์ ์ ๊ฒ ๐
์ ๊ณ ์ ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฑ๊ฐํฌ๋ฅด AWS ๋ฆฌ์ ์์ ์๋
์ง๊ธ ์๋ํฉ๋๋ค!
ํ์ฌ ๊ทผ๋ฌด ์ค ๋ ธ์ค ๋ฒ์ง๋์ AWS ๋ฆฌ์
์์ ์ค-Area 51 ๐ฝ
์ด์ ์๋ํฉ๋๋ค. NPM ์ง์ํ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฌ๋ ๋ชจ๋ <3
๋์ค์ ๋ ๋ค๋ฅธ ๋ฌธ์ ์์ ๋ง๋์, ์ธํฐ๋ท ์ฌ๋๋ค
์ฌ๋ฌ๋ถ, ์ฆ๊ฑฐ์ ์ต๋๋ค!
๋ซ์, ์ด์ฉ๋ฉด?
๋ถ๊ฐ๋ฆฌ์์์ ์จ๋ผ์ธ์ผ๋ก ๋์๊ฐ๋๋ค. ๊ณ ๋ง์, ์น๊ตฌ๋ค!
๋ค์ ํ ์ ์์๊น์?
๋ด ์ด๋ฆ ์ ํ
CI ๊ฐ๋ ๋ฐ ์คํ .. ์ด์ ์ผ์ ์์ํฉ๋๋ค .. ์๊ด์ด์์ต๋๋ค.
์ด ์ค๋จ์ ๋๋ด์์ด Dockerfile์ ๊ฐ์ํํ๋ ๋ฐ ๋์์ด๋์์ต๋๋ค.
์์ ์ก์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ ๊ทธ์ญ์์ค. ์ ๋ฅผ ํฌํจํ์ฌ ๋๊ตฌ๋ ๋ค์ ์ผํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ ์๊ตญ. next.js๋ฅผ ์ค์นํ ๋ 429 ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง๋ง react ๋ฐ react-dom์ ๊ด์ฐฎ ์์ต๋๋ค. ์ด์ ๋ค ๊ด์ฐฎ์ ๋ณด์ธ๋ค
์๋ ํ์ธ์ npm ํ
์ปดํจํฐ๋ฅผ ๋ค์ ์์ ํ์๊ฒ ์ต๋๊น?
์น์ ํ๋
๋๋์ด ํด๋์ต๋๋ค !!! 3 ๋ฒ ...
์ค์จ๋ด์์ ์ง๊ธ ์ผํ๊ธฐ ๐ธ๐ช!
NPM์ ์ฌ์ฉํ ์ ์์ ๋ ๋ค์์ ๋ต๊ฒ ์ต๋๋ค!
์ ์ด๋ github๋ ๊ฐ์ฉ์ฑ์ด ๋์ ๊ฒ ๊ฐ์ต๋๋ค.
GitHub๋ ์ด๋ชจ ์ง ์๋ต์ ์ค์๊ฐ ์ ๋ฐ์ดํธํ๋ ค๊ณ ํ๋ฉฐ ์ด๋ชจ ์ง ๋ถ๊ฝ ๋์ด์ ๊ฐ์ต๋๋ค.
๋ค์ ๋ฌธ์ : GitHub๊ฐ ๋ค์ด๋์์ต๋๋ค. : D
์์ธ : NPM์ ๋๋ฌด ๋ง์ ์์ฒญ ๋ฒ๊ทธ # 837 836
Success! created app at C:/XXXX
"๋ชจ๋ํฐ๋ง-์ฝํ
์ธ ์ ๋ฌ ํํธ๋๊ฐ ์์ ์ฌํญ์ ๊ตฌํํ๋ค๊ณ ์๋ ค ์์ต๋๋ค. ๋ชจ๋ํฐ๋ง ์ค์
๋๋ค."
Cloudflare ๋ฌธ์ ?
๋ฏธ์๊ฑด ์ฃผ ๊ทธ๋๋ ๋ ํผ์ฆ
๋ง์ ๋ฐ์์ด์๋ Github์ ๋ํ ์ฒซ ๋ฒ์งธ ๋๊ธ์ ๋๋ค. ๋ชจ๋ ์ฌ๋ํด โค๏ธ ๊ณง ๋ง๋์
ํธ์ง : ๋๋ฌด ๋ง์ downvotes * ๐ ๊ณ์! ์๋๋ก ..
Ralph๊ฐ ์ธํฐ๋ท์ ๋์์ต๋๋ค!
์ด๊ฒ์ ์ผ๋ถ๊ฐ๋๊ณ ์ถ์๋ฟ์ ๋๋ค. ์ ํ์ด์ NPM ๐
์ด์ ์ฐ๋ฆฌ ๋ชจ๋ ๋ฐ์ ๋ง๋๋์?
๋๋์ด ์๋ !!!
(https://user-images.githubusercontent.com/57898245/74657035-b1009500-518f-11ea-9e95-290b51db7dbb.png)
์ด์ ๊ณ ์ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ๋ฐ ์ ๊ฐ์ฃผ์ธ์. ๋ ์์ ์ ํฌํจํด์ ๋๊ตฌ๋ ์ผํ๋ฌ ๋์๊ฐ ์ ์์ต๋๋ค.
์๋
์ฌ๋๋ค์ ํ๋๋ก ๋ชจ์ผ๋ NPM ๋ฌธ์ :)
์ฌ๋ฌ๋ถ์ ๋ชจ๋ ๊ด์ฌ์ ๋์์ผ๋ ์ต๊ทผ์ ํผ๋ผ๋ฏธ๋ ๊ณํ์ ๊ด์ฌ์ ๊ฐ์ ธ๋ ๋ ๊น์?
์ฒด์ฝ์์๋ ์ด์ ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์ ๋ณด์ ๋๋ค. :) NPM ํ ๊ฐ์ฌํฉ๋๋ค.
FORCE๋ฅผ ์ฌ์ฉํ๋ NPM
์ด๋์์๋ ์ข์, ์ฌ๋ฏธ์๋ ๋ฌธ์ !
npm ๋ณธ๋ถ๊ฐ ๋ฐ๋ก ์ง๊ธ
๋ฐ์ด ๋น์ ๊ณผ ํจ๊ปํ๋๋กํ์ญ์์ค
๐ต๐น
ใ ใ
๋ด ํจํค์ง๋ฅผ ์ค์นํ์ง ๋ชปํ์ต๋๋ค!
์ค ์ด๋ฐ, ํํฐ์ ๋ฆ๊ฒ ์์ด, ์ง๊ธ ์๋ ์ค์ด ์ผ.
๊ฐ์ฌํฉ๋๋ค ์ธํฐ๋ท!
npm : 100์ ์ํด ์ฝ์ ๋ณ๊ฒฝ :
ํค์ด, ๋ฒ๊ทธ๋ฅผ๋ณด๊ณ ํ๋ฌ ์์ด์ ...
โฒ
โฒ โฒ
PSHH PSHH YOBA MI V EFIRE !! 1 ๐ฃโโ๏ธ
๋ชจ๋ ๋ฐ ๊ธฐ์ฐจ์ ํ์นํ์ธ์! ๐
์ด์์ ๋ฐ / ๋๋ด์ ๊ฒ์ํ๋ฉด ์ค์ ๋ก ์ด์๋ฅผ ์ฝ์ ์ ์์ด์ผํ๋ ์ฌ๋๋ค์ ์๊ฐ์ด ๋ญ๋น๋ฉ๋๋ค.
๋ฉ์ถฐ. ํ์ํ๋ค๊ณ ๋๋ผ๋ฉด ์ด๋ชจํฐ์ฝ์ ์ฌ์ฉํ์ญ์์ค.
ํนํ ์์์ผ์ ๋ ๋ง์ ๋ฒ๊ทธ๊ฐ ํ์ํฉ๋๋ค.
@cmcarey ์๊ณ ์๋ ๊ฒ์ ๊ฒฐ์ฝ ๋์ ์ผ์ด ์๋๋๋ค. ์๊ฐ์ ๋ญ๋นํ์ง ์์์ต๋๋ค. ์ค์ ๋ก ์์ฐ์ฑ์ ํฅ์์ํฌ ๊ฒ์ด๋ฉฐ, ๋ฐ๊ณผ ๋๋ด์ ์ฐ๋ฆฌ๋ฅผ ๊ธฐ๊ณ๊ฐ ์๋ ์ธ๊ฐ์ผ๋ก ๋ง๋ญ๋๋ค. ๋ํธ๋ก์ดํธ์กฐ์ฐจ๋ ์ธ๊ฐ์ด๋ฉ๋๋ค!
๊ฐ์ GALARETKA์์ ์๋ ํ์ธ์ !!
์ธํฐ๋ท์์ ์๋ ํ์ธ์!
์ ์ด๋ ๊ณง ๊ฐ์ฅ ๋ง์ด ์ธ๊ธ๋๋ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค.
์ ์ : ์ค์ ๋ฌธ์ ๊ฐ Cloudflare์์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฏ๋ก npm ์ํ ํ์ด์ง์ "CDN ์๋น์ค"ํญ๋ชฉ์ ์์ฑํ์ญ์์ค.
https://github.com/npm/cli/issues/836#issuecomment -586992790
@cmcarey ์๊ณ ์๋ ๊ฒ์ ๊ฒฐ์ฝ ๋์ ์ผ์ด ์๋๋๋ค. ์๊ฐ์ ๋ญ๋นํ์ง ์์์ต๋๋ค. ์ค์ ๋ก ์์ฐ์ฑ์ ํฅ์์ํฌ ๊ฒ์ด๋ฉฐ, ๋ฐ๊ณผ ๋๋ด์ ์ฐ๋ฆฌ๋ฅผ ๊ธฐ๊ณ๊ฐ ์๋ ์ธ๊ฐ์ผ๋ก ๋ง๋ญ๋๋ค. ๋ํธ๋ก์ดํธ์กฐ์ฐจ๋ ์ธ๊ฐ์ด๋ฉ๋๋ค!
์ด๊ฒ์ ์๊ฐ์ด๋ ์ฅ์๊ฐ ์๋๋๋ค. ์ฌ๊ธฐ์์ ๋ณผ ์์๋ ๊ฒ๊ณผ ๊ฐ์ ์๋ง์ ๋๊ธ์ ์ค์ ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์์๋ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋ ์์๋ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ฐพ๊ธฐ ์ํด ์ ๋ ฌํ๋ ์์ ์ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค.
๋ธ๋ผ์ง์์ ํ์ฌ ๊ทผ๋ฌด ์ค : ๋ธ๋ผ์ง :!
npm ๋ณด์ ํ์ Andre์ ๋๋ค. ์ฝํ ์ธ ์ ๊ณต ํํธ๋๊ฐ ์์ ์ฌํญ์ ๊ตฌํํ๋ค๊ณ ์๋ ค ์์ต๋๋ค. ๊ณ์ํด์ ์ํฉ์ ๋ชจ๋ํฐ๋งํ๊ณ ์์ต๋๋ค. ์์ธํ ์ ๋ณด๋ ์ํ ํ์ด์ง https://status.npmjs.org/ ์์ ํ์ธํ ์ ์์ต๋๋ค
๋ฌธ์ ๋ฅผ ์ข ๊ฒฐํ์ง๋ง ๋ฌธ์ ๊ฐ์๋ ๊ฒฝ์ฐ support@npmjs.com์ผ๋ก ๋ฌธ์ํ์ญ์์ค.
@aeleuterio ์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ ๋ํ ์ฌํ ๋ถ๊ฒ์ ์ป์ ์ ์์ต๋๊น?
์ง๊ธ ์ผํ๊ณ ์์ต๋๋ค!
OMG. ๋ค์๋ ํ์ง๋ง! ์ด์ ๊น์ง! )))))
๋ค์ ์๋ํ์ง ์์ต๋๋ค. ํํธ๋๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
@cmcarey ์๊ณ ์๋ ๊ฒ์ ๊ฒฐ์ฝ ๋์ ์ผ์ด ์๋๋๋ค. ์๊ฐ์ ๋ญ๋นํ์ง ์์์ต๋๋ค. ์ค์ ๋ก ์์ฐ์ฑ์ ํฅ์์ํฌ ๊ฒ์ด๋ฉฐ, ๋ฐ๊ณผ ๋๋ด์ ์ฐ๋ฆฌ๋ฅผ ๊ธฐ๊ณ๊ฐ ์๋ ์ธ๊ฐ์ผ๋ก ๋ง๋ญ๋๋ค. ๋ํธ๋ก์ดํธ์กฐ์ฐจ๋ ์ธ๊ฐ์ด๋ฉ๋๋ค!
๊ทธ๋ฌ๋ ๋ฐ๊ณผ ๋๋ด์ ์ค์ ๋ก ๋ฌธ์ ๊ฐ ๋ฌด์์ด๋ ํด๊ฒฐํ๋ ๋ฐ ํ์์ ์ผ ์์๋ ๋ํ๋ฅผ ๋ง์ณ ๋์ต๋๋ค.
์ง๊ธ ์ผํ๊ธฐ ๐
๊ทธ๋ฌ๋ ๋ฐ๊ณผ ๋๋ด์ ์ค์ ๋ก ๋ฌธ์ ๊ฐ ๋ฌด์์ด๋ ํด๊ฒฐํ๋ ๋ฐ ํ์์ ์ผ ์์๋ ๋ํ๋ฅผ ๋ง์ณ ๋์ต๋๋ค.
์ค์ ๋ก NPM์ ์ค์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ๋ณด๊ธฐ ์ํด ์ฝ 200 ๊ฐ์ ๋ฐ์ ์คํฌ๋กคํด์ผํ์ต๋๋ค.
์ฐธ๊ณ ๋ก ์ ์ฌ๋ ์๋ ์ ํ์ ํธ๋ฆฌ๊ฑฐํ์ง ์๊ณ ํจํค์ง๋ฅผ๋ก๋ ํ ์์์์ต๋๋ค. : 1)
์ ์ฌ๋ ํ๋ฅญํฉ๋๋ค! (๊ทธ๋ฆฌ๊ณ ์์ ํจ)
๋ฌธ์ ๋๊ธ์ ์ง์ ์ฌํ ๋ถ์์ ์ ๊ณตํ๋ 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 ์ฌ์ ์ด์ธ์ ๋ชฉ์ ์ผ๋ก ๋ฆฌํผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ด๋ฌํ ์ผ์ด ๋ค์ ๋ฐ์ํ์ง ์๋๋ก ์์คํ ์ ์ ๋ฐ์ดํธ ํ ๊ฒ์ ๋๋ค. ๋ํ ์ํฅ์ ๋ ๋นจ๋ฆฌ ๋ฐ๊ฒฌํ๊ณ ์๋์ผ๋ก ๋กค๋ฐฑ ํ ์ ์๋๋ก ์ด๋ฌํ ์ฑ๊ฒฉ์ ๋ณํ์ โโ๋ํ ๋ชจ๋ํฐ๋ง์ ๊ฐ์ ํ ๊ฒ์ ๋๋ค.
์ค๋ช ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค
๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์ ์ค์์ฑ์ ๊ฐ์ํ ๋ NPM์ ๋ํ ๋ช ์์ ์ธ ํ ์คํธ๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ฐ๋ฆฌ (๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ง์ ์ฌ๋๋ค)๋ ์ค๋ ์์นจ EU ์ ๋ฌด ์๊ฐ ๋์ 2 ์๊ฐ ๋์ ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌ ํ ์ ์์์ต๋๋ค. ์ด๊ฒ์ ๋ํ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์ด๋ฌํ ์ฌ๊ฑด์ด ๋ฐ์ํ ๋ ๋ ๋์ ์ฐ์์ฑ ์กฐ์น๋ฅผ ์ทจํ๋๋ก ์๊ธฐ์ํค๋ ์ญํ ์ํด์ผํฉ๋๋ค.
์ ์๊ฐ์๋ NPM ์ค์น ํ๋ก๊ทธ๋จ์ ์์ฒญ์ด HTTP ์ฌ์์ ์ค์ํ๋์ง ํ์ธํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ ์๊ฐ์๋ NPM ์ค์น ํ๋ก๊ทธ๋จ์ ์์ฒญ์ด HTTP ์ฌ์์ ์ค์ํ๋์ง ํ์ธํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ฐธ์กฐ์๋ ๋น์ด ์์ด์ผํ๋ฉฐ ์ค์น ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์ ์์ด์ ํธ ์ฌ์ผํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ๋ค๋ฅธ ๋น๋๋ฅผ ์ํด 15 ๋ถ๋ง๋ค 5464950 ์ข ์์ฑ์ ๋ชจ๋ ๋ค์ด๋ก๋ ํ ์ ์์ต๋๋ค.
@ buro9 ๊ณต๊ฐ ๋ฌธ์ ์ ๊ฒ์ํ๊ธฐ ์ ์ ํฐ์ผ๊ณผ ๋ด๋ถ ์ฌ์ ํต์ ์ ์๋ต ํด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ์ง๋ ๋ ๋ฒ์ ์ค๋จ์ ๋ํ ์ฌํ ๋ณด๊ณ ์๋ฅผ ์์ง๋ฐ์ง ๋ชปํ์ต๋๋ค.
HTTP ์ฌ์์ ์ง์ ํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ,์ด ๋์์ด ์๋ ๋์ ์กด์ฌ ํด ์์์ ๊ณ ๋ คํ ๋,์ด ๊ฐ์์ค๋ฌ์ด "HTTP ์ฌ์ ์ค์"๊ฒฐ๊ณผ๋ฅผ ์ด๋ ํ ์ค๋ CF์์ ์ด๋ค ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋์๋์ง ๊ฒํ ํด๋ฌ๋ผ๊ณ ์์ฒญํฉ๋๋ค.
๊ณต๊ฐ ํฐ์ผ์ผ๋ก ํ์ ์กฐ์น๋ฅผ ์ทจํ๊ณ ๋ง์ง๋ง ๋ ๋ฒ์ ์ค๋จ์ ๋ํ ์ฌํ ๋ถ์์ ๋ํด ๋ค์๋ณด๊ณ ํด๋ฌ๋ผ๊ณ ๋ค์ ์์ฒญํ ๊ฒ์ ๋๋ค. github ๋ฌธ์ ์์ ํ์ธํ๋ ๊ฒ๋ณด๋ค ์ง์ ์ด์ ๋ํด ๋ฐฐ์ฐ๊ณ ์ถ์ต๋๋ค. .
์๋ ํ์ธ์ Cloudflare์ ์ฌ๊ณผ๋๋ฆฝ๋๋ค.
์ฌ๊ณผ ํ ํ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. npm์ ๋ถ๋ช ํ referrer ํ๋๋ฅผ ์๋ง์ผ๋ก ๋ง๋ค์๊ณ ์๋ชป๋ ๊ฒ์ ์์ต๋๋ค. ์ค์๋ก ๊ณผ๊ฑฐ์ ํด๊ฒฐ๋์๋ค๊ณ ํด์ ๊ทธ ์ํ๋ฅผ ์ ์งํด์ผํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ฌ์์ ์กด์คํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ผ๋ก ์ด์ ๊ฐ์ ์ผ์ด ๋ค์ ๋ฐ์ํ์ง ์๋๋ค๊ณ ๋๊ฐ ๋ณด์ฅ ํ ์ ์์ต๋๊น?
npm์ ๋ถ๋ช ํ referrer ํ๋๋ฅผ ์๋ง์ผ๋ก ๋ง๋ค์๊ณ ์๋ชป๋ ๊ฒ์ ์์ต๋๋ค. ์ค์๋ก ๊ณผ๊ฑฐ์ ํด๊ฒฐ๋์๋ค๊ณ ํด์ ๊ทธ ์ํ๋ฅผ ์ ์งํด์ผํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค.
์ด๋ฅผ BC ์ค๋จ์ด๋ผ๊ณ ํ๋ฉฐ ๋์ผํ '๋ฒ์ '์์ ๋ฐ์ํด์๋ ์๋ฉ๋๋ค.
npm์ ๋ถ๋ช ํ referrer ํ๋๋ฅผ ์๋ง์ผ๋ก ๋ง๋ค์๊ณ ์๋ชป๋ ๊ฒ์ ์์ต๋๋ค. ์ค์๋ก ๊ณผ๊ฑฐ์ ํด๊ฒฐ๋์๋ค๊ณ ํด์ ๊ทธ ์ํ๋ฅผ ์ ์งํด์ผํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค.
์ด๋ฅผ BC ์ค๋จ์ด๋ผ๊ณ ํ๋ฉฐ ๋์ผํ '๋ฒ์ '์์ ๋ฐ์ํด์๋ ์๋ฉ๋๋ค.
๋ค, ๊ทธ ์ ์ ์๋ ค๋๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ๋ผ๊ฑด๋ ๊ฒฐ์ ์ "์์ํ ๊ทธ๋ฐ ์์ผ๋ก ์ ์ง๋๊ณ ๋ชจ๋ ์ฌ๋์ด ์ค์ํด์ผํฉ๋๋ค"๊ฐ ์๋ ๊ฒ์ ๋๋ค.
(โฆ)
์ ํธ ์ค ํ๋์ ์ํฅ์ ๋ฏธ์น๋ ๊ท์น์ ์์ ํ์ต๋๋ค. ์ ํธ๋ HTTP ๋ฆฌํผ๋ฌ ํค๋์ ๊ด๋ จ์ด ์์ผ๋ฉฐ ์ ํจํ์ง ์์ ๋ฆฌํผ๋ฌ ํค๋๋ฅผ ๋ณด๋ ์ฝ๋๊ฐ ์์ต๋๋ค.
(โฆ)
๊ทธ๋์ ... ์ ์ด๊ฒ์ด npmjs.org์ ์ํฅ์ ๋ฏธ์ณค์ต๋๊น? ๋ง์ NPM ํธ๋ํฝ์ด HTTP ์ฌ์์ ๋ฐ๋ผ ์๋ชป๋ "์ค์น"๋ก ๋ฆฌํผ๋ฌ๋ฅผ ๋ณด๋ด๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
Referer
ํค๋๊ฐ ์๋ / ๋ถ๋ถ URI ์ฌ์ฉ์ ํ์ฉํ์ง ์์ต๋๊น? https://tools.ietf.org/html/rfc7231#section -5.5.2
5.5.2. Referer The "Referer" [sic] header field allows the user agent to specify a URI reference for the resource from which the target URI was obtained (i.e., the "referrer", though the field name is misspelled). A user agent MUST NOT include the fragment and userinfo components of the URI reference [RFC3986], if any, when generating the Referer field value. Referer = absolute-URI / partial-URI
์๋ฒ์์ URI์ ์กด์ฌ๋ฅผ ์กฐ์ฌํ์ง ์๊ณ ์์์ urlencoded ํ ์คํธ๋ฅผ ์ค์ ๋ถ๋ถ URI์ ๊ตฌ๋ณํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ฌ์์ ์ถ๋ก ์ ๋ฐ๋ฅด๋ฉด Referer
ํค๋ install
๋ ์ธ๋ป๋ณด๊ธฐ์ ์๋ฒฝํ๊ฒ ์ ํจ ํ ์ ์์ต๋๋ค.
https://tools.ietf.org/html/rfc7230#section -2.7
relative-part = <relative-part, see [RFC3986], Section 4.2> partial-URI = relative-part [ "?" query ]
https://tools.ietf.org/html/rfc3986#section -4.2
relative-ref = relative-part [ "?" query ] [ "#" fragment ] relative-part = "//" authority path-abempty / path-absolute / path-noscheme / path-empty
https://tools.ietf.org/html/rfc3986#section -3.3
path-noscheme = segment-nz-nc *( "/" segment ) segment = *pchar segment-nz = 1*pchar segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" ) ; non-zero-length segment without any colon ":" pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
๊ทธ๋์ ์ฌ์์ ๋ชน์ ์๋ชป ์ฝ์ง ์๋๋ค๋ฉด, ์ ๊ทธ ๋ฆฌํผ๋ฌ ํค๋๊ฐ ์ ํจํ์ง ์์ ๊ฒ์ผ๋ก ์ทจ๊ธ ๋์๋๊ฐ? Cloudflare๋ ์์ฒญ์ ํด๋น URI์ ์กด์ฌ๋ฅผ ํ์ธํ ๋ค์ ์บ์์ ์ ์ฅํฉ๋๊น, ์๋๋ฉด ๋ค์ ํ ๋ฒ ๋น ๋ฅด๊ณ ๋์จํ๊ฒ "์ฐ์ํ"์ดฌ์์ ๋๊น?
@datenwolf ๊ตฌ๋ฌธ ์ ์ผ๋ก install
์ ๊ฐ์ ๋ถ๋ถ URI๋ฅผ ๊ฐ์ง ์ ์์ง๋ง, ์ธ์ฉ ๋ ํ
์คํธ ์๋์ ๋ช ์ค์ด ์์ผ๋ฉด ์ด๋จ๊น์?
If the target URI was obtained from a source that does not have its
own URI [...], the user agent MUST either exclude the
Referer field or send it with a value of "about:blank".
์ด imho๊ฐ ์ฌ๊ธฐ์ ์ ์ฉ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ ๊ทํ์ ๋ง์ง๋ง ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ด ์๋๋๋ค. ๊ทธ๋ฌ๋ ์ฃผ์ ๊ฐ ์กฐ๊ธ ๋ ๋ณต์กํ๊ณ ๋ ๋ถ๋ถ์ผ๋ก ๋๋์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. 1) http ์ฌ์์ ์ค์ํ๋ npm์ด๊ณ 2) CF๋ ์ ๋ขฐํ ์์๋ ๊ฐ์ง ๊ท์น์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ง๋ ๋ ์ง๋ฌธ์ ๋ํ ๋ต์ ์๋์ค์ ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ด๊ฒ์ ํ ๋ก ํ๊ธฐ ์ํด ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋งก๊น๋๋ค. "๋ฌด์ธ๊ฐ"์ ๋ํด ์ฑ๊ธํ๊ฒ ์ฌ๊ณผํ๋ฉด ์ ์ฌ์ ์ธ ๋ฒ๊ทธ๊ฐ ์์ ๋์ง ์์ ์ ์๋ค๋ ์ ์ ์ง์ ํ๊ณ ์ถ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฌธ์ ์ ๋ํ ์ค์ "์๋ฃจ์ "์ ํฅํ ๋ฌธ๊ตฌ๋ ๋ค์ ๋ถํํ์ ์ ์์ต๋๋ค.
์ฒซ๋ block mode
๋ฅผ ๊ตฌํํ๋ ๋์ ํ๋์ observe mode
์์ด์ผํฉ๋๋ค.
@datenwolf ๊ตฌ๋ฌธ ์
If the target URI was obtained from a source that does not have its own URI [...], the user agent MUST either exclude the Referer field or send it with a value of "about:blank".
์ด imho๊ฐ ์ฌ๊ธฐ์ ์ ์ฉ๋ฉ๋๋ค.
๋ค, ๊ทธ๋ ์ต๋๋ค. ๋ด๊ฐ ์ด๊ฒ์ ์ถฉ๋ถํ ์๊ณ ์๋ค๋ ๊ฒ์ ์ถฉ๋ถํ ๋ช ํํ๊ฒํ์ง ์์์ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ ์ ์ผ๋ก ์์ ์ ๋ฒ์ด๋ฌ์ต๋๋ค.
์ด๋ฏธ ์ง์ ํ๋ฏ์ด
(โฆ) ์ฃผ์ ๊ฐ ์ข ๋ ๋ณต์กํ๊ณ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ ๊ฒ ๊ฐ์ต๋๋ค. 1) http ์ฌ์์ ๋ฐ๋ฅด๋ npm์ด๊ณ 2) CF๊ฐ ์ ๋ขฐํ ์์๋ ๊ฐ์ง ๊ท์น์ ์ฌ์ฉํฉ๋๋ค. (โฆ)
Referer
URI์ ์กด์ฌ๋ฅผ ๋ช
์ ์ ์ผ๋ก ํ์ธํ์ง ์์ผ๋ฉด ํค๋์ ์ ํจ์ฑ์ ๊ฒฐ์ ํ ์ ์๋ค๋ ์ ์ ์ด๋ฏธ ์ง์ ํ์ต๋๋ค.
npm์ด ์ฌ์์ ์๋ฐํฉ๋๊น? ํ์คํ.
CF๊ฐ์ด๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฐ์ง ํ ์ ์์ต๋๊น? URI๋ฅผ ๋ช ์ ์ ์ผ๋ก ํ์ธํ๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํฉ๋๋ค. CF๊ฐ ๊ทธ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๊น? ๋ชจ๋ฅด๊ฒ ์ต๋๋ค ... ์์ง (ํ์ง๋ง ํ ์คํธ ์ฅ์ ๋ง๋ค ์๋ ์์ต๋๋ค.)
๊ทธ๋ฌ๋ ๋ ์ด์์ ์ ๋ณด๊ฐ์์ด ๋๋ CF๊ฐ CF์ฒ๋ผ ๋ค์ํ๊ณ , ๊ทผ๊ฑฐ์๋ ์ด์ ๋ก ์ธํฐ๋ท์ ์ผ๋ถ๋ฅผ ๊นจ๋จ๋ ธ๋ค ๊ณ ๊ฐ์ ํด์ผํฉ๋๋ค.
CDN์ด ์๋น์ค๋ฅผ ์๋ฏธ์๊ฒ ๊ฐ์ ํ๊ณ "์ธํฐ๋ท์ ์ผ๋ถ๋ฅผ ๋ง๊ฐ๋จ๋ฆด"์ํ์ ๊ฐ์ํ์ง ์๋ CDN์ด ํ ์์๋ ์ผ์ ๊ฑฐ์ ์๋ค๋ ์ ์ ๋ช ์ฌํ ๊ฐ์น๊ฐ ์์ต๋๋ค. CF๊ฐ ์ ๊ณตํ๋ ์๋น์ค์ ๋ณธ์ง๊ณผ ๊ทธ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก ๋น์ฐํ ์ธ๊ธฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํญ์ ๋ถ์ฅ๋์ํ๊ณ ์์ผ๋ฉฐ, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ฉ์ํ ์ ์๊ณ ์๋์ ์ผ๋ก ๋ง๋ค๋ฉด ๋ง์ ์ฌ๋๋ค์ ํ๋๊ฒ ํ ๊ฐ๋ฅ์ฑ์ด ์์์ ์๋ฏธํฉ๋๋ค. ์ค์.
์ด npm ์ผ์ ๊ฝค ์ค๋ซ๋์ ํด์ ๊ธฐ ๋๋ฌธ์ ๋๋ ๊ทธ๋ค์ ์ ์ฅ์ ๋ํ ๋์ ์ฌ์ด ๋ถ์กฑํ์ง ์์ผ๋ฉฐ ์ด๊ฒ์ ๋ํด ๊ฒฝ๋ฉธํ๋ ๊ฒ์ ๋ถ์ ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ค์ ๋ง์ ์ ์์ ์ธ ํ์์์ ์ค๋จ์ผ๋ก๋ถํฐ npm (๋ฐ๋ผ์ ์ ์ฒด JS ์ปค๋ฎค๋ํฐ)์ ๋ณดํธํ๊ณ ์ฐ๋ฆฌ์ ๋ชจ๋ ๋น๋๋ฅผ ํจ์ฌ ๋น ๋ฅด๊ณ ์์ ์ ์ผ๋ก ๋ง๋๋ ํ๋ฅญํ ์ผ์ํ๊ณ ์์ต๋๋ค. Cloudflare๋ฅผ ์ฌ๋ํ๊ณ ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ์น์ ํฉ์๋ค.
์ฆ, npm์ ์ฃผ์ด์ง ์์ฒญ์ํ๊ฒ ๋ง๋ ๋ช ๋ น์ ๋ํ ๋ด๊ธฐ ์ํด Referer ํค๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์์ด ๊ด๋ จ HTTP ์ฌ์์ ๋ด์ฉ์ด๋ ์ ์ ์ ์๋ฐํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ํ ๋ก ์ ๋ฐ๋ฅด๋ ์ฌ๋์ด ๋ค์๊ณผ ๊ฐ์ HTTP pedantry ํ์๊ฐ ์ ์ฉํ๊ฑฐ๋ ์ ์ด๋ ์ฆ๊ฒ๋ค๋ ๊ฒ์ ์๊ฒ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๊ฒ ๋น์ ์ ์ผ์ด ์๋๋ผ๋ฉด, ๋ค๋ฅธ ์ผ์ ํด์ฃผ์ธ์.์ด ๊ธ์ ์ฝ์ ์๊ฐ์ด ์์ ๊ฒ์ ๋๋ค. :)
CF๋ ๋น์ ์์ ์ธ HTTP ํค๋ ์ฌ์ฉ์ ์
์์ ์ธ ์์ฒญ์ผ๋ก ํ์๋๋ ํด๋ฆฌ์คํฑ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐฐํฌํ์ต๋๋ค. ์ฃผ๋ก ์น ๋ธ๋ผ์ฐ์ ์ ํธ๋ํฝ์ ์ฒ๋ฆฌ ํ ๋ Referer ํค๋๋ ์ผ๋ฐ์ ์ผ๋ก ํญ์ ๋๋ฝ๋๊ฑฐ๋ about:blank
๋๋ ์ ๊ทํ ๋ URL์
๋๋ค. ๋ฐ๋ผ์ Referer: install
์ ๊ฐ์ ํค๋๋ ์ด์ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ฌ์์ "URI"๊ฐ ์์ต๋๋ค. "URL"์ด ํ์๋์ง ์์ต๋๋ค. ํ์คํ "์ ๊ทํ ๋ URL"์ด ์๋๋๋ค. IETF ๋ฌธ์์์ "URI"๋ "URL"์ ์ผ๋ฐ์ ์ผ๋ก ์ธ์ฌํ ์ฌ์ฉ์ ๊ฐ์ํ ๋, ์ด์ ๊ฐ์ ๋ฌธ์ ์ ๋ํด ์ข ์ข ๋ค ๋ฐ๋ฅด๋ ํค์ด ์ค ํ๋ฆฌ ํ ํ ๋ก , ๊ทธ๋ฆฌ๊ณ Referer๊ฐ rfc1945 ์์ ์ฒ์ ๋ฑ์ฅํ๋ค๋ ์ฌ์ค (๊ทธ ์ ์๋ ์ค๋ ์ฌ์ฉ๋์์ง๋ง), _ ๊ทธ๋ฆฌ๊ณ _ HTTP ์ฌ์์ด ์ฌ๋ฌ ์ฐจ๋ก์ ์ ๋ฐ์ดํธ ๋ฐ ์์ ์ ํตํด "URI"๋ฅผ ์ ์งํด ์๋ค๋ ์ฌ์ค์ ํ์ธํด์ผํฉ๋๋ค. ์ฌ๊ธฐ์ _intent_๋ Referer๊ฐ URL ๊ทธ ์์ฒด๊ฐ ์๋ URI๋ผ๋ ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์์ต๋๋ค. ํฌ๊ธฐ.
URI ์ URL ์ ๋์ผํ์ง ์์ต๋๋ค. ๋งํฌ ๋ ๋ RFC๋ ๋ชจ๋ ํ์ RFC์ ์ํด ์ฒ์ ์์๋ ์ด๋๋ก ์ ๋ฐ์ดํธ๋๊ณ ์ฌ์ฉ๋์ง ์์ต๋๋ค (์ผ๋ถ).์ด ์์ ์์ ์์ง ์ฝ๊ณ ์๋ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋งํฌ๋ฅผ ๋ฐ๋ผ ๊ฐ์ Uniform Resource Location ๋ฐ Identification ํ์ค์ด ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋๊ณ ๋ฏธ๋ฌํ๊ฒ ํ์ฅ๋์๋์ง ์์ ๋ณด๋๋ก ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค. ์๋ ์ ๊ฑธ์ณ ํฅ๋ฏธ๋ก์ด ๋ฐฉ๋ฒ.
๊ฒฐ๋ก ์ ์ด๊ฒ์ด๋ค : HTTP Referer
ํค๋๋ Uniform Resource _Locator_ ์ผ ํ์๊ฐ์๊ณ Uniform Resource _Identifier_ ์ผ ํ์๊ฐ ์์ต๋๋ค. ์ด ์๋ณ์๊ฐ ์ ์๋ ค์ง URI ์คํด์ ์ฌ์ฉํ๊ฑฐ๋ ์๋์ ์ด ์๋ ์์ ํ ํ์์ด์ด์ผํ๋ค๋ ์๊ตฌ ์ฌํญ์ ์์ต๋๋ค. ์ ์ผํ ์ ํ์ (a) URI ์ฌ์ผํ๊ณ (b) ์์ฒญ์ด ์ฃผ์ ํ์ ์ค์ URL์ ์
๋ ฅํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์๋ณ์๊ฐ์๋ ์ง์ ์ฌ์ฉ์ ์์ฒญ์ ์ถฉ์กฑํ๋ ๊ฒฝ์ฐ ์๋ตํด์ผํฉ๋๋ค.
URI๋ ์ง์ ๋ ๋คํธ์ํฌ ์์ด์ ํธ ๋๋ ์ง์ ๋ ํ๋กํ ์ฝ์ ์ํด ์ฐพ๊ธฐ, ๊ฐ์ ธ ์ค๊ธฐ ๋๋ ํ์ธํ ์์์ ํ์๊ฐ _ ์๋๋๋ค _.
๋ฐ๋ผ์ install
๋ ์ฌ์ฉ์๊ฐ ์ํธ ์์ฉํ์ฌ ์์ฒญ์ํ๊ฒ ๋ง๋ ๊ฒ์ ๋ํ ์๋ณ์์
๋๋ค. ํจํค์ง ๋๋ tarball์ ๋ํ URL์ ์ฃผ์ ํ์ ์ค์ ์
๋ ฅํ์ง ์๊ณ npm install
๋ฅผ ์
๋ ฅ ํ ๋ค์ _it_์ด HTTPS๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ ์์ต๋๋ค. ํด๋น ๋ฆฌ์์ค๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด HTTP ์์ฒญ์ํด์ผํ์ต๋๋ค. ์ฒด๊ณ๋ ์ ๊ณต๋์ง ์์ง๋ง ํ์ ์ฌํญ์ ์์ต๋๋ค. "install"์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ์ผ๋ จ์ ๊ฐ๋จํ ๋ฌธ์์
๋๋ค. ์คํค๋ง๊ฐ์๋ (์ฆ, ์์ ํ๊ฒ ๊ท์ ๋์ง ์์) URI์
๋๋ค.
URI ์๋งจํฑ๊ณผ ๊ตฌ๋ฌธ์ ์คํค๋ง์ ์ํด ์ ์๋๊ธฐ ๋๋ฌธ์ ์คํค๋ง๊ฐ ์์ผ๋ฉด install
๊ฐ ์ ํจํ์ง ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด tel:+12345678901
๋ ์ ํจํ URI (๋ฐ ์ ํจํ URL)์ด์ง๋ง http:+12345678901
๋ ๊ทธ๋ ์ง ์์ต๋๋ค. +12345678901
์ด ์ ํจํ ๋ถ๋ถ URI์ธ์ง ํ์ธํ๋ ค๋ฉด ์คํค๋ง๋ฅผ ์์์ผํฉ๋๋ค. ๊ทธ ์์น๋ ๋ฏธ๊ตญ ์คํ์ด์ค ์ฃผ ๋ถ๋๋ถ์ ์ ํ ์์คํ
์ ์ธ๋ถ ์ฌํญ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ํด๋น ๋ฒํธ๋ก ์๋ํ ๋ ์์คํ
์ผ๋ก ์ ํ๋ฅผ ๊ฑธ์ด HTTP ์์ฒญ์ ์ด๋ฐํ๋ค๋ฉด ํด๋น HTTP ์์ฒญ์ +12345678901
์ Referer ํค๋๋ฅผ ํฌํจํ๋ ๊ฒ์ด ์๋ฒฝํ๊ฒ ์ ์ ํ ๊ฒ์
๋๋ค. ์๋ฒ๊ฐ ์ด๋ฌํ ์ ํ ์์คํ
์์ ์์ฒญ์๋ฐ์ ๊ฒ์ผ๋ก ์์ํ๋ฉด ์ปจํ
์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์คํค๋ง๋ฅผ ์ถ๋ก ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก npm ํด๋ผ์ด์ธํธ์ npm ๋ ์ง์คํธ๋ฆฌ์์ ์ผ์ด๋๋ ์ผ์
๋๋ค. ์คํ์ค์ธ ๋ช
๋ น์ด ํฌํจ ๋ Referer ํค๋๋ฅผ ๋ณด๋
๋๋ค. (๋ช
๋ น์ ์์น ์ธ์๊ฐ ํฌํจ ๋ ๊ฒฝ์ฐ /
๋๋ \
๊ฐ ํฌํจ ๋ ๋ชจ๋ ํญ๋ชฉ์ด ์์ ๋ฉ๋๋ค. ์ด๋ ๊ฐ์ธ ๊ฒฝ๋ก, url ๋๋ git ์ ์ฅ์ ์ผ ์ ์์ต๋๋ค.) ์ด๊ฒ์ ์๋ฏธ ์ ๋ฐ ๊ตฌ๋ฌธ ์ ์ ํํ๊ณ ์ ์ ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ์ปจํ
์คํธ์์ HTTP Referer ํค๋๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, IETF๊ฐ 30 ๋
๋์ ๊ฐ์ , ๋ถ์ ๋ฐ ๊ฒํ ํ ํ์ด ์ฌ์์ ์ฌ๋ฌ ๋ฒ์ ์ ํตํด ์ด๊ฒ์ด ์๋๊ฐ ์๋๋ผ๋ฉด Referer ์ฌ์์์๋ "URI"๊ฐ ์๋ "URL"๋ก ํ์๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ง์ ๋๋ฆฌ ์๋ฉด, ์ ๋ Cloudflare๊ฐ ์ฌ๊ธฐ์ ๋์ ํ์์๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ฌธ์ ๋ฅผ ๋๊ณ ์ธ์ฐ๋ npm ๋ Cloudflare ์ธ ๊ฒ์ฒ๋ผ ์ผ๋ง๋ ๋ง์ ์ฌ๋๋ค์ด "ํธ์ ์ ํ"ํ๋์ง์ ๋ํด ์ค๋งํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ค์ด ์ ์ง๋ฅธ ์ค์์ ์ํฅ์ ๋ฐ์์ง๋ง ๋๋๋ก ์ฐ๋ฆฌ๋ ๊ทธ๋ค์ ๊ณ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ค์ด ์ ์ง๋ฅด๋ ์ค์์ ์ํฅ์๋ฐ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ก ๊ทธ๋ค์ ์ธ๊ฐ๊ณผ ๊ธฐ๊ณ ๋๋ฌธ์ ๋๋๋ก ์ค์๋ฅผ ํ ๊ฒ์ ๋๋ค. ์๋ฒฝํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ด ๋ฐ๋ก ์ธ์์ ๋๋ค. ์ ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ๋ฐ์ ์๋ต์ ๋งค์ฐ ๋ง์กฑํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํ์ฌ ๋ชจ๋ํฐ๋ง ๋ฐ ์๋ต ์์คํ ์ ๋ชจ๋ ๊ฐ์ ํ์ต๋๋ค.
FWIW์์ "์ฐธ์กฐ ์"๋ URI๋ก ์ ์ ๋์ง ์์์ต๋๋ค . ์ฌ์ ์ฐธ์กฐ : https://greenbytes.de/tech/webdav/rfc7231.html#rfc.section.5.5.2 . URI ์ฐธ์กฐ์ ๋๋ค. "install"์ ์์ฒญ URI์ ์๋์ ์ธ ๊ฒฝ๋ก๋ก ํด์๋ฉ๋๋ค.
@reschke ๊ทธ ๋ ์์์๋ ์ฌ์ ํ ์๋ฒฝํ๊ฒ ์ ํจํฉ๋๋ค.
์ฆ, https://registry.npmjs.org/foo
์์ Referer: install
๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ํ ํด๊ฒฐ ๋ Referer๋ ์ ํจํ URI ์ธ https://registry.npmjs.org/install
๋ฉ๋๋ค. https://registry.npmjs.org/foo/-/foo-1.2.3.tgz
์์ https://registry.npmjs.org/foo/-/install
์ด๋ฉฐ ์ ํจํ URI์ด๊ธฐ๋ํฉ๋๋ค.
๋ด๊ฐ ์๋ ํ ๊ฒ๋ณด๋ค ๋ ๊ด๋ฒ์ํ๊ฒ ์คํ์ ์ฝ๋๋ค๊ณ ํด๋, ์ด๋ฐ ๋ฐฉ์์ผ๋ก Referer๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ์คํ ์คํ์ "์๋ฐ"์ด ์๋๋ฉฐ, Referer๋ฅผ ํฌํจํ๋ ์ฐจ๋จ ๋๋ ๋น์จ ์ ํ ์์ฒญ์ ๋ํ ์ค์ (์์ ํ ์ฉ์ํ ์ ์์)์ ๋๋ค. ์ ๊ทํ ๋ URL์ด ์๋ ํค๋.
๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋น์ถ์ด ๋ณผ ๋ npm cli๊ฐ ๋ณด๋ด๋ Referer ํค๋์ ์คํด์ ๋ฃ๋ ๊ฒ์ด ์๋ง๋ ๊ฐ์น๊ฐ์์ ๊ฒ์
๋๋ค _. ํ๋ก์์ ์ํด ์์ฒญ์ด ์๋ง์ด ๋ ๊ฐ๋ฅ์ฑ์ด ์ด๋ ์ ๋์ธ์ง ์์ ๋ณด๋ ค๋ฉด์ด๋ฅผ ์กฐ์ฌํด์ผํฉ๋๋ค. ๋ฌผ๋ก ๋ ๋ค๋ฅธ ์ต์
์ ์ผ๋ถ ํ๋ก์๊ฐ ํํฐ๋ง์ ์ง๋์น๊ฒ ์ด๊ดํ์ฌ ์ด์์ ์ธ ๋ฐ์ดํฐ๊ฐ ์ฝ๊ฐ ๋จ์ด์ง์ง npm-command: install
๋์ npm-session
ํค๋์ ๋ํด์ด ์์
์ ์ํํ๊ณ ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ "์ค์ "npm ํด๋ผ์ด์ธํธ์์ ์์ํ๋๋ผ๋์ด ์ฌ์ฉ์ ์ง์ ํค๋๋ฅผ ์ป์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ต์ํ ์ฃผ์ฅํ๊ณ ์์ต๋๋ค).
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฌธ์ ๋๊ธ์ ์ง์ ์ฌํ ๋ถ์์ ์ ๊ณตํ๋ 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 ์ฌ์ ์ด์ธ์ ๋ชฉ์ ์ผ๋ก ๋ฆฌํผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ด๋ฌํ ์ผ์ด ๋ค์ ๋ฐ์ํ์ง ์๋๋ก ์์คํ ์ ์ ๋ฐ์ดํธ ํ ๊ฒ์ ๋๋ค. ๋ํ ์ํฅ์ ๋ ๋นจ๋ฆฌ ๋ฐ๊ฒฌํ๊ณ ์๋์ผ๋ก ๋กค๋ฐฑ ํ ์ ์๋๋ก ์ด๋ฌํ ์ฑ๊ฒฉ์ ๋ณํ์ โโ๋ํ ๋ชจ๋ํฐ๋ง์ ๊ฐ์ ํ ๊ฒ์ ๋๋ค.