๋ฆฌ์ ๐ญ ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด์์ ๋์ผํ ์ด์ ๋ก ๋ช ๋ฒ ๋ฆฌ์ ์ ๋นํ๋ค. ํ์ผ ๋ฌธ์ ์ธ ์ค ์์๋๋ฐ ๋ก๊ทธ์ธ๋ถํฐ ์ ๋์ด๊ฐ๋ค๋.. ๊ฐ๋ฐํ๊ฒฝ์ด๋ ๋ฆด๋ฆฌ์ฆ๋ก ๋ฝ์์ ๋๋ ์ ๋๋๋ฐ?.. ์ถ์ด์ ์์น ์์. ๋ฆฌ์ ์ฌ์ ๋ ๋ค์๊ณผ ๊ฐ์๋ค. ๊ณ์ ์ผ๊ด๋ ์ฌ์ ์์. ((์ข ๋ ์น์ ํ์ผ๋ฉด..)) ์ ๊ณตํ์ ๋ก๊ทธ์ธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ก๋ ์ธ์ฑ ์ฝํ ์ธ ์ ์ก์ธ์ค ํ ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ค ์๊ฒ๋ ์๋ก์ด ์ฌ์ค. Google Play ์ฑ ์๋ช ์ ํ๋ฉด ์๋ช ํค๊ฐ ๋ฐ๋๋ค! ์๋ช ํค๊ฐ ๋ฐ๋๋ฉด, SHA-1 ๊ฐ๋ ๋ณ๊ฒฝ๋๋ค. ์นด์นด์ค ๋๋ฒจ๋กํผ์ ๋ฑ๋กํด ๋ key hash ๊ฐ๋ค๋ก๋ ๋ก๊ทธ์ธ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ์ฆ ์นด์นด์ค ๋๋ฒจ๋กํผ์์ ํ๋ซํผ์ Android key Hash ๊ฐ์ Google Play์์ ๋ฐ์ key Hash๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค. ์ฑ ์๋ช ํค์ k..
Today, What I learned? ์ด์ ์ ํ๋ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ next.js๋ก ๋ฆฌํฉํ ๋งํ๋ ๊ณผ์ ์ค.. ๋ฐ๋๋ผ JS, HTML, SCSS๋ก ๋์ด์๋ ์ฝ๋๋ฅผ ๋ฐ๊พธ๋ ค๋ค๋ณด๋ next.js์ SCSS๋ฅผ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง์ ๋ํ ๊ณ ๋ฏผ์ด ์ข ์์๋ค. ๋จผ์ ํ์ฌ ์คํ์ผ ํ์ผ ๊ตฌ์กฐ๋ ์ด๋ ๋ค. ์ค์น ๋จผ์ ํ๋ก์ ํธ ํด๋์ sass ์ค์น! yarn add sass ์ปดํฌ๋ํธ ํด๋์ scss ํ์ผ๋ค์ module.scss๋ก ๋ณ๊ฒฝํด์ฃผ์๋ค. Selector "body" is not pure ์ฒ์์ ๋ชจ๋ ํ์ผ์ module์ ๋ถ์๋ค๊ฐ ๋ง๋ ์๋ฌ.. reset.scss ๊ฐ์ ๊ฒฝ์ฐ๋ ์ ์ฒด์ ์ผ๋ก ์ ์ฉ๋๋ ๋ถ๋ถ์ด๊ณ , module.css ๊ฐ์ ๊ฒฝ์ฐ๋ ํน์ ๋ฒ์๋ฅผ ์ง์ ํ๋ CSS ๋ชจ๋์ด๊ธฐ ๋๋ฌธ์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ CSS ๊ฐ์ ๊ฒฝ..
Today, What I learned? ๋ด ํํธ๋ ์๋์์ง๋ง ๊ธํ๊ฒ ์ข์์ ๊ด๋ จ ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ฒ ๋์๋ค. ๋ด๋นํ์ง ์์๋ ํํธ๋ผ ์ฝ๋๋ฅผ ๋ค์ฌ๋ค๋ณผ ์ผ์ด ๋ง์ง ์์๋๋ฐ ์คํ๋ ค ์ข์!.. ์ด๋ฒ ๋ฒ๊ทธ๋ ์๋ก๊ณ ์นจ ํ์ ๋ ํํธ๊ฐ ์ ์ง๋์ง ์๋ ๋ฒ๊ทธ์๋ค. ๋ถ๋ช ์ด์ ์๋ ๋์๋ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ฐ ๊ทธ ์ฌ์ด ์์ ์ด ๋๋ฉด์ ๋ญ๊ฐ ๋ฒ๊ทธ๊ฐ ์๊ธด ๋ฏ.. ๐ค ์์ธ ํ์ myProjects ์ปฌ๋ ์ ์ ํ์ฌ ํ๋ก์ ํธ id ๊ฐ์ด ํ์ธ๋์ด์ผ๋ง ํํธ๋ฅผ ์ฑ์ฐ๋ isLike๊ฐ ํ๋จ๋ ์ ์๋๋ฐ, ์๋ก๊ณ ์นจ ํ์ ๋ useQuery์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ์๊ฐ์ด ์์ด์ ์ฒ์์ undefined๋ก ๊ฐ์ด ๋ค์ด๊ฐ ๋ฒ๋ฆฌ๋ ๊ฒ ๋ฌธ์ ์ธ ๋ฏํ๋ค. ๊ทธ๋์ ์๋ก๊ณ ์นจํ๊ณ ํํธ๊ฐ ํ๋ฆฌ๋๊น ๋ค์ ๋๋ฅด๋ฉด ์ซ์๊ฐ 1์ฉ ๋์ด๋๋.. ์ด์ํ ๋ฒ๊ทธ.. ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด true๋ก m..
Today, What I learned? ์ ์ ํผ๋๋ฐฑ์ ๋ฐ์ํ์ฌ, ๊ธฐ์กด์ ๊ณต์ ๊ธฐ๋ฅ์์ ์นด์นด์คํก ๊ณต์ ๋ฅผ ์ถ๊ฐํ๊ธฐ๋ก ํ๋ค. (์๋ฌด๋๋ ๋ง์ด ์ฐ์ด๋๊น) ์ด์ ํ๋ก์ ํธ์๋ ๊ตฌํ๋์ด ์๋ ๋ถ๋ถ์ด๋ผ (๋ด๋นํ์ง ์์) ๊ฝค ๋ง์ ์ฐธ๊ณ ๋ฅผ ํ์์๋?.. ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์ ์ฉํ๋ ค๋ค ๋ณด๋ ์ค๋ฅ๊ฐ ์ข ๋ฐ์ํด์ ๊ธฐ๋ก.. ์ฌ์ ์์ ์ผ๋จ ์นด์นด์ค ๋๋ฒจ๋กญ์ค์์ ์ฑ ๋ฑ๋ก๊ณผ ํ๋ซํผ์ ๋๋ฉ์ธ ๋ฑ๋ก์ด ํ์ํ๋ค. ์ฑ์ ๋ฑ๋กํ๋ฉด ์ฑ ํค๋ฅผ ํ์ธํ ์ ์๊ณ , ์ฌ๊ธฐ์ ํ์ํ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํค๊ฐ. env ํ์ผ์ ์ถ๊ฐํด ์ฃผ์! ๋ ํ๋ซํผ์์ Web์ ๋๋ฉ์ธ์ ์ถ๊ฐํด ์ค๋ค. ๋๋ ๋ฐฐํฌ์ฃผ์๋ ๋ก์ปฌํธ์คํธ๋ฅผ ์ถ๊ฐํด ์ฃผ์๋ค. ์ถ๊ฐ์ ์ผ๋ก PR์ vercel ํ๋ฆฌ๋ทฐ์์ ํ์ธํ๊ณ ์ถ๋ค๋ฉด ํ๋ฆฌ๋ทฐ ์ฃผ์๋ฅผ ์ถ๊ฐํด์ค์ผ ํ๋ค. index.html index.html์ ํค๋ ..
Today, What I learned? ์ฃผ๋ง์ฏค์ ๋์์ธ ์์ ์ฌํญ์ ๋ฐ์ํ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ธ ์ธํ ํ๊ทธ ํด๋ฆฌ์ด ๋ฒํผ์ด ์ ๋๋ก ๋์ํ์ง ์๋ ์ด์.. ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๋ค๊ฐ ์ ์ด ์ปดํฌ๋ํธ์ ๋น์ ์ด ์ปดํฌ๋ํธ์ ๋ํด์๋ ์ฐพ๊ฒ ๋์ด์ ํ ๋ฒ ์ ๋ฆฌํด ๋ณธ๋ค. ์์ธ ํ์ ์ผ๋จ ์ฒ์์ ๋์์ด ์ ๋๋๋ฐ, ํ ๋ฒ ์ง์ฐ๊ณ ๋ ๋ค๋ถํฐ ์ ๋๋ก ๋์์ด ๋์ง ์์๋ค. ๊ทธ๋์ ๋ก๊ทธ๋ฅผ ์ฐ์ด๋ณด๋.. state๋ ๋ณ๊ฒฝ์ด ์ ๋์์ง๋ง input์ฐฝ์ ๋น์ด๋ฒ๋ฆฐ ๊ฐ์ด ๋ค์ ๋ฐ์์ด ์ ๋๊ณ ์๋ ์ํ.. input ํ๊ทธ์ state์ ๊ฐ์ด ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์์ด ๋์ง ์๊ณ ์๋ค๋ ๊ฒ์ ํ์ธํ๋ค. ์์ธ์ ๋ฐ๋ก defaultValue !.. ๋ง์ดํ์ด์ง๋ ๋์ฒด๋ก ์์ ํ๋ ์์ญ์ด๊ธฐ ๋๋ฌธ์ ๋ฌด์์์ ์ผ๋ก value ๋์ defaultValue๋ฅผ ์ถ๊ฐํ๋ ๊ฒ ๊ฐ๋ค. (๊ธฐ..
Today, What I learned? ์ง๊ธ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๊ณ ์๋ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ staleTime๊ณผ CacheTime, invalidateQueries์ ๋ํ ๊ฐ๋ ์ด ์ ๋ฆฝ๋์ด ์์ง ์์ ๊ฒ ๊ฐ์์ ํ๋ฒ ์ ๋ฆฌํ๋ฉด์ ๊ณต์๋ฌธ์๋ ์ฝ์ด๋ณด๊ณ .. ๋ฏธ๋์ ๋๋ฅผ ์ํ ๊ธฐ๋ก!.. ๊ณต์ ๋ฌธ์ ๋งํฌ๋ ์ด์ชฝ์ด๋ค. https://tanstack.com/query/latest/docs/react/overview Overview | TanStack Query Docs TanStack Query (FKA React Query) is often described as the missing data-fetching library for web applications, but in more technical terms, it ma..
Today, What I learned? ์ฌ์ค์ ๋ผ๋์ค๋ผ๋ ์ฝ์์ ๋ผ๋์ค๋ฒํผ์ ํด๋นํ๋ ๊ฒฝ๋ ฅ ๋ถ๋ถ ์ปดํฌ๋ํธ์ ๋ค์ด๊ฐ ์์์๋ ๋ถ๊ตฌํ๊ณ , ์ ์ฒด์ ์ผ๋ก ๋ ๋๋ง์ด ๋๋ ๊ฒ์ ์ ์ ์์๋ค. ๋ถ๋ชจ์ปดํฌ๋ํธ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์!... ์ด๋ฐ ์ธ๋ฐ์๋ ๋ ๋๋ง ํ์๋ฅผ ์ค์ด๊ณ ์, React.memo๋ฅผ ์ ์ฉํ๊ธฐ๋ก ํ๋ค. UserTopInfo -> ์ฒดํฌ ์์ญ์ ๊ฐ์ธ๋ ์ปดํฌ๋ํธ -> ์ฒดํฌ๋ฐ์ค/๋ผ๋์ค ๋ฒํผ ์ปดํฌ๋ํธ ํํ๋ก ๊ตฌ์ฑ์ด ๋์ด์์ด์, ํด๋ฆญ์ ์ฃผ์ฒด๊ฐ ๋๋ ๊ฐ์ฅ ๋ด๋ถ ์ปดํฌ๋ํธ์ธ ์ฒดํฌ๋ฐ์ค์ ๋ผ๋์ค ๋ฒํผ ์ปดํฌ๋ํธ์ memo๋ฅผ ์ ์ฉํ๋ค. ๋ ๋ค userTopInfo์์ ์ ์ญ ์ํ์ธ userInfo๋ผ๋ props๋ฅผ ๊ณตํต์ ์ผ๋ก ๋ฐ๊ณ ์๋ค. (์ ์ ๊ฐ ์์ ํ ์ ๋ณด์ ๋ํ ๋ถ๋ถ!) profiler ์ ๋ณด ์์ ๊ณผ ๊ด๋ จ๋ UserInfoT..
Today, What I learned? ๋ง์ดํ์ด์ง์ UI๊ฐ ๊ฝค.. ๋ณ๊ฒฝ์ด ๋์๋ค. ๊ธฐ์กด๊ณผ ๋ค๋ฅด๊ฒ ๊ธฐ์ ์คํ๋ณ ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํด์ผ ํ๋๋ฐ, ์ผ์ผ์ด import ํด์ฌ ์๋ ์์ผ๋.. ๋์ ์ผ๋ก ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ฐพ์๋ณด๊ฒ ๋์๋ค. ์์ค๋ฐ์ค๋ฅผ ๋ณด๊ณ ํ์๋ถ์ด require๋ผ๋ ํํธ๋ฅผ ์ฃผ์ จ๋ค. ๊ธฐ์กด ์ํ ๊ฐ๊ฐ ๊ธฐ์ ์คํ์ ํด๋นํ๋ ์์ด์ฝ ์ด๋ฏธ์ง ์ ์ฉ์ ์ํด ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ค. ํ์ง๋ง ๋ชจ์กฐ๋ฆฌ ์๋ฐ ใ ... require() ์ ์ฉ require๋ฅผ ์๋์ ๊ฐ์ด ์ ์ฉํด๋ณด์์ ๋, ์ด๋ฏธ์ง๊ฐ ์ ๋จ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ธ๋ก๊ทธ๋ค์ ๋ณด๋ค๋ณด๋ .default๋ฅผ ๋ถ์ฌ์ผ ์๋ฐ์ด ์ ๋จ๋ ๊ฒฝ์ฐ๊ฐ ๋ ์๋๋ฐ, ๋ ๊ฐ์ ๊ฒฝ์ฐ๋ ์คํ๋ ค ๋ถ์ด๋๊น ์๋ฐ์ด ๋ด๋ค. ์ผ์ด์ค ๋ฐ์ด ์ผ์ด์ค์ธ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง? require๋ง ..
Today, What I learned? ๋ผ์ดํธํ์ฐ์ค์ ์งํ๋ฅผ ๋ณด๊ณ ํ๋กํ ์ด๋ฏธ์ง์ ํ์ฅ์๋ฅผ webp๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ข๊ฒ ๋ค๊ณ ํ๋จ๋์ด์.. ๋ค๋ฅธ ์ด๋ฏธ์ง ํ์ฅ์๋ฅผ ๋ฐ๊พธ๋ ๊ณผ์ ์์ ํ๋กํ ์ด๋ฏธ์ง ํ์ฅ์๋ ํ๋ฉด๊ณต์ ๋ฅผ ํตํด ํ์ ๋ถ์ด ๋ณ๊ฒฝํด ์ฃผ์ จ์ง๋ง, ๊ทธ ๊ณผ์ ์์ ๋ด๊ฐ ๋ ์ค์ํ(!) ์ฝ๋๊ฐ ์์ด์ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค ^^ใ ์ฐ์ ํ์ฌ ๋ผ์ดํธ ํ์ฐ์ค๋ ์ด๋ ๋ค. ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ฆ ์ฐ๋ฆฌ ํ๋ก์ ํธ์์๋ ์ด๋ฏธ์ง ์ฌ์ด์ฆ ์ต์ ํ๋ฅผ ์ํด react-image-file-resizer ๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๊ณ ์๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ฅ์๋ฅผ jpg, png ๋ฟ๋ง ์๋๋ผ webp๋ ํจ๊ป ์ ๊ณตํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉ๋์ด ์๋ ๋ฆฌ์ฌ์ด์ฆ ํฌ๋งท์ ์๋์ ๊ฐ๋ค. const resizeFile = (file: File) => new Promi..
Comment