λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Lect & Tip/React by GPT

Emotion, CSS-in-JS 라이브러리 - μ»€μŠ€ν„°λ§ˆμ΄μ§• κ°€λŠ₯ν•œ ν…Œλ§ˆμ™€ μŠ€νƒ€μΌ μ‹œμŠ€ν…œ ꡬ좕

by st곡간 2025. 5. 22.
λ°˜μ‘ν˜•

Emotion, CSS-in-JS 라이브러리 - μ»€μŠ€ν„°λ§ˆμ΄μ§• κ°€λŠ₯ν•œ ν…Œλ§ˆμ™€ μŠ€νƒ€μΌ μ‹œμŠ€ν…œ ꡬ좕

ν˜„λŒ€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ‚¬μš©μž 개개인의 μ·¨ν–₯κ³Ό ν™˜κ²½μ— 맞좘 λ§žμΆ€ν˜• UIλ₯Ό μ œκ³΅ν•˜λŠ” 것이 μ€‘μš”ν•œ 경쟁λ ₯으둜 μž‘μš©ν•©λ‹ˆλ‹€. 특히 λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈλ₯Ό ν™œμš©ν•œ κ°œλ°œμ—μ„œλŠ” ν…Œλ§ˆμ™€ μŠ€νƒ€μΌ μ‹œμŠ€ν…œμ„ μœ μ—°ν•˜κ²Œ κ΅¬μ„±ν•˜μ—¬, μ‚¬μš©μžκ°€ λ™μ μœΌλ‘œ μΈν„°νŽ˜μ΄μŠ€μ˜ 색상, 폰트, λ ˆμ΄μ•„μ›ƒ 등을 λ³€κ²½ν•  수 μžˆλ„λ‘ 지원할 수 μžˆμŠ΅λ‹ˆλ‹€. 이번 ν¬μŠ€νŒ…μ—μ„œλŠ” CSS-in-JS 기법을 μ€‘μ‹¬μœΌλ‘œ Styled Components, Emotion λ“±μ˜ 라이브러리λ₯Ό ν™œμš©ν•˜μ—¬ μ»€μŠ€ν„°λ§ˆμ΄μ§• κ°€λŠ₯ν•œ ν…Œλ§ˆμ™€ μŠ€νƒ€μΌ μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜λŠ” 방법을 μƒμ„Ένžˆ μ†Œκ°œν•˜κ² μŠ΅λ‹ˆλ‹€.

ν•„μžκ°€ ν˜„μ—…μ‹œμ ˆ ν”„λ‘œμ νŠΈλ§ˆλ‹€ 이런 μ‹œμŠ€ν…œ ꡬ좕에 λŒ€ν•΄μ„œ κ°•μ‘°ν–ˆμ§€λ§Œ 번번이 κΉŒμ˜€μŠ΅λ‹ˆλ‹€. μ΄μœ λŠ” λΉ„μš©μ΄μ£ . 사싀 λΉ„μš©μ΄ 더 λ“€ 건 μ—†μŠ΅λ‹ˆλ‹€. μ œκ°€ 운이 μ—†μ—ˆλ˜ 탓인지, κΈ°νšμžλ“€μ΄ 이런 λ””μžμΈμ— μ΅μˆ™ν•˜μ§€ μ•ŠμœΌλ‹ˆ 이해λ₯Ό λͺ» ν•΄μ„œ μ•ˆ ν•˜λ˜ κ±°μ˜€μŠ΅λ‹ˆλ‹€. κ°œλ°œμžμ™€ κΈ°νšμžλŠ” 상극이죠. γ…Ž

ν…Œλ§ˆμ™€ μŠ€νƒ€μΌ μ‹œμŠ€ν…œμ˜ ν•„μš”μ„±

