๐Ÿ“ฆ ๋นŒ๋“œ๋Š” ์‹คํŒจํ–ˆ๋Š”๋ฐ ์‚ฌ์ดํŠธ๋Š” ๋ฉ€์ฉกํ–ˆ๋‹ค

@leekh8 ยท August 19, 2026 ยท 6 min read

์ปค๋ฐ‹์„ ๋ฐ€๊ณ  ์‚ฌ์ดํŠธ๋ฅผ ์—ด์—ˆ๋‹ค. 200์ด ๋–ด๊ณ  ํ™”๋ฉด๋„ ์ •์ƒ์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฐ”๊พผ ๊ฒƒ์ด ํ•˜๋‚˜๋„ ๋ฐ˜์˜๋ผ ์žˆ์ง€ ์•Š์•˜๋‹ค.

์ฒ˜์Œ์—” ์บ์‹œ๋ฅผ ์˜์‹ฌํ–ˆ๋‹ค. ๊ฐ•์ œ ์ƒˆ๋กœ๊ณ ์นจ, ์‹œํฌ๋ฆฟ ์ฐฝ, ๋‹ค๋ฅธ ๊ธฐ๊ธฐ. ์ „๋ถ€ ๊ฐ™์€ ํ™”๋ฉด์ด์—ˆ๋‹ค. ์บ์‹œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐฐํฌ ์ž์ฒด๊ฐ€ ๋ฉฐ์น ์งธ ์•ˆ ๋˜๊ณ  ์žˆ์—ˆ๋‹ค.


์ •์ƒ ์‹ ํ˜ธ๋งŒ ์„ธ ๊ฐœ์˜€๋‹ค

๋ฌธ์ œ๋ฅผ ์ฐพ๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์†์— ์žˆ๋˜ ๊ทผ๊ฑฐ๋Š” ์ด๋žฌ๋‹ค.

์‹ ํ˜ธ ์ƒํƒœ
git status clean
git push ์„ฑ๊ณต, GitHub์— ์ปค๋ฐ‹ ๋ณด์ž„
์‚ฌ์ดํŠธ ์ ‘์† 200, ํ™”๋ฉด ์ •์ƒ

์…‹ ๋‹ค ์ดˆ๋ก๋ถˆ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์…‹ ์ค‘ ์–ด๋А ๊ฒƒ๋„ "๋ฐฐํฌ๊ฐ€ ๋๋‹ค"๋ฅผ ๋œปํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ์ ์„ ์•Œ์•„์ฐจ๋ฆฌ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ์ผ๋‹ค.

๋กœ์ปฌ ํŒŒ์ผ์„ ์•„๋ฌด๋ฆฌ ๋’ค์ ธ๋„ ์›์ธ์ด ์•ˆ ๋‚˜์™”๋‹ค. ๋‹น์—ฐํ–ˆ๋‹ค. ์ฝ”๋“œ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์œผ๋‹ˆ๊นŒ. ์‹คํŒจ๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „, ์˜์กด์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๋‹จ๊ณ„์—์„œ ๋‚ฌ๋‹ค.


์ง„๋ฒ”: ์ด๋ฆ„์€ ์ดˆ๊ธฐํ™”๋˜๊ณ  ๋ฒ„์ „์€ ์Šน๊ณ„๋œ๋‹ค

๋ฉฐ์น  ์ „ ์—๋””ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ต์ฒดํ–ˆ๋‹ค. react-quill์ด ๋‚ด๋ถ€์—์„œ findDOMNode๋ฅผ ์“ฐ๋Š”๋ฐ, ์ด API๋Š” React 18.3๋ถ€ํ„ฐ ํ๊ธฐ ๊ฒฝ๊ณ ๊ฐ€ ๋œจ๊ณ  React 19์—์„œ ์ œ๊ฑฐ๋๋‹ค. StrictMode์—์„œ ๊ฒฝ๊ณ ๊ฐ€ ๊ณ„์† ์˜ฌ๋ผ์˜ค๊ธธ๋ž˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ด์–ด์ง€๋Š” ํฌํฌ์ธ react-quill-new๋กœ ์˜ฎ๊ธฐ๊ธฐ๋กœ ํ–ˆ๋‹ค.

