๐ ๋ค์ด๊ฐ๋ฉฐ ์ต๊ทผ ๋ค์ํ ์น ์๋น์ค๋ฅผ ์ ํด๋ณด๋ฉด ๊ฐํธํ SNS ๋ก๊ทธ์ธ์ผ๋ก ์ฝ๊ฒ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฐํธํ SNS ๋ก๊ทธ์ธ์ด ๋ฐ๋ก OAuth2.0 ํ๋กํ ์ฝ์ ํตํด ์งํ๋ฉ๋๋ค. ๊ทธ๋ผ, OAuth๊ฐ ์ด๋ค ๋ฐฐ๊ฒฝ์์ ๋ฑ์ฅํ์๊ณ , ํ์ฌ๋ ์ด๋ป๊ฒ ํ์คํ๋์ด OAuth2.0์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋์ง, ๊ทธ ํ๋ฆ์ ๋ํ ๊ฐ๋ ์ ํจ๊ป ์์๋ณด๊ฒ ์ต๋๋ค. ๐ง OAuth ๋ฑ์ฅ๋ฐฐ๊ฒฝ ์น ์๋น์ค์ ๋ค์์ฑ์ด ์ฆ๊ฐํ๋ฉด์, ์์ ํ๊ฒ ์ ๋ณด๋ฅผ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํ์์ฑ์ด ์๊ฒผ์ต๋๋ค. ์ด๋ก ์ธํด OAuth(Open Authorization)๋ผ๋ ๊ฐ๋ ์ด ํ์ํ๊ฒ ๋์์ต๋๋ค. ์ด๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด์ ํ ๊ฐ์ง ์๋ฅผ ๋ค์ด ๋ณผ๊ฒ์. ์ฐ๋ฆฌ์ ์๋น์ค๊ฐ ์ฌ์ฉ์์๊ฒ ์ฌ์ฉ์์ ๊ตฌ๊ธ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ์ฌ์ฉ์๊ฐ ๊ตฌ๊ธ์ ๋..
๐ ๋ค์ด๊ฐ๋ฉฐ์ด๋ฒ ํฌ์คํ ์ ์น ์์ผ(Web Scoket)์ ๋ํ ํฌ์คํ ์ ํ๋ ค๊ณ ํฉ๋๋ค. ์ด ๊ธ์ ์ฝ์ผ์๋ ๋ถ๋ค์ ์๋ง ์น ์์ผ์ด ๋ฌด์์ธ์ง ์ ๋๋ ์๊ณ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ง์ต๋๋ค. ์ค์๊ฐ ํต์ ์ด ํ์ํ ๋ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ์ ์ ๋๋ค. ๊ทธ๋ผ ์ ์ค์๊ฐ ํต์ ์ ํ ๋ ์น ์์ผ์ ์ฌ์ฉํ๋์ง, ๊ธฐ์กด์๋ ์ด๋ค ๋ฐฉ์์ ์ฌ์ฉํ๊ณ , ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ฃผ๋์ง, ์ด๋ป๊ฒ ๋์ํ๋์ง ๋ฑ๋ฑ ์์๋ณด๊ฒ ์ต๋๋ค.์น ์์ผ์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ์ด๊ธฐ์ ์ธํฐ๋ท ํต์ ๋ฐฉ์์ ์ฃผ๋ก HTTP๋ฅผ ์ด์ฉํ ํด๋ผ์ด์ธํธ(์์ฒญ) - ์๋ฒ(์๋ต) ๋ชจ๋ธ์ ํตํด ์งํ๋์์ต๋๋ค.์ฆ, ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ(Request)์ ๋ณด๋ด๊ณ , ์๋ฒ๊ฐ ์ด์ ์๋ต(Response)ํ๋ ๋ฐ์ด์ค ํต์ ๋ฐฉ์์ ๋ฐ๋ฆ ๋๋ค. ์ด ๋ฐฉ์์ด ํ์ด์ง๋ฅผ ์์ฒญํ๋ ๋ฑ์ ๊ฐ๋จํ ์์ ์๋ ํจ๊ณผ์ ..
๋ค์ด๊ฐ๋ฉฐ ๐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ดํดํ๋ ๋ฐ ์์ด์ ์คํ ์ปจํ ์คํธ(Execution Context)์ ๊ฐ๋ ์ ๋ํด์ ์์งํ๋ ๊ฒ์ ์ค์ํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋๋ก, ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฝ๋์ ์คํ ์์์ ๋ฐฉ์์ ๊ฒฐ์ ํ๊ฒ ๋์ฃ . ์คํ ์ปจํ ์คํธ(Excution Context)๋โ ์คํํ ์ฝ๋์ ์ ๊ณตํ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์๋์ ๊ฐ์ฒด์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ์ธ์ด๋ก์์ ์ฑ๊ฒฉ์ ๊ฐ์ฅ ์ ํ์ ํ ์ ์๋ ๊ฐ๋ ์ ๋๋ค. ๊ทธ๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์คํ ์ปจํ ์คํธ๊ฐ ํ์ฑํ๋๋ ์์ ์ ์๋์ ๊ฐ์ ๋์์ ์ํํฉ๋๋ค. ํธ์ด์คํ (hoisting) ์ธ๋ถ ํ๊ฒฝ ์ ๋ณด ๊ตฌ์ฑ this ๊ฐ ์ค์ ๋ฑ๋ฑ ์ด๋ก ์ธํด ๋ค๋ฅธ ์ธ์ด์์๋ ๋ฐ๊ฒฌํ ์ ์๋ ํน์ดํ ํ์๋ค์ด ๋ฐ์ํฉ๋๋ค. ๋์ ๊ณผ์ ๋์ผํ ํ๊ฒฝ์ ์๋ ์ฝ๋๋ค์ ์คํํ ๋ ํ์ํ ํ๊ฒฝ ์ ๋ณด..
๐ ๋ค์ด๊ฐ๋ฉฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ํจํด์ ์์๋ณด๊ธฐ ์์, ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ๋ฌด์์ผ๊น์? ๋น๋๊ธฐ ์ฒ๋ฆฌ๋? ํน์ ์ฝ๋์ ์ฐ์ฐ์ด ์๋ฃ๋ ๋๊น์ง ์ ์ฒด ์ฝ๋์ ์คํ์ ์ค๋จํ์ง ์๊ณ , ๋ค์ ์ฝ๋๋ฅผ ์ฐ์ ์ ์ผ๋ก ์คํํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์ด๋ ๊ฒ ๋์ํ๋ ํจ์๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ '๋น๋๊ธฐ ํจ์'๋ผ๊ณ ํฉ๋๋ค. ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ํ๊ณ์ ์ ์์ ์๋ฃ ์์ ์ ์์ธกํ๊ธฐ ์ด๋ ต๋ค๋ ์ ์ ๋๋ค. ํ์ง๋ง ์ด๊ฒ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋ณธ์ง์ ์ธ ํน์ฑ์ด๋ฉฐ, ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ ์ค๋ ๋(single-threaded) ๊ธฐ๋ฐ์ ์ธ์ด๋ก, ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฝ๋๊ฐ ์์ฑ๋ ์์๋๋ก, ์์์ ์๋๋ก, ๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋น๋๊ธฐ์ ์ธ ..
๐ ๋ค์ด๊ฐ๋ฉฐ Next.js 13 ๋ฒ์ ์ดํ์๋ Rust ์ธ์ด๋ก ๊ฐ๋ฐ๋ Turbopack์ด ๋์ ๋์์ต๋๋ค. Next 14 ๋ฒ์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ์งํํ๊ณ Turbopack์ผ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ ์คํํ์ ๋ ๋ง์ดํ ๋ฌธ์ ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋ ค ํฉ๋๋ค. ๋ฌธ์ ๋ฐ์ โ Turbopack์ผ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ ์คํํ์ ์๋์ ๊ฐ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด ์ค๋ฅ์ ๋ํด ๊ฒ์ํด ๋ณด๋ "์ปดํฌ๋ํธ์ ์ด๋ฆ์ด ์๋ชป๋์๊ฑฐ๋, import ๊ฒฝ๋ก๊ฐ ์๋ชป ์ ๋ ฅ๋์์ ๋ ๋ฐ์ํ๋ค"๋ ์ค๋ช ์ ์ฐพ์ ์ ์์์ต๋๋ค. ์ด์ ๋ฐ๋ผ import ๋ ๋ถ๋ถ์ ์ ํ์ธํด ๋ณด๋ผ๋ ์กฐ์ธ์ด ์์์ต๋๋ค. ๊ทธ๋ฌ๋, ์ ์ฝ๋์์๋ import๊ฐ ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ก๊ธฐ ๋๋ฌธ์ ์์ ํ ๋ถ๋ถ์ด ์์์ต๋๋ค. ๋ฐ๋ผ์ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ค์ ํ์ธํด ๋ณธ ๊ฒฐ๊ณผ 'DarkModeBtn' ์ปดํฌ๋..
๐ ๋ค์ด๊ฐ๋ฉฐ ๋จผ์ , ์น ๋ ๋๋ง(Web Rendering)์ด๋ ์น ํ์ด์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค. ์ด ๋ ๋๋ง ๋ฐฉ์์ ๋ฐ๋ผ์ ๋ก๋ฉ ์๋, ๊ฒ์ ์์ง ์ต์ ํ(SEO), ์ฌ์ฉ์ ๊ฒฝํ ๋ฑ์ด ๋ฌ๋ผ์ง๋๋ค. ์ด ๊ณผ์ ์ ๊ฐ๋จํ ๋น์ ํ์๋ฉด, ๋ ์คํ ๋์์ ์๋ฆฌ๋ฅผ ์ฃผ๋ฌธํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ ์คํ ๋์์ ์๋(์ฌ์ฉ์)์ด ๋ฉ๋ด(์น ํ์ด์ง)๋ฅผ ์ฃผ๋ฌธํ๊ณ , ์๋ฆฌ์ฌ(์๋ฒ)๊ฐ ์๋ฆฌ(์นํ์ด์ง)๋ฅผ ์ค๋นํ๊ณ , ์จ์ดํฐ(๋ธ๋ผ์ฐ์ )๊ฐ ์๋ฆฌ๋ฅผ ์๋์๊ฒ ๊ฐ์ ธ๋ค์ฃผ๋ ๊ณผ์ ๊ณผ ๋น์ทํฉ๋๋ค. ์ฌ๊ธฐ์ ์๋ฆฌ์ฌ๊ฐ ์๋ฆฌ๋ฅผ ์ค๋นํ๋ ๊ณผ์ ์ด ๋ฐ๋ก ๋ ๋๋ง(Rendering)์ ๋๋ค. ์ด๋ ๊ฒ ์ค์ํ ์น ๋ ๋๋ง์๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์์ด ์์ต๋๋ค. ์ค๋ ์์๋ณผ ๋ ๋๋ง ๋ฐฉ์๋ค์ ์๋์ ๊ฐ์ต๋๋ค. ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง(Client Side Rendering, CS..
๐ ๋ค์ด๊ฐ๋ฉฐ ์ต๊ทผ Next.14 ๋ฒ์ app router๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ์งํํ๋ฉด์ ์นด์นด์คํก ๊ณต์ ํ๊ธฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐ ์์ด์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๊ณผ ์ฌ๋ฌ ์ค๋ฅ๋ฅผ ๋ง์ดํ์ฌ ์๋กญ๊ฒ ํฌ์คํ ํฉ๋๋ค. ์ด์ ํฌ์คํ ์์ 1๋ฒ ~ 1-3๋ฒ๊น์ง๋ ๋ฐฉ๋ฒ์ด ๋์ผํฉ๋๋ค. ์ด์ ํฌ์คํ ์ ์ฐธ๊ณ ํด์ ํ๋ซํผ ๋ฑ๋ก๊น์ง ํ๊ณ ์ฝ์ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. app router์์๋ _document.tsx์ _app.tsx๊ฐ ์ฌ๋ผ์ง๊ณ ์ด์ ์ ํด๋น ํ์ผ์์ ์์ฑ๋์๋ ์ฝ๋๋ layout.tsx์์ ์์ฑํด์ฃผ์ด์ผ ํฉ๋๋ค. ์คํฌ๋ฆฝํธ ์ปดํฌ๋ํธ ์์ฑ ์นด์นด์ค ๋๋ฒจ๋กํผ์์ ํ๋ซํผ ๋ฑ๋ก์ ์๋ฃํ๋ค๋ฉด ์ด์ ํ๋ก์ ํธ๋ก ๋์์์ ์ ์ฉ์ ํด๋ด ์๋ค. ๋จผ์ KakaoScript.tsx ํ์ผ์ ์์ฑํ๊ณ ์๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ํ์ผ ์์น๋ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ๋ง๊ฒ ์์ฑํ์๋ฉด ๋ฉ..
๐๋ค์ด๊ฐ๋ฉฐ ์ฝ 2๋ ์ Next.js(SSG) + TypeScript๋ก ์ ์ํ ๋กค MBTI ํ๋ก์ ํธ๋ฅผ 14 ๋ฒ์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๊ณผ์ ๋ฐ ํ๊ธฐ๋ฅผ ์์ฑํด๋ณด๋ ค ํ๋ค. ํด๋น ๊ธ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ด๋ป๊ฒ ํ๋ ๊ฐ์ ๋ํ ๊ธ์ด ์๋๋๋ค. ์ ๋ชฉ ๊ทธ๋๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ํ๋ ๊ณผ์ ์ ๊ธฐ๋กํ๋ ๊ธ์ ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์ ์ ํด์ผ ํ๋๊ฐ? ์ฌ์ค ์๋น์ค ์์ฒด๋ก๋ ๋ฌธ์ ์์ด ์ ๋์๊ฐ๊ณ ์์๋ค. ๋์ ์ Next.js๋ก ์ง์ A - Z๊น์ง ํด๋ณธ ํ๋ก์ ํธ๋ ๋กค MBTI ํ๋ก์ ํธ๋ฐ์ ์์๋ค. Next.js๊ฐ 11๋ฒ์ ์ ๋นํด 14 ๋ฒ์ ๊น์ง(ํนํ 13 ๋ฒ์ ์์) ๋ง์ ๋ถ๋ถ์ด ๋ณ๊ฒฝ์ด ๋๊ณ , ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์ง ์ง์ ๋ถ๋ชํ๋ฉฐ ๊นจ๋ฌ์ผ๋ฉฐ ํ์ตํ๋ ๋ฐฉ์์ผ๋ก ์ง์์ ํก์ํ๋ ๋์ ์ฑํฅ์ธ ์ด์ ์ ์ต์ ๋ฒ์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์ ๊ธฐ์กด ์ฝ๋์๋ ..
this ํค์๋์ ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ this๋ ํ์ฌ ์คํ ์ปจํ ์คํธ๋ฅผ ์ฐธ์กฐํ๋ ํน๋ณํ ํค์๋์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋ ๋ ํจ๊ป ๊ฒฐ์ ์ด ๋๋๋ฐ์. ์ฆ, this์ ๊ฐ์ ํจ์๊ฐ ์ด๋ป๊ฒ ํธ์ถ๋์๋์ง์ ๋ฐ๋ผ ๋ณํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก๋ ํจ์๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํฉ๋๋ค. ์ผ๋ฐ ํจ์์์์ this ์ผ๋ฐํจ์์์ this๋ '์ ์ญ ๊ฐ์ฒด'๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ์ ์ญ ๊ฐ์ฒด๋? ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ window, Node.js ํ๊ฒฝ์์๋ global ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. function main() { console.log(this); } main(); // window ๊ฐ์ฒด ๋๋ global ๊ฐ์ฒด ์ถ๋ ฅ ์์ ๊ฐ์ด ์ด๋ ๊ฒ ์ ์ญ์ ์ผ๋ก ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ function main() { console.log(this); } ..