기쑴의 정적 CSS 파일둜 μŠ€νƒ€μΌμ„ κ΄€λ¦¬ν•˜λŠ” 방식은 ν”„λ‘œμ νŠΈκ°€ 컀질수둝 μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μ›Œμ§€κ³ , λ‹€μ–‘ν•œ μ‚¬μš©μž ν™˜κ²½μ— λŒ€μ‘ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” 단점을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. 이에 λ°˜ν•΄, CSS-in-JSλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ λ‚΄μ—μ„œ μŠ€νƒ€μΌμ„ μ •μ˜ν•¨μœΌλ‘œμ¨ 동적인 μŠ€νƒ€μΌ λ³€κ²½ 및 μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„μ˜ μΊ‘μŠν™”λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ‹€μŒκ³Ό 같은 이점을 λˆ„λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • 동적 ν…Œλ§ˆ μ „ν™˜: μ‚¬μš©μž μ„€μ •, 닀크 λͺ¨λ“œ, κ³ λŒ€λΉ„ λͺ¨λ“œ λ“± λ‹€μ–‘ν•œ ν…Œλ§ˆλ₯Ό μ†μ‰½κ²Œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ»΄ν¬λ„ŒνŠΈ 기반 μŠ€νƒ€μΌ 관리: 각 μ»΄ν¬λ„ŒνŠΈμ— μ μš©λ˜λŠ” μŠ€νƒ€μΌμ„ μΊ‘μŠν™”ν•˜μ—¬, μ½”λ“œ μž¬μ‚¬μš©μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ λ†’μž…λ‹ˆλ‹€.
  • μœ μ§€λ³΄μˆ˜μ™€ ν™•μž₯μ„±: ν”„λ‘œμ νŠΈ 규λͺ¨κ°€ 컀지더라도 μΌκ΄€λœ μŠ€νƒ€μΌ κ°€μ΄λ“œλΌμΈμ„ μ μš©ν•  수 있으며, ν…Œλ§ˆ 변경이 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 즉각 λ°˜μ˜λ©λ‹ˆλ‹€.

CSS-in-JS 라이브러리: Styled Components와 Emotion

Styled Components

Styled ComponentsλŠ” λ¦¬μ•‘νŠΈμ—μ„œ κ°€μž₯ 널리 μ‚¬μš©λ˜λŠ” CSS-in-JS 라이브러리 쀑 ν•˜λ‚˜λ‘œ, μžλ°”μŠ€ν¬λ¦½νŠΈ 파일 λ‚΄μ—μ„œ CSSλ₯Ό μž‘μ„±ν•˜κ³  μ»΄ν¬λ„ŒνŠΈμ— 직접 μ—°κ²°ν•  수 μžˆλŠ” λ°©μ‹μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 μ»΄ν¬λ„ŒνŠΈ λ³„λ‘œ 독립적인 μŠ€νƒ€μΌμ„ μ μš©ν•  수 있으며, 동적 ν”„λ‘œνΌν‹°λ₯Ό 기반으둜 μŠ€νƒ€μΌμ„ λ³€ν™”μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜λŠ” Styled Componentsλ₯Ό ν™œμš©ν•˜μ—¬ κΈ°λ³Έ ν…Œλ§ˆλ₯Ό μ μš©ν•˜κ³ , 닀크 λͺ¨λ“œμ™€ 라이트 λͺ¨λ“œλ₯Ό μ „ν™˜ν•  수 μžˆλŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

import React, { useState } from 'react';
import styled, { ThemeProvider } from 'styled-components';

// κΈ°λ³Έ ν…Œλ§ˆ μ •μ˜
const lightTheme = {
  background: '#ffffff',
  text: '#333333',
  primary: '#1976d2',
};

const darkTheme = {
  background: '#333333',
  text: '#ffffff',
  primary: '#90caf9',
};

const Container = styled.div`
  background-color: ${(props) => props.theme.background};
  color: ${(props) => props.theme.text};
  min-height: 100vh;
  padding: 20px;
  transition: background-color 0.3s ease, color 0.3s ease;
`;

