์ ์ฒด ๊ธ
ํ๋ก ํธ์๋ ๋ฉด์ (์ด๋ฏธ์ง ์ต์ ํ)
1. ์ด๋ฏธ์ง ์ต์ ํ ๊ฒฝํ์ด ์๋๋ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์งํ๋์๋์ง ์ค๋ช ํด์ฃผ์ธ์.์จ๋ผ์ธ ์กธ์ ์ ์ ์ฌ์ดํธ๋ฅผ ์ด์ํ๋ฉฐ ์ด๋ฏธ์ง ์ต์ ํ๋ฅผ ์งํํ์ต๋๋ค. 20MB์ด์์ ์ฉ๋์ด ํฐ ์ด๋ฏธ์ง๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๊ณ ์๋ ์กธ์ ์ํ ์ฌ์ดํธ์ ํน์ฑ์ ๊ณ ๋ คํ์ฌ ์ฌ์ฉ์๊ฐ ๊ธด ๋ก๋ฉ์์ด ๋น ๋ฅด๊ฒ ์ํ์ ๊ฐ์ํ ์ ์๋๋ก ์ด๋ฏธ์ง ์ต์ ํ๋ฅผ ์งํํ์ต๋๋ค. ๋จผ์ ํ์ผ ํฌ๋งท์ ๋ณ๊ฒฝํ๋ ์์ ์ ์งํํ์ต๋๋ค. webp ํฌ๋งท์ ์ฌ์ฉํ์ฌ ์ฉ๋์ ๊ฐ์ ํ๋๋ฐ์, webp ํฌ๋งท์ ๊ตฌ๊ธ์์ ๋ฐํํ ํฌ๋งท์ผ๋ก ์์ถ ํจ๊ณผ๊ฐ ์ข์ ๋ง์ ์ฉ๋์ ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ png ํฌ๋งท์์ webp๋ก ๋ณ๊ฒฝํ๊ฒ ๋์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ png ํฌ๋งท์ผ๋๋ณด๋ค 31%์ ์ฉ๋ ๊ฐ์ ์ด ์์์ต๋๋ค. ๋๋ฒ์งธ๋ก ์ด๋ฏธ์ง ์ฌ์ด์ฆ๊ฐ ์ค์ ์น์ฌ์ดํธ์์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค 1.5๋ฐฐ์ ๋ ํฐ ์ฌ์ด์ฆ๋ก ์ฌ์ฉ๋๊ณ ์์ด์ ์น..
ํ๋ก ํธ์๋ ๋ฉด์ (์คํ์ปจํ ์คํธ, ์ค์ฝํ ์ฒด์ธ)
1. ์คํ์ปจํ ์คํธ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.์คํ์ปจํ ์คํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฝ๋๊ฐ ์คํ๋๋ ํ๊ฒฝ์ ์๋ฏธํฉ๋๋ค. ํจ์์ ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ฝ๋๋ฅผ ์คํํ ๋, ๊ทธ ์ฝ๋๊ฐ ์คํ๋ ๋์ ํ๊ฒฝ์ ์ ์ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด ์คํ์ปจํ ์คํธ๊ฐ ์กด์ฌํฉ๋๋ค.์คํ์ปจํ ์คํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ฒ์ ์คํ๋ ๋ ์ ์ญ์ผ๋ก ๋จผ์ ์์ฑ๋๊ณ , ํจ์๊ฐ ํธ์ถ๋ ๋ ์ญ์ ์์ฑ๋ฉ๋๋ค. ์ด๋ฌํ ์คํ ์ปจํ ์คํธ๋ ์์ฑ๋ ๋ ์ฝ์คํ์ ์์ด๊ฒ๋๋ฉฐ ํจ์๊ฐ ์ข ๋ฃ๋๊ฑฐ๋ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค.2. ์คํ์ปจํ ์คํธ๋ ์ด๋ค ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์๋์?์คํ์ปจํ ์คํธ๋ ๋ณ์ ๊ฐ์ฒด์ ์ค์ฝํ์ฒด์ธ, this ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.๋จผ์ ๋ณ์ ๊ฐ์ฒด๋ ์คํ ์ปจํ ์คํธ ๋ด์์ ์ฌ์ฉ๋๋ ๋ณ์์ ํจ์์ ์ ์ธ์ ์ ์ฅํ๋ ๊ณต๊ฐ์ ๋๋ค.์ค์ฝํ ์ฒด์ธ์ ํ์ฌ ์คํ ์ค์ธ ์ปจํ ์คํธ์ ์ธ๋ถ ๋ ์..
ํ๋ก ํธ์๋ ๋ฉด์ (reflow, repaint)
1. reflow์ repaint์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.reflow์ repaint๋ ๋ชจ๋ ๋ ๋๋ง๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ํ๋ฉด์ด ๋ฆฌ๋๋๋ง ๋์ ๋, ๊ฐ ์ํฉ์ ๋ฐ๋ผ reflow์ repaint๊ฐ ์ผ์ด๋๊ฒ ๋ฉ๋๋ค. reflow๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง์ ๋ ์ด์์์ ๋ค์ ๊ณ์ฐํ๋ ๊ณผ์ ์ ์๋ฏธํ๊ณ repaint๋ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ณผ์ ์ ๋๋ค. reflow๋ DOM์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์์์ ํฌ๊ธฐ๋ ์์น๊ฐ ๋ณ๊ฒฝ๋ ๋ ์ผ์ด๋ฉ๋๋ค. repaint๋ ๋ ์ด์์์ ๊ทธ๋๋ก์ด๊ณ ์์์ด๋ ๋ฐฐ๊ฒฝ ๋ฑ์ ์คํ์ผ๋ง ๋ณ๊ฒฝ๋์์ ๋ ์ผ์ด๋ฉ๋๋ค. ๋ ์ด์์์ ๋ค์ ๊ณ์ฐํ๋ reflow๊ฐ ์ผ์ด๋๋ฉด repaint๊ฐ ํ์ฐ์ ์ผ๋ก ์ผ์ด๋๊ธฐ๋ ํ๊ณ , reflow๋ ๋น์ฉ์ด ๋ ๋ค๊ธฐ ๋๋ฌธ์ ๋ ์ด์์ ๊ณ์ฐ์ด ๋ค์ ์ผ์ด๋์ง ์๋๋ก ๊ด๋ฆฌ..
ํ๋ก ํธ์๋ ๋ฉด์ (ํด๋ก์ , ํด๋ก์ ์ ๋จ์ )
1. ํด๋ก์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.ํด๋ก์ ๋ ์ ์ธ๋์๋ ๊ทธ๋์ ๋ ์์ปฌ ์ค์ฝํ๋ฅผ ๊ธฐ์ตํ๋ ํจ์์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ํจ์๋ค์ Environment๋ผ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๋๋ฐ ์ฌ๊ธฐ์ ์ธ๋ถ ํจ์์ ๋ณ์์ ์ฐธ์กฐ๊ฐ์ด ์ ์ฅ๋์ด ์ธ๋ถ ํจ์์ ๋ณ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.https://enjoydev.life/blog/javascript/6-closure JavaScript์ ํด๋ก์ (Closure)๋? (feat. React์ useState)JavaScript์ ํด๋ก์ ์ ์๋ฆฌ๋ฅผ ์ฝ๊ฒ ๋ฐฐ์๋ณด๊ณ ์ด๋ค ์ํฉ์ ์ฌ์ฉ๋๋์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.enjoydev.life2. ํด๋ก์ ์ ๋จ์ ๊ณผ ํด๊ฒฐ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.ํด๋ก์ ๋ ์ธ๋ถํ๊ฒฝ์ ๋ณ์๋ฅผ ๊ณ์ ๊ธฐ์ตํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋น์ง์ปฌ๋ํฐ์ ๋์์ด ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์ผ์ด๋ ์ ์..
ํ๋ก ํธ์๋ ๋ฉด์ (Sync, Async, ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ์๋ฆฌ, Call Stack, TaskQueue, Event Loop)
1. Sync, Async์ ์ฐจ์ด์ (๋๊ธฐ, ๋น๋๊ธฐ์ ์ฐจ์ด์ )์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.Sync๋ ์์ ์์ฒญ์ด ์ด๋ค์ง๊ณ , ์์ฒญ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. Async๋ ํน์ ํ ์์ฒญ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์์ ์ ์ํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ์ค๋ ๋์ด๊ธฐ ๋๋ฌธ์ ์์ฒญ๋ ์์ ์ ํ๋์ฉ ์ํํ์ง๋ง setTimeout์ด๋ fetch๊ณผ ๊ฐ์ Web API๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ๋ฉ๋๋ค. 2. ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ์๋ฆฌ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.์๋ฐ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์์์ ๋์ํ๋๋ฐ์, ๋ํ์ ์ผ๋ก ๊ตฌ๊ธ์ V8์์ง์ด ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ฉ๋ชจ๋ฆฌํ๊ณผ ์ฝ์คํ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํ์ ๋ณ์, ํจ์ ๋ฑ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ด๋ฃจ์ด์ง๋ ๊ณต๊ฐ์ ๋๋ค. ์ฝ์คํ์๋ ์๋ฐ์คํฌ๋ฆฝ..
์ 54ํ SQLD ํฉ๊ฒฉ ํ๊ธฐ(์ ๊ณต์, ๋ค๋ฅธ ์ผ ํ๋ฉด์ 7์ผ ๊ณต๋ถ)
SQLD ์ํ๋ณธ ์ง ๋ฒ์จ 3๋ฌ์ด๋ ์ง๋ฌ๋ค์.. ๊ทธ๋ ์์ฒญ ๋์ ๋๋ฐ ์ง๊ธ์ ์จ๋๊ฐ 0๋๊น์ง ๋ด๋ ธ๊ฐ์ต๋๋ค. ๋ค๋ค ๊ฐ๊ธฐ ์กฐ์ฌํ์ ์!! ๋ ์ถ์์ง๊ธฐ์ ์ ํ๊ธฐ๋ฅผ ๋จ๊ฒจ๋์ง ์์ผ๋ฉด ํ์ ๋ชป๋จ๊ธธ ๊ฒ ๊ฐ์ ๋ฆ์์ง๋ง ๋จ๊ฒจ๋ด ๋๋ค!!์ ์ ๋น์ทํ ์คํฉ์ผ๋ก ์์ํ์ ๋ถ๋ค์ ์ด ๊ธ์ด ๋์์ด ๋์ค ๊ฒ ๊ฐ์ต๋๋ค!!1. ์ปดํจํฐ๊ณตํ ์ ๊ณต 2. Database ์์ ์ ์ ๋ฐ๋ผ๊ฐ๋ ์์ค 3. ๊ธฐ๋ณธ ๋ช ๋ น์ด(DML, DDL, TCL ๋ฑ) ์ฌ์ฉ ๊ฒฝํ์ด ์์๐ SQLD ์ํ ์ ๋ณด, ํฉ๊ฒฉ ๊ธฐ์คSQLD๋ ๋๊ณผ๋ชฉ์ผ๋ก ๋๋ ์ง๊ณ ์ด 60์ ์ด์ ๋ฐ์์ผ ํฉ๊ฒฉ์ ๋๋ค. ํ์ง๋ง ๊ณผ๋ชฉ๋ณ๋ก 40% ๋ฏธ๋ง ์ทจ๋ํ๋ฉด ๊ณผ๋ฝ์ผ๋ก ๋จ์ด์ง๋๋ค. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด ๊ณผ๋ชฉ์ ๋ฌธํญ์๊ฐ ์ ์ง๋ง ๊ณต๋ถ์ํ๋ฉด ๊ณผ๋ฝ๋ ์ ์์ผ๋ ๊ผญ ๊ณต๋ถํ๊ณ ๊ฐ์๊ธธ ๋ฐ๋๋๋ค :)โ๏ธ 7์ผ ๊ณต๋ถ์ด์ ๋ญ ๋จน์๋์ง..
AWS cloudfront ๋ฐฐํฌ ํ๋ฉด์ด S3 ๊ฒฐ๊ณผ์ ๋ค๋ฅธ ์ด์ (feat. ๋ฌดํจํ)
S3์ ์ ๋ฐ์ดํธ๋ ์ ์ ๋ฆฌ์์ค๋ ์ต์ ์ํ์ธ๋ฐ, cloudfront์ ๋ฐฐํฌ ๊ฒฐ๊ณผ๋ ์ด์ ๋ฐฐํฌ ๊ฒฐ๊ณผ์ธ ๋ฌธ์ ๋ฅผ ๊ฒช์ด๋ณด์ ์ ์์ผ์ ๊ฐ์? ์ ๋ ์ต๊ทผ์ ํด๋น ์์ธ์ ๋ชฐ๋ผ ์๋ฒฝ ๋ด๋ด ํด๋งธ๋ ๊ฒฝํ์ด ์์ด ์ ๊ฐ ๊ฒช์๋ ์ด๋ ค์์ ๋๊ฐ์ด ๊ฒช๊ณ ๊ณ์ ๋ถ๋ค์ ์ํด ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋กํ๋ ค๊ณ ํฉ๋๋ค! ๋ฌธ์ S3์ cloudfront๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฐ๋ํ๊ณ ๋๋ฉ์ธ์ ์ด์ฉํ๊ณ ์๋ค๊ฐ, ํ๋ก์ ํธ์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํด์ ์๋ก ๋ฐฐํฌ๋ฅผ ์งํํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ S3 ์ ์ ๋ฆฌ์์ค๋ ์ ๋ฐ์ดํธ๋ ๋ฒ์ ์ด ์ ๋์ค์ง๋ง, ์ค์ ๋๋ฉ์ธ์ด ๋ณด์ฌ์ฃผ๋ ๋ฆฌ์์ค๋ ์ ๋ฐ์ดํธํ๊ธฐ ์ ์ ๋ฆฌ์์ค์๋๋ฐ์, ์ด๋ cloudfront๋ก ๋ฐฐํฌ๋ S3 ์ ์ ๋ฆฌ์์ค๋ค์ด AWS ์ฃ์ง ๋ก์ผ์ด์ ์ ์ ์ก๋์ด ์์ง ์๋ก ์ ๋ฐ์ดํธ๊ฐ ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ์ฃ์ง ๋ก์ผ์ด์ ์ ์บ์๋ 24์๊ฐ์ผ..
VSCode Vitest "์ด ์์ ์์ญ์์ ์์ง ๋ฐ๊ฒฌ๋ ํ ์คํธ๊ฐ ์์ต๋๋ค." ์ค๋ฅ ํด๊ฒฐ
vitest ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น์ extension ์ค์น, ํ ์คํธ ์ฝ๋ ์์ฑ๊น์ง ๋ชจ๋ ๋ค ํ ์ดํ, vitest extention์ ์ด์ฉํ์ฌ ํ ์คํธ๋ฅผ ์คํํ๋ ค๊ณ ํ ๋ ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด ํ ์คํธ ํญ๋ชฉ์ด ๋จ์ง ์๋ ์ค๋ฅ๊ฐ ์์๋ค.ํด๋น ์ด์๋ฅผ ๊ฒช๊ณ ์๋ ์ฌ๋๋ค์ด ๊ฝค๋ ๋ง์ด ์๋ค.https://github.com/vitest-dev/vscode/issues/196 Vitest extension completely non functional on mac · Issue #196 · vitest-dev/vscodeDescribe the bug Vitest completely fails to work on any of my vitest repos To Reproduce Steps to reproduce the behavi..
[Docker] docker: Error response from daemon: Ports are not available | address already in use ํฌํธ์ถฉ๋ ํด๊ฒฐ
์ปจํ ์ด๋๋ฅผ ์คํํ๋ ค๋ ๋์ค 3000๋ฒ ํฌํธ๊ฐ ๋ก์ปฌ์์ ์ด๋ฏธ ์ฌ์ฉ์ค์ด์ด์ ํฌํธ์ถฉ๋(์ด๋ฏธ ์ฌ์ฉ์ค) ์ค๋ฅ๊ฐ ๋ฌ๋ค. ์ด๋ ค์๋ port ๋ซ๊ณ ์๋ก ์คํํ๋ ๋ฐฉ๋ฒ1) ์ด๋ฆฐ ํฌํธ ํ์ธํ๊ธฐsudo lsof -PiTCP -sTCP:LISTEN2) ํน์ ํฌํธ ํ์ธํ๊ธฐsudo lsof -i :[port]sudo lsof -i :3000 // example3) ํฌํธ ๋ซ๊ธฐํน์ ํฌํธ๋ฅผ ํ์ธํ ๊ฒฐ๊ณผ์์ PID๋ฅผ ์ด์ฉํ์ฌ ํน์ ํฌํธ๋ฅผ ๋ซ์์ค ์ ์๋ค.sudo kill -9 [PID] ์ดํ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ฉด ํน์ ํฌํธ์ ๋ํ ์ฐ๊ฒฐ์ด ์ ์ด๋ฃจ์ด์ง ๊ฒ์ด๋ค. ๋๋ณด๊ธฐ์ฐธ๊ณ https://jongsky.tistory.com/41 (Mac) port ํ์ธ ๋ฐฉ๋ฒ ๋ฐ 5000 port ์ญ์ ๋ฐฉ๋ฒ1. ๊ธ์ ์์ฑํ๊ฒ ๋ ๊ณ๊ธฐ docker-compose๋ฅผ..