[TIL/React] 2023/06/24
useRef ๐ข Reference ๐ก ์ปดํฌ๋ํธ์ ์ต์๋จ์์ useRef๋ฅผ ํธ์ถํ์ฌ ref๋ฅผ ์ ์ธํ๋ค. Usage ๐ก Referencing a value with a ref ๐ฃ ref๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ฐธ์กฐํ ์ ์๋ค. ์ ์ปดํฌ๋ํธ๋ ๋ฒํผ์ด ํด๋ฆญ๋ ํ์๋ฅผ
useRef ๐ข
useRef๋ ``rendering์ ํ์ํ์ง ์์ ๊ฐ`์ `์ฐธ์กฐ``ํ ๋ ์ฌ์ฉ๋๋ React Hook์ด๋ค.
React ๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, useRef Hook์ ํฌ๊ฒ ์ธ ๊ฐ์ง ์ํฉ์์ ์ฌ์ฉ๋๋ค.
1. Referencing a value with a ref 2. Manipulating the DOM with a ref 3. Avoiding recreating the ref contents
๋ง์ ๋ด์ฉ์ด ์๊ฒ ์ง๋ง, ์ค๋์ ๊ณต์๋ฌธ์์ ์๋ Stopwatch ์์ ์ฝ๋๋ฅผ ํตํด useRef๋ฅผ ์ฌ์ฉํ๊ณ useState์ ๋น๊ตํด ๋ณด์๋ค.
Stopwatch code ๐ก
import { useState, useRef } from "react";
export default function Stopwatch() {
const [startTime, setStartTime] = useState(null);
const [now, setNow] = useState(null);
const intervalRef = useRef(null);
console.log("๋ ์คํ๋์ด 1");
// 2. handleStart ํจ์๊ฐ ์คํ๋จ
function handleStart() {
// 3. startTime๋ผ๋ ์ํ๋ฅผ ํ์ฌ ์๊ฐ์ผ๋ก ์
๋ฐ์ดํธ
setStartTime(Date.now());
// 4. now๋ผ๋ ์ํ๋ฅผ ํ์ฌ ์๊ฐ์ผ๋ก ์
๋ฐ์ดํธ
setNow(Date.now());
// 5. cleaerInterval์ ์ฌ์ฉํ์ฌ ์คํ๋๋ ์ธํฐ๋ฒ์ ์ค์ง, ๋จ ์ด๊ธฐ๊ฐ์ด null์ด๊ธฐ์ ์ฒซ ํด๋ฆญ์์๋ ๋ฌด์๋จ
clearInterval(intervalRef.current);
// 6. 0.01์ด๋ง๋ค now๋ฅผ ํ์ฌ ์๊ฐ์ผ๋ก ์
๋ฐ์ดํธํ๋ ์๋ก์ด ์ธํฐ๋ฒ์ ์ค์ ํจ
intervalRef.current = setInterval(() => {
setNow(Date.now());
}, 10);
}
// 12. handleStop ํจ์๊ฐ ์คํ๋จ
function handleStop() {
// 13. ์คํ ์ค์ธ ์ธํฐ๋ฒ์ clearInterval์ ์ฌ์ฉํ์ฌ ์ค์งํจ
clearInterval(intervalRef.current);
}
// 7. secondsPassed ๋ณ์๋ ๊ฒฝ๊ณผํ ์๊ฐ์ ๋ํ๋ด๋ ๋ณ์
let secondsPassed = 0;
console.log(secondsPassed);
console.log("๋ ์คํ๋์ด 2");
// 8. startTime๊ณผ now๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ์๋ง ๊ฐ์ ๊ณ์ฐํจ
if (startTime != null && now != null) {
// 9. ๊ณ์ฐ์ '(now-startTIme)/1000'๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๋ฐ๋ฆฌ์ด ๋จ์์ธ ์๊ฐ์ ์ด ๋จ์๋ก ๋ณํํจ
secondsPassed = (now - startTime) / 1000;
}
console.log(secondsPassed);
console.log("๋ ์คํ๋์ด 3");
return (
<>
{/* 10. ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์์์ ์ธ ์๋ฆฌ๊น์ง ๋ณด์ฌ์ค */}
<h1>Time passed: {secondsPassed.toFixed(3)}</h1>
{/* 1.Start ๋ฒํผ์ ํด๋ฆญํจ */}
<button onClick={handleStart}>Start</button>
{/* 11. Stop ๋ฒํผ์ ํด๋ฆญํจ */}
<button onClick={handleStop}>Stop</button>
</>
);
}

