ire-devlog
๐Ÿท๏ธ Tags
๐Ÿ’ป Profile
profile_image
Dohee Kim
Frontend developer
developer who creates and thinks.
๐Ÿ”Ž Search
๐Ÿ“‚ All Posts
๐Ÿ’ป Frontend
๋””์ž์ธ ์‹œ์Šคํ…œ ์ปดํฌ๋„ŒํŠธ ์œ ๋‹› ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ

๋””์ž์ธ ์‹œ์Šคํ…œ ์ปดํฌ๋„ŒํŠธ ์œ ๋‹› ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ

Jul 28, 2025

๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์— ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉฐ โ€˜ํšจ์šฉ์„ฑ ์žˆ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œโ€™๋ž€ ๋ฌด์—‡์ธ์ง€ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœ ๋ Œ๋”๋ง ํ™•์ธ์ด ์•„๋‹Œ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ์ค‘์‹ฌ ํ…Œ์ŠคํŠธ๋ฅผ ๋ชฉํ‘œ๋กœ, ์ ‘๊ทผ์„ฑ ๊ธฐ๋ฐ˜ ์ฟผ๋ฆฌ(getByLabelText ๋“ฑ)๋ฅผ ํ™œ์šฉํ•ด ๋ฆฌํŒฉํ† ๋ง์— ๊ฐ•ํ•˜๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋ณด์žฅํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Testing
AI ๐Ÿค–
ํ˜‘์—…์„ ์œ„ํ•œ AI rule ์ •์˜ํ•˜๊ธฐ: cursor rule๋ฅผ npm package๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ˜‘์—…์„ ์œ„ํ•œ AI rule ์ •์˜ํ•˜๊ธฐ: cursor rule๋ฅผ npm package๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

Jul 23, 2025

๋ ˆ๊ฑฐ์‹œ์™€ ์‹ ๊ทœ ์ฝ”๋“œ๊ฐ€ ํ˜ผ์žฌ๋œ ๋‹ค์–‘ํ•œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์šด์˜ํ•˜๋ฉฐ, ํ˜‘์—… ํšจ์œจ์„ฑ๊ณผ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด AI๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒด๊ณ„์ ์œผ๋กœ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์„๊นŒ ๊ณ ๋ฏผํ•˜๋˜ ์šฐ๋ฆฌ ํŒ€. ์ด ๊ธ€์—์„œ๋Š” Cursor์˜ .mdc ๋ฃฐ ํŒŒ์ผ์„ npm ํŒจํ‚ค์ง€๋กœ ๊ด€๋ฆฌํ•˜๊ณ , postinstall ์Šคํฌ๋ฆฝํŠธ๋กœ ์ž๋™ ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ผ๊ด€๋œ ๊ฐœ๋ฐœ ๋ฌธํ™”๋ฅผ ๊ตฌ์ถ•ํ•œ ๊ณผ์ •์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์˜จ๋ณด๋”ฉ ๋ฌธ์„œ๋กœ๋„ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ AI ํ”„๋กฌํ”„ํŠธ ๋ฌธ์„œ๋ฅผ ๋ฒ„์ „ ๊ด€๋ฆฌํ•˜๋ฉฐ ํŒ€ ์ฐจ์›์˜ ์ƒ์‚ฐ์„ฑ๊ณผ ํ’ˆ์งˆ์„ ๋™์‹œ์— ๋Œ์–ด์˜ฌ๋ฆฐ ๊ฒฝํ—˜์„ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค.

AI
AI ๐Ÿค–
Slack, GPT, Jira๋กœ ์ด์Šˆ ํ‹ฐ์ผ“ ๋ฐœ๊ธ‰ ์ž๋™ํ™”ํ•˜๊ธฐ: ์‚ฌ๋‚ด ํ˜‘์—…์„ ์œ„ํ•œ n8n ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ•๊ธฐ

