.NET 8과 .NET 9의 지원이 2026-11-10에 같이 끝난다. 8은 3년짜리 LTS다. 9는 1년 늦게 나온 STS다. 그런데 종료일이 하루도 안 다르다. 왜 같은 날일까. 11월 10일이 지나면 돌아가던 서비스는 어떻게 될까.
버전별 지원 종료일
Microsoft 공식 지원 정책 페이지(2026-10-25 갱신) 기준이다.
| 버전 | 종류 | 출시 | 최신 패치 | 지금 단계 | 지원 종료 |
|---|---|---|---|---|---|
| .NET 10 | LTS | 2025-11-11 | 10.0.14 | Active | 2028-11-14 |
| .NET 9 | STS | 2024-11-12 | 9.0.22 | Maintenance | 2026-11-10 |
| .NET 8 | LTS | 2023-11-14 | 8.0.33 | Maintenance | 2026-11-10 |

Maintenance는 지원 기간의 마지막 6개월이다. 이 단계에서는 보안 취약점 수정만 나온다. 8과 9는 이미 그 구간에 들어와 있다.
정책 페이지는 LTS든 STS든 최신 패치를 깔아 둬야 지원 대상이라고 적는다. 8.0.0처럼 옛 패치에 머물러 있다면 지원 기간 안이어도 지원 대상이 아닌 셈이다.
9가 8과 같은 날 끝나는 이유
원래 STS는 18개월이었다. 그대로였다면 9는 2026-05-12에 끝났어야 한다. .NET 블로그가 2025-09-16에 STS 지원을 24개월로 늘린다고 발표했다. .NET 9부터 적용된다.
- LTS : 3년. 짝수 버전 (8, 10)
- STS : 2년. 홀수 버전 (9). 다음 버전이 나오고 12개월 뒤까지
- 출시 주기 : 매년 11월 메이저 하나
블로그가 밝힌 이유는 패키지 꼬임이다. .NET Aspire 같은 별도 출시물이 LTS 패키지를 STS 버전으로 끌어올리면 8만 쓰던 팀의 패키지 일부가 9 수명주기로 넘어간다. 종료일을 맞춰 두면 그래도 8과 같은 날까지 지원된다.
11월 10일 이후 달라지는 것
2026-06-29 공지 기준으로 정리했다.
- 앱 실행 : 계속 돌아간다
- 보안 업데이트 : 더는 안 나온다
- 기술 지원 : 끝난다
- 마지막 패치 : 11월 10일은 Patch Tuesday다. 알려진 치명적 문제가 있으면 8과 9가 그날 하나씩 받을 수 있다
멈추지 않으니 당장은 괜찮아 보인다. 문제는 그 뒤로 공식 보안 패치가 더는 없다는 점이다. 유통기한이 지난 소화기처럼 평소엔 차이가 없다가 필요한 날 티가 난다.
Visual Studio 2022는 이후 서비스 업데이트에서 8·9 구성요소를 지원 종료로 표시한다.
내 환경에 깔린 버전 확인
공식 문서대로 SDK는 --list-sdks, 런타임은 --list-runtimes로 본다.
# 설치된 SDK 목록 (예: 8.0.100 [/usr/local/share/dotnet/sdk] 형태로 나온다)
dotnet --list-sdks
# 설치된 런타임 목록 (Microsoft.NETCore.App 8.0.0 [...] 형태)
dotnet --list-runtimes
명령이 실패하면 SDK도 런타임도 설치되지 않은 것이다.
.NET 10으로 올릴 때 바꾸는 자리
공식 업그레이드 문서는 필수 변경을 하나로 꼽는다. 프로젝트 파일의 TargetFramework 값이다.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<!-- net8.0 또는 net9.0 을 net10.0 으로 -->
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>
새 SDK로 빌드하면 고칠 곳을 경고와 오류로 알려 준다. ASP.NET Core 9→10 마이그레이션 문서는 Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.* 같은 패키지 버전도 10.0.0 이상으로 올리라고 한다.
global.json으로 SDK를 고정해 뒀다면 여기도 바꿔야 한다. 업그레이드 문서 예시대로 9.0.100에 묶어 뒀다면 새 SDK를 깔아도 파일을 고칠 때까지 9.0.x SDK를 쓴다.
{
// 주석 허용. 10.0.100 이상, 10.0 안의 더 높은 feature band·패치를 쓴다
"sdk": {
"version": "10.0.100",
"rollForward": "latestFeature"
}
}
마지막은 컨테이너다. FROM 줄의 숫자를 빌드 단계와 실행 단계 둘 다 바꾼다.
# 빌드 단계: SDK 이미지
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /source
...
# 실행 단계: ASP.NET Core 런타임 이미지
FROM mcr.microsoft.com/dotnet/aspnet:10.0
WORKDIR /app
COPY --from=build /app ./
런타임을 직접 깔아 둔 서버라면 10 런타임을 새로 설치해야 한다.
9에서 10, 8에서 10
솔직히 매년 이 작업을 하는 건 귀찮다. 그래도 이번엔 고를 게 없다. 8도 9도 목적지는 10이다.
10은 2028-11-14까지 간다. 8·9 종료일부터 세면 2년이 더 있다. 11은 정책 페이지에 운영 환경 지원(go-live)이 붙은 RC3까지만 올라와 있다. 정식 출시일은 아직 적혀 있지 않다.
서버에서 --list-runtimes로 8·9가 어디에 남았는지 찾는다. csproj, global.json, Dockerfile, CI의 버전 숫자를 한 번에 바꾼다. 테스트가 통과하면 11월 10일 전에 배포하자.
윈도우10 지원 종료 뒤 보안 업데이트를 이어 받는 방법은 윈도우10 ESU 글에 따로 적어 뒀다. 같은 LTS 구조인 Node.js 일정은 Node.js 26 LTS 글에 적어 뒀다.
참고
- .NET and .NET Core Support Policy https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core
- .NET 8 and .NET 9 will reach End of Support on November 10, 2026 https://devblogs.microsoft.com/dotnet/dotnet-8-9-end-of-support/
- .NET STS releases supported for 24 months https://devblogs.microsoft.com/dotnet/dotnet-sts-releases-supported-for-24-months/
- Upgrade to a new .NET version https://learn.microsoft.com/en-us/dotnet/core/install/upgrade
- How to check that .NET is already installed https://learn.microsoft.com/en-us/dotnet/core/install/how-to-detect-installed-versions
'개발 > 백엔드' 카테고리의 다른 글
| 🐍 파이썬 3.10 지원 종료 · 3.15 출시와 버전별 종료표 (0) | 2026.10.31 |
|---|---|
| 🐘 PostgreSQL 14 지원 종료 11월 12일 · 버전별 종료표 (0) | 2026.10.30 |
| 🛡️ PHP·Node.js·Java 10월 보안 업데이트 · 올릴 버전표 (0) | 2026.10.29 |
| 🔒 GitHub Actions lockfile 2026 · actions.lock 언제 쓰나 (0) | 2026.10.29 |
| 🪟 윈도우10 ESU 연장 · 2027년 10월 12일까지 받는 법 (0) | 2026.10.26 |