ํ•œ ์ผ์€ ๋‘ ์ค„์ด์—ˆ๋‹ค.

- "react-quill": "^2.0.0",
+ "react-quill-new": "^2.0.0",
- import ReactQuill from "react-quill";
+ import ReactQuill from "react-quill-new";

์ด๋ฆ„๋งŒ ๋ฐ”๊พธ๊ณ  ๋ฒ„์ „ ๋ฒ”์œ„๋Š” ๊ทธ๋Œ€๋กœ ๋’€๋‹ค. ์—ฌ๊ธฐ์„œ ๊นจ์กŒ๋‹ค.

๋‘ ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „ ๊ณ„๋ณด๋ฅผ ๋‚˜๋ž€ํžˆ ๋†“์œผ๋ฉด ๊ตฌ์กฐ๊ฐ€ ๋ณด์ธ๋‹ค.

์ฒซ ๋ฒ„์ „ ๋งˆ์ง€๋ง‰ ๋ฒ„์ „ ์ตœ์ข… ๋ฐฐํฌ์ผ
react-quill 0.x 2.0.0 2023-09-24
react-quill-new 3.0.0 3.8.3 ์œ ์ง€ ์ค‘

ํฌํฌ๋Š” ์›๋ณธ์˜ ๋‹ค์Œ ๋ฉ”์ด์ € ๋ฒˆํ˜ธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์›๋ณธ์ด 2.0.0์—์„œ ๋ฉˆ์ท„์œผ๋‹ˆ 3.0.0์œผ๋กœ ์ถœ๋ฐœํ–ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ์ž์—ฐ์Šค๋Ÿฌ์šด ์—ฐ๊ฒฐ์ด๋‹ค. 3.x๋ฅผ ๋ณด๋ฉด "2.x ๋‹ค์Œ ๋ฒ„์ „"์œผ๋กœ ์ฝํžŒ๋‹ค.

๋ฌธ์ œ๋Š” ์ด ์—ฐ๊ฒฐ์ด ์ด๋ฆ„ ๊ณต๊ฐ„์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ react-quill-new๋Š” ์™„์ „ํžˆ ์ƒˆ ํŒจํ‚ค์ง€๋‹ค. 1.x๋„ 2.x๋„ ์กด์žฌํ•œ ์ ์ด ์—†๋‹ค. ๋ฐฐํฌ๋œ 26๊ฐœ ๋ฒ„์ „์ด ์ „๋ถ€ 3.x๋‹ค.

์ด๋ฆ„์€ 0์—์„œ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š”๋ฐ ๋ฒ„์ „์€ ์ด์–ด๋ฐ›๋Š”๋‹ค. ํฌํฌ์™€ ๋ฆฌ๋„ค์ด๋ฐ์ด ๋งŒ๋“œ๋Š” ๋น„๋Œ€์นญ์ด๋‹ค.


^2.0.0์ด ์ฃฝ๋Š” ์ง€์ 

caret ๋ฒ”์œ„ ^2.0.0์€ >=2.0.0 <3.0.0์„ ๋œปํ•œ๋‹ค. ๋ฉ”์ด์ €๋Š” ๊ณ ์ •ํ•˜๊ณ  ๋งˆ์ด๋„ˆ์™€ ํŒจ์น˜๋งŒ ์˜ฌ๋ฆฐ๋‹ค. 3.x๋Š” ์ด ๋ฒ”์œ„ ๋ฐ–์ด๋‹ค.

์ฆ‰ ์ƒˆ ํŒจํ‚ค์ง€์—์„œ ๋งค์นญ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „์ด ํ•˜๋‚˜๋„ ์—†๋‹ค. ์žฌํ˜„ํ•ด๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ์ฃฝ๋Š”๋‹ค.