Slack, GPT, Jira๋กœ ์ด์Šˆ ํ‹ฐ์ผ“ ๋ฐœ๊ธ‰ ์ž๋™ํ™”ํ•˜๊ธฐ: ์‚ฌ๋‚ด ํ˜‘์—…์„ ์œ„ํ•œ n8n ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ•๊ธฐ

Jun 27, 2025

๋ฐ˜๋ณต๋˜๋Š” ์Šฌ๋ž™ ๋Œ€ํ™” ์š”์•ฝ๊ณผ Jira ํ‹ฐ์ผ“ ๋ฐœ๊ธ‰ ์—…๋ฌด๋ฅผ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•ด, n8n์„ ๊ธฐ๋ฐ˜์œผ๋กœ Slack, OpenAI, Jira API๋ฅผ ์—ฐ๊ฒฐํ•œ ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ์ž๋™ํ™”๊ฐ€ ์•„๋‹Œ, ์‹ค์ œ ํ˜‘์—… ํ๋ฆ„ ์†์—์„œ ์‹ค์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋ชจ๋‘ ๊ณ ๋ คํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ด‡ ๋ฉ˜์…˜์„ ํŠธ๋ฆฌ๊ฑฐ๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์š”์•ฝํ•˜๊ณ , Jira ํ‹ฐ์ผ“์„ ์ž๋™ ๋ฐœ๊ธ‰ํ•œ ๋’ค ๋‹ค์‹œ ์Šฌ๋ž™์— ๊ณต์œ ํ•˜๋Š” ์ „ ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ์œผ๋ฉฐ, ๊ตฌํ˜„ ์ค‘ ๊ฒช์€ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๊ณผ์ •๋„ ํ•จ๊ป˜ ๋‹ด์•„ ์‹ค๋ฌด์— ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์‚ฌ์ดํŠธ๋ฅผ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค.

AI
Automation
๐Ÿ’ป Frontend
LazyLoading์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์ค„์ด๊ณ  ์„ฑ๋Šฅ ๊ฐœ์„ ํ•˜๊ธฐ

LazyLoading์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์ค„์ด๊ณ  ์„ฑ๋Šฅ ๊ฐœ์„ ํ•˜๊ธฐ

Jun 1, 2025

์ƒ์„ธ ํŽ˜์ด์ง€ ์ง„์ž… ์‹œ ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๋กœ๋“œํ•ด UX๊ฐ€ ์ €ํ•˜๋˜๊ณ  ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‚ญ๋น„๋˜๋Š” ๋ฌธ์ œ์—์„œ ์ถœ๋ฐœํ•œ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” IntersectionObserver๋ฅผ ํ™œ์šฉํ•ด Lazy Loading์„ ๊ตฌํ˜„ํ•˜๊ณ , ์„œ๋ฒ„์—์„œ ๋‚ด๋ ค์˜ค๋Š” HTML์„ ํŒŒ์‹ฑํ•ด img src๋ฅผ data-src๋กœ ์น˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ๋กœ๋“œ๋ฅผ ์ค„์ด๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. Node.jsยทReact ํ™˜๊ฒฝ์—์„œ์˜ ์ ์šฉ๋ฒ•๊ณผ ํ•จ๊ป˜ ๋กœ๋“œ ์‹œ๊ฐ„ ๋‹จ์ถ•, ์ด๋ฏธ์ง€ ์š”์ฒญยท์ „์†ก๋Ÿ‰ ๊ฐ์†Œ ๋“ฑ ์„ฑ๋Šฅ ์ง€ํ‘œ ๊ฐœ์„  ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

React
โš ๏ธErrorNote

NextJS Middleware์—์„œ redirect์‹œ css๊ฐ€ ์ ์šฉ์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ

Feb 13, 2025

