Material UI Versions

Material UI Versions (버전)

이 페이지로 돌아와서 언제든지 읽고 있는 문서의 버전을 전환할 수 있어요.

출처: 문서

본문

릴리스된 버전 (Released versions)

가장 최근의 안정 버전(✓)을 프로덕션에서 사용하는 것을 권장해요.

import * as React from 'react';
import Box from '@mui/material/Box';
import Table from '@mui/material/Table';
import TableBody from '@mui/material/TableBody';
import TableCell from '@mui/material/TableCell';
import TableRow from '@mui/material/TableRow';
import Typography from '@mui/material/Typography';
import { Link } from '@mui/internal-core-docs/Link';
import { VersionsContext } from '@mui/internal-core-docs/DocsApp';

const GITHUB_RELEASE_BASE_URL = 'https://github.com/mui/material-ui/releases/tag/';

function ReleasedVersions() {
  const versions = React.useContext(VersionsContext) ?? [];

  return (
    <Box sx={{ minHeight: 33 * 11, overflow: 'auto', width: '100%' }}>
      <Table>
        <TableBody>
          {versions.map((doc) => (
            <TableRow key={doc.version}>
              <TableCell>
                <Typography variant="body2">
                  {doc.version}
                  {doc.version.startsWith(
                    `v${process.env.LIB_VERSION.split('.')[0]}`,
                  )
                    ? ' ✓'
                    : ''}
                </Typography>
              </TableCell>
              <TableCell>
                <Link variant="body2" rel="nofollow" href={doc.url}>
                  Documentation
                </Link>
              </TableCell>
              <TableCell>
                {!doc.noReleaseNotes ? (
                  <Link
                    variant="body2"
                    rel="nofollow"
                    href={`${GITHUB_RELEASE_BASE_URL}${doc.version}.0.0`}
                  >
                    Release notes
                  </Link>
                ) : null}
              </TableCell>
            </TableRow>
          ))}
        </TableBody>
      </Table>
    </Box>
  );
}

export default ReleasedVersions;

최신 버전 (Latest versions)

여기에서 최신 미출시(unreleased) 문서와 코드를 확인할 수 있어요. 어떤 변경이 다가오는지 확인하고 기여자에게 더 나은 피드백을 줄 수 있어요.

import Box from '@mui/material/Box';
import Table from '@mui/material/Table';
import TableBody from '@mui/material/TableBody';
import TableCell from '@mui/material/TableCell';
import TableRow from '@mui/material/TableRow';
import Typography from '@mui/material/Typography';
import { Link } from '@mui/internal-core-docs/Link';

function LatestVersions() {
  return (
    <Box sx={{ width: '100%' }}>
      <Table>
        <TableBody>
          <TableRow>
            <TableCell>
              <Typography variant="body2">master branch</Typography>
            </TableCell>
            <TableCell>
              <Link
                variant="body2"
                rel="nofollow"
                href="https://material-ui.netlify.app/"
              >
                Documentation
              </Link>
            </TableCell>
            <TableCell>
              <Link
                variant="body2"
                href="https://github.com/mui/material-ui/tree/master"
              >
                Source code
              </Link>
            </TableCell>
          </TableRow>
          <TableRow>
            <TableCell>
              <Typography variant="body2">next branch</Typography>
            </TableCell>
            <TableCell>
              <Link
                variant="body2"
                rel="nofollow"
                href="https://next--material-ui.netlify.app/"
              >
                Documentation
              </Link>
            </TableCell>
            <TableCell>
              <Link
                variant="body2"
                href="https://github.com/mui/material-ui/tree/next"
              >
                Source code
              </Link>
            </TableCell>
          </TableRow>
        </TableBody>
      </Table>
    </Box>
  );
}

export default LatestVersions;

버전 전략 (Versioning strategy)

안정성은 재사용 가능한 컴포넌트와 라이브러리, 튜토리얼, 도구, 그리고 배운 관행들이 예상치 못하게 구식이 되지 않도록 보장해요. 안정성은 Material UI 주변 생태계가 번성하는 데 필수적이에요.

이 문서는 최첨단 UI 라이브러리를 제공하면서도 안정성과 균형을 맞추고, 미래의 변경이 항상 예측 가능한 방식으로 도입되도록 보장하는 데 따르는 관행을 담고 있어요.