const Button = styled.button`
  background-color: ${(props) => props.theme.primary};
  border: none;
  color: ${(props) => props.theme.text};
  padding: 10px 20px;
  font-size: 1rem;
  border-radius: 4px;
  cursor: pointer;
  transition: background-color 0.3s ease;

  &:hover {
    opacity: 0.8;
  }
`;

const Title = styled.h2`
  font-size: 2rem;
  margin-bottom: 20px;
`;

const ThemedComponent = () => {
  const [theme, setTheme] = useState(lightTheme);

  const toggleTheme = () => {
    setTheme(theme === lightTheme ? darkTheme : lightTheme);
  };

  return (
    <ThemeProvider theme={theme}>
      <Container>
        <Title>μ»€μŠ€ν„°λ§ˆμ΄μ§• κ°€λŠ₯ν•œ ν…Œλ§ˆμ™€ μŠ€νƒ€μΌ μ‹œμŠ€ν…œ</Title>
        <p>Styled Componentsλ₯Ό ν™œμš©ν•˜μ—¬ λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈμ˜ ν…Œλ§ˆλ₯Ό λ™μ μœΌλ‘œ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.</p>
        <Button onClick={toggleTheme}>ν…Œλ§ˆ μ „ν™˜</Button>
      </Container>
    </ThemeProvider>
  );
};

export default ThemedComponent;

μœ„ μ˜ˆμ œλŠ” μ‚¬μš©μžκ°€ λ²„νŠΌ 클릭 μ‹œ 라이트 λͺ¨λ“œμ™€ 닀크 λͺ¨λ“œλ₯Ό μ „ν™˜ν•  수 μžˆλ„λ‘ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. ThemeProviderλ₯Ό 톡해 μ „μ—­μ—μ„œ μ‚¬μš©ν•  ν…Œλ§ˆλ₯Ό μ„€μ •ν•˜κ³ , 각 μ»΄ν¬λ„ŒνŠΈλŠ” propsλ₯Ό 톡해 ν•΄λ‹Ή ν…Œλ§ˆ 값을 λ°›μ•„ μŠ€νƒ€μΌμ„ λ™μ μœΌλ‘œ μ μš©ν•©λ‹ˆλ‹€.

Emotion

Emotion μ—­μ‹œ Styled Components와 μœ μ‚¬ν•œ λ°©μ‹μœΌλ‘œ CSS-in-JSλ₯Ό κ΅¬ν˜„ν•  수 μžˆλŠ” κ°•λ ₯ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. Emotion은 λΉ λ₯Έ λ Œλ”λ§ μ„±λŠ₯κ³Ό μœ μ—°ν•œ APIλ₯Ό μ œκ³΅ν•˜μ—¬, λ³΅μž‘ν•œ μ• λ‹ˆλ©”μ΄μ…˜μ΄λ‚˜ 동적 μŠ€νƒ€μΌλ§μ—λ„ 효과적으둜 λŒ€μ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜λŠ” Emotion을 ν™œμš©ν•˜μ—¬ ν…Œλ§ˆ μ „ν™˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

/** @jsxImportSource @emotion/react */
import React, { useState } from 'react';
import { css, ThemeProvider } from '@emotion/react';

const lightTheme = {
  background: '#ffffff',
  text: '#333333',
  primary: '#1976d2',
};

const darkTheme = {
  background: '#333333',
  text: '#ffffff',
  primary: '#90caf9',
};

const containerStyle = (theme) => css`
  background-color: ${theme.background};
  color: ${theme.text};
  min-height: 100vh;
  padding: 20px;
  transition: background-color 0.3s ease, color 0.3s ease;
`;

const buttonStyle = (theme) => css`
  background-color: ${theme.primary};
  border: none;
  color: ${theme.text};
  padding: 10px 20px;
  font-size: 1rem;
  border-radius: 4px;
  cursor: pointer;
  transition: background-color 0.3s ease;

  &:hover {
    opacity: 0.8;
  }
`;

