[TIL/Coin Site Project] 2023/12/05
Home Page Layout โ๏ธ PageContainer.jsx ๐ข
Home Page Layout โ๏ธ
import React from "react";
import { Box } from "@mui/material";
import PageContainer from "../components/layout/common/PageContainer";
import ComponentWrapper from "../components/layout/common/ComponentWrapper";
import Table from "../components/home/Table";
const Home = () => {
return (
<>
<PageContainer>
<ComponentWrapper>
<Box sx={{ height: "auto" }}>
{/* Card Area */}
<Box sx={{ display: "flex", columnGap: "60px", padding: "60px 0" }}>
<Box
sx={{
backgroundColor: "#0e1821",
width: "360px",
border: "none",
height: "200px",
borderRadius: "15px",
transition: "opacity 0.3s ease",
"&:hover": {
opacity: 0.8,
},
}}
>
<p
style={{
textAlign: "center",
color: "white",
fontWeight: "bolder",
}}
>
'Trending' rendering
</p>
<p
style={{
textAlign: "center",
color: "white",
fontWeight: "bolder",
}}
>
์ค๋ฅด๋ฅต ์์
</p>
</Box>
<Box
sx={{
backgroundColor: "#0e1821",
width: "360px",
border: "none",
height: "200px",
borderRadius: "15px",
transition: "opacity 0.3s ease",
"&:hover": {
opacity: 0.8,
},
}}
>
<p
style={{
textAlign: "center",
color: "white",
fontWeight: "bolder",
}}
>
'News' rendering
</p>
<p
style={{
textAlign: "center",
color: "white",
fontWeight: "bolder",
}}
>
์ค๋ฅด๋ฅต ์์
</p>
</Box>
<Box
sx={{
backgroundColor: "#0e1821",
width: "360px",
border: "none",
height: "200px",
borderRadius: "15px",
transition: "opacity 0.3s ease",
"&:hover": {
opacity: 0.8,
},
}}
>
<p
style={{
textAlign: "center",
color: "white",
fontWeight: "bolder",
}}
>
'Fear & Greed Index' rendering
</p>
<p
style={{
textAlign: "center",
color: "white",
fontWeight: "bolder",
}}
>
์ค๋ฅด๋ฅต ์์
</p>
</Box>
</Box>
{/* Table Area */}
<Table />
</Box>
</ComponentWrapper>
</PageContainer>
</>
);
};
export default Home;
PageContainer.jsx ๐ข
Appbar์ Footer ์ฌ์ด์ ์ถ๊ฐ๋ Box Area์ ๊ดํ ๋ ผ์์ด๋ค.
PageContainer๋ฅผ ํตํด ๋ง ๊ทธ๋๋ก 'ํ์ด์ง๋ฅผ ๊ฐ์ ๊ฒฝ์ฐ', ํด๋น ํ์ด์ง์ ๋ด์ฉ์ Appbar์ Footer ์ฌ์ด์ ์์นํ๊ฒ ๋๋ค.
์ด๋, ๋ณด์ฌ์ง๋ ์ต์ํ์ ๋์ด์ ๋์ด๋ '์ฌ์ฉ์ ๊ธฐ๊ธฐ์ view'๋งํผ์ผ๋ก ์ค์ ๋๋ค. ์ถ๊ฐ์ ์ผ๋ก 'flex-grow: 1'์ ํตํด ํ์ด์ง์ ๋ด์ฉ์ด Appbar์ Footer ์ฌ์ด์ ๋ชจ๋ ๋ด์์ง๋๋ก ๋ด์ฉ์ ๊ตฌ์ฑํ๋ค.
import Appbar from "../appbar/Appbar";
import Footer from "../footer/Footer";
import { Box } from "@mui/material";
const PageContainer = ({ children }) => {
return (
<>
<Appbar />
<Box
sx={{
minHeight: "100vh",
minWidth: "100vw",
flexGrow: 1,
backgroundColor: "#232531",
}}
>
{children}
</Box>
<Footer />
</>
);
};
export default PageContainer;
ComponentWrapper.jsx ๐ข
๊ฒฝ์ฐ์ ๋ฐ๋ผ์, page์ ์ ์ฒด px์ ์ฐจ์งํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์์ง๋ง, component๋ฅผ 1200px๋ก ์ ํํ ํ์๋ ์๋ค.
๊ฐ๋ น 'banner'๋ ์ ์ฒด ํ์ด์ง width๋ฅผ ์ฐจ์งํ๋๋ก ์ค์ ํ๊ณ ์ถ๊ณ , ๋์์ 'page์ ๋ด์ฉ'์ ๊ดํ ๋ถ๋ถ์ 1200px์ด๋ผ๋ ์ผ๊ด๋ layout์ ํตํด ๋ณด์ฌ์ฃผ๊ณ ์ถ๋ค๋ฉด, banner๋ PageContainer์ ์ ํ ํ๊ณ , ๋๋จธ์ง ๋ด์ฉ์ ComponentWrapper๋ก ๊ฐ์ธ๋ฉด ๋๋ค.
import React from "react";
import { Box } from "@mui/material";
const ComponentWrapper = ({ style, children }) => {
return (
<Box
style={style}
sx={{
maxWidth: "1200px",
margin: "0 auto",
height: "auto",
width: "100%",
}}
>
{children}
</Box>
);
};
export default ComponentWrapper;ํ์ฌ ๋ชจ์ต ๐ข


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