[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
ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ์ฌ์ด
HTTP ์ํ ์ฝ๋๋ ํ๋ก ํธ์๋์์ ๋ฐฑ์๋๋ก ๋ณด๋๋ ์์ฒญ์ ์ํ ๊ฒฐ๊ณผ๋ฅผ ์๋ฏธํ๋ ์ผ์ข ์ ์ฝ์์ด๋ฉฐ, API๋ฅผ ๊ตฌ์ฑํ๋ ํต์ฌ ์์ ์ค ํ๋์ ๋๋ค. ์ํ ์ฝ๋์ ๊ด๋ จํ์ฌ, ๋ฐฑ์๋๋ ์ ๋ชจ๋ฅด๋ ํ๋ก ํธ์๋์ ์ฌํ ์ฌ์ ์ด ์์ต๋๋ค.์๋๋ ์์ฒญ์ด ์คํจํ์์๋, ๋ฐฑ์๋์์ ์ํ ์ฝ๋
JWTํ ํฐ ๊ด๋ฆฌ ๋ฐฉ์ ํบ์๋ณด๊ธฐ
0. ๋ค์ด๊ฐ๋ฉฐ ๐ฏ ์๋น์ค์ ์ ๊ทผํ๋ ค๋ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๋ ๊ณผ์ ์ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ผ๊ณ ํฉ๋๋ค. ์ธ์ฆ๋ ์ฌ์ฉ์์๊ฒ ์ฃผ์ด์ง ๊ถํ์ ํ์ธํ๋ ์์ ์ ์ธ๊ฐ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ด๋ฒ ๊ธ์์๋ ์ธ๊ฐ๋ ๋ค๋ฃจ์ง ์์ต๋๋ค. ์ฌ์ฉ์ ์ธ์ฆ์๋ ๋ง์ ๋ฐฉ์์ด ์์ง๋ง, ์ค๋์ ์ธ์ ์ธ์ฆ ๋ฐฉ
A2AA2A / MCP ๋ฉํฐ ์์ด์ ํธ ์ค์ผ์คํธ๋ ์ด์
0. ๋ค์ด๊ฐ๋ฉฐ โ๏ธ Google for Developers์, ๋ ์คํ ๋ ๊ณต๊ธ๋ง ์๋๋ฆฌ์ค๋ก ์ฎ์ 6๋ ํ๋กํ ์ฝ(MCP, A2A, UCP, AP2, A2UI, AG-UI)์ ๋ํ ๊ฐ์ด๋๊ฐ ๊ฒ์๋ ์ดํ, MCP์ A2A๋ถํฐ ๊ตฌํํด ๋ณด๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