🚀 μ„±μž₯일지 7.0

μ±… ν–‰λ³΅ν•œ 이기주의자(웨인 닀이어)의 λ‚΄μš©μ— μžκ·Ήλ°›μ•„ μ‹œμž‘ν•˜λŠ” μ†Œλ°•ν•œ μ„±μž₯기둝

μ‚΄μ•„μžˆλŠ” 꽃과 죽은 꽃은 μ–΄λ–»κ²Œ κ΅¬λ³„ν•˜λŠ”κ°€?
μ„±μž₯ν•˜κ³  μžˆλŠ” 것이 μ‚΄μ•„ μžˆλŠ” 것이닀.
생λͺ…μ˜ μœ μΌν•œ μ¦κ±°λŠ” μ„±μž₯이닀!

βš› (7.0)<μ™„μ „ 개편> 파인만 ν•™μŠ΅λ²•μ„ μ•Œκ²Œ 된만큼, μ„±μž₯μΌμ§€λŠ” 정말 κ·Έ λ‚ μ˜ ν‚€μ›Œλ“œ μ€‘μ‹¬μœΌλ‘œ κ°„λ‹¨ν•˜κ²Œ μ •λ¦¬ν•˜λ„λ‘ ν•œλ‹€.

tailwind theme with light, dark mode

보톡 μš°λ¦¬κ°€ 주어진 λ””μžμΈμ„ ν† λŒ€λ‘œ κ°œλ°œν•˜κ²Œ 될 λ•ŒλŠ” 정해진 색상, 크기, 폰트 등을 정해두고 μ‹œμž‘ν•œλ‹€.(λ”μš±μ΄ λ””μžμ΄λ„ˆλΆ„κ»˜μ„œ 잘 μ •λ¦¬λœ λ””μžμΈ μ‹œμŠ€ν…œ ν˜•νƒœλ‘œ μž‘μ„±ν•΄μ£Όμ‹œλ©΄ 졜고!) 즉, tailwind의 λͺ¨λ“  값듀을 μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λ‹€λŠ” 것이닀. 이럴 땐 themeλ₯Ό μ΄μš©ν•΄μ„œ ν•„μš”ν•œ κ°’λ“€λ§Œ μ •μ˜ν•΄λ‘κ³  μ‚¬μš©ν•˜λ©΄ λœλ‹€.

import type { Config } from 'tailwindcss';

const config: Config = {
  theme: {
    colors: {
      primary: {
        light: '#0FC5FF',
        dark: '#0FC5FF',
      },
      secondary: {
        light: '#8B54FF',
        dark: '#8B54FF',
      },
      white: {
        light: '#FFFFFF',
        dark: '#FFFFFF',
      },
      black: {
        light: '#000000',
        dark: '#000000',
      },
      gray_00: {
        light: '#FFFFFF',
        dark: '#292F3F',
      },
      gray_01: {
        light: '#F5F5F5',
        dark: '#3B4359',
      },
      gray_02: {
        light: '#EEEEEE',
        dark: '#32394B',
      },
      gray_03: {
        light: '#666666',
        dark: '#9096A9',
      },
      gray_04: {
        light: '#666666',
        dark: '#EEEEEE',
      },
      gray_05: {
        light: '#292F3F',
        dark: '#FFFFFF',
      },
      shadow: {
        light:
          '0px 0px 16px 0px rgba(218, 226, 231, 0.3), 0px 24px 24px 0px rgba(181, 190, 197, 0.3)',
        dark: '0px 0px 16px 0px rgba(0, 0, 0, 0.20), 0px 24px 24px 0px rgba(0, 0, 0, 0.20)',
      },
      card: {
        light: '#FFFFFF',
        dark: '#3B4359',
      },
    },
    fontSize: {
      x_small: '12px',
      small: '14px',
      medium: '16px',
      large: '18px',
      x_large: '24px',
      xx_large: '30px',
    },
    fontWeight: {
      normal: '400',
      semi_bold: '500',
      bold: '700',
    },
  },
  content: [
    './src/pages/**/*.{js,ts,jsx,tsx,mdx}',
    './src/components/**/*.{js,ts,jsx,tsx,mdx}',
    './src/app/**/*.{js,ts,jsx,tsx,mdx}',
  ],
  darkMode: 'class',
  plugins: [],
};

export default config;

