์ „์ฒด ๊ธ€

ยท React
ํ˜„์ƒnpm run dev๋กœ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์‹คํ–‰ํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ € ์˜คํ”ˆ์‹œ ์•„๋ฌด๋Ÿฐ ํ™”๋ฉด์ด ๋‚˜์˜ค์ง€์•Š๊ณ  ๋กœ๊ทธ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ์ฐํžˆ๋Š” ํ˜„์ƒ Uncaught SyntaxError: The requested module '/node_modules/.vite/deps/msw.js?v=3f957acc' does not provide an export named 'rest'  ์›์ธvite์˜ ์บ์‹œํŒŒ์ผ์ด ์ตœ์‹ ํ™”๊ฐ€ ๋˜์ง€ ์•Š์•„ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ œ ํ”„๋กœ์ ํŠธ package.json์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” dependency ์˜์กด์„ฑ์ด ์บ์‹œ๋˜์–ด์žˆ๋Š” ์˜์กด์„ฑ์ด๋ž‘ ๋‹ค๋ฅผ ๋•Œ ๋ฐœ์ƒ ํ•ด๊ฒฐnode_modules ๋‚ด๋ถ€์— ์žˆ๋Š” vite ์บ์‹œํŒŒ์ผ์ธ `.vite ํด๋”` ์‚ญ์ œ  ์ดํ›„ ๋‹ค์‹œ npm run dev ์žฌ์‹คํ–‰ ์ด๋ž˜๋„ ๋˜์ง€์•Š๋Š”๋‹ค๋ฉด..? `node_modules` ๋‚ด..
ยท React
๋ฌธ์ œ 2๊ฐ€์ง€ ์ธํ’‹์ด ์žˆ๋‹ค. "๋น„๋ฐ€๋ฒˆํ˜ธ"๋ฅผ ๋ผ๋ฒจ๋กœ ๊ฐ€์ง€๋Š” ์ธํ’‹ 1๊ฐœ์™€ "๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ"์„ ๋ผ๋ฒจ๋กœ ๊ฐ€์ง€๋Š” ์ธํ’‹ 1๊ฐœ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๋Š”๋ฐ ์ด์ƒํ•˜๊ฒŒ "๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ" ์ธํ’‹์— ์ž…๋ ฅ๋˜์–ด์•ผํ•˜๋Š” ๊ฐ’์ด ๊ณ„์† ์œ„์˜ "๋น„๋ฐ€๋ฒˆํ˜ธ" ์ธํ’‹์— ์ž…๋ ฅ๋˜๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ๋‹ค.๋””๋ฒ„๊น…ํ•˜๊ธฐ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋˜๊ฒƒ์€, ํ…Œ์ŠคํŠธ์—์„œ ์—๋Ÿฌ๋‚˜๋Š” ๋ถ€๋ถ„์€ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ ์ธํ’‹ DOM ์š”์†Œ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด์„œ๋Š” ์•„๋‹ˆ์—ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ ์ธํ’‹์€ ์ฐพ์•„์ง€๋Š”๋ฐ, ๊ทธ๊ฒŒ ์ œ๋Œ€๋กœ๋œ ์•„๋ž˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ ์ธํ’‹์ด ์•„๋‹Œ ์œ„์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธํ’‹์œผ๋กœ ์ฐพ์•„์ง€๋Š” ๋ฌธ์ œ์˜€๋‹ค. ๋„๋Œ€์ฒด ์™œ์ด๋Ÿด๊นŒ.. ํ•˜๋‹ค๊ฐ€ Testing Playground์—์„œ ์‹œ๋„ํ•ด๋ณด๋‹ค๊ฐ€ ๋“œ๋””์–ด ์›์ธ์„ ์ฐพ์•˜๋‹ค. ์›์ธ์ปดํฌ๋„ŒํŠธ๋น„๋ฐ€๋ฒˆํ˜ธ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ ํ…Œ์ŠคํŠธ์ฝ”๋“œscreen.getByLabelText('๋น„๋ฐ€๋ฒˆํ˜ธ') input์˜ id๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ, id๊ฐ€ ..
๋ฉฐ์น ์ „ ๋™๋ฃŒ์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค๊ฐ€ ๋ฐ”๋ณด๊ฐ™์€ ์งˆ๋ฌธ์„ ํ•˜๊ฒŒ๋˜์–ด ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๋Š” JSON์˜ ๊ฐœ๋… ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐ”๋””๋ฅผ `JSON.stringify()`๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด๋Š”๋ฐ ๊ฐ‘์ž๊ธฐ ํ—ท๊ฐˆ๋ ธ๋‹ค. stringify๋Š” ๋ง๊ทธ๋Œ€๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ง๋ ฌํ™”์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์•„๋‹ˆ๋˜๊ฐ€? ์™œ ์„œ๋ฒ„์— ์š”์ฒญ๋ณด๋‚ผ๋•Œ stringify๋ฅผ ์‹œํ‚ค๋Š”๊ฑฐ์ง€..?? ๋‚˜๋Š” .. JSON๊ณผ JavaScript์˜ object๋ฅผ ํ—ท๊ฐˆ๋ฆฌ๊ณ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค.. ๐Ÿ˜ฑ ๋จผ์ € JSON์ด ๋ญ”์ง€๋ฅผ ์ •ํ™•ํžˆ ์•Œ์•„์•ผํ•œ๋‹ค. JSONJSON(JavaScript Object Notation)์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํฌ๋งท์„ ๋œปํ•œ๋‹ค. JavaScript์˜ ๊ฐ์ฒด ํ‘œ๊ธฐ๋ฒ•์„ ๋ณธ๋”ฐ์„œ JSON syntax๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๋‹ค.JSON ํฌ๋งท์€ ํ…์ŠคํŠธ์ผ๋ฟ JavaScript์™€..
ยท React
๋ฌธ์ œPOST/PATCH Mutation ์š”์ฒญ์‹œ ์บ์‹ฑ์„ ๋ฌดํšจํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ์ ์šฉํ•ด๋‘์—ˆ๋‹ค.์ด๋ฏธ์ง€ ๋“ฑ๋ก POST > ์ด๋ฏธ์ง€ ๋ชฉ๋ก GET > ์ธ๋„ค์ผ ์ด๋ฏธ์ง€ PATCH > ์ „์ฒด ์ด๋ฏธ์ง€๋ชฉ๋ก GET ์ˆœ์„œ๋กœ ํ˜ธ์ถœ๋˜์–ด ๊ฐฑ์‹ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ์˜ˆ์ƒํ–ˆ์œผ๋‚˜, PATCH Mutation ์š”์ฒญ ์ดํ›„์— GET ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์•„์„œ, ์ธ๋„ค์ผ์ด๋ฏธ์ง€๊ฐ€ ํ™”๋ฉด์— ๋ฐ”๋กœ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. Expected Behavior POST > GET > PATCH > GET  Current BehaviorPOST > GET > PATCH (๋ธŒ๋ผ์šฐ์ € ๋„คํŠธ์›Œํฌ) POST > PATCH > GET (์ฝ˜์†”) ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ//ImageContainer.tsx์„œ๋ฒ„์— ์š”์ฒญ ๋ณด๋‚ด๋Š” ์ฝ”๋“œ ์กด์žฌ ์ธ๋„ค์ผ ์„ค์ •ํ•˜๋Š” ํ•จ์ˆ˜ const ..
ยท React
์ด์Šˆauthoriztion token์ •๋ณด๋กœ api์˜ ์š”์ฒญ์„ ๋ฐ›์•„์„œ ํ™”๋ฉด์— ์œ ์ €์ •๋ณด๋ฅผ ๋„์šฐ๋Š” ๋งˆ์ด ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค.ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๋Š”๋ฐ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์ž๊พธ ์œ ์ €์ •๋ณด๊ฐ€ ๋นˆ๊ฐ’์œผ๋กœ ๋‚˜์˜ค๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ์œ ์ €์ •๋ณด๋ฅผ get ํ•ด์˜ค๋ ค๋ฉด ์ €์žฅ๋œ ํ† ํฐ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์„œ๋ฒ„์— ์š”์ฒญํ•ด์„œ response๋กœ ๋ฐ›์•„์™€์•ผํ•œ๋‹ค.์ด๋•Œ, ์ธ์ฆ ํ† ํฐ์€ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์—์„œ ํ† ํฐ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋Š”๋ฐ, ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์—์„œ ํ† ํฐ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ๋•Œ localStorage Web API๋ฅผ ์‚ฌ์šฉํ•ด์„œ localStorage.getItem("token")๋กœ ๋ฐ”๋กœ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , store๋ผ๋Š” 3rd party ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด ์Šคํ† ๋ฆฌ์ง€์— ์ ‘๊ทผํ•œ๋‹ค. //package.json "dependencies": { "store": "2.0.12" }, ๋”ฐ..
ยท React
์˜์กด์„ฑ ํŒจํ‚ค์ง€ "devDependencies": { "jest": "29.3.1", "react": "18.2.0", ... } ๋ฌธ์ œtest ํ™˜๊ฒฝ์—์„œ png ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ชป์ฝ์–ด์˜ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ error: `process()` or/and `processAsync()` method of code transformer found at fileTranformer.cjs "/fileTransformer.cjs" should return an object or a Promise resolving to an object.   ์›์ธjest๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ JavaScript๋กœ ์‹คํ–‰ํ•œ๋‹ค. Node๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” syntax์ธ JSX, TypeScript ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๊ณง๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด pla..
ยท React
๋“ค์–ด๊ฐ€๊ธฐํ™˜๊ฒฝnode 20.16 ํŒจํ‚ค์ง€ ์˜์กด์„ฑreact testing library 13.4.0redux toolkit 1.9.5 msw 2.3 vite 5.2.11typescript 4.9.4jest 29.3.1 msw ํ•ธ๋“ค๋Ÿฌ๋กœ ์„œ๋ฒ„ ์‘๋‹ต ๋ชจํ‚น, RTK Query๋กœ API ํ˜ธ์ถœํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ๋ชจ์Œzip... ํ…Œ์ŠคํŠธ๋กœ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ ์ž ํ–ˆ์œผ๋‚˜ jest testing framework + msw 2 ํ™˜๊ฒฝ์—์„œ ์…‹ํŒ…ํ•˜๋‹ค๊ฐ€  ์ •์‹  ๊ฑด๊ฐ•์— ์œ„ํ˜‘์„ ๋ฐ›์•˜๋‹คmsw ์—์„œ๋„ ์›ƒ๊ธด๊ฒŒ ์ด๋ ‡๊ฒŒ ์…‹ํŒ…ํ•˜๋Š”๊ฒŒ ๊ท€์ฐฎ์œผ๋ฉด ~ ๋” ๋ชจ๋˜ํ•œ ํ…Œ์ŠคํŒ… ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉํ•˜๋ ด~ ์ด๋ผ๊ณ  ๊ถŒ์žฅ..If you find this setup cumbersome, consider migrating to a modern testing fra..
๋”๋ณด๊ธฐ5์›”์— ๊ธฐ์กด ์ฒ˜์Œ ์ฐฝ๋ฆฝ ๋ฉค๋ฒ„์˜€๋˜ CTO๋‹˜ ํ‡ด์‚ฌ๋กœ ๊ทธ์™€ ํ•จ๊ป˜ ๋“ค์–ด์˜จ ๋งŽ์€ ์—”์ง€๋‹ˆ์–ด๋“ค์ด ํšŒ์‚ฌ๋ฅผ ๋– ๋‚ฌ๊ณ  ํšŒ์‚ฌ๋Š”.. ์–ด๋”˜๊ฐ€ ๋ถ• ๋–  ์žˆ๋Š” ์ด์ƒํ•˜๊ณ ๋„ ๊ณ„์† ์ถ• ์ฒ˜์ง„ ๋А๋‚Œ์ด ๋“œ๋Š” ๋ถ„์œ„๊ธฐ๊ฐ€ ๊ณ„์†๋˜์—ˆ๋‹ค. ํ™€๋กœ ๋‚จ๊ฒจ์ง„ ์ฃผ๋‹ˆ์–ด๋“ค์€ ๊ฐˆ ๊ธธ์„ ์žƒ์€ ๋“ฏํ•œ ์ƒํ™ฉ์— ๋†“์—ฌ์กŒ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ๊ฒฐ์ •์„ ํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ ์•„๋ฌด๋„ ๊ฒฐ์ •ํ•ด์ฃผ๋Š” ์‚ฌ๋žŒ์ด ์—†๊ณ ... ์ด๊ฑธ ์ง€๊ธˆ ๊ฐœ๋ฐœํ•ด๋„ ๋ถ„๋ช… ๋˜ ๋ฐ”๋€” ๊ฒƒ ๊ฐ™์€.. ๋‹ค๋“ค ๋™๊ธฐ๋ถ€์—ฌ๊ฐ€ ๋งŽ์ด ์‚ฌ๋ผ์ง„ ์ฑ„ ์ •์ฒด๊ธฐ๋ฅผ ๋ณด๋‚ด๊ณ  ์žˆ๋‹ค. ์ƒˆ๋กœ์šด ๋งค๋‹ˆ์ง•๋ ˆ๋ฒจ์˜ ๋ถ€์ž„์„ ์•ž๋‘๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์ด์—ˆ๋Š”๋ฐ.. ๊ฐ‘์ž๊ธฐ ํšŒ์‚ฌ๋Š” ์›”๊ธ‰์ด ์•ˆ๋‚˜์˜ค๊ณ ..?? ๋‚˜์ค‘์ด ๋œ ์ง€๊ธˆ์€ ์ด์ œ ์•Œ๊ฒŒ๋˜์—ˆ์ง€... ํ•˜๋ฐ˜๊ธฐ์—๋Š” ์ƒˆ๋กœ์šด era๊ฐ€ ์‹œ์ž‘๋จ๊ณผํ•จ๊ป˜.. ๊ฑฐ์˜ ๋ชจ๋‘๊ฐ€ ํ‡ด์‚ฌ๋ฅผ ํ•˜๊ฒŒ๋˜๋Š”.. ์ƒํ™ฉ์ด.. ๋„๋ž˜ํ–ˆ๋‹ค. - ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ ์ง„ํ–‰์ƒˆ๋กœ์šด era๋กœ ๋“ค์–ด์„œ๋ฉด์„œ ๋งค์ผ ์•„์นจ ๋ฐ์ผ๋ฆฌ..