const ThemedEmotionComponent = () => {
  const [theme, setTheme] = useState(lightTheme);

  const toggleTheme = () => {
    setTheme(theme === lightTheme ? darkTheme : lightTheme);
  };

  return (
    <ThemeProvider theme={theme}>
      <div css={(theme) => containerStyle(theme)}>
        <h2 css={{ fontSize: '2rem', marginBottom: '20px' }}>
          Emotion을 ν™œμš©ν•œ ν…Œλ§ˆ μ „ν™˜ 예제
        </h2>
        <p>Emotion을 μ‚¬μš©ν•˜λ©΄ μŠ€νƒ€μΌ μ •μ˜κ°€ 보닀 κ°„κ²°ν•˜λ©°, 퍼포먼슀 μΈ‘λ©΄μ—μ„œλ„ μš°μˆ˜ν•œ κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.</p>
        <button css={(theme) => buttonStyle(theme)} onClick={toggleTheme}>
          ν…Œλ§ˆ μ „ν™˜
        </button>
      </div>
    </ThemeProvider>
  );
};

export default ThemedEmotionComponent;

Emotion은 JSX λ‚΄μ—μ„œ css ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ μŠ€νƒ€μΌμ„ μ •μ˜ν•˜κ³ , ThemeProviderλ₯Ό 톡해 μ „μ—­ ν…Œλ§ˆ 값을 μ „λ‹¬λ°›μŠ΅λ‹ˆλ‹€. 이와 같이 Styled Components와 μœ μ‚¬ν•œ λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜λ©΄μ„œλ„, 퍼포먼슀 μ΅œμ ν™”μ— 강점을 λ³΄μž…λ‹ˆλ‹€.

μ‚¬μš©μž λ§žμΆ€ν˜• UI κ΅¬ν˜„ μ „λž΅

ν…Œλ§ˆμ™€ μŠ€νƒ€μΌ μ‹œμŠ€ν…œ ꡬ좕은 λ‹¨μˆœνžˆ 색상과 폰트만 λ³€κ²½ν•˜λŠ” 것이 μ•„λ‹™λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ„ ν˜Έν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 μΆ”κ°€ μ „λž΅μ„ κ³ λ €ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  1. λ‹€μ–‘ν•œ ν…Œλ§ˆ μ˜΅μ…˜ 제곡
    • 닀크 λͺ¨λ“œ, 라이트 λͺ¨λ“œ 외에도 색상 νŒ”λ ˆνŠΈ, 폰트 μŠ€νƒ€μΌ, λ ˆμ΄μ•„μ›ƒ μ˜΅μ…˜ λ“± λ‹€μ–‘ν•œ ν…Œλ§ˆ μ˜΅μ…˜μ„ μ œκ³΅ν•˜λ©΄ μ‚¬μš©μž λ§žμΆ€ν˜• κ²½ν—˜μ„ κ·ΉλŒ€ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ‚¬μš©μž ν”„λ‘œν•„ μ„€μ •μ΄λ‚˜ 둜컬 μŠ€ν† λ¦¬μ§€μ— ν…Œλ§ˆ 섀정을 μ €μž₯ν•˜μ—¬, λ‹€μŒ 접속 μ‹œμ—λ„ μΌκ΄€λœ UIλ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. μ‹€μ‹œκ°„ ν…Œλ§ˆ λ³€κ²½ 적용
    • λ¦¬μ•‘νŠΈμ˜ μƒνƒœ 관리 라이브러리(Redux, Context API λ“±)λ₯Ό ν™œμš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 전체에 걸친 ν…Œλ§ˆ 변경을 μ‹€μ‹œκ°„μœΌλ‘œ λ°˜μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό 더해 λΆ€λ“œλŸ¬μš΄ μ „ν™˜ 효과λ₯Ό μ μš©ν•˜λ©΄, μ‚¬μš©μž κ²½ν—˜μ„ ν•œμΈ΅ μ—…κ·Έλ ˆμ΄λ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. μ‚¬μš©μž ν”Όλ“œλ°± 반영
    • A/B ν…ŒμŠ€νŠΈλ‚˜ μ‚¬μš©μž 섀문쑰사λ₯Ό 톡해 μ–΄λ–€ ν…Œλ§ˆ μ˜΅μ…˜μ΄ κ°€μž₯ μ„ ν˜Έλ˜λŠ”μ§€ νŒŒμ•…ν•˜κ³ , 이λ₯Ό 기반으둜 ν…Œλ§ˆ μ‹œμŠ€ν…œμ„ μ§€μ†μ μœΌλ‘œ κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ ‘κ·Όμ„± μΈ‘λ©΄μ—μ„œλ„ 색상 λŒ€λΉ„, 폰트 크기 λ“±μ˜ 섀정을 μ‚¬μš©μž 개개인의 μš”κ΅¬μ— 맞게 μ‘°μ •ν•  수 μžˆλ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  4. λͺ¨λ“ˆν™”와 μž¬μ‚¬μš©μ„± κ°•ν™”
    • ν…Œλ§ˆμ™€ μŠ€νƒ€μΌμ„ λ³„λ„μ˜ λͺ¨λ“ˆλ‘œ λΆ„λ¦¬ν•˜μ—¬, ν”„λ‘œμ νŠΈ 규λͺ¨κ°€ 컀지더라도 μœ μ§€λ³΄μˆ˜μ™€ ν™•μž₯성이 μš©μ΄ν•˜λ„λ‘ μ„€κ³„ν•©λ‹ˆλ‹€.
    • μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„λ‘œ μŠ€νƒ€μΌμ„ μΊ‘μŠν™”ν•¨μœΌλ‘œμ¨, λ‹€λ₯Έ ν”„λ‘œμ νŠΈλ‚˜ νŒ€ λ‚΄μ—μ„œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œ 베이슀λ₯Ό ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹€μ œ ν”„λ‘œμ νŠΈ 적용 사둀

