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의 기존 사용은 지원되므로, 그 기간 동안 코드는 계속 작동해요.