$ npm install --package-lock-only
npm error code ETARGET
npm error notarget No matching version found for react-quill-new@^2.0.0.
npm error notarget In most cases you or one of your dependencies are requesting
npm error notarget a package version that doesn't exist.

ETARGET์€ "ํŒจํ‚ค์ง€๋Š” ์žˆ๋Š”๋ฐ ๊ทธ ๋ฒ„์ „์ด ์—†๋‹ค"๋Š” ์‹ ํ˜ธ๋‹ค. ์˜คํƒ€๋กœ ์—†๋Š” ํŒจํ‚ค์ง€๋ฅผ ์ ์—ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” E404์™€ ๋‹ค๋ฅด๋‹ค. ์ด๋ฆ„์€ ๋งž๊ฒŒ ์ผ๊ธฐ ๋•Œ๋ฌธ์— 404๊ฐ€ ์•„๋‹ˆ๋ผ ETARGET์ด ๋–ด๊ณ , ๊ทธ๋ž˜์„œ ์ด๋ฆ„ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ๊นŒ์ง€๋Š” npm์ด ์ •ํ™•ํžˆ ์•Œ๋ ค์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณผ ๊ณณ์„ ์•ˆ ๋ณด๊ณ  ์žˆ์—ˆ์„ ๋ฟ์ด๋‹ค.

// โŒ ํŒจํ‚ค์ง€๋ช…๋งŒ ๋ฐ”๊พธ๊ณ  ๋ฒ”์œ„๋Š” ์œ ์ง€
"react-quill-new": "^2.0.0"

// โœ… ์ƒˆ ํŒจํ‚ค์ง€์˜ ์‹ค์ œ ๋ฒ„์ „ ๊ณ„๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ  ์ง€์ •
"react-quill-new": "^3.8.3"

ํŒจํ‚ค์ง€๋ฅผ ๊ฐˆ์•„ํƒˆ ๋•Œ๋Š” ์ด๋ฆ„ ์˜†์˜ ์ˆซ์ž๋„ ๊ฐ™์ด ๊ฒ€์ฆํ•ด์•ผ ํ•œ๋‹ค. ํ•œ ์ค„๋กœ ํ™•์ธ๋œ๋‹ค.

npm view react-quill-new versions --json   # ๋ฐฐํฌ๋œ ๋ฒ„์ „ ์ „์ฒด
npm view react-quill-new dist-tags         # latest / beta / rc

lockfile์„ ์•ˆ ๋ฐ€๋ฉด CI๊ฐ€ ๋‹ค์‹œ ๊ณ„์‚ฐํ•œ๋‹ค

๊ต์ฒด ์ปค๋ฐ‹์ด ๊ฑด๋“œ๋ฆฐ ํŒŒ์ผ์€ ๋‘ ๊ฐœ์˜€๋‹ค.

client/package.json
client/src/components/Editor.jsx

package-lock.json์ด ์—†๋‹ค. npm install์„ ๋Œ๋ฆฌ์ง€ ์•Š๊ณ  package.json์„ ์ง์ ‘ ํŽธ์ง‘ํ–ˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋กœ์ปฌ์—์„œ๋Š” node_modules์— ๊ตฌ ํŒจํ‚ค์ง€๊ฐ€ ๋‚จ์•„ ์žˆ์–ด ๊ฐœ๋ฐœ ์„œ๋ฒ„๊ฐ€ ๊ณ„์† ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์„ค์น˜๋ฅผ ๋‹ค์‹œ ์•ˆ ํ–ˆ์œผ๋‹ˆ ์„ค์น˜ ์‹คํŒจ๋ฅผ ๋ณผ ์ผ๋„ ์—†๋‹ค.