λŒ€κ·œλͺ¨ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” λ‹€μ–‘ν•œ ν…Œλ§ˆμ™€ μŠ€νƒ€μΌ μ˜΅μ…˜μ„ μ œκ³΅ν•˜μ—¬, μ‚¬μš©μžμ—κ²Œ κ°œλ³„ν™”λœ κ²½ν—˜μ„ μ„ μ‚¬ν•˜λŠ” 것이 ν•„μˆ˜μ μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ „μžμƒκ±°λž˜ μ‚¬μ΄νŠΈμ—μ„œλŠ” μ‚¬μš©μž μ·¨ν–₯에 λ§žλŠ” 색상과 λ ˆμ΄μ•„μ›ƒ, 폰트 등을 선택할 수 μžˆλ„λ‘ μ§€μ›ν•˜μ—¬ λΈŒλžœλ“œ 아이덴티티와 μ‚¬μš©μž νŽΈμ˜μ„±μ„ λ™μ‹œμ— λ§Œμ‘±μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, SaaS μ œν’ˆμ—μ„œλŠ” κΈ°μ—… κ³ κ°λ§ˆλ‹€ κ³ μœ ν•œ CI/BIλ₯Ό λ°˜μ˜ν•œ λ§žμΆ€ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•¨μœΌλ‘œμ¨, 고객 λ§Œμ‘±λ„μ™€ μ„œλΉ„μŠ€ 신뒰도λ₯Ό 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ 초기 단계뢀터 ν…Œλ§ˆ μ‹œμŠ€ν…œμ„ λ„μž…ν•˜λ©΄, ν–₯ν›„ λ””μžμΈ λ³€κ²½μ΄λ‚˜ ν™•μž₯ μ‹œμ—λ„ μ½”λ“œ μˆ˜μ • λ²”μœ„λ₯Ό μ΅œμ†Œν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ κ°œλ°œμžμ™€ λ””μžμ΄λ„ˆ κ°„μ˜ ν˜‘μ—…μ„ 톡해, κ³΅ν†΅μ˜ λ””μžμΈ μ‹œμŠ€ν…œκ³Ό μŠ€νƒ€μΌ κ°€μ΄λ“œλΌμΈμ„ λ§ˆλ ¨ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ‹œμŠ€ν…œμ€ μœ μ§€λ³΄μˆ˜μ™€ 지속적인 μ—…λ°μ΄νŠΈμ—λ„ 큰 도움이 되며, μ‚¬μš©μžμ—κ²Œ μΌκ΄€λœ κ²½ν—˜μ„ μ œκ³΅ν•˜λŠ” 데 κΈ°μ—¬ν•©λ‹ˆλ‹€.

