์ปค๋ฐ์ ๋ฐ๊ณ ์ฌ์ดํธ๋ฅผ ์ด์๋ค. 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 / rclockfile์ ์ ๋ฐ๋ฉด CI๊ฐ ๋ค์ ๊ณ์ฐํ๋ค
๊ต์ฒด ์ปค๋ฐ์ด ๊ฑด๋๋ฆฐ ํ์ผ์ ๋ ๊ฐ์๋ค.
client/package.json
client/src/components/Editor.jsxpackage-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๋ค. ๋๋ฉ์ธ์ด ์ ๋ฐฐํฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ ๋น๋๊ฐ ์ฑ๊ณตํ ๋ค์์ด๋ค. ์คํจํ๋ฉด ๋๋ฉ์ธ์ ์์ง์ด์ง ์๊ณ ๋ง์ง๋ง์ผ๋ก ์ฑ๊ณตํ ๋ฐฐํฌ๋ฅผ ๊ณ์ ์๋นํ๋ค.
์ฌ์ฉ์ ์ ์ฅ์์๋ ํฉ๋ฆฌ์ ์ธ ๋์์ด๋ค. ๋น๋ ํ๋ ๊นจ์ก๋ค๊ณ ์๋น์ค๊ฐ ๋ด๋ ค๊ฐ๋ฉด ๊ณค๋ํ๋ค. ๋ฐฐํฌ ์คํจ์ ์๋น์ค ์ค๋จ์ ๋ถ๋ฆฌํ ๊ฒ์ด๊ณ , ๋๋ถ๋ถ์ ํธ์คํ ํ๋ซํผ์ด ๊ฐ์ ๋ฐฉ์์ ์ด๋ค.
๋ถ์์ฉ์ ์คํจ๊ฐ ์กฐ์ฉํ๋ค๋ ๊ฒ์ด๋ค. ์ฌ์ดํธ๋ ๊ณ์ ์๋ตํ๊ณ , ๋ธ๋ผ์ฐ์ ์์๋ ์๋ฌด ์ฐจ์ด๊ฐ ์ ๋ณด์ธ๋ค. ์คํจ๋ฅผ ์๋ ค์ฃผ๋ ๊ณณ์ ๋ฐฐํฌ ์ด๋ ฅ๊ณผ ์๋ฆผ ์ฑ๋๋ฟ์ธ๋ฐ, ๊ฐ์ธ ํ๋ก์ ํธ์์๋ ๊ทธ ์๋ฆผ์ ์ ๋ณด๊ณ ์ง๋๊ฐ๊ธฐ ์ฝ๋ค.
๋ณด์ด๋ ์ ํธ์ ์ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฆฌํ๋ค
์ด๋ฒ ๊ฑด์์ ์ป์ ๊ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์๋ณด๋ค ์ ํธ ํด์์ ๊ธฐ์ค์ด์๋ค. ์ด๋ก๋ถ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ๋ค์ด ์ค์ ๋ก ๋ณด์ฆํ๋ ๋ฒ์๋ ์๊ฐ๋ณด๋ค ์ข๋ค.
| ๋ณด์ด๋ ์ ํธ | ์ค์ ๋ก ๋ณด์ฆํ๋ ๊ฒ | ๋ณด์ฆํ์ง ์๋ ๊ฒ | ํ์ธ ๋ฐฉ๋ฒ |
|---|---|---|---|
| ์ฌ์ดํธ 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๋ก ๋ฐ๋ ค๋ ์์๋ค. ๋คํฌ ๋ชจ๋ ํ ํฐ ๋ ๊ฐ๊ฐ ๋น ์ง ์๋ฆฌ๋ฅผ ์์ธ ์ ํ์ ์ค๋ฌด ๊ฐ๊ฐ ๋ฉ์ฐ๊ณ ์๋ ๊ตฌ์กฐ๋ ๊ฐ์ด ๋ค๋ฃฌ๋ค.