Next.js ๋ฏธ๋“ค์›จ์–ด์—์„œ ๊ถŒํ•œ์— ๋”ฐ๋ผ ํŠน์ • ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ํ•  ๋•Œ, CSS๊ฐ€ ๋กœ๋“œ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ •์  ์ž์› ๊ฒฝ๋กœ์ธ /_next ์š”์ฒญ๊นŒ์ง€ ์ธ์ฆ ๊ฒ€์‚ฌ๋ฅผ ์ ์šฉํ•ด๋ฒ„๋ฆฐ ๊ฒƒ์ด ์›์ธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” /_next ๊ฒฝ๋กœ๋ฅผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•ด ์ •์  ์ž์› ๋กœ๋“œ๋ฅผ ์ •์ƒํ™”ํ•œ ํ•ด๊ฒฐ ๊ณผ์ •์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ์ด ๊นจ์ง€๊ฑฐ๋‚˜ ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ๊ฒช๋Š” ๋ถ„๋“ค์—๊ฒŒ ์‹ค์งˆ์ ์ธ ํ•ด๊ฒฐ ํŒ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Next.js
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป Study

URL ์•”ํ˜ธํ™”ํ•˜๊ธฐ (with AES, Encoding)

Feb 12, 2025

API ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์‹œ return_url ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ‰๋ฌธ์œผ๋กœ ๋…ธ์ถœ๋˜์–ด ๋ณด์•ˆ์ƒ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ถœ๋ฐœํ•œ ๊ณ ๋ฏผ. ์ด ๊ธ€์—์„œ๋Š” AES ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด URL ๋‚ด ํŠน์ • ํŒŒ๋ผ๋ฏธํ„ฐ๋งŒ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Node.js ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ธ์ฝ”๋”ฉยท๋””์ฝ”๋”ฉํ•˜๋Š” ์œ ํ‹ธ ๊ตฌํ˜„๊ณผ Base64, URI ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹๊นŒ์ง€ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•˜๋ฉฐ, ๊ถŒํ•œ ๊ฒ€์ฆ๊ณผ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๋Š” ์‹ค์šฉ์ ์ธ ์•”ํ˜ธํ™” ์ ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

Next.js
Study

Next.js Dockerizingํ•˜๊ธฐ

Feb 5, 2025

Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”ํ•ด Docker ์ด๋ฏธ์ง€๋กœ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , standalone ์„ค์ •๊ณผ .dockerignore ์ตœ์ ํ™”๋กœ ์„ฑ๋Šฅ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค. Docker ๋ช…๋ น์–ด์™€ ๋””๋ฒ„๊น… ํŒ๊นŒ์ง€ ํฌํ•จํ•ด ์‹ค์ œ ์šด์˜์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ ๋„์ปค๋ผ์ด์ง• ๊ฒฝํ—˜์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

Next.js
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป Study

React์—์„œ ์ข‹์€ ์ปดํฌ๋„ŒํŠธ ํŒจํ„ด์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ?

Dec 20, 2024

Atomic Design์„ ์ค‘์‹ฌ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ์™€ ์—ญํ• ์„ ์ •๋ฆฌํ•˜๊ณ , ์„ ์–ธํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ์ค€๊ณผ ์ปค์Šคํ…€ ํ›… ๋ถ„๋ฆฌ ์ „๋žต๊นŒ์ง€ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ยท์ปจํ…Œ์ด๋„ˆ ๋ถ„๋ฆฌ ํŒจํ„ด, HOC, Render Props, Compound, Composition ๋“ฑ ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ๋น„๊ตํ•˜๋ฉฐ ์žฅ๋‹จ์ ์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ณ ๋ คํ•œ ์„ค๊ณ„ ์›์น™๊ณผ ํ•จ๊ป˜ ์‹ค์šฉ์ ์ธ ์ฝ”๋“œ ์˜ˆ์‹œ์™€ ์ฐธ๊ณ  ์ž๋ฃŒ๋„ ํ•จ๊ป˜ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Study

