๊ฐ ํ์๋ค์ ์ด๋ฆ์์ ์ํ๋ฒณ์ ๊ฐ์ ธ์๊ณ ,
ERC-721
NFT token
์์ ์๊ฐ์ ๋ฐ์ ํ๋ช ์SDS-721
๋ก ๋ง๋ค์๋ค.
๐ S (ํ์ฅ๋)
๐น D
๐ช S (Me)
๐โโ๏ธ
์์ง ๋ถ์กฑํ ์ ์ด ๋ง์ ๋๋ ์ฒซ๋ฒ์งธ ํ๋ก์ ํธ์์๋ ๋ถ๊ตฌํ๊ณ ์ ๋ง๋ก ์ข์ ํ์๋ถ๋ค์ ๋ง๋ ์ฑ๊ณต์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ฌด๋ฆฌ ํ ์ ์์๋ค.
์ด ์๋ฆฌ๋ฅผ ๋น์ด ํจ๊ปํด์ฃผ์ ํ์๋ถ๋ค๊ป ๊ฐ์ฌ์ ์ธ์ฌ๋ฅผ ๋๋ฆฝ๋๋ค.
NFT์ ๋งค์ถ์ 2021๋ ์ ํญ๋ฐ์ ์ผ๋ก ์ฑ์ฅํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก 2021๋ ๋งค์ถ์ 9,500๋ง ๋ฌ๋ฌ์์ 250์ต ๋ฌ๋ฌ๋ก ์ฆ๊ฐํ๋ค. ๋์ฒด ๋ถ๊ฐ๋ฅ ํ ํฐ(NFT)์ด ๋์ ํ์ด์์ผ๋ฉฐ ์ด ํ์์ ์ค์ฌ์ ์ธ๊ณ ์ต๋์ NFT ์์ฅ์ธ ์คํ์จ(OpenSea)๊ฐ ์์๋ค. ์ด๋ฌํ ํ์ ์์์ ์ฐ๋ฆฌ ํ์๋ค์ OpenSea ํด๋ก ์ฝ๋ฉ์ ํตํด NFT๋ง์ผ ํ๋ ์ด์ค์ ์ ์ฒด์ ์ธ ์ํคํ ์ฒ๋ฅผ ์ดํดํ๊ณ Web3 ํ๋ซํผ ์์์ User์ ๋ฐ์ดํฐ ์ฃผ๊ถ์ด ์ด๋ป๊ฒ ๋ณดํธ๋๋์ง ์ดํด๋ณด๊ธฐ ์ํด ์ด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค.
OpenSea์ ํ๋ก ํธ์๋-๋ฐฑ์๋ ์ํคํ
์ฒ์ดํด
OpenSea์ API์ ๋์์๋ฆฌ๋ฅผ ์ดํด
Git์ ํตํ ํ์
์ ์ค์์ฑ์ ๋ํ ์ดํด ๋ฐ ์ปค๋ฎค๋์ผ์ด์
๋ฅ๋ ฅ์ ํฅ์
Main Page
์ ๋ค์ด๊ฐ๋ฉด Contract์ ๋ฐํ๋ ๋ชจ๋ NFT๊ฐ ๋๋ค์ผ๋ก ๋ฆฌ์คํ ๋๋ค.
์ฒ์์ 8๊ฐ์ NFT๊ฐ ๋จผ์ ๋ณด์ด๋ฉฐ Load More๋ฒํผ์ ๋๋ฅด๋ฉด 4๊ฐ๊ฐ ์ถ๊ฐ๋ก ๋ก๋๋๋ค.๋๋ Web Page์ ์ฒด์ ๋์์ธ๊ณผ NFT card์ UI๋ฐฐ์น, UX๊ฐ์ ์ ์ํด Load More ๋ฒํผ๊ณผ, Top๋ฒํผ(์คํฌ๋กค์ ์๋๋ก ๋ด๋ ธ์ ๋ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ ์ผ ์๋ก ์ฌ๋ฆผ) ๊ทธ๋ฆฌ๊ณ css์ tailwind๋ฅผ ์ด์ฉํด ์ฌ์ํ๊ฒ ์ผ์ด๋๋ ์๋ฌ๋ค์ ๋ค๋ฌ์์ผ๋ฉฐ ์ฌ์ฉ์ ์นํ์ ์ธ Effect๋ฅผ ์ค๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
๊ฐ๋ณ NFT card๋ฅผ ํด๋ฆญํ๋ฉด
Details
ํ์ด์ง๋ก ์ฐ๊ฒฐ๋๋ฉฐ, ๊ฐ NFT๊ฐ ๊ฐ์ง๊ณ ์๋ ์์ฑ์ ๋ฐ๋ผ ํํฐ๋ง ํ ์ ์๋ ๊ธฐ๋ฅ๋ ์๋ค.๋๋
Explore
์Details
ํ์ด์ง์ ์ ์ฒด์ ์ธ ๋์์ธ์ ๋งก์๊ณ Detailํ์ด์ง์ ๋ค์ด๊ฐ๋ฉด ๋ณธ์ธ์ด ํด๋น NFT card์ owner๊ฐ ์๋ ๊ฒฝ์ฐBuyํ ์ ์๋ ๋ฒํผ
์ ๋ง๋ค์๋ค(๋ณธ์ธ์ด NFT card์ owner๋ฉด Buy๋ฒํผ์ด ์๋ณด์ธ๋ค).
CSS Frame
์ ์ง๋ ๊ฒ๋ ๊ทธ๋ ๊ณ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๊ฐ ์ฌ๋ฌ๊ฐ์ง ์๋ฌ๋ฅผ ๋ง๋ฌ๋๋ฐDetails
ํ์ด์ง๋ฅผ ์์ ํ๋ค๊ฐbuy button
์ ๋๋ฅด๋ฉด ๊ณ์ ์๋ก๊ณ ์นจ๋๋ ๋ฌธ์ ๊ฐ ์ผ์ด๋ฌ๋ค.
์๊ณ ๋ณด๋form tag
์์button tag
๋ฅผ ๋๋ฅด๋ฉด ํ์ด์ง๊ฐ reload๋๋ ๋ฌธ์ ๊ฐ ์์๋๋ฐpreventDefault
๋ก ํด๊ฒฐํ ์ ์์์ง๋ง ๊ทธ๋ฅform tag ์์ฒด๋ฅผ ๋ฐ๊ฟ์
ํด๊ฒฐํ๋ค.๊ทธ ๋ฐ์ React ๋๋๋ง ๋ฑ์ ๋ฌธ์ ๋ถํฐ ์์ํด์ CSS๊ตฌ์ฑ์์๊ฐ ์ํ๋ ์์น์ ๋ฐฐ์น๋์ง ์๋ ๋ฌธ์ , ์์๊ฐ overflow๋๋ ๋ฌธ์ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ๋ค์ด ๋ง์์ง๋ง ๊ฐ์ฅ ํด๊ฒฐํ๊ธฐ ๊ฐ๋จํ๋ ๋ฌธ์ ๋ง ๋ค๊ณ ์๋ค.
ํด์ผํ Task์ ์ง์ค
ํ๋๋ผ ์๊ฐ์ ์ซ๊ฒจ ์ด๋ค ๋ฌธ์ ๋ฅผ ๋ง๋ฌ๊ณ ์ด๋ค ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋์ง ๊ธฐ๋ก์ผ๋ก ๋จ๊ธฐ์ง ๋ชปํ๊ฒ ๋๋ฌด ์์ฝ๋ค.
...(์๋ต)
<div className="sidebar ml-[7rem] w-[400px] shrink-0 flex-col">
<div className="m-[50px]">
<NftCard
nft_img={nft.image}
nft_name={nft.name}
artist_name={nft.owner}
artist_profile={profile_sample}
price={nft.price}
/>
</div>
<div> //was <form>
{owner ? (
<button
className="mx-[50px] h-[45px] w-[300px] rounded-2xl border-2 bg-blue font-semibold text-white shadow-black transition-all hover:scale-105 hover:cursor-pointer"
onClick={buyClick}
>
Buy This NFT !
</button>
) : (
<button className="hidden font-semibold text-black">
You are not owner!!!!!!!!!!!!!
</button>
)}
</div> //was </form>
</div>
...(์๋ต)
mint ํ์ด์ง
์์๋ ์ํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ ํ๋ฉดipfs
์ ์ด๋ฏธ์ง๊ฐ ์ ๋ก๋๋๋ค.
๊ทธ๋ฆฌ๊ณ User๊ฐName
,Description
,Price
,Category
๋ฅผ ์ค์ ํ๊ณCreat NFT
๋ฒํผ์ ๋๋ฅด๋ฉดNFT์ ๋ค์ด๊ฐ
meta data
๊ฐ ์์ฑ๋์ดipfs
์ meta data๊ฐ ์ ์ฅ๋๋ค
๊ทธ๋ฆฌ๊ณweb3.js library
๋ฅผ ํ๋ก ํธ์์ ์คํํ์ฌ ๋ฏธ๋ฆฌ ๋ฐฐํฌํsmart contract
์mintNFTํจ์
๋ฅผ ํธ์ถํ๋ค.์ด๋ฅผ ์ง์ผ๋ณด๊ณ ์๋
๋ฐฑ์๋ ์๋ฒ
๋mintNFT์ event
๋ฅผ blockChain ์๋ฒ์์ ์ง์ผ๋ณด๋ค๊ฐ event๊ฐ ๊ฐ์ง๋๋ฉด ํด๋น mintNFT์ ์ ๋ณด๋ฅผDatabase
์ ์ ์ฅํ๊ณ ํ๋ก ํธ์๋์API์์ฒญ์ ๋ํ ์๋ต
์ผ๋ก ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ค๋ค.
mint๋ NFT๋ ๋ฉํ๋ง์คํฌ์ ์ฐ๊ฒฐ๋์ด
mypage
์์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
์์ ํ NFT์(collected
) ๋ด๊ฐ ๋ฐํํ NFT(created
)๋ฅผ ๊ตฌ๋ถํด์ ํ์ธํ ์ ์๋ค.
(๋๊ตฐ๊ฐ๊ฐ Buyํ๋ฉด collected list์์ ์ ์ธ๋๋ค)
๋ด๊ฐ ํ ์ ์๋ ๊ฑธ๋ก ์์ฑ ํ๋ฉฐ ๋จธ๋ฌผ๋ฌ์๊ธฐ๋ณด๋ค ํ ์์์ ์ฌ์ํ ๊ฑฐ๋ผ๋ ๋ด๊ฐ ํ ์ ์๋ ๊ฑธ ์ฐพ์ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ค.
๋คํํ S(ํ์ฅ) ๋์ด ๋ฐฑ์๋ ํฌ์ง์ ์ ์ํ์ จ๊ธฐ ๋๋ฌธ์ ๋๋ ๊ณต๋ชจ์ ์์ ์์ํ ๊ฒฝํ๋ ์๊ณ ๋์์ธ ๊ฐ๊ฐ์ด ์๋ค๊ณ ์๊ฐํด์ ํ๋ก ํธ ์๋์์ UI/UX๋ฅผ ๊ฐ์ ํ๋ ์ชฝ์ ํ์ ๋ง์ด ์์๋ค.
ํ์๋ถ๋ค์ด ๋์ ๋ถ์กฑํ ๋ถ๋ถ์ ์ ์ฑ์์ฃผ์ค ์ ์์ด์ ์ ๋ง ๊ฐ์ฌํ๋ค.
ํ์ง๋ง ํญ์ ๋์ ๋ถ์กฑํ ์ ์ ์ฑ์์ฃผ๋ ํ์๋ค์ ๋ง๋๋ ์ธ์์ด ์๋๊ธฐ ๋๋ฌธ์ ๋น์ฅ ๋ค์ ํ๋ก์ ํธ๊ฐ ์๋๋๋ผ๋ ํ๋ ๋ฐฑ์๋ ๋ถ์ผ์ ์ง์๋ ์ต๋ํ์ฌ ํ์ ์ด๋ค ๊ตฌ์ฑ์์ด ๋ค์ด์ค๋๋ผ๋ ๋์์ด ๋ ์ ์๋ ์ฌ๋์ด ๋์ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค.์ฝ๋๋ฅผ ๋๋๋ฆฐ์ง ์ผ๋ง ๋์ง ์์๋ค๋ ํ๊ณ๋ฅผ ๋น๋ ค ์ด๋ ค์์ ๋์ดํด๋ณด์๋ฉด, ๋๋ ์ด์ ์ ๋ฐฐ์ ๋ React๋ ์ต์ํ์ง ์์๊ณ , Figma, CSS, Tailwind, Git Branch Work Flow, Smart Contract, Web3.js ๋ฑ ๋ชจ๋ ์ฒ์ ์๋ํด ๋ณด๋ ๊ฒ๋ค์ด๋ผ ์ฒ์์ ์ ์ํ๋๋ฐ ๊ฝค๋ ์ ๋ฅผ ๋จน์๋ค.
๋๊ธฐ ๋ถ๋ค ์ค์ ๋์ฒ๋ผ ์ด๋ฒ ๊ธฐํ๋ฅผ ํตํด ์ฝ๋ฉ์ ์ฒ์ ์ ํ ๋ถ๋ค์ ํ๋ก์ ํธ ๊ณผ์ ์์ ์ค๋ ฅ์ด ์ข์ ๋ถ๋ค๊ณผ ๋ณธ์ธ์ ๋น๊ตํ๋ฉฐ ์ ์ ๋ณธ์ธ์ ๋ฅ๋ ฅ์ ๋ค ๋ฐํํ์ง ๋ชปํ๋ ๋ถ๋ค์ด ์ข ์ข ๊ณ์ ๊ฒ ๊ฐ์๋ค.
ํ์ง๋ง ๋๋ 3๊ฐ์ ์ , 4๊ฐ์ ์ ์ ๋๋ณด๋ค ์ง๊ธ์ ๋ด๊ฐ ํจ์ฌ ๋ ๋์ ์ฌ๋์ด ๋์ด์๋ค๋ ์ฌ์ค์ ์ง์คํ๋ค. ๋๋ ์์ง ์๊ณ์ ์ ๋์ง ๋ชปํ์ ๋ฟ ์ถฉ๋ถํ ํ์ต๋ฅ๋ ฅ์ด ์๋ ์ฌ๋์ด๋ผ๋ ์์ ๊ฐ์ด ์์๊ธฐ ๋๋ฌธ์ ์ด๋ ค์ด ๋ฌธ์ ์ ๊ธ๋ฐฉ ์ ์ํด ๋๊ฐ๋ค.๋๋ฌธ์ '๋ถ์กฑํ ํ์ + ์งง์ ํ๋ก์ ํธ ๊ธฐ๊ฐ' ์์๋ ๋ถ๊ตฌํ๊ณ ๋ด๊ฐ ๊ธฐ์ฌํ ์ ์๋ ๋ถ๋ถ์ด ๋ถ๋ช ์์๋ค.
๋ฐฐ์ ๋ ๊ฒฝ์ ํ์ ์ ๊น ์ ์ณ๋๊ณ ์๋ก์ด ๋ถ์ผ๋ฅผ ์ตํ๋ ๊ณผ์ ์์ฒด๊ฐ ๋์ ์ด์๋๋ฐ ๊ทธ ์์์ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ๋ฉ์ง ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค์ด ๋ด๋ ๊ฒ์ ์ด๋ ต๊ฒ ๋์ ๋ฐ์ ๋ค์ ๋ค์ด์ฌ๋ ค ํ ๋ฐ์๊ตญ ๋ ๋์๊ฐ๋ ์ผ์ด์๋ค.
์ฌํ ์ด๋ ์์ผ๋ก์ ์ง๊ธ ๋ฐฐ์ฐ๊ณ ์๋ ๋ถ์ผ์ ์ง์์ด ํ๋ ๋ค ๋์๋ดค์ ๋ ์ด๋ค
Connecting Dots
๋ก ์ฐํ์์์ง ์ฌ์ ํ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
ํ์ง๋ง ๊ทธ์ ํจ๊ป ๋ฐค์ ์์๊ฐ๋ฉฐ ์ค๋ ์๊ฐ์ ์์ ๋ฌด์์ธ๊ฐ๋ฅผ ๋ง๋ค๊ณ ์ฑ์ทจ๊ฐ์ ๋๋ ์ ์๋ ๊ฒฝํ์ ํ ์ ์์ด ๊ฐ์ฌํ๋ค.
Frontend
- react
- tailwindcss
- fetch api
Blockchain
- solidity
- goerli
- remix
- ipfs
Backend
- node.js
- express.js
- mongoose
- infura websocket api
Team Collaboration Tool
- notion / discord
- github
- figma
- hackolade
- gitbook
- eslint / prettier
Deployment
- github action
- client : AWS S3
- server : AWS EC2, pm2
- db: mongodb atlas