![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpwAYC%2FbtsL4MViF8K%2FFPbDKZ51pYXnw2BERkqj5k%2Fimg.png)
๋ด๊ฐ ๊ฐ๋ฐํ๋ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์๋ฒ์ ํต์ ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ค๋ ์ง์ ๋ํด ์ ์ฒด์ ์ธ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ์ง ๋ชปํ๊ณ ์ง๊ธ๊ป ๊ฐ๋ฐํด์จ ๊ฒ ๊ฐ์์. "๋ธ๋ผ์ฐ์ ๋ HTTP ํ๋กํ ์ฝ ๊ธฐ๋ฐ์ ํต์ ์ ํ๋ค", "TCP ํต์ ์ 3way handshake๋ก ์ ๋ขฐ์ฑ์ ํ๋ณดํ๋ค.", "๋ธ๋ผ์ฐ์ ๋ TCP / IP ๊ธฐ๋ฐ์ ํต์ ์ ํ๋ค." ์ด๋ฐ ๋ง๋ค ์ค ํ๋๋ ์ ๋๋ก ์ดํดํ๊ณ ์๋ ๊ฒ ์๋๋ผ๊ตฌ์. ๊ทธ๋์ ๋คํธ์ํฌ์ ๋ํด ์ ๋ชจ๋ฅด๋ ์น ๊ฐ๋ฐ์(์ )๋ฅผ ๋์์ผ๋ก ํด๋ผ์ด์ธํธ - ์๋ฒ ๊ฐ์ ํต์ ๊ณผ์ ์ ์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํ ๊ธ์ ์จ๋ณด์์ด์ โจ ๋ชฉ์ฐจ์ธํฐ๋ท ์์ ํด๋ผ์ด์ธํธ - ์๋ฒ ํต์ ๊ณผ์ DNS : ์ฃผ์๋ฅผ IP ์ฃผ์๋ก ๋ณํํ๊ธฐHTTP ์์ฒญ : ์์ฒญ ๋ฉ์์ง ์ ์ก ๊ณผ์ HTTPSURL ๊ตฌ์ฑ์ถํ "๋ธ๋ผ์ฐ์ ์ค๊ณ"์ "Chrome ๊ฐ๋ฐ์๋๊ตฌ ๊ธฐ๋ฅ" ๋ฑ์ ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBnvTW%2FbtsJhTb2U5i%2FxW2hNeJgeqlBP3Cfk4IGbK%2Fimg.png)
์๋ฌ ๋ฐ์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"], }}
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXfwMa%2FbtsIbTkkIPI%2Fpbu9TcOIM9FjKAbp65VMh0%2Fimg.png)
๋ฌธ์ 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..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbzlmhc%2FbtsGuY8XD1X%2FCWmwT4HFgStKDSooa4zOx0%2Fimg.png)
์์ดํฐ ์ฒ์ง์ธ ํค๋ณด๋์์ "์ ์" ๋ผ๋ ๊ธ์๋ฅผ ์ ๋ ฅํ ๋, "์ต" -> "์ แแ" -> "์ แแข" ์ด๋ ๊ฒ ์ ๋ ฅ์ด ๋๋๋ฐ ํ๊ธ๋ง ๋์ํ๊ธฐ ์ํด ๋ฃ์ด๋์๋ 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