ํ…Œ์ŠคํŠธ ์ œ๋Œ€๋กœ ์‹œ๋„ํ•ด๋ณด๊ธฐ

Dec 5, 2024

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ฒซ ๊ฑธ์Œ. ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” Input ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด ์ปค์Šคํ…€ ๋™์ž‘์„ ์ค‘์‹ฌ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•œ ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ๊ฐ€์ด๋“œ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ, ํฌ์ปค์Šค ์‹œ border ์Šคํƒ€์ผ ๋ณ€๊ฒฝ, ๋‹จ์œ„(unit) ํ‘œ์‹œ ์—ฌ๋ถ€ ๋“ฑ ์‹ค์ œ UI์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋กœ์ง์„ ์ค‘์‹ฌ์œผ๋กœ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ž‘์„ฑํ•˜๊ณ , userEvent์™€ DOM ์†์„ฑ ๊ฒ€์‚ฌ๋กœ ๋™์ž‘์„ ๊ฒ€์ฆํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ฐ„๋‹จํžˆ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

Testing
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป Study

testing: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑํ•˜๊ธฐ

Jun 15, 2024

๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ์™€ ํ•จ์ˆ˜์˜ ๋…๋ฆฝ์ ์ธ ๋™์ž‘์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์ปค์Šคํ…€ ํ›… ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ renderHook, ์™ธ๋ถ€ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ vi.mock, userEvent๋ฅผ ํ™œ์šฉํ•œ ์ƒํ˜ธ์ž‘์šฉ ํ…Œ์ŠคํŠธ, ํƒ€์ด๋จธ ํ…Œ์ŠคํŠธ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ณ , ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๋ฒ”์œ„์™€ ํ•œ๊ณ„๋ฅผ ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ์‹ค์ œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ „๋žต๊ณผ ํ•จ๊ป˜, ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฐ E2E ํ…Œ์ŠคํŠธ์™€์˜ ์ฐจ์ด์ ๋„ ์ •๋ฆฌํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์„ค๊ณ„์— ๋Œ€ํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Study
Testing
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป Study

testing: ํ…Œ์ŠคํŠธ๋ž€, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ง›๋ณด๊ธฐ

Jun 14, 2024

ํ…Œ์ŠคํŠธ๋ž€, ์˜ฌ๋ฐ”๋ฅธ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๊ทœ์น™, ๋‹จ์œ„/๋‹จ์œ„ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ž€, React Testing Library์™€ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ ๋“ฑ ํ…Œ์ŠคํŠธ ๋ง›๋ณด๊ธฐ ์Šคํ„ฐ๋”” ์‹œ์ž‘! ๋ฆฌํŽ™ํ† ๋ง์„ ํ•˜๋‹ค ๋ณด๋‹ˆ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์ด ๋Œ€๋‘๋˜์—ˆ๋‹ค. ์ข€ ๋” ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์œ ์˜๋ฏธํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์งœ๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์œผ๋กœ ์‹œ์ž‘ํ–ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋„ ์ž˜ ์•Œ๊ณ  ์‚ฌ์šฉํ•˜์ž.

Study

ํŠน์ • ํ™”๋ฉด์— ๋Œ€ํ•œ CPU ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€: ์›์ธ ๋ฐ ํ•ด๊ฒฐ

May 20, 2024

์‚ฌํŒŒ๋ฆฌ์—์„œ ๊ณตํ†ต ์นด๋“œ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฌดํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด CPU ์‚ฌ์šฉ๋ฅ  98.8%๋ฅผ ์œ ๋ฐœํ•œ ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ํ•ด๊ฒฐํ•œ ์‚ฌ๋ก€๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. -webkit-animation ๊ธฐ๋ฐ˜์˜ ๋ฌดํ•œ ๋ฃจํ”„๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ์ตœ์ ํ™”์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ๋ชปํ–ˆ๋˜ ์›์ธ์„ ์ถ”์ ํ•˜๊ณ , transform์„ ํ†ตํ•œ GPU ๊ฐ€์† ์ ์šฉ๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ œ๊ฑฐ๋ฅผ ๋ณ‘ํ–‰ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. CSS ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ๊ณผ ํผํฌ๋จผ์Šค ์ตœ์ ํ™” ๊ด€์ ์—์„œ ์‹ค์งˆ์ ์ธ ํ•ด๊ฒฐ์ฑ…์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