CI๋Š” ๋‹ค๋ฅด๋‹ค. ๋งค๋ฒˆ ๋นˆ ์ƒํƒœ์—์„œ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ package.json์„ ์ฝ๊ณ  ์˜์กด์„ฑ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•ด์„ํ•œ๋‹ค. lockfile์ด package.json๊ณผ ์–ด๊ธ‹๋‚˜ ์žˆ์œผ๋ฉด ๊ทธ ์ž๋ฆฌ์—์„œ ๊ฐˆ๋ผ์ง„๋‹ค.

์„ค์น˜ ๋ช…๋ น lockfile ๋ถˆ์ผ์น˜ ์‹œ ๋™์ž‘
npm ci ์ฆ‰์‹œ ์‹คํŒจ (lockfile๊ณผ package.json์ด ๋‹ค๋ฅด๋ฉด ์ง„ํ–‰ ์•ˆ ํ•จ)
npm install lockfile์„ ๋ฌด์‹œํ•˜๊ณ  ์žฌํ•ด์„ โ†’ ์—ฌ๊ธฐ์„œ ETARGET

๋ณต๊ตฌ ์ปค๋ฐ‹์—์„œ lockfile์ด 184์ค„ ๋ฐ”๋€Œ์—ˆ๋‹ค. ์ดํ‹€ ๋™์•ˆ ๊ทธ๋งŒํผ ์–ด๊ธ‹๋‚˜ ์žˆ์—ˆ๋‹ค๋Š” ๊ธฐ๋ก์ด๋‹ค.

์˜์กด์„ฑ์„ ๋ฐ”๊ฟ€ ๋•Œ lockfile์„ ๊ฐ™์ด ์ปค๋ฐ‹ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ์ด๊ฒƒ์ด๋‹ค. ์šฉ๋Ÿ‰ ๋•Œ๋ฌธ์— node_modules๋ฅผ ๋งŒ๋“ค๊ธฐ ์‹ซ๋‹ค๋ฉด ์„ค์น˜ ์—†์ด lockfile๋งŒ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

npm install --package-lock-only

์ด ๋ช…๋ น์€ ์˜์กด์„ฑ ํŠธ๋ฆฌ๋ฅผ ํ•ด์„ํ•ด์„œ lockfile๋งŒ ๋‹ค์‹œ ์“ด๋‹ค. ํ•ด์„์— ์‹คํŒจํ•˜๋ฉด ๊ทธ ์ž๋ฆฌ์—์„œ ETARGET์ด ๋œฌ๋‹ค. CI๊นŒ์ง€ ๊ฐ€์ง€ ์•Š๊ณ  ๋กœ์ปฌ์—์„œ ๋๋‚œ๋‹ค.


์™œ ์‚ฌ์ดํŠธ๋Š” ์‚ด์•„ ์žˆ์—ˆ๋‚˜

๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ–ˆ๋Š”๋ฐ ์‚ฌ์ดํŠธ๊ฐ€ 200์ธ ๊ฒƒ์€ ์žฅ์• ๊ฐ€ ์•„๋‹ˆ๋ผ ์„ค๊ณ„๋‹ค. Vercel ๊ณต์‹ ๋ฌธ์„œ๋Š” ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ๋ฅผ ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•œ๋‹ค.

"When a production deployment succeeds, Vercel updates your production domains to point to the new deployment" โ€” Vercel Docs, Environments

ํ•ต์‹ฌ์€ succeeds๋‹ค. ๋„๋ฉ”์ธ์ด ์ƒˆ ๋ฐฐํฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์€ ๋นŒ๋“œ๊ฐ€ ์„ฑ๊ณตํ•œ ๋‹ค์Œ์ด๋‹ค. ์‹คํŒจํ•˜๋ฉด ๋„๋ฉ”์ธ์€ ์›€์ง์ด์ง€ ์•Š๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ฑ๊ณตํ•œ ๋ฐฐํฌ๋ฅผ ๊ณ„์† ์„œ๋น™ํ•œ๋‹ค.

