[TIL/React] 2023/08/18
CardComponent ๐ src/components/common/ProductCard.jssrc/data/ProductList.jssrc/pages/Home.jsproduct list์ ๋ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ก๊ณ , ์นด๋ ์ปดํฌ๋ํธ์ map์ ํตํด ์ ์ฉํ ๋ค, home
CardComponent ๐
1. src/components/common/ProductCard.js
import React from "react";
import { styled } from "styled-components";
import ComponentWrapper from "./ComponentWrapper";
import { products } from "../../data/ProductList";
const ProductWrapper = styled.div`
width: calc(33.3% - 40px);
margin: 10px;
`;
const ProductImgWrapper = styled.div`
background-color: rgb(249, 247, 248);
width: 100%;
height: 400px;
border: none;
display: flex;
align-items: center;
justify-content: center;
border-radius: 16px;
box-shadow: 0px 10px 8px #999;
`;
const ProductImage = styled.img`
width: 100%;
height: auto;
`;
const ProductInfoTitle = styled.p`
font-weight: bolder;
font-size: 25px;
`;
const ProductInfoEtc = styled.p`
color: #9b9b9b;
font-weight: bolder;
`;
const ProductCard = () => {
return (
<ComponentWrapper style={{ display: "flex", flexWrap: "wrap" }}>
{products?.map((product) => (
<ProductWrapper key={product?.id}>
<ProductImgWrapper>
<ProductImage src={product?.image} />
</ProductImgWrapper>
<div>
<ProductInfoTitle>{product?.title}</ProductInfoTitle>
<ProductInfoEtc>
{product?.price} / {product?.weight}
</ProductInfoEtc>
</div>
</ProductWrapper>
))}
</ComponentWrapper>
);
};
export default ProductCard;
2. src/data/ProductList.js
import {
porkImg,
chickenImg,
porkcutletImg,
eggImg,
milkImg,
hanuroundImg,
carthegardenImg,
} from "../images";
export const products = [
{
id: "1",
image: porkImg,
title: "์ด์ ์ ๋ผ์ง ์ผ๊ฒน์ด ๊ตฌ์ด์ฉ",
price: "๊ธฐ์ค๊ฐ 19,800์",
weight: "600g",
},
{
id: "2",
image: chickenImg,
title: "์ด์ ์ ๋ญ๋ณถ์ํ",
price: "๊ธฐ์ค๊ฐ 7,800์",
weight: "950g",
},
{
id: "3",
image: porkcutletImg,
title: "์ด์ ์ ๋ฑ์ฌ ๋๊น์ค",
price: "๊ธฐ์ค๊ฐ 12,500์",
weight: "770g",
},
{
id: "4",
image: eggImg,
title: "์ด์ ์ ๋๋ฌผ๋ณต์ง ๋ฌดํญ์์ ์ ์ ๋",
price: "๊ธฐ์ค๊ฐ 6,900์",
weight: "12๊ตฌ",
},
{
id: "5",
image: milkImg,
title: "์ด์ ์ ๋ฌดํญ์์ ์ฐ์ ",
price: "๊ธฐ์ค๊ฐ 3,600์",
weight: "900ml",
},
{
id: "6",
image: hanuroundImg,
title: "์ด์ ์ ์ด์ ์์ฉ ํ์ฐ ์ฐ๋ ๋ค์ง์ก",
price: "๊ธฐ์ค๊ฐ 17,100์",
weight: "180g",
},
{
id: "7",
image: carthegardenImg,
title: "๋๊ฐ๊ฑฐ๋ ๋",
price: "๊ธฐ์ค๊ฐ 39,800์",
weight: "980g",
},
];
3. src/pages/Home.js
import React from "react";
import { backgroundImg } from "../images";
import ComponentWrapper from "../components/common/ComponentWrapper";
import TestComponent from "../components/common/TestComponent";
import ProductCard from "../components/common/ProductCard";
const Home = () => {
return (
<>
<div style={{ backgroundColor: "white", height: "1000px" }}>
<img src={backgroundImg} style={{ width: "100%", height: "100%" }} />
</div>
<div
style={{
backgroundColor: "white",
height: "1000px",
overflowX: "auto",
}}
>
<ProductCard />
</div>
<div style={{ backgroundColor: "gray", height: "1000px" }}></div>
<div style={{ backgroundColor: "white", height: "1000px" }}></div>
</>
);
};
export default Home;
product list์ ๋ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ก๊ณ , ์นด๋ ์ปดํฌ๋ํธ์ map์ ํตํด ์ ์ฉํ ๋ค, home page์์ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ ๊ตฌ์กฐ์ด๋ค.
4. ํ์ฌ

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