React
Trouble-Shooting
๐Ÿ’ป Frontend
Next.js middleWare ์ ์šฉํ•˜๊ธฐ

Next.js middleWare ์ ์šฉํ•˜๊ธฐ

Mar 23, 2024

Next.js์—์„œ ๋กœ๊ทธ์ธ๊ณผ ์ธ์ฆ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํŽ˜์ด์ง€ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด middleware๋ฅผ ๋„์ž…ํ•œ ๊ฒฝํ—˜์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์—๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฒ˜๋ฆฌํ•˜๋˜ ๋กœ์ง์„ ์„œ๋ฒ„ ์ธก ๋ฏธ๋“ค์›จ์–ด๋กœ ์˜ฎ๊ฒจ ๋ฐ์ดํ„ฐ ๋ถˆ์•ˆ์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , matcher๋กœ ํ•„์š”ํ•œ ๊ฒฝ๋กœ์—๋งŒ ๋กœ์ง์„ ์ ์šฉํ•ด ํšจ์œจ์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค. NextResponse, ์ฟ ํ‚ค ํ™œ์šฉ, matcher ์„ค์ •๊นŒ์ง€ ์‹ค๋ฌด์— ์œ ์šฉํ•œ middleware ํ™œ์šฉ๋ฒ•์„ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค.

Next.js

Next.js์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ์ ์šฉํ•˜๊ธฐ

Jan 26, 2024

ํ”„๋กœ๋•ํŠธ ๋‚ด ์ด๋ฏธ์ง€๊ฐ€ ๋งŽ์€ ํŽ˜์ด์ง€์—์„œ ์Šคํฌ๋กค ์‹œ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์ง€์—ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๊ณ ์ž ์ด๋ฏธ์ง€ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์—๋Š” LazyLoad๋งŒ ์ ์šฉํ–ˆ์œผ๋‚˜ ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ๊ณ , Next.js์˜ ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. Next.js๋Š” ๋””๋ฐ”์ด์Šค๋ณ„ ์ตœ์  ์‚ฌ์ด์ฆˆ, WebP ๋“ฑ ์ตœ์‹  ํฌ๋งท, ์ž๋™ ๋ ˆ์ด์ง€๋กœ๋“œ, ์™ธ๋ถ€ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์„  ๊ฒฐ๊ณผ, ์ตœ์žฅ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด 2์ดˆ์—์„œ 254ms๋กœ ํฌ๊ฒŒ ๋‹จ์ถ•๋˜๋ฉฐ ์‹ค์ œ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์˜ ๋ฐ˜์‘ ์†๋„๋„ ์ฒด๊ฐ์ ์œผ๋กœ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Next.js
optimization
๐Ÿ’ป Frontend
Next.js + msw + jest๋กœ TDD ์‹œ๋„ํ•˜๊ธฐ

Next.js + msw + jest๋กœ TDD ์‹œ๋„ํ•˜๊ธฐ

Jan 23, 2024