์„ฑ๊ณต
ETARGET
git push
๋นŒ๋“œ ํŠธ๋ฆฌ๊ฑฐ
npm install
๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ ์ƒ์„ฑ
๋นŒ๋“œ ์‹คํŒจ
ํ”„๋กœ๋•์…˜ ๋„๋ฉ”์ธ์„ ์ƒˆ ๋ฐฐํฌ๋กœ ์ „ํ™˜
๋„๋ฉ”์ธ ๊ทธ๋Œ€๋กœ ์œ ์ง€
์‚ฌ์ดํŠธ 200 โ€” ๋‚ด์šฉ์€ ์˜ˆ์ „ ๊ทธ๋Œ€๋กœ
์‚ฌ์ดํŠธ 200 โ€” ๋‚ด์šฉ ๊ฐฑ์‹ ๋จ

์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ํ•ฉ๋ฆฌ์ ์ธ ๋™์ž‘์ด๋‹ค. ๋นŒ๋“œ ํ•˜๋‚˜ ๊นจ์กŒ๋‹ค๊ณ  ์„œ๋น„์Šค๊ฐ€ ๋‚ด๋ ค๊ฐ€๋ฉด ๊ณค๋ž€ํ•˜๋‹ค. ๋ฐฐํฌ ์‹คํŒจ์™€ ์„œ๋น„์Šค ์ค‘๋‹จ์„ ๋ถ„๋ฆฌํ•œ ๊ฒƒ์ด๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ํ˜ธ์ŠคํŒ… ํ”Œ๋žซํผ์ด ๊ฐ™์€ ๋ฐฉ์‹์„ ์“ด๋‹ค.

๋ถ€์ž‘์šฉ์€ ์‹คํŒจ๊ฐ€ ์กฐ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์‚ฌ์ดํŠธ๋Š” ๊ณ„์† ์‘๋‹ตํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์•„๋ฌด ์ฐจ์ด๊ฐ€ ์•ˆ ๋ณด์ธ๋‹ค. ์‹คํŒจ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ณณ์€ ๋ฐฐํฌ ์ด๋ ฅ๊ณผ ์•Œ๋ฆผ ์ฑ„๋„๋ฟ์ธ๋ฐ, ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ทธ ์•Œ๋ฆผ์„ ์•ˆ ๋ณด๊ณ  ์ง€๋‚˜๊ฐ€๊ธฐ ์‰ฝ๋‹ค.


๋ณด์ด๋Š” ์‹ ํ˜ธ์™€ ์‹ค์ œ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค

์ด๋ฒˆ ๊ฑด์—์„œ ์–ป์€ ๊ฒƒ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์‹๋ณด๋‹ค ์‹ ํ˜ธ ํ•ด์„์˜ ๊ธฐ์ค€์ด์—ˆ๋‹ค. ์ดˆ๋ก๋ถˆ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ๋“ค์ด ์‹ค์ œ๋กœ ๋ณด์ฆํ•˜๋Š” ๋ฒ”์œ„๋Š” ์ƒ๊ฐ๋ณด๋‹ค ์ข๋‹ค.

