๋๋ฃ๋ถ์ด ๊ณต์ ์ฃผ์ XL8 ๋ฐฐํ๋๋์ ์ธ๋ฏธ๋ ๊ณต์ ์ฉ PPT ๋ฅผ ๋ณด๊ณ , ์ํ ๊ด๋ฆฌ ๊ด๋ จํด์ ๋ด๊ฐ ์ด๋ ์ ๋ ์๊ณ ์๋์ง ๋ชจ๋ฅด๋ ๊ฑด ์๋์ง ๋ณด๊ณ ์ถ์๋ง์์ ChatGPT ๋ฅผ ์ด์ฉํด์ ๊ณต๋ถ๋ฅผ ํด๋ดค๋ค. ์ฐ์ ์๋๋ 4๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ถ์ฌ๋ฃ๊ณ ์์ ์ฝ๋๋ฅผ ๋ฌ๋ผ๊ณ ํด์ ์ ๋ฆฌํ ๋ด์ฉ. ์ ๋ฆฌํ ๋ด์ฉuseState ์๋ จ์useState ์ฌ์ฉํด ์ํ ์ ๋ฐ์ดํธprops ์ ๋ฌ ์์ฃผ๋ก ๊ตฌ์ฑ๊ฐ๋จํ ์ด๋ฒคํธ ์ฒ๋ฆฌfunction Counter() { const [count, setCount] = useState(0); return ( setCount(count + 1)}> Count: {count} );} ์์ฌ๊ฒฐ์ ํฌ์ธํธ"์ด๊ฑด ์ํ๋ก ๊ด๋ฆฌํด์ผ ํด?""๊ทธ๋ฅ ๋ณ์์ฌ๋ ๋๋ ๊ฑฐ ์๋๊ฐ?"์์ฃผ ๊ฒช๋ ๋ฌธ์ ๋ถํ์ํ ์ํ..
ALB, Ingress, Node.js, Kubernetes ๊ตฌ์กฐ ์ฝ๊ฒ ์ดํดํ๊ธฐ์ต๊ทผ ์ ์ฌํ์ ๋๋ฃ๋ถ์ ์ง๋ฌธ์ ์์ฌ์๋ "ALB", "Ingress", "ECR", "Kubernetes" ๊ฐ์ ๋จ์ด๋ค์ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ๊ณ ์์์ ๊นจ๋ซ๊ณ ์ ๋ฆฌํด๋ด ๋๋ค. ์ฐ๋ฆฌ ์น ์๋น์ค๊ฐ ์ฌ์ฉ์์๊ฒ ๋๋ฌํ๋ ํ๋ฆ์ ์ดํดํ๋ฉด ์ด ๋จ์ด๋ค์ ์๋ฏธ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ฐ๊ฒฐ๋ฉ๋๋ค.์ด ๊ธ์ ํ๋ก ํธ์๋ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ๋ฐฐํฌ๋๊ณ ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์ ์ ๋ฌ๋๋์ง ์ ์ฒด ํ๋ฆ์ ์ฝ๊ฒ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.์ ์ฒด ํ๋ฆ ์์ฝํ๋ก ํธ์๋ ์ฝ๋๋ Docker๋ก ๋น๋๋์ด AWS์ Kubernetes์ ๋ฐฐํฌ๋๊ณ , ์ฌ์ฉ์๋ ALB → Ingress → Node.js ์๋ฒ๋ฅผ ๊ฑฐ์ณ ์๋น์ค๋ฅผ ์ ๋ฌ๋ฐ์ต๋๋ค. ์ฌ์ฉ์ → ์๋ฒ๊น์ง ์์ฒญ ํ๋ฆ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ์ ์ ์ํ๋ฉด, ์์ฒญ์ ๋ค์๊ณผ..
์ต๊ทผ ๋๋ฃ๋ถ์ด "SSR ํ์ด์ง์์ ๋ฏธ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๊ฒฝ์ฐ useQuery ์ isLoading ์ด true ์ธ ๊ฒฝ์ฐ๊ฐ ์์ด์?" ๋ผ๋ ์ง๋ฌธ์ ๋์ก๋๋ฐ, ์ด ์ง๋ฌธ์ ๋ํ ๋๋ต์ ์๊ฐํ๋ค๊ฐ ์ฌ๋ฌ ์๋ฌธ์ด ์๊ฒจ ๊ธ๋ก ์ ๋ฆฌํด๋ณธ๋ค. ์ฉ์ด ์ ๋ฆฌ- ์๋ฒ์ฌ์ด๋ : ์น์๋ฒ์ ์๋ฒ ์ชฝ ์ฝ๋ ์คํ- ํด๋ผ์ด์ธํธ์ฌ์ด๋ : ์น์๋ฒ์ ํด๋ผ์ด์ธํธ ์ชฝ ์ฝ๋ ์คํ- SSR : ServerSideRendering- CSR : ClientSideRendering- ์๋ฒ : api ๋ฅผ ์ ๊ณตํ๋ ์ค์ ์๋น์ค ์๋ฒ ์์ ์ฝ๋: SSR + useQuery๋๋ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๊ณ ์์๋ค.// Next.js ์ ํ์ด์ง ์ปดํฌ๋ํธexport const getServerSideProps = async () => { const data ..
๋ด๊ฐ ๊ฐ๋ฐํ๋ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์๋ฒ์ ํต์ ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ค๋ ์ง์ ๋ํด ์ ์ฒด์ ์ธ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ์ง ๋ชปํ๊ณ ์ง๊ธ๊ป ๊ฐ๋ฐํด์จ ๊ฒ ๊ฐ์์. "๋ธ๋ผ์ฐ์ ๋ HTTP ํ๋กํ ์ฝ ๊ธฐ๋ฐ์ ํต์ ์ ํ๋ค", "TCP ํต์ ์ 3way handshake๋ก ์ ๋ขฐ์ฑ์ ํ๋ณดํ๋ค.", "๋ธ๋ผ์ฐ์ ๋ TCP / IP ๊ธฐ๋ฐ์ ํต์ ์ ํ๋ค." ์ด๋ฐ ๋ง๋ค ์ค ํ๋๋ ์ ๋๋ก ์ดํดํ๊ณ ์๋ ๊ฒ ์๋๋ผ๊ตฌ์. ๊ทธ๋์ ๋คํธ์ํฌ์ ๋ํด ์ ๋ชจ๋ฅด๋ ์น ๊ฐ๋ฐ์(์ )๋ฅผ ๋์์ผ๋ก ํด๋ผ์ด์ธํธ - ์๋ฒ ๊ฐ์ ํต์ ๊ณผ์ ์ ์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํ ๊ธ์ ์จ๋ณด์์ด์ โจ ๋ชฉ์ฐจ์ธํฐ๋ท ์์ ํด๋ผ์ด์ธํธ - ์๋ฒ ํต์ ๊ณผ์ DNS : ์ฃผ์๋ฅผ IP ์ฃผ์๋ก ๋ณํํ๊ธฐHTTP ์์ฒญ : ์์ฒญ ๋ฉ์์ง ์ ์ก ๊ณผ์ HTTPSURL ๊ตฌ์ฑ์ถํ "๋ธ๋ผ์ฐ์ ์ค๊ณ"์ "Chrome ๊ฐ๋ฐ์๋๊ตฌ ๊ธฐ๋ฅ" ๋ฑ์ ..
์๋ฌ ๋ฐ์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..
Comment