์๋ฌ ๋ฐ์react-router-dom๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋์ playwright ํ ์คํธ ์ค ์๋์ ๊ฐ์ด useNavigate ๊ด๋ จ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋จ์ ํด๊ฒฐuseNavigate๋ react-router-dom ์ ํ ์ผ๋ก ์์นญํด๋ณด๋ MemoryRouter ๋ก ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค๊ณ ํฉ๋๋ค. const component = await mount( , { hooksConfig } ); ์ด๋ ๊ฒ mount ์์ ๋จ์ํ ๊ฐ์ธ๋ ์์ผ๋ก ํด๊ฒฐํ ์๋ ์๊ฒ ์ง๋ง, ์ด ๋ถ๋ถ์ ๊ณตํตํ ํ ์ ์์ต๋๋ค. ๊ณตํตํ ์๋ 1import { MemoryRouter } from 'react-router-dom';import { AuthContext } from '@contexts';export const TE..
vite ํ๋ก์ ํธ์์ playwright ๋ฅผ ์ค์ ํ์ ๋, typecheck ๋ฅผ ๋๋ฆฌ๋ฉด spec.tsx ์์ ํ์ ๊ด๋ จ ์๋ฌ๊ฐ ๋๋ค. ์ด ๋๋ `@playwright/test` ํจํค์ง๋ฅผ ์ค์นํด์ tsconfig์ compilerOptions.types ํ๋์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.{ "compilerOptions": { "types": ["node", "vite/client", "jest", "@testing-library/jest-dom", "@playwright/test"], }}
๋ฌธ์ branchA ์ revert commit ์ด ํฌํจ๋์ด ์๊ณ main ์๋ ์์ ๋, branchA ์์ `git merge main` ์ ์ํํ๋ฉด main ๋ธ๋์น์ ์ํ์ ๋์ผํ๊ฒ revert commit ์ด ์๋ ๊ฒ์ฒ๋ผ ๋ฌด์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. merge recursive ์ ๋ตgit ์์๋ merge ๋ช ๋ น์ด ์ฌ์ฉ ์ ๊ธฐ๋ณธ ์ ๋ต์ผ๋ก recursive ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด ์ ๋ต์ ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค.1. ๋ ์ปค๋ฐ์ ๊ณตํต ์กฐ์ ์ปค๋ฐ์ ์ฐพ์ต๋๋ค.2. ๊ฐ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ์กฐํฉํด ์๋ก์ด ๋ณํฉ ์ปค๋ฐ์ ๋ง๋ญ๋๋ค.3. 2๋ฒ์์ ์ถฉ๋์ด ๋๋ฉด ์ฌ์ฉ์์๊ฒ ํด๊ฒฐ์ ์์ํฉ๋๋ค. (recursive ์ ๋ต) ์ด์ ์ํฉ ์์ธํ ์ด์๊ฐ ์๊ฒผ๋ ์ํฉ์ ๊ทธ๋๋ก ๊ฐ์ ธ์๋ดค์ต๋๋ค.main branch ์์ 24.12.0 ๋ธ๋์น๋ฅผ..
์๋ฌError [ERR_REQUIRE_ESM]: require() of ES Module /app/node_modules/packageA/node_modules/packageB/dist/index.cjs.js from /app/node_modules/packageA/dist/cjs/hooks.js not supported.index.cjs.js is treated as an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which declares all .js files in that package scope as ES modules.Instead either rename index..
์ผ๋ง ์ ์นํ ๋๋ฃ ๋ถ์ด ๋ธ๋ก๊ทธ์์ ์ ์ ํ๊ณ ๊ธ์ ๋ดค๋ค๊ณ ๋ง์ํด์ฃผ์ ๊ฒ ๊ณ๊ธฐ๊ฐ ๋์ด ์ค๋๋ง์ ํ๊ณ ๋ฅผ ์์ฑํด ๋ด ๋๋ค. ๊ทธ๋ฌ๋ค ๋ณด๋ ์ ๋ชฉ์ด ํ์ํด์ ์์ฐ์ค๋ฝ๊ฒ “3๋ ์ฐจ ๊ฐ๋ฐ์์ ํ๊ณ ๋ก” ์ด๋ผ๊ณ ์จ๋ฒ๋ ธ๋๋ฐ, ์ธ์ 3๋ ์ฐจ๊ฐ ๋์ด ๋ฒ๋ฆฐ ๊ฑด๊ฐ ์ถ์ด์. ์ด์จ๋ ์ค์ค๋ก ๋ถ๋ด ์ฃผ์ง ์๊ณ ๊ฐ๋ณ๊ฒ ์ ์ ๋ํด์, ๊ทธ๋ฆฌ๊ณ ์์ผ๋ก ์ด๋ป๊ฒ ํ๊ณ ์ถ์์ง์ ๋ํด์ ์จ๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ฐ์ฑ์ ์๊ฐ๋์ ์๋ง์ ๋ํ์ฌ์ฌ์กฑ์ด์ง๋ง ์ฌํด ์ฐ์ด์ ํ ์ ๋น๊ฒฐ์ ๋ดค์๋๋ฐ ์ฒซ ๋ฌธ์ฅ์ด “๋ถ์์ ๋ง๊ฒ ์ด๋ผ” ์์ด์. ์ง๊ธ๊ป ์ ์ค๋ ฅ๋ณด๋ค ์ด์ด ์ข์์ ๋ง์ ์ผ๋ค์ด ์ ํ๋ ค์๋๋ฐ, ๊ทธ๋ก ์ธํด ์ ๊ฐ ๋๋จํ ๊ฐ๋ฐ์์ธ์ ์ฐฉ๊ฐํ๊ณ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ผ์ ํ ๋ ์ ์ ๋งํฌ๋ ์ง๋ฌธ ์ต๊ด, ๊ทธ ์์ ์จ์ด์๋ ์๊ฐ๋ค์ด ์ ์ ์๋ง์ผ๋ก ๋ฌผ๋ค์ด๊ฐ๋ ๊ฑธ ๋๋ผ๋ ์ฐจ์์ด์. ๊ทธ๋งํ๋ผ๊ณ ..
์์ดํฐ ์ฒ์ง์ธ ํค๋ณด๋์์ "์ ์" ๋ผ๋ ๊ธ์๋ฅผ ์ ๋ ฅํ ๋, "์ต" -> "์ แแ" -> "์ แแข" ์ด๋ ๊ฒ ์ ๋ ฅ์ด ๋๋๋ฐ ํ๊ธ๋ง ๋์ํ๊ธฐ ์ํด ๋ฃ์ด๋์๋ regex ๊ฐ ๋์ํ๋ฉด์ ๊ธ์๋ฅผ ์ง์๋ฒ๋ฆฌ๋ ์ด์๊ฐ ๋ฐ์ํ์ต๋๋ค. [๊ธฐ์กด Regex]return target.replace(/[^๊ฐ-ํฃใแแขใฑ-ใ ใ -ใ ฃa-zA-Z\s]/g, '');ํ๊ธ, ์์ด๊ฐ ์๋ ๋ฌธ์๋ ์ ๊ฑฐํ๊ธฐ ์ํ regex ์ ๋๋ค. [์ด์ ์์ธ] ์ข ์ฑ ์์๊ณผ ใแแข ๊ฐ์ ์ฒจ์๊ฐ ํฉ์ณ์ง๋ฉด์ ์๋ก์ด ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ๋ง๋ญ๋๋ค. [๋ณ๊ฒฝ๋ Regex]/*** ์์ดํฐ ์ฒ์ง์ธ์ ๋์ํฉ๋๋ค.* \u1100-\u1112 ์์ ใฑ-ใ * \u318D\u119E\u11A2\u2022\u2025\u00B7\uFE55 - ใแแข•โฅ·๏น*/ret..
์ ๊ฐ ํ ์ ์๋ ์ด์ผ๊ธฐ๊ฐ ๋ฌด์์ผ๊น ์๊ฐํด๋ณด์๋๋ฐ, 2023๋ ๊ฐ์ “์ค๋์๊ฐ๋ ” ์ด๋ผ๋ ํ๋ก๋ํธ๋ฅผ ๋ฐ์นญ ํด ๋ณธ ๊ฒฝํ์ ๊ธฐ๋ฐ์ผ๋ก ์ฑ ๊ฐ๋ฐ์ ํด๋ณด๋ฉด์ ๋๋ ์น ๊ฐ๋ฐ๊ณผ์ ์ฐจ์ด์ ์ ์ฃผ๋ก ๋ค๋ฃจ๊ณ ๋๋ถ๋ถ์ ์๋น์ค๊ฐ ๋ชจ๋ฐ์ผ ํผ์คํธ๊ฐ ๋ ํ์์ ์์ ์ฑ์ ์น๋ทฐ / ๋ค์ดํฐ๋ธ / ํ์ด๋ธ๋ฆฌ๋๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ฐ์์ ์ฅ๋จ์ ์ ์ดํด๋ณด๋ ค๊ณ ํฉ๋๋ค. https://yozm.wishket.com/magazine/detail/1969/ ์ด ๋ธ๋ก๊ทธ์์ ๊ธ์ ๋ณด๊ณ ๋ง์ง๋ง ๋ํ์ ๊ธ์ ํนํด์ ๊ธ์ ์จ์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๊ฒ ๋์์ต๋๋ค. "2023๋ 2์ ๊ธฐ์ค ์ ์ธ๊ณ ์น ์ฌ์ดํธ ํธ๋ํฝ์ 60.06% ๊ฐ ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค๋ฅผ ํตํด ์ ์ ๋์์ต๋๋ค." ์ฑ ๊ฐ๋ฐ์ ์น ๊ฐ๋ฐ๊ณผ ๋ญ๊ฐ ๋ค๋ฅผ๊น? ํฌ๊ฒ “๋ฐฐํฌ”์ “๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ” ๊ทธ๋ฆฌ๊ณ “UI ๊ณ์ธต๊ตฌ์กฐ” ์ธ๊ฐ์ง ์ธก..
Next.js์์ ๋์์ด ๋์ด ์์ง ์์ `/` path๋ก ์ง์ ํ์ ๋ default `/home` page๋ก redirect ํ๋ ์คํ์ ๊ตฌํํด์ผ ํ๋ค. Redirect ์ ์ฌ์ฉํ๋ ์ํ์ฝ๋ Next.js์์์ redirect ๋ฅผ ๊ตฌํํ๊ธฐ ์ redirect ์์ ์๋ฒ์์ ๋ฐํํ๋ ์ํ์ฝ๋๋ฅผ ๋จผ์ ์ดํด๋ณด์. 300๋ฒ ๋์ ์ํ์ฝ๋๋ ๋ชจ๋ Redirection ์ ์๋ฏธํ๋ฉฐ, 300 ~ 308 ๊น์ง ์๋ค. 301 (Moved Permanently) : ํด๋ผ์ด์ธํธ์ ์์ฒญ ๋ฉ์๋๋ฅผ GET ์ผ๋ก ๋ฐ๊พธ๋ฉฐ, redirect ์ฒ๋ฆฌ๊ฐ ์บ์ฑ๋๋ค. 302 (Found - Moved Temporarily) : ํด๋ผ์ด์ธํธ์ ์์ฒญ ๋ฉ์๋๋ฅผ GET ์ผ๋ก ๋ฐ๊พธ๋ฉฐ, redirect ์ฒ๋ฆฌ๊ฐ ์ผ์์ ์ด๊ณ ์บ์ฑ๋์ง ์๋๋ค. 304 (Not..
Comment