๋ณด์ด๋Š” ์‹ ํ˜ธ ์‹ค์ œ๋กœ ๋ณด์ฆํ•˜๋Š” ๊ฒƒ ๋ณด์ฆํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ํ™•์ธ ๋ฐฉ๋ฒ•
์‚ฌ์ดํŠธ 200 ๋งˆ์ง€๋ง‰ ์„ฑ๊ณต ๋ฐฐํฌ๊ฐ€ ์‚ด์•„ ์žˆ๋‹ค ๋ฐฉ๊ธˆ ๋ฏผ ์ปค๋ฐ‹์ด ๋ฐ˜์˜๋๋‹ค ๋ฐฐํฌ ๋ชฉ๋ก์—์„œ ์ตœ์‹  ๋ฐฐํฌ์˜ ์ปค๋ฐ‹ ํ•ด์‹œ ๋Œ€์กฐ
CI ์ดˆ๋ก ์ •์˜๋œ ์žก์ด ํ†ต๊ณผํ–ˆ๋‹ค ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•œ๋‹ค ์žก์ด ์‹ค์ œ๋กœ ๋ฌด์—‡์„ ์‹คํ–‰ํ•˜๋Š”์ง€ ํ™•์ธ
git status clean ๋กœ์ปฌ ์ปค๋ฐ‹์ด ๋๋‚ฌ๋‹ค ์›๊ฒฉ์ด ๊ฐ™์€ ์ƒํƒœ๋‹ค git fetch ํ›„ git log origin/main ๋น„๊ต
๋กœ์ปฌ dev ์„œ๋ฒ„ ์ •์ƒ ๊ธฐ์กด node_modules๋กœ ๋Œ์•„๊ฐ„๋‹ค ๊นจ๋—ํ•œ ํ™˜๊ฒฝ์—์„œ ์„ค์น˜๋œ๋‹ค npm install --package-lock-only๋กœ ํ•ด์„ ๊ฒ€์ฆ

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

๊ทธ๋ž˜์„œ ํ™•์ธ์€ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ ์ด๋ ฅ์„ ๋ด์•ผ ํ•œ๋‹ค. "์ง€๊ธˆ 200์ธ๊ฐ€"๊ฐ€ ์•„๋‹ˆ๋ผ "๋งˆ์ง€๋ง‰ ๋ฐฐํฌ๊ฐ€ ์–ธ์ œ, ์–ด๋А ์ปค๋ฐ‹์œผ๋กœ ์„ฑ๊ณตํ–ˆ๋Š”๊ฐ€"๋‹ค.


์‹ค๋ฌด ์ฒดํฌ๋ฆฌ์ŠคํŠธ

์˜์กด์„ฑ์„ ๊ต์ฒดํ•  ๋•Œ:

  • ์ƒˆ ํŒจํ‚ค์ง€์˜ ๋ฐฐํฌ ๋ฒ„์ „์„ ๋จผ์ € ์กฐํšŒํ•œ๋‹ค (npm view <pkg> versions)
  • ์ด๋ฆ„๋งŒ ๋ฐ”๊พธ๊ณ  ๋ฒ„์ „ ๋ฒ”์œ„๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘์ง€ ์•Š๋Š”๋‹ค โ€” ํฌํฌ๋Š” ๋ฒ„์ „ ๊ณ„๋ณด๋ฅผ ์ด์–ด๋ฐ›๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค
  • package.json์„ ์†์œผ๋กœ ๊ณ ์ณค์œผ๋ฉด lockfile์„ ๊ฐ™์ด ๊ฐฑ์‹ ํ•œ๋‹ค (npm install --package-lock-only)
  • lockfile์„ ๊ฐ™์€ ์ปค๋ฐ‹์— ํฌํ•จํ•œ๋‹ค

๋ฐฐํฌ ํ›„:

  • ์‚ฌ์ดํŠธ ์‘๋‹ต์ด ์•„๋‹ˆ๋ผ ๋ฐฐํฌ ์ด๋ ฅ์—์„œ ์ตœ์‹  ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ํ™•์ธํ•œ๋‹ค
  • ๋ฐฐํฌ ์‹คํŒจ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ฑ„๋„์„ ํ•˜๋‚˜๋Š” ์—ด์–ด๋‘”๋‹ค (๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์ผ์ˆ˜๋ก ํ•„์š”ํ•˜๋‹ค)
  • ์—ฌ๋Ÿฌ ์ปค๋ฐ‹์„ ๋ชฐ์•„์„œ ๋ฐ€์—ˆ๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜์˜ ์—ฌ๋ถ€๋ฅผ ๋ณธ๋‹ค

๋งˆ๋ฌด๋ฆฌ

