개발/백엔드

🟣 .NET 8 지원 종료 2026년 11월 10일 · 9도 같은 날 끝난다

개발만빼고다잘함 2026. 10. 30. 10:16
반응형

.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 글에 적어 뒀다.

참고

반응형