์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒˆ๋กœ ๊ฐœ๋ฐœํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ ์ผ€์ด์Šค์— ๋”ฐ๋ฅธ ์กฐ๊ฑด ๋ถ„๊ธฐ๋ฅผ ํ…Œ์ŠคํŠธ๋กœ ๊ฒ€์ฆํ•˜๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Jest์™€ MSW๋ฅผ ํ™œ์šฉํ•ด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋จผ์ € ์ •๋ฆฌํ•˜๊ณ , server.use()๋ฅผ ํ†ตํ•ด ์ƒํ™ฉ๋ณ„ ๋ชฉ์—… ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์ถ•ํ–ˆ๊ณ , ํ•ธ๋“ค๋Ÿฌยท๋ชฉ๋ฐ์ดํ„ฐยท๊ฒฝ๋กœ ์„ค์ •์„ ์ฒด๊ณ„ํ™”ํ•ด MSW ํ™˜๊ฒฝ๋„ ์žฌ์ •๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ(TDD)์„ ์‹ค์ œ ์—…๋ฌด์— ๋…น์—ฌ๋‚ธ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

Next.js
Testing
โš ๏ธErrorNote

FileForm์„ ์ด์šฉํ•œ ์‚ฌ์ง„ ์—…๋กœ๋“œ ์˜ค๋ฅ˜: DOM์˜ id ์‚ฌ์šฉ์— ์ฃผ์˜ํ•˜์ž

Jan 21, 2024

๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋กœ ํ†ตํ•ฉํ•œ ํŒŒ์ผ ์—…๋กœ๋“œ ํผ์—์„œ ์ด๋ฏธ์ง€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ์—‰๋šฑํ•œ ์œ„์น˜์— ํ‘œ์‹œ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„ ์‚ฌ์ง„๊ณผ ์ปค๋ฒ„ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๊ฐ๊ฐ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Œ์—๋„, DOM์—์„œ ๋™์ผํ•œ id๋ฅผ ๊ณต์œ ํ•ด ์ž˜๋ชป๋œ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋œ ๊ฒƒ์ด ์›์ธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. React ๋ Œ๋”๋ง ํŠน์„ฑ๊ณผ DOM id ์ถฉ๋Œ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ ์ด์Šˆ๋ฅผ ๊ณ ์œ ํ•œ id ์„ค์ •์œผ๋กœ ํ•ด๊ฒฐํ•œ ๊ณผ์ •์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

HTML

ํฌ์ŠคํŠธ ์ž๋™ ์ €์žฅ: auto save ๊ธฐ๋Šฅ ์ถ”๊ฐ€(feat. polling)

Sep 8, 2023

์ž๋™ ์ €์žฅ ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•˜๋ฉฐ, ์ผ์ • ๊ฐ„๊ฒฉ๋งˆ๋‹ค API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํด๋ง ๋ฐฉ์‹ ๋Œ€์‹  ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด ๋ฉˆ์ถ˜ ๋’ค ์ผ์ • ์‹œ๊ฐ„ ํ›„ ์ €์žฅ๋˜๋„๋ก ๋””๋ฐ”์šด์Šค๋ฅผ ํ™œ์šฉํ•œ ์ „๋žต์„ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. useInterval๊ณผ useDebounce ํ›…์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•ด ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•œ ์ €์žฅ ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๊ณ , ๋ณต๊ตฌ ์•ˆ๋‚ด ๋ชจ๋‹ฌ๊นŒ์ง€ ์—ฐ๊ฒฐํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚จ ๊ณผ์ •์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

Next.js
Trouble-Shooting

์Šคํฌ๋กค ๋’ค๋กœ๊ฐ€๊ธฐ ์‹œ ํŽ˜์ด์ง€๊ฐ€ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š” ์ด์Šˆ ํ•ด๊ฒฐ

Aug 30, 2023

