[TIL/Coin Site Project] 2023/11/30
Dark Mode ์ต์ ๐์๋ก๊ณ ์นจ console ์์ToggleColorMode component renderingtheme executed 1theme executed 2MyApp component rendering๋ชจ๋ ์์ด์ฝ ํด๋ฆญ console ์์toggleCo
Dark Mode ์ต์ ๐
import React, { createContext, useContext, useMemo, useState } from "react";
import IconButton from "@mui/material/IconButton";
import Box from "@mui/material/Box";
import { useTheme, ThemeProvider, createTheme } from "@mui/material/styles";
import Brightness4Icon from "@mui/icons-material/Brightness4";
import Brightness7Icon from "@mui/icons-material/Brightness7";
const ColorModeContext = createContext({ toggleColorMode: () => {} });
function MyApp() {
console.log("MyApp component rendering");
const theme = useTheme();
const colorMode = useContext(ColorModeContext);
return (
<Box
sx={{
display: "flex",
width: "100%",
height: "100vh",
alignItems: "center",
justifyContent: "center",
bgcolor: "background.default",
color: "text.primary",
borderRadius: 1,
p: 3,
}}
>
{theme.palette.mode} mode
<IconButton
sx={{ ml: 1 }}
onClick={colorMode.toggleColorMode}
color="inherit"
>
{theme.palette.mode === "dark" ? (
<Brightness7Icon />
) : (
<Brightness4Icon />
)}
</IconButton>
</Box>
);
}
const ToggleColorMode = () => {
console.log("ToggleColorMode component rendering");
const [mode, setMode] = useState("light");
const colorMode = useMemo(
() => ({
toggleColorMode: () => {
console.log("toggleColorMode executed");
setMode((prevMode) => (prevMode === "light" ? "dark" : "light"));
},
}),
[]
);
console.log("theme executed 1");
const theme = useMemo(
() =>
createTheme({
palette: {
mode,
},
}),
[mode]
);
console.log("theme executed 2");
return (
<ColorModeContext.Provider value={colorMode}>
<ThemeProvider theme={theme}>
<MyApp />
</ThemeProvider>
</ColorModeContext.Provider>
);
};
export default ToggleColorMode;
// what is createContext?
// ์ปดํฌ๋ํธ ํธ๋ฆฌ ์์์ ์ ์ญ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ๊ณ ์๋ ๋ฐฉ๋ฒ?
// ColorModeContext๋ผ๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์๋ toggleColorMode๋ฅผ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ์ ์ฝ๋?
// what is useTheme?
// ์๋ ์ฝ๋์์ theme์, mui์์ ๋ค์ํ theme์ ๊ท์ ํด๋์ ํ๋์ ํ
์ด๋ค.
// what is useContext?
// useContext๋ ํจ์ํ ์ปดํฌ๋ํธ ๋ด์์ ์ปจํ
์คํธ์ ํ์ฌ ๊ฐ์ ๋ฐํํ๋ค. ์ด๋ฅผ ํตํด ํด๋น ์ปจํ
์คํธ์ ๊ฐ์ ์ฝ์ ์ ์๋ค.
// what is useMemo?
// ์ปดํฌ๋ํธ ์ฑ๋ฅ ์ต์ ํ์ ์ฌ์ฉ๋๋ react hook
// ๋ ๋๋ง => ์ปดํฌ๋ํธ ํจ์ ํธ์ถ => memoize๋ ํจ์ ์ฌ์ฌ์ฉ(๋์ผํ ๊ณ์ฐ ๋ฐ๋ณตํ ๋ ์ฌ์ฉ)
// what is ThemeProvider?
// ์ ์ญ์ผ๋ก ํ
๋ง๋ฅผ ์ ์ฉ๋ ๋ ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ
// what is createTheme?
// ํ
๋ง ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํจ์
์๋ก๊ณ ์นจ console ์์
1. ToggleColorMode component rendering 2. theme executed 1 3. theme executed 2 4. MyApp component rendering
๋ชจ๋ ์์ด์ฝ ํด๋ฆญ console ์์
1. toggleColorMode executed 2. ToggleColorMode component rendering 3. theme executed 1 4. theme executed 2 5. MyApp component rendering
+) toggleColorMode executed ์ดํ setState()์ ์ํด re-rendering์ด ๋๋ค๋ ์ ์ด '์์ด์ฝ ํด๋ฆญ console'์์ ์ฃผ๋ชฉํ ์ฌํญ์ด๋ค.
+) createContext, useContext, useMemo => ๋ฆฌ์กํธ ๊ณต์๋ฌธ์๋ฅผ ํตํด ์ ๋ฆฌํด์ผ ๋ ํ์์ฑ์ ๋๊ผ๋ค.
+) ๋ณธ ํ๋ก์ ํธ์๋ ์ด๋ป๊ฒ ์ ์ฉํ ๊ฒ์ธ์ง์ ๋ํด ๊ณ ๋ฏผํ ํ์์ฑ์ ๋๊ผ๋ค.
๊ตฌํ ๐


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