[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
Amazon VPC Architecture ์ดํดํ๊ธฐ
์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๊ธฐํํ๋ฉฐ, ๊ฐ๋ฐ์์ ๋ฌด์์ ๊ฐ์ฅ ๋จผ์ ๊ณ ๋ฏผํด์ผ ํ๋์ง ๋ค์ ๋์๋ณด๊ฒ ๋์์ต๋๋ค.ํ๋๋ ํ๋ก ํธ์๋๊ฐ ๋ชจ๋ ์ค๊ณ์ ์ถ๋ฐ์ ์ด๋ผ๊ณ ๋ฏฟ์์ต๋๋ค. ์ ์ ๊ฐ ๋ฌด์์ ๋ณด๊ณ , ์ด๋ค ํ๋ฆ์์ ๋จธ๋ฌด๋ฅด๊ณ ์ดํํ๋์ง์ ๋ํ ์ดํด ์์ด ์๋น์ค๋ฅผ ๋ง๋ ๋ค๋ ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ๊ธฐ
'์์ฌ์ดํธ'ํ๋ก ํธ์๋ ๊ด์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ ์ดํดํ๊ธฐ
์ค๋๋ง์ ๋ฐฉ๋ฒ๋ก ์ ๊ดํ ๊ธ์ ์ฐ๊ฒ ๋์์ต๋๋ค. ์ต๊ทผ ์ํฉ์ ์ด๋ ์ต๋๋ค. SSAFY์์๋ ํ๋ฃจ์ ์์ฒญ๋ ์์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ค์ ๊ณผ์ ๋ก ์ํํ๊ฒ ๋ฉ๋๋ค. ๊ทธ ๊ณผ์ ์์, '๊ตฌํ๋ ฅ'์ด ๋งค์ฐ ๋จ์ด์ง๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ์์ ํ ์ด๋ ค์ด ๋ฌธ์ ๋ผ๋ฉด '์์ฌ์'์ด๋ผ๋ ๊ฐ์ ์กฐ์ฐจ ๋๋ผ์ง
SubnetVPC ์ค๊ณ์ ์์: IP์ Subnet
๋ฐ๋ณต๋๋ ๋ฃจํด ์์์ ์ป์ ์์ ๊ฐ์ ๋ฐํ ์ผ์, ์ด์ ๋ ๊ธฐ์ ์ ์คํํธ๋ผ์ ๋ํ๊ธฐ ์ํ ๊ฐ์ธ ํ๋ก์ ํธ์ ์ฐฉ์ํ๊ณ ์ ํฉ๋๋ค.์ด๋ฒ ํ๋ก์ ํธ์ ๋ชฉํ๋ ๋จ์ํ ํฌํธํด๋ฆฌ์ค ๊ตฌ์ถ์ ๋์ด, ์ค์ ์๋น์ค ์์ค์ ๋ธ๋ก๊ทธ ์์คํ ๊ตฌํ๊ณผ ๋ค๊ตญ์ด ์ฒ๋ฆฌ ์ ์ฉ ๋ฑ ์ค๋ฌด์ ๊ฐ๊น์ด ์ญ๋์ ํ ๋จ๊ณ