๋’ค๋กœ๊ฐ€๊ธฐ ์‹œ ์Šคํฌ๋กค ์œ„์น˜๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด sessionStorage์™€ useSWRInfinite, IntersectionObserver ๋“ฑ์„ ํ™œ์šฉํ•œ ๊ฐœ์„  ๊ณผ์ •์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋กค ์œ„์น˜ ์ €์žฅ ๋ฐ ๋ณต์›, ๋ฌดํ•œ์Šคํฌ๋กค ์ดˆ๊ธฐํ™” ๋ฌธ์ œ, ref null ์ด์Šˆ, useEffect ์˜์กด์„ฑ ๋ˆ„๋ฝ ๋ฌธ์ œ ๋“ฑ์„ ๋‹จ๊ณ„์ ์œผ๋กœ ์ ‘๊ทผํ•œ ๊ฒฝํ—˜์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์Šคํฌ๋กค ๋ณต์› ๋กœ์ง์„ ๊ตฌ์กฐํ™”ํ•˜๊ณ  SWR ์บ์‹œ์™€ ์˜์กด์„ฑ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋ฆฌ์ŠคํŠธ ์žฌ๋žœ๋”๋ง ๋ฌธ์ œ๋ฅผ ํŒŒํ—ค์ณ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

Next.js
๐Ÿ’ป Frontend

React rerendering์˜ ์กฐ๊ฑด

Oct 28, 2022

D3๋กœ ๋ฒ„๋ธ” ์ฐจํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋™์ ์œผ๋กœ ๋ฐ”๋€Œ๋Š” ์ƒํ™ฉ์—๋„ ์ฐจํŠธ ๋ชจ์–‘์ด ๊ฐฑ์‹ ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. React์˜ ๋ Œ๋”๋ง ์กฐ๊ฑด(state, props, ๋ถ€๋ชจ ๋ Œ๋”๋ง, shouldComponentUpdate, forceUpdate)์„ ์žฌ์ •๋ฆฌํ•˜๋ฉฐ ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ–ˆ์ง€๋งŒ, D3๊ฐ€ componentDidMount ์ดํ›„ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•ด ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ํ•œ๊ณ„์— ๋ถ€๋”ชํ˜”์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

React
๐Ÿ’ป Frontend

d3๋ฅผ ์ด์šฉํ•œ ์ปดํฌ๋„ŒํŠธ์—์„œ animation ํšจ๊ณผ ์ œ์™ธํ•˜๊ธฐ

Oct 9, 2022

D3๋ฅผ ํ™œ์šฉํ•ด ๋ฒ„๋ธ” ์ฐจํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋˜ ์ค‘, ์˜คํ”ˆ์†Œ์Šค์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ๋“ค์–ด ์žˆ๋˜ ๊ณผํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ on('tick') ์ด๋ฒคํŠธ๋ฅผ ํ™œ์šฉํ•˜๋˜, ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๊ณ ์ •๋œ ์ƒํƒœ๋กœ ๋งŒ๋“ค๋ฉด์„œ๋„ ๋™์ ์ธ ๋ฐฐ์น˜๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„์„ ๊ฐœ์„ ํ•œ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

javascript
svg
๐Ÿ’ป Frontend

svg text tag ๊ด€๋ จ <br/> ๋จนํžˆ์ง€ ์•Š๋Š” ํ˜„์ƒ

Sep 28, 2022

D3๋กœ ๋งŒ๋“  ๋ฒ„๋ธ” ์ฐจํŠธ์—์„œ ํ…์ŠคํŠธ ์ค„๋ฐ”๊ฟˆ์ด <br />๋กœ ์ ์šฉ๋˜์ง€ ์•Š์•„ ์›์ธ์„ ์ฐพ์€ ๊ฒฐ๊ณผ, SVG์˜ <text> ํƒœ๊ทธ ๋‚ด๋ถ€์—์„œ๋Š” <tspan>์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ค„์„ <tspan>์œผ๋กœ ๊ฐ์‹ธ๊ณ  dx, dy ์†์„ฑ์œผ๋กœ ์œ„์น˜๋ฅผ ์กฐ์ •ํ•ด ์ค„๋ฐ”๊ฟˆ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

javascript
svg
๐Ÿ’ป Profile
Dohee Kim
Frontend developer
developer who creates and thinks.
๐ŸŒŸ Service
๐Ÿ’ฌ Contact
github
email
linkedin