ํฌํธํด๋ฆฌ์ค๋ฅผ ๋จ์ํ ํ ์คํธ๋ก ์ฝ๊ธฐ๋ณด๋ค๋ ์น ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ธ ๋งํผ ์นํ์ด์ง๋ก ๋ง๋ค์ด์ ๋ฐฐํฌํ๊ณ ๊ฒ์์์ง์ ์ํด ๊ฒ์๋๋๋ก ๋ง๋ค์ด๋ณด๊ณ ์ถ์ด์ ๊ฐ๋ฐ์ ์์ํ์ต๋๋ค.
์ฃผ ๋ชฉ์ ์ SEO๋ฅผ ์ํด์๊ณ  ์ถ๊ฐ์ ์ผ๋ก ๊ฐ์ข
 ํธ์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ ํํ์ต๋๋ค.
์ฌํ๊น์ง styled-components์ tailwindcss ๋ ๊ฐ์ง ๋ฐ์ ์ฌ์ฉํด๋ณด์ง ์์์ง๋ง tailwindcss๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋๋๊ฒ ์ด๊ฒ๋ณด๋ค ๋ ํธํ๊ณ  ์ฝ๊ณ  ์ข์ css๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ ์์ํฌ๊ฐ ์์๊ฑฐ๋ผ๋ ์๊ฐ์ ํ์์ ๋๋ก ๋๋ฌด ํธํ๊ณ  ์ข์์ ์ ํํ์ต๋๋ค.
์์ผ๋ก๋ ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด tailwindcss๋ฅผ ์ด์ฉํ  ์๊ฐ์
๋๋ค.
๊ฐ๋ฐ์ ์งํํ  ๋๋ ๊ฐ๋ฐ ์๋ฃ ํ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ  ๋๋ JavaScript๋ณด๋ค ๋ ํธํ๊ธฐ ๋๋ฌธ์ ์ ํํ์ต๋๋ค.
# ์ค์น
npm i -D tailwindcss postcss autoprefixer
# postcss.config.js์ tailwind.config.js ์์ฑ
npx tailwindcss init -p
tailwind.config.js์ ์๋ ๊ฐ ์ถ๊ฐmodule.exports = {
  content: ["./src/pages/**/*.{ts,tsx}", "./src/components/**/*.{ts,tsx}"],
}
globals.css( _app.tsx์์ importํ๋ cssํ์ผ ) ์์ @tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
  /* ํฐํธ ์ค์  ( _document์์ importํด์ค ์ด๋ฆ ์ฌ์ฉ ) */
  html {
    font-family: 'Jua', sans-serif;
  }
  
  /* ์คํฌ๋กค ์ ๊ฑฐ */
  body::-webkit-scrollbar {
    display: none
  }
}
module.exports = {
  // ... ์๋ต
  theme: {
    extend: {
      // ์์ ๋ฑ๋ก
      colors: {
        // ์ํ๋ ์ด๋ฆ๊ณผ ์์ ๋ฑ๋ก ( ์๋์์ฑ๋จ )
        trello: "#1A76E3",
      },
      // ์ด๋ฏธ์ง ๋ฑ๋ก
      backgroundImage: {
        // ์ํ๋ ์ด๋ฆ๊ณผ ์ด๋ฏธ์ง ๊ฒฝ๋ก ์ง์  ( ์๋์์ฑ๋จ )
        me: "url('/me.jpg')",
      },
      // ํคํ๋ ์ ์ง์ 
      keyframes: {
        "appear": {
          "0%": { opacity: 0 },
          "100%": { opacity: 1 },
        },
      },
      // ์ ๋๋ฉ์ด์
 ๋ฑ๋ก
      animation: {
        "appear": "appear 1.6s ease-in forwards",
      },
    },
  },
  plugins: [],
};
import Document, { Head, Html, Main, NextScript } from "next/document";
class CustomDocument extends Document {
  render(): JSX.Element {
    return (
      <Html lang="ko">
        <Head>
          {/* ํ๋น์ฝ */}
          <link rel="shortcut icon" href="/favicon.ico" />
          {/* SEO */}
          <meta name="keyword" content="ํ๋ก ํธ์๋, ํฌํธํด๋ฆฌ์ค" />
          <meta name="description" content="1-blue์ ํฌํธํด๋ฆฌ์ค" />
          {/* ์์ฑ์ */}
          <meta name="author" content="1-blue" />
          {/* ๋ฌธ์ */}
          <meta httpEquiv="Content-Type" content="text/html; charset=utf-8" />
          {/* ์นด์นด์คํก, ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ ๊ณตํ  ์ ๋ณด */}
          <meta property="og:type" content="website" />
          <meta property="og:site_name" content="1-blue_portfolio" />
          <meta property="og:locale" content="ko_KR" />
          <meta property="og:image:width" content="1200" />
          <meta property="og:image:height" content="600" />
          <meta property="og:title" content="1-blue์ ํฌํธํด๋ฆฌ์ค" />
          <meta property="og:description" content="1-blue์ ํฌํธํด๋ฆฌ์ค" />
          <meta
            property="og:url"
            content={`https://${process.env.NEXT_PUBLIC_VERCEL_URL}`}
          />
          <meta
            property="og:image"
            content={`https://${process.env.NEXT_PUBLIC_VERCEL_URL}/me.jpg`}
          />
          {/* ๊ตฌ๊ธ ํฐํธ */}
          {/* "jua" - https://fonts.google.com/specimen/Jua?subset=korean#standard-styles */}
          <link
            href="https://fonts.googleapis.com/css2?family=Jua&display=swap"
            rel="stylesheet"
          />
        </Head>
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    );
  }
}
export default CustomDocument;
tsconfig.json{
  "compilerOptions": {
    // ... ์๋ต
    "baseUrl": ".",
    "paths": {
      // ์ฌ๊ธฐ์ ์ํ๋ ์ด๋ฆ๊ณผ ์ค์  ๊ฒฝ๋ก ๋ฑ๋ก
      "@src/*": ["src/*"]
    }
  },
  // ... ์๋ต
}