단, μ£Όμ˜ν•  점은 μœ„μ™€ 같이 theme을 μ„€μ •ν•˜κ²Œ 되면 기쑴의 tailwind 값듀은 λͺ¨λ‘ λ¬΄μ‹œλœλ‹€λŠ” 것이닀. λ”°λΌμ„œ 기쑴의 tailwind 값듀을 μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ extendλ₯Ό μ΄μš©ν•΄μ„œ μΆ”κ°€ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

import type { Config } from 'tailwindcss';

const config: Config = {
  theme: {
    extend: {
      colors: {
        // ... μ€‘λž΅
      },
    },
  },
};

잘 μ •μ˜λœ theme 값듀이 μžˆλ‹€λ©΄ extendλ₯Ό μ‚¬μš©ν•˜λŠ” 건 였히렀 λΆˆνŽΈν•΄μ§€λŠ” 것 κ°™λ‹€. μžμΉ«ν•˜λ©΄ 우리 μ„œλΉ„μŠ€μ—μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 값듀을 μ“Έ μˆ˜λ„ 있고 였히렀 λ””μžμΈμ΄ 좔가될 λ•Œ, config둜 λŒμ•„κ°€μ„œ μΆ”κ°€ν•΄μ£ΌλŠ” 게 더 λ‚˜μ„ 것 κ°™λ‹€!

Next Image

Next.jsμ—μ„œ 이미지λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” next/imageλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. μ•„λž˜μ™€ 같이 μ‚¬μš©ν•˜λ©΄ λœλ‹€.

import Image from 'next/image';

export default function Logo() {
  return (
    <section className="flex justify-between gap-[6px]">
      <Image
        src="/images/logo/character.png"
        alt="베슀트라빈슀 둜고 캐릭터"
        width={36}
        height={36}
      />
      <Image
        src="/images/logo/title.png"
        alt="베슀트라빈슀 둜고 타이틀"
        width={120}
        height={20}
        className="h-[20px]"
      />
    </section>
  );
}

이 λ•Œ, next/imageλŠ” 기본적으둜 μ—¬λŸ¬κ°€μ§€ 이미지 μ΅œμ ν™”λ₯Ό μ§€μ›ν•˜λŠ”λ°, svg에 λŒ€ν•΄μ„œλŠ” μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έ μ΄μœ λŠ” μ•„λž˜μ™€ κ°™λ‹€.

The default loader does not optimize SVG images for a few reasons. First, SVG is a vector format meaning it can be resized losslessly. Second, SVG has many of the same features as HTML/CSS, which can lead to vulnerabilities without a proper Content Security Policy.

κΈ°λ³Έ λ‘œλ”λŠ” λͺ‡ 가지 이유둜 SVG 이미지λ₯Ό μ΅œμ ν™”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 첫째, SVGλŠ” 벑터 ν˜•μ‹μ΄λ―€λ‘œ 손싀 없이 크기λ₯Ό μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‘˜μ§Έ, SVGμ—λŠ” HTML/CSS와 λ™μΌν•œ κΈ°λŠ₯이 많기 λ•Œλ¬Έμ— μ μ ˆν•œ μ½˜ν…μΈ  λ³΄μ•ˆ 정책이 μ—†μœΌλ©΄ 취약점이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ 회고

ν™•μ‹€νžˆ μ΄ˆλ°˜μ—λŠ” λ”λŽ μ§€λ§Œ ν•˜λ‹€λ³΄λ‹ˆκΉŒ 점차 속도가 λΆ™λŠ” 것 κ°™λ‹€. next.js의 κ³΅μ‹λ¬Έμ„œκ°€ 정말 정리가 μž˜λ˜μ–΄μžˆλŠ” 덕뢄이닀. react κ³΅μ‹λ¬Έμ„œλ³΄λ‹€λ„ 훨씬 더 잘 정리가 λ˜μ–΄μžˆλŠ” 것 κ°™λ‹€ ν—ˆν—ˆβ€¦ 쉽지 μ•Šμ§€λ§Œ 이왕 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κΈ°λ‘œ ν•œ κ±° 계속 κΎΈμ€€νžˆ 해봐야겠닀..! κ·ΈλŸ¬λ©΄μ„œ λ¦¬μ•‘νŠΈ μžμ²΄μ— λŒ€ν•œ 깊이 μžˆλŠ” 이해도도 높이도둝 ν•˜μž!

μ°Έκ³