κ²°λ‘ 

μ»€μŠ€ν„°λ§ˆμ΄μ§• κ°€λŠ₯ν•œ ν…Œλ§ˆμ™€ μŠ€νƒ€μΌ μ‹œμŠ€ν…œ ꡬ좕은 λ¦¬μ•‘νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ—μ„œ 맀우 μ€‘μš”ν•œ μš”μ†Œμž…λ‹ˆλ‹€. CSS-in-JS 기법을 ν™œμš©ν•˜μ—¬ Styled Components, Emotion λ“±μ˜ 라이브러리둜 ν…Œλ§ˆλ₯Ό λ™μ μœΌλ‘œ μ „ν™˜ν•˜κ³ , μ‚¬μš©μž λ§žμΆ€ν˜• UIλ₯Ό μ œκ³΅ν•¨μœΌλ‘œμ¨, κ°œλ°œμžλŠ” 보닀 μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ μ‹œμŠ€ν…œμ„ ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ ‘κ·Ό 방식은 μ‚¬μš©μž κ²½ν—˜ κ°œμ„ μ€ λ¬Όλ‘ , ν”„λ‘œμ νŠΈ μœ μ§€λ³΄μˆ˜μ™€ λ””μžμΈ 변경에 λ”°λ₯Έ λΉ„μš© μ ˆκ°μ—λ„ 큰 효과λ₯Ό λ°œνœ˜ν•©λ‹ˆλ‹€.

μ•žμœΌλ‘œλ„ λ‹€μ–‘ν•œ μ‚¬μš©μž μš”κ΅¬λ₯Ό λ°˜μ˜ν•˜μ—¬, μ‹€μ‹œκ°„ ν…Œλ§ˆ λ³€κ²½, 닀크 λͺ¨λ“œ 및 κ³ λŒ€λΉ„ λͺ¨λ“œ 지원, 그리고 μ‚¬μš©μž ν”Όλ“œλ°±μ„ λ°˜μ˜ν•œ UI κ°œμ„  μž‘μ—…μ„ μ§€μ†μ μœΌλ‘œ μ§„ν–‰ν•˜μ‹œκΈΈ ꢌμž₯λ“œλ¦½λ‹ˆλ‹€. 이λ₯Ό 톡해 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 보닀 μΉœκ·Όν•˜κ³  μ ‘κ·Όμ„± 높은 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•  수 있으며, μ‚¬μš©μž λ§Œμ‘±λ„λ₯Ό κ·ΉλŒ€ν™”ν•  수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

λ¦¬μ•‘νŠΈμ™€ CSS-in-JS 라이브러리λ₯Ό ν™œμš©ν•œ ν…Œλ§ˆ μ‹œμŠ€ν…œ ꡬ좕은 ν˜„λŒ€ μ›Ή κ°œλ°œμ—μ„œ ν•„μˆ˜μ μΈ 기술둜 자리 작고 있으며, 이λ₯Ό λ§ˆμŠ€ν„°ν•˜λŠ” 것은 κ°œλ°œμžλ‘œμ„œ 큰 경쟁λ ₯을 κ°–μΆ”λŠ” 데 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

λ°˜μ‘ν˜•

λŒ“κΈ€