๋ฆฌ์กํธ useLayoutEffect ๊ฐ๋ ๋ฐ ์ฌ์ฉ๋ฒ
๐คทโ๏ธ Rendering๋?
useLayoutEffect์ ๋ํด์ ์์๋ณด๊ธฐ ์ ์ ๋ฆฌ์กํธ์์ ๊ฐ์ฅ ์ค์ํ ๋ ๋๋ง ๊ณผ์ ๊ฐ๋จํ๊ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
๋ ๋๋ง(Rendering)์ด๋?
์ฝ๊ฒ ์ค๋ช ํด์ HTML, CSS, JavaScript ๋ฌธ์๋ฅผ ์ฝ๊ณ ๋ธ๋ผ์ฐ์ ์ UI ๊ทธ๋ฆฌ๋ ๊ณผ์ ์ ๋งํฉ๋๋ค.
React hooks useSate ์ ๋ํด์
https://cometruedream.tistory.com/73
React hooks useSate ์ ๋ํด์
๋ฆฌ์กํธ ํ๋ ์์ํฌ์ค์ ๊ผญ์์์ผํ React hooks ์ค์ ๊ฐ์ฅ ์ค์ํ useState ์ํ๊ด๋ฆฌ ์ ๋๋ค. useState ๊ฐ๋จํ๊ฒ ์ปดํฌ๋ํธ ์ํ๋ฅผ ๊ฐ๋จํ๊ฒ ์์ฑํ๊ณ ์ ๋ฐ์ดํธ๋ฅผ ์ํฌ์์๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ธฐ๋ณธ
cometruedream.tistory.com
๐คทโ๏ธ useLayoutEffect๋?
useLayoutEffect๋ useEffect์๋ ๋์๋ฐฉ์์ด ๋ค๋ฆ ๋๋ค.
react hook์ค ํ๋๋ก useLayoutEffect๋ ๋ ๋๋ง ๋ ํ UI ์ ์ฉ๋๊ธฐ ์ ์ ์คํ๋๋ ํจ์์ ๋๋ค.
๋ฐ๋ฉด์ useEffect UI ์ ์ฉ๋ ์ดํ์ ์คํ๋ฉ๋๋ค. ์ด ๋ผ์ดํ์ฌ์ดํด์ ์ฐจ์ด์ ์ ์ดํดํ๋๊ฒ์ ์ค์ํฉ๋๋ค.
์ฆ, UI ๊ทธ๋ ค์ง๊ธฐ ์ ์ ์คํ๋๊ธฐ ๋๋ฌธ์ DOM์ ์กฐ์ํ๋ ์ฝ๋๊ฐ ์กด์ฌํ๋๋ผ๋ ์ฌ์ฉ์๋ ๊น๋นก์์ ๊ฒฝํํ์ง ์๊ณ ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ UI๋ฅผ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
react hook ๊ณต์๋ฌธ์
https://react.dev/reference/react/useLayoutEffect
useLayoutEffect – React
The library for web and native user interfaces
react.dev
๐คทโ๏ธ useLayoutEffect์ useEffect ์ฐจ์ด์ ?
- useEffect: ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ํ๋ฉด์ด ๋ ๋๋ง๋ ํ, ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ๊ทธ๋ฆฐ ๋ค์์ ์คํ๋ฉ๋๋ค.
- useLayoutEffect: ๋๊ธฐ์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ์งํ, ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ์ ์ ์คํ๋ฉ๋๋ค.
๐คทโ๏ธ useLayoutEffect ์ฌ์ฉ๋ฒ
useLayoutEffect hook ์ฌ์ฉ๋ฐฉ๋ฒ์ useEffect์ ๋์ผํฉ๋๋ค.
useEffect(() => {
// ๋ก์ง
return () => /* cleanup */
}, [dependancy array]);
useLayoutEffect(() => {
// ๋ก์ง
return () => /* cleanup */
}, [dependancy array]);
์ฃผ์์
๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, useLayoutEffect๋ ์ฑ๋ฅ์ ์ ํ์ํฌ ์์ด์ useEffect๋ฅผ ๊ถ์ฅํ๋ค๊ณ ์ธ๊ธํฉ๋๋ค.
๊ผญ ํ์ํ ์ํฉ์ด ์๋๋ผ๋ฉด ์ฑ๋ฅ์ ์ ํ์ํค๋ useLayoutEffect๋ณด๋ค useEffect๋ฅผ ์ฌ์ฉํ์๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
*์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ธ ๊ฒฝ์ฐ์๋ useLayoutEffect์ useEffect ์คํ๋์ง ์์ต๋๋ค!
๐คทโ๏ธ useLayoutEffect ์ฌ์ฉ์์
๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ์ค์ ์์ต๋๋ค.
import React, { useLayoutEffect, useRef, useState } from "react";
function App() {
const [height, setHeight] = useState(123);
const divRef = useRef();
useLayoutEffect(() => {
// div ์์์ ๋์ด๋ฅผ ์ธก์ ํ์ฌ ์ํ์ ์ ์ฅ
if (divRef.current) {
setHeight(divRef.current.getBoundingClientRect().height);
}
}, []); // ๋น ๋ฐฐ์ด์ ๋๋ฒ์งธ ์ธ์๋ก ๋๊ฒจ์ฃผ๋ฉด, ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋ ํ ๋ฒ๋ง ์คํ๋ฉ๋๋ค.
return (
<div>
<div ref={divRef} style={{ padding: "20px", border: "1px solid black" }}>
์ธก์ ํ div ์์์
๋๋ค.
</div>
<p>์ด div ์์์ ๋์ด๋ {height}px ์
๋๋ค.</p>
</div>
);
}
export default App;
์์ ์ฝ๋๋ฅผ ์ค๋ช
- useRef๋ฅผ ์ฌ์ฉํ์ฌ div ์์๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
- useLayoutEffect๋ฅผ ์ฌ์ฉํ์ฌ UI๋ฅผ ๋ ๋๋ง ํ๊ธฐ ์ ์ useRef๋ฅผ ์ฐธ์กฐํ div ๋์ด๋ฅผ ์ธก์ ํ๊ณ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค.
- height์ div์์์ ๋์ด ๊ฐ์ ํ๋ฉด์์ ๋ณด์ค์ ์์ต๋๋ค.
์์ ์ฝ๋๋ฅผ ์ดํดํ๋ ๊ฒ์ ์ค์ํ์ง ์์ต๋๋ค.
์ค์ํ๊ฒ์ useLayoutEffect hook ์ธ์ ์ํํ๋๋? ๋ธ๋ผ์ฐ์ ์ UI ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ์ ์ ํธ์ถ๋์ด์ ์คํ๋์์ต๋๋ค.
๐คทโ๏ธ ๋ง์ง๋ง์ผ๋ก
๋ฆฌ์กํธ์ useLayoutEffect ํ ์ ๋ํด์ ์์๋ดค์ต๋๋ค.
๋ธ๋ผ์ฐ์ UI๊ฐ ๊ทธ๋ ค์ง๊ธฐ์ ์ ๊น๋ฐ์ ์์ด, ๋น ๋ฅด๊ฒ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ DOM์กฐ์์ด ํ์ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ์ค ์ ์๋ ํ ์ ๋๋ค.
ํ์ง๋ง useLayoutEffect ์ฑ๋ฅ์ ํ์ ์์ธ์ด ๋ ์ ์์ผ๋ฏ๋ก ๊ผญ ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉํ์๊ณ useEffect hook์ ์ฌ์ฉํ์๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆฝ๋๋ค.
์ฌ๋ฐ๋ ์ค๋์ ๋ ๋ณ ์ด์ธ ๋ณด๊ณ ๊ฐ์ธ์!
https://cometruedream.tistory.com/247
[React] Tailwind ํ์ค, ๋์ค, ์ธ์ค ํจ๊ณผ className ์ปค์คํ
๐คทโ๏ธ Tailwind ํ์ค, ๋์ค, ์ธ์ค ํจ๊ณผํ๋ก์ ํธ ์งํ์ค ๋ฐฐ๋ ๋งํฌ์ URL ๊ธธ์ด๊ฐ ๋๋ฌด ๊ธธ์ด์ 3์ค ํจ๊ณผ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ์ต๋๋ค. React + Tailwind CSS ์ ํ ๋ ํ๋ก์ ํธ ์ฌ์ CSS ํ์ผ & style ํ๊ทธ๋ฅผ ์ฌ์ฉํ
cometruedream.tistory.com
https://cometruedream.tistory.com/243
NestJS Lifecycle (์๋ช ์ฃผ๊ธฐ) ๊ฐ๋
๐คทโ๏ธ ๋ณธ๋ก ์ ์์ Nest JS ๊ฐ๋ ?Nest JS๋ Node JS ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์๋นํ ์ค๋ซ๋์ Express ๊ธฐ๋ฐ์ผ๋ก ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ์๋์ ์ธ ์
cometruedream.tistory.com
https://cometruedream.tistory.com/242
๋ฆฌ์กํธ Vite Proxy ํ์ฉํ CORS ์ค๋ฅ ํด๊ฒฐ
๐คทโ๏ธ ๋ณธ๋ก ์ ์์ํ๋ก ํธ์๋ ๋ฒ๋ค๋ฌ ๊ฐ๋ ๊ณผ webpack vs vite ๋น๊ต์ ๋ํด์ ๊ณต๋ถ๋ฅผ ํ๊ณ ๊ธ์ ๋ณด์๋ฉด ๋ ๋ง์ ๋์์ด ๋ฉ๋๋ค^^ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ํ ๋ฒ๋ค๋ฌ ๊ฐ๋ ๊ณผ webpack vs vite ๋น๊ตhttps://comet
cometruedream.tistory.com
https://cometruedream.tistory.com/241
React ํด๋๊ตฌ์กฐ FSD ๊ธฐ๋ฅ ๋ถํ ์ค๊ณ ์ํคํ ์ฒ
๐คทโ๏ธ ๋ณธ๋ก ์ ์์ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ์ ์์ ํด๋ ๊ตฌ์กฐ, ์ค๊ณ์ ๋ํ ์ํคํ ์ฒ๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋นํ ์ด๋ ต๋ค. ์ด๋ฒ ํ๋ก์ ํธ์ React FSD ํด๋๊ตฌ์กฐ ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ ์์ ์ด๋ผ์ FSD ์ํคํ
cometruedream.tistory.com
https://cometruedream.tistory.com/244
์ฝ๊ฒ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋ Prisma ๋ช ๋ น์ด ์ ๋ฆฌ
๐คทโ๏ธ Prisma ๋ช ๋ น์ด ๋ณธ๋ก ์ ์์ Prisma๋?Nest JS ํ๋ ์์ํฌ์ Prisma ORM์ ํ์ฉํด์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ Prisma๋ Node JS ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํธ์์ฉ์ด ์๋๋ฉฐ Prisma + DB ์ฐ๋์ผ
cometruedream.tistory.com
[์๋ฐ์คํฌ๋ฆฝํธ 2ํ] ์๋ฐ์คํฌ๋ฆฝํธ ์ซ์ ์๋ฃ๊ตฌ์กฐ์ ๊ฐ๋ ๊ณผ ๋ด์ฅํจ์
์ธ์์ ํฅํด ๋ฌ๋ ค - ์๋ฐ์คํฌ๋ฆฝํธ(javascript) ์ซ์ํ ๋ฐ์ดํฐ ์๋ฃ๊ตฌ์กฐ๋ ๋ชจ๋ ์ข ๋ฅ์ ์ํ์ ์ฐ์ฐ์ ์ํํ ์ ์๋ ์ค์ํ ๋ฐ์ดํฐ ํ์ ์ ๋๋ค. [์๋ฐ์คํฌ๋ฆฝํธ 2ํ] ์๋ฐ์คํฌ๋ฆฝํธ ์ซ์ ์๋ฃ๊ตฌ์กฐ์
fnfentermagazine.com