'Coin Site Project'

[TIL/Coin Site Project] 2023/12/05

Home Page Layout โœ๏ธ PageContainer.jsx ๐ŸŸข

2023๋…„ 12์›” 5์ผ2min read

Home Page Layout โœ๏ธ

code
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 ์‚ฌ์ด์— ๋ชจ๋‘ ๋‹ด์•„์ง€๋„๋ก ๋‚ด์šฉ์„ ๊ตฌ์„ฑํ–ˆ๋‹ค.

code
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๋กœ ๊ฐ์‹ธ๋ฉด ๋œ๋‹ค.

code
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

REST API

ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ์‚ฌ์ด

HTTP ์ƒํƒœ ์ฝ”๋“œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ฐฑ์—”๋“œ๋กœ ๋ณด๋ƒˆ๋˜ ์š”์ฒญ์˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์˜๋ฏธํ•˜๋Š” ์ผ์ข…์˜ ์•ฝ์†์ด๋ฉฐ, API๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ƒํƒœ ์ฝ”๋“œ์™€ ๊ด€๋ จํ•˜์—ฌ, ๋ฐฑ์—”๋“œ๋Š” ์ž˜ ๋ชจ๋ฅด๋Š” ํ”„๋ก ํŠธ์—”๋“œ์˜ ์Šฌํ”ˆ ์‚ฌ์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.์•„๋ž˜๋Š” ์š”์ฒญ์ด ์‹คํŒจํ–ˆ์Œ์—๋„, ๋ฐฑ์—”๋“œ์—์„œ ์ƒํƒœ ์ฝ”๋“œ

JWT

ํ† ํฐ ๊ด€๋ฆฌ ๋ฐฉ์‹ ํ†บ์•„๋ณด๊ธฐ

0. ๋“ค์–ด๊ฐ€๋ฉฐ ๐ŸŽฏ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ์‚ฌ์šฉ์ž ์ธ์ฆ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฃผ์–ด์ง„ ๊ถŒํ•œ์„ ํ™•์ธํ•˜๋Š” ์ž‘์—…์€ ์ธ๊ฐ€๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ธ๊ฐ€๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ธ์ฆ์—๋Š” ๋งŽ์€ ๋ฐฉ์‹์ด ์žˆ์ง€๋งŒ, ์˜ค๋Š˜์€ ์„ธ์…˜ ์ธ์ฆ ๋ฐฉ

A2A

A2A / MCP ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜

0. ๋“ค์–ด๊ฐ€๋ฉฐ โœ๏ธ Google for Developers์—, ๋ ˆ์Šคํ† ๋ž‘ ๊ณต๊ธ‰๋ง ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์—ฎ์€ 6๋Œ€ ํ”„๋กœํ† ์ฝœ(MCP, A2A, UCP, AP2, A2UI, AG-UI)์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๊ฐ€ ๊ฒŒ์‹œ๋œ ์ดํ›„, MCP์™€ A2A๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•ด ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