์›์ธ์€ ๋‘ ์ค„ diff์˜€๊ณ  ๊ณ ์น˜๋Š” ๋ฐ๋Š” 1๋ถ„์ด ๊ฑธ๋ ธ๋‹ค. ์‹œ๊ฐ„์„ ์“ด ๊ณณ์€ ์ „๋ถ€ ์›์ธ์ด ์žˆ์„ ๋ฆฌ ์—†๋Š” ๋ฐ๋ฅผ ๋’ค์ง„ ์‹œ๊ฐ„์ด์—ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ด๋ผ ์ฝ”๋“œ์—์„œ๋Š” ๋‚˜์˜ฌ ๊ฒƒ์ด ์—†์—ˆ๊ณ , ์‚ฌ์ดํŠธ๊ฐ€ 200์ด๋ผ ๋ฐฐํฌ๋ฅผ ์˜์‹ฌํ•˜์ง€ ์•Š์•˜๋‹ค.

์ •์  ์ ๊ฒ€์œผ๋กœ ๋ชป ์žก๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ํŒŒ์ผ์— ๋‚จ์ง€ ์•Š๊ณ  ์‹คํ–‰ ์‹œ์ ์—๋งŒ ์กด์žฌํ•˜๋Š” ์‹คํŒจ๋‹ค. ์ด๋Ÿฐ ๊ฑด ์ด๋ ฅ์„ ๋ณด๋Š” ์ˆ˜๋ฐ–์— ์—†๋‹ค. ๋ฌด์—‡์ด ์‹คํ–‰๋๊ณ , ์–ธ์ œ ์‹คํŒจํ–ˆ๊ณ , ๊ทธ๋ž˜์„œ ์ง€๊ธˆ ์„œ๋น™๋˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€.

ํ™”๋ฉด์ด ์ •์ƒ์ธ ๊ฒƒ์€ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ ํ˜ธ ํ•˜๋‚˜์ผ ๋ฟ์ด๋‹ค.


๋‹ค์Œ ๊ธ€์—์„œ๋Š”

๋ฐฐํฌ๋ฅผ ๊ณ ์นœ ๊น€์— ๊ฐ™์€ ํ”„๋กœ์ ํŠธ์˜ ์Šคํƒ€์ผ์„ ์ •๋ฆฌํ–ˆ๋‹ค. ์ธ๋ผ์ธ ์Šคํƒ€์ผ์ด 38๊ฐœ ์žˆ์—ˆ๋Š”๋ฐ, ๊ฑท์–ด๋‚ด๋ฉด์„œ ๋ณด๋‹ˆ ๊ฒŒ์œผ๋ฆ„์ด ์•„๋‹ˆ๋ผ ๋™์  ๊ฐ’์ด๋ผ๋Š” ๊ณตํ†ต์ ์ด ์žˆ์—ˆ๋‹ค. ์ ์ˆ˜์— ๋”ฐ๋ผ ์ƒ‰์ด ๋ฐ”๋€Œ๋Š” ๊ฐ’๋“ค์„ CSS์—์„œ ํ‘œํ˜„ํ•  ๋ฐฉ๋ฒ•์ด ์—†์–ด JS๋กœ ๋ฐ€๋ ค๋‚˜ ์žˆ์—ˆ๋‹ค. ๋‹คํฌ ๋ชจ๋“œ ํ† ํฐ ๋‘ ๊ฐœ๊ฐ€ ๋น ์ง„ ์ž๋ฆฌ๋ฅผ ์˜ˆ์™ธ ์„ ํƒ์ž ์Šค๋ฌด ๊ฐœ๊ฐ€ ๋ฉ”์šฐ๊ณ  ์žˆ๋˜ ๊ตฌ์กฐ๋„ ๊ฐ™์ด ๋‹ค๋ฃฌ๋‹ค.


๊ด€๋ จ ๊ธ€


@leekh8
๋ณด์•ˆ, ์›น ๊ฐœ๋ฐœ, Python์„ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