์ฝ๋๋ง๋ค ์ฃผ์์ผ๋ก ์ค๋ช
์ ์ฒจ๋ถํ์ง๋ง, ํต์ฌ์ ์ธ ๋ด์ฉ์ useState๋ ``์ํ๋ฅผ ์
๋ฐ์ดํธ`ํ๊ณ ํด๋น ์ํ์ ๋ํ `๋ ๋๋ง`์ ๊ด๋ฆฌํ๋ ๋ฐ๋ฉด, useRef๋ `๊ฐ์ ์ ์ง`ํ๊ณ ์ปดํฌ๋ํธ์ `๋ ๋๋ง๊ณผ ๊ด๋ จ์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ``ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค๋ ์ ์ด๋ค.

More to read
Amazon VPC Architecture ์ดํดํ๊ธฐ
์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๊ธฐํํ๋ฉฐ, ๊ฐ๋ฐ์์ ๋ฌด์์ ๊ฐ์ฅ ๋จผ์ ๊ณ ๋ฏผํด์ผ ํ๋์ง ๋ค์ ๋์๋ณด๊ฒ ๋์์ต๋๋ค.ํ๋๋ ํ๋ก ํธ์๋๊ฐ ๋ชจ๋ ์ค๊ณ์ ์ถ๋ฐ์ ์ด๋ผ๊ณ ๋ฏฟ์์ต๋๋ค. ์ ์ ๊ฐ ๋ฌด์์ ๋ณด๊ณ , ์ด๋ค ํ๋ฆ์์ ๋จธ๋ฌด๋ฅด๊ณ ์ดํํ๋์ง์ ๋ํ ์ดํด ์์ด ์๋น์ค๋ฅผ ๋ง๋ ๋ค๋ ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ๊ธฐ
'์์ฌ์ดํธ'ํ๋ก ํธ์๋ ๊ด์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ ์ดํดํ๊ธฐ
์ค๋๋ง์ ๋ฐฉ๋ฒ๋ก ์ ๊ดํ ๊ธ์ ์ฐ๊ฒ ๋์์ต๋๋ค. ์ต๊ทผ ์ํฉ์ ์ด๋ ์ต๋๋ค. SSAFY์์๋ ํ๋ฃจ์ ์์ฒญ๋ ์์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ค์ ๊ณผ์ ๋ก ์ํํ๊ฒ ๋ฉ๋๋ค. ๊ทธ ๊ณผ์ ์์, '๊ตฌํ๋ ฅ'์ด ๋งค์ฐ ๋จ์ด์ง๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ์์ ํ ์ด๋ ค์ด ๋ฌธ์ ๋ผ๋ฉด '์์ฌ์'์ด๋ผ๋ ๊ฐ์ ์กฐ์ฐจ ๋๋ผ์ง
SubnetVPC ์ค๊ณ์ ์์: IP์ Subnet
๋ฐ๋ณต๋๋ ๋ฃจํด ์์์ ์ป์ ์์ ๊ฐ์ ๋ฐํ ์ผ์, ์ด์ ๋ ๊ธฐ์ ์ ์คํํธ๋ผ์ ๋ํ๊ธฐ ์ํ ๊ฐ์ธ ํ๋ก์ ํธ์ ์ฐฉ์ํ๊ณ ์ ํฉ๋๋ค.์ด๋ฒ ํ๋ก์ ํธ์ ๋ชฉํ๋ ๋จ์ํ ํฌํธํด๋ฆฌ์ค ๊ตฌ์ถ์ ๋์ด, ์ค์ ์๋น์ค ์์ค์ ๋ธ๋ก๊ทธ ์์คํ ๊ตฌํ๊ณผ ๋ค๊ตญ์ด ์ฒ๋ฆฌ ์ ์ฉ ๋ฑ ์ค๋ฌด์ ๊ฐ๊น์ด ์ญ๋์ ํ ๋จ๊ณ