MUI의 오픈소스 프로젝트들은 Semantic Versioning 2.0.0을 따르고 있어요. 이는 버전 번호가 major.minor.patch의 세 부분으로 이루어져 있다는 뜻이에요. 버전 번호는 릴리스에 포함된 변경 수준에 따라 증가해요.

  • 메이저(Major) 릴리스에는 중요한 새 기능이 포함되며, 업데이트 중 일부 개발자 지원이 필요할 수 있어요. 이 릴리스에는 breaking changes가 포함돼요. 새 메이저 릴리스로 업데이트할 때는 업데이트 스크립트 실행, 코드 리팩터링, 추가 테스트 실행, 새 API 학습이 필요할 수 있어요.
  • 마이너(Minor) 릴리스에는 중요한 새 기능이 포함돼요. 마이너 릴리스는 완전히 하위 호환(backward-compatible)돼요. 업데이트 중 개발자 지원은 필요하지 않지만, 릴리스에 추가된 새 API, 기능, 역량을 사용하기 시작하도록 앱과 라이브러리를 선택적으로 수정할 수 있어요.
  • 패치(Patch) 릴리스는 위험이 낮고 버그 수정과 작은 새 기능이 포함돼요. 업데이트 중 개발자 지원은 필요하지 않아요.

어떤 것이 breaking change로 간주되지 않나요?

새 버전으로 업그레이드할 때 코드베이스 업데이트가 필요한 것을 "breaking changes"라고 부르는데, 다음은 예외예요:

  • "unstable_"로 시작하는 API. 아직 확신이 없는 기능으로 실험적으로 제공되는 API예요. unstable_ 접두어로 릴리스함으로써 더 빨리 반복하고 더 빨리 안정적인 API에 도달하거나, 처음부터 그 API/기능이 필요 없다는 것을 알게 될 수 있어요.
  • 실험적(experimental)으로 문서화된 API. 위와 같아요.
  • 문서화되지 않은 API와 내부 데이터 구조. 내부 속성에 접근하면 보증이 없어요. 스스로 책임져야 해요.
  • 개발 경고(Development warnings). 이들은 프로덕션 동작에 영향을 주지 않으므로, 메이저 버전 사이에 새 경고를 추가하거나 기존 경고를 수정할 수 있어요. 사실 이것이 다가오는 breaking changes에 대해 안정적으로 경고할 수 있게 해주는 부분이에요.
  • 사전 릴리스(Pre-releases) 버전. 새 기능을 일찍 테스트하는 방법으로 사전 릴리스 버전을 제공하지만, 사전 릴리스 기간에 배운 내용을 바탕으로 변경할 수 있는 유연성이 필요해요. 이런 버전을 사용한다면, 안정 릴리스 전에 API가 변경될 수 있다는 점을 알아두세요.
  • 작은 CSS 변경. UI에 부정적인 영향을 줄 확률이 매우 낮은 시각적 디자인 변경은 breaking으로 간주되지 않아요.

릴리스 주기 (Release frequency)

규칙적인 릴리스 일정은 MUI의 지속적인 발전과 함께 업데이트를 계획하고 조정하는 데 도움이 돼요.

일반적으로 다음 릴리스 주기를 기대할 수 있어요:

  • 메이저(major) 릴리스는 12개월마다 한 번.
  • 각 메이저 릴리스마다 몇 개의 마이너(minor) 릴리스.
  • 패치(patch) 릴리스는 매달 한 번 (긴급 버그 수정이면 언제든).

릴리스 일정 (Release schedule)

Date Version Status
April 2026 v9.0.0 Released
March 2025 v7.0.0 Released
August 2024 v6.0.0 Released
September 2021 v5.0.0 Released
May 2019 v4.0.0 Released
September 2018 v3.0.0 Released
May 2018 v1.0.0 Released

더 자세한 개요는 milestones를 참고할 수 있어요.

:::warning 고지(Disclaimer): 우리는 역동적인 환경에서 운영하고 있으며, 상황은 변할 수 있어요. 제공된 정보는 오직 정보 제공 목적으로 일반적인 프레임워크 방향을 개요 설명하기 위한 것이에요. 품질 기준을 충족하면서 전달할 수 있는 능력에 따라 언제든지 새 항목을 추가하거나 제거할 수 있어요. 기능이나 기능성의 개발, 릴리스, 시기는 전적으로 MUI의 재량에 달려 있어요. 로드맵은 언제든지 전달하겠다는 약속, 의무, 또는 서약을 나타내지 않아요. :::

폐기(deprecation) 관행

때로는 일부 API와 기능에 대한 지원 제거 같은 "breaking changes"가 필요할 수 있어요. 이런 전환을 최대한 쉽게 만들기 위해:

  • breaking changes의 수를 최소화하고, 가능하면 마이그레이션 도구(예: codemod)를 제공해요.
  • 아래에 설명된 폐기 정책을 따라, 앱을 최신 API와 모범 사례로 업데이트할 시간을 가질 수 있게 해요.

폐기 정책 (Deprecation policy)

  • 폐기된 기능은 변경 로그(changelog)에 발표되고, 가능하면 런타임에서 경고를 통해 발표돼요.
  • 폐기가 발표되면 권장 업데이트 경로가 제공돼요.
  • 폐기 기간 동안 안정 API의 기존 사용은 지원되므로, 그 기간 동안 코드는 계속 작동해요.

더 알아보기 (Learn more)