.NET Framework 4.7.x로 마이그레이션하기 위한 런타임 변경 내용

이 문서에서는 .NET Framework 4.7, 4.7.14.7.2도입된 앱 호환성 문제를 나열합니다.

.NET Framework 4.7

JIT

UInt16 값을 전달하고 비교할 때 잘못된 코드 생성

세부 정보

.NET Framework 4.7에서 도입된 변경 내용으로 인해 .NET Framework 4.7에서 실행되는 애플리케이션에서 JIT 컴파일러가 생성한 코드가 두 T:System.UInt16 값을 잘못 비교하는 경우도 있습니다. 자세한 내용은 GitHub.com의 문제 #11508: ushort 인수를 전달하고 비교할 때 조용한 잘못된 codegen을 참조하세요.

제안

.NET Framework 4.7에서 16비트 부호 없는 값을 비교할 때 문제가 발생하는 경우 .NET Framework 4.7.1로 업그레이드합니다.

이름 가치
범위 엣지
버전 4.7
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

WPF(Windows Presentation Foundation)

사용자 지정 INCC 컬렉션에서 항목을 제거할 때 선택자에서 충돌 발생

세부 정보

다음 T:System.InvalidOperationException 시나리오에서 발생할 수 있습니다.

  • ItemsSource의 T:System.Windows.Controls.Primitives.SelectorT:System.Collections.Specialized.INotifyCollectionChanged의 사용자 지정 구현을 포함한 컬렉션입니다.
  • 선택한 항목이 컬렉션에서 제거됩니다.
  • T:System.Collections.Specialized.NotifyCollectionChangedEventArgsP:System.Collections.Specialized.NotifyCollectionChangedEventArgs.OldStartingIndex = -1(알 수 없는 위치를 나타낸다).

예외의 호출 스택이 시작됩니다 at System.Windows.Threading.Dispatcher.VerifyAccess() at System.Windows.DependencyObject.GetValue(DependencyProperty dp) at System.Windows.Controls.Primitives.Selector.GetIsSelected(DependencyObject element). 애플리케이션에 디스패처 스레드가 두 개 이상 있는 경우 .NET Framework 4.5에서 이 예외가 발생할 수 있습니다. .NET Framework 4.7에서는 단일 디스패처 스레드가 있는 애플리케이션에서도 예외가 발생할 수 있습니다.

이 문제는 .NET Framework 4.7.1에서 해결되었습니다.

제안

.NET Framework 4.7.1로 업그레이드합니다.

이름 가치
범위 사소한
버전 4.7
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

DataGridCellsPanel.BringIndexIntoView에서 ArgumentOutOfRangeException을 발생시킵니다.

세부 정보

ScrollIntoView(Object) 는 열 가상화를 사용하도록 설정했지만 열 너비가 아직 결정되지 않은 경우 비동기적으로 작동합니다. 비동기 작업이 발생하기 전에 열이 제거되면 System.ArgumentOutOfRangeException가 발생할 수 있습니다.

제안

다음 중 하나:

  • .NET Framework 4.7로 업그레이드합니다.
  • .NET Framework 4.6.2에 대한 최신 서비스 패치를 설치합니다.
  • 비동기 응답이 ScrollIntoView(Object) 완료될 때까지 열을 제거하지 마십시오.
이름 가치
범위 엣지
버전 4.6.2
유형 실행 시간

영향을 받는 API

WPF 맞춤법 검사기에서 발생한 ObjectDisposedException

세부 정보

WPF 애플리케이션은 애플리케이션 종료 중에 경우에 따라 맞춤법 검사기가 System.ObjectDisposedException를 throw하여 크래시가 발생합니다. 이 문제는 예외를 정상적으로 처리하여 애플리케이션이 더 이상 부정적인 영향을 받지 않도록 하여 .NET Framework 4.7 WPF에서 해결되었습니다. 디버거에서 실행되는 애플리케이션에서 간혹 첫 번째 기회 예외가 관찰될 수 있다는 점에 주의해야 합니다.

제안

.NET Framework 4.7로 업그레이드

이름 가치
범위 엣지
버전 4.6.1
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

그리드 크기를 조정하면 애플리케이션이 응답하지 않게 될 수 있습니다.

세부 정보

무한 루프는 다음과 같은 상황에서 레이아웃 T:System.Windows.Controls.Grid 중에 발생할 수 있습니다.

  • 행 정의에는 MinHeight와 MaxHeight를 선언하는 두 개의 *행이 포함됩니다.
  • *행의 콘텐츠는 해당 MaxHeight를 초과하지 않습니다.
  • 그리드의 사용 가능한 높이를 첫 번째 MinHeight(고정 행 또는 Auto 행 포함)가 초과합니다.
  • 앱은 .NET Framework 4.7을 대상으로 하거나 Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=false을(를) 설정하여 4.7 할당 알고리즘을 선택합니다.

루프는 두 개 이상의 행이나 열의 경우에도 마찬가지로 발생합니다. 이 문제는 .NET Framework 4.7.1에서 해결되었습니다.

제안

.NET Framework 4.7.1로 업그레이드합니다. 또는 4.7 할당 알고리즘이 필요하지 않은 경우 다음 구성 설정을 사용할 수 있습니다.

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
이름 가치
범위 엣지
버전 4.7
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

지역화된 빌드에서 RibbonGroup 배경이 투명하게 설정됩니다.

세부 정보

System.Windows.Controls.Ribbon.RibbonGroup 지역화된 빌드에 대한 배경은 항상 투명 브러시로 그려져 UI 환경이 저하되었습니다. 이는 지역화된 리소스 System.Windows.Controls.Ribbon.RibbonGroup를 업데이트하여 .NET Framework 4.7 WPF 수정에서 해결되며, 그러면 올바른 브러시가 선택됩니다.

제안

.NET Framework 4.7로 업그레이드

이름 가치
범위 엣지
버전 4.6.2
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

WPF 인쇄 스택 업데이트

세부 정보

WPF의 인쇄 API는 System.Printing.PrintQueue을 사용하여 이제 더 이상 사용되지 않는 XPS 인쇄 API 대신 Window의 인쇄 문서 패키지 API를 호출합니다. 서비스 가능성을 염두에 두고 변경되었습니다. 사용자나 개발자 모두 동작 또는 API 사용의 변경 내용을 볼 수 없습니다. 새 인쇄 스택은 Windows 10 크리에이터스 업데이트에서 실행할 때 기본적으로 사용하도록 설정됩니다. 이전 인쇄 스택은 이전 Windows 버전에서 이전과 마찬가지로 계속 작동합니다.

제안

Windows 10 크리에이터스 업데이트에서 이전 스택을 사용하려면 UseXpsOMPrinting 레지스트리 키의 HKEY_CURRENT_USER\Software\Microsoft\.NETFramework\Windows Presentation Foundation\Printing REG_DWORD 값을 1로 설정합니다.

이름 가치
범위 엣지
버전 4.7
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

WF(Windows Workflow Foundation)

워크플로가 NullReferenceException 대신 원래 예외를 throw하는 경우도 있습니다.

세부 정보

.NET Framework 4.6.2 및 이전 버전에서는 워크플로 활동의 Execute 메서드가 null 속성 값이 Message 인 예외를 발생시킬 때, System.Activities 워크플로 런타임은 원래 예외를 가리고 System.NullReferenceException를 발생시킵니다. .NET Framework 4.7에서는 이전에 가려졌던 예외가 그대로 발생됩니다.

제안

코드가 System.NullReferenceException 처리를 의존하는 경우, 사용자 지정 활동에서 발생할 수 있는 예외를 잡도록 코드 변경을 실시하십시오.

이름 가치
범위 사소한
버전 4.7
유형 실행 시간

영향을 받는 API

워크플로 SQL 지속성은 기본 키 클러스터를 추가하고 일부 열에서 null 값을 허용하지 않습니다.

세부 정보

.NET Framework 4.7부터 SqlWorkflowInstanceStoreSchema.sql 스크립트에서 SWIS(SQL Workflow Instance Store)에 대해 만든 테이블은 클러스터형 기본 키를 사용합니다. 이로 인해 정체성은 null 값을 지원하지 않습니다. SWIS의 작업은 이 변경의 영향을 받지 않습니다. SQL Server 트랜잭션 복제를 지원하도록 업데이트되었습니다.

제안

이 변경을 경험하려면 SQL 파일 SqlWorkflowInstanceStoreSchemaUpgrade.sql 기존 설치에 적용해야 합니다. 새 데이터베이스 설치는 자동으로 변경됩니다.

이름 가치
범위 엣지
버전 4.7
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

.NET Framework 4.7.1

JIT

UInt16 값을 전달하고 비교할 때 잘못된 코드 생성

세부 정보

.NET Framework 4.7에서 도입된 변경 내용으로 인해 .NET Framework 4.7에서 실행되는 애플리케이션에서 JIT 컴파일러가 생성한 코드가 두 T:System.UInt16 값을 잘못 비교하는 경우도 있습니다. 자세한 내용은 GitHub.com의 문제 #11508: ushort 인수를 전달하고 비교할 때 조용한 잘못된 codegen을 참조하세요.

제안

.NET Framework 4.7에서 16비트 부호 없는 값을 비교할 때 문제가 발생하는 경우 .NET Framework 4.7.1로 업그레이드합니다.

이름 가치
범위 엣지
버전 4.7
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

안전

RSACng 및 DSACng는 부분 신뢰 시나리오에서 다시 한 번 사용할 수 있습니다.

세부 정보

CngLightup(System.Security.Cryptography.Xml.EncryptedXml과 같은 여러 고급 암호화 API에서 사용됨) 및 경우에 따라 System.Security.Cryptography.RSACng은 완전 신뢰에 의존합니다. 여기에는 어설션되지 않은 사용 권한을 가진 P/Invokes 및 SecurityPermissionFlag.UnmanagedCodeSystem.Security.Cryptography.CngKey에 대한 권한 요구가 포함된 코드 경로가 포함됩니다. .NET Framework 4.6.2부터 CngLightup은 가능한 모든 위치로 System.Security.Cryptography.RSACng 전환하는 데 사용되었습니다. 결과적으로 성공적으로 사용된 System.Security.Cryptography.Xml.EncryptedXml 부분적으로 신뢰할 수 있는 앱이 실패하고 예외를 발생시키기 시작했습니다. 이 변경으로 CngLightup을 사용하는 모든 함수가 필요한 권한을 갖도록 필수 어설션이 추가됩니다.

제안

.NET Framework 4.6.2의 변경 내용이 부분 신뢰 앱에 부정적인 영향을 주면 .NET Framework 4.7.1로 업그레이드합니다.

이름 가치
범위 엣지
버전 4.6.2
유형 실행 시간

영향을 받는 API

WCF(Windows Communication Foundation)

addressHeader 요소가 null인 경우 WCF AddressHeaderCollection에서 ArgumentException을 throw합니다.

세부 정보

.NET Framework 4.7.1부터, 요소 중 하나가 AddressHeaderCollection(IEnumerable<AddressHeader>)인 경우에 ArgumentException 생성자는 null을 던집니다. .NET Framework 4.7 및 이전 버전에서는 예외가 발생하지 않습니다.

제안

.NET Framework 4.7.1 이상 버전에서 이 변경으로 인한 호환성 문제가 발생하는 경우, app.config 파일의 <runtime> 섹션에 다음 줄을 추가하여 이를 비활성화할 수 있습니다.

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableAddressHeaderCollectionValidation=true" />
  </runtime>
</configuration>
이름 가치
범위 사소한
버전 4.7.1
유형 실행 시간

영향을 받는 API

WCF MsmqSecureHashAlgorithm 기본값은 이제 SHA256입니다.

세부 정보

.NET Framework 4.7.1부터 Msmq 메시지용 WCF의 기본 메시지 서명 알고리즘은 SHA256입니다. .NET Framework 4.7 및 이전 버전에서는 기본 메시지 서명 알고리즘이 SHA1입니다.

제안

.NET Framework 4.7.1 이상에서 이 변경 사항으로 인한 호환성 문제가 발생하면, app.config 파일의 <runtime> 섹션에 다음 줄을 추가하여 이 변경 사항을 제외할 수 있습니다.

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.ServiceModel.UseSha1InMsmqEncryptionAlgorithm=true" />
  </runtime>
</configuration>
이름 가치
범위 사소한
버전 4.7.1
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

이제 WCF PipeConnection.GetHashAlgorithm에서 SHA256을 사용합니다.

세부 정보

.NET Framework 4.7.1부터 Windows Communication Foundation은 SHA256 해시를 사용하여 명명된 파이프에 대한 임의의 이름을 생성합니다. .NET Framework 4.7 및 이전 버전에서는 SHA1 해시를 사용했습니다.

제안

.NET Framework 4.7.1 이상에서 이 변경 내용과 호환성 문제가 발생한 경우, app.config 파일의 <runtime> 섹션에 다음 줄을 추가하여 제외할 수 있습니다.

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.ServiceModel.UseSha1InPipeConnectionGetHashAlgorithm=true" />
  </runtime>
</configuration>
이름 가치
범위 사소한
버전 4.7.1
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

WPF(Windows Presentation Foundation)

StaysOpen=False를 사용하여 연결된 팝업

세부 정보

StaysOpen=False가 있는 팝업은 팝업 외부를 클릭할 때 닫아야 합니다. 두 개 이상의 팝업이 연결된 경우(즉, 다른 팝업이 포함됨) 다음을 비롯한 많은 문제가 있었습니다.

  • 두 개의 수준을 열고 P2 외부와 P1 내부를 클릭합니다. 아무 일도 발생하지 않습니다.
  • 두 개의 수준을 열고 P1 외부를 클릭합니다. 두 팝업이 모두 닫힙니다.
  • 두 단계를 열고 닫으세요. 그런 다음 P2를 다시 열어 봅니다. 아무 일도 발생하지 않습니다.
  • 세 가지 수준을 열어 봅니다. 할 수 없습니다. (클릭 위치에 따라 아무 일도 발생하지 않거나 처음 두 수준이 닫힙니다.)

이러한 사례(및 기타 변형)는 이제 예상대로 작동합니다.

이름 가치
범위 엣지
버전 4.7.1
유형 실행 시간

영향을 받는 API

사용자 지정 INCC 컬렉션에서 항목을 제거할 때 선택자에서 충돌 발생

세부 정보

다음 T:System.InvalidOperationException 시나리오에서 발생할 수 있습니다.

  • ItemsSource의 T:System.Windows.Controls.Primitives.SelectorT:System.Collections.Specialized.INotifyCollectionChanged의 사용자 지정 구현을 포함한 컬렉션입니다.
  • 선택한 항목이 컬렉션에서 제거됩니다.
  • T:System.Collections.Specialized.NotifyCollectionChangedEventArgsP:System.Collections.Specialized.NotifyCollectionChangedEventArgs.OldStartingIndex = -1(알 수 없는 위치를 나타낸다).

예외의 호출 스택이 시작됩니다 at System.Windows.Threading.Dispatcher.VerifyAccess() at System.Windows.DependencyObject.GetValue(DependencyProperty dp) at System.Windows.Controls.Primitives.Selector.GetIsSelected(DependencyObject element). 애플리케이션에 디스패처 스레드가 두 개 이상 있는 경우 .NET Framework 4.5에서 이 예외가 발생할 수 있습니다. .NET Framework 4.7에서는 단일 디스패처 스레드가 있는 애플리케이션에서도 예외가 발생할 수 있습니다.

이 문제는 .NET Framework 4.7.1에서 해결되었습니다.

제안

.NET Framework 4.7.1로 업그레이드합니다.

이름 가치
범위 사소한
버전 4.7
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

그리드 크기를 조정하면 애플리케이션이 응답하지 않게 될 수 있습니다.

세부 정보

무한 루프는 다음과 같은 상황에서 레이아웃 T:System.Windows.Controls.Grid 중에 발생할 수 있습니다.

  • 행 정의에는 MinHeight와 MaxHeight를 선언하는 두 개의 *행이 포함됩니다.
  • *행의 콘텐츠는 해당 MaxHeight를 초과하지 않습니다.
  • 그리드의 사용 가능한 높이를 첫 번째 MinHeight(고정 행 또는 Auto 행 포함)가 초과합니다.
  • 앱은 .NET Framework 4.7을 대상으로 하거나 Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=false을(를) 설정하여 4.7 할당 알고리즘을 선택합니다.

루프는 두 개 이상의 행이나 열의 경우에도 마찬가지로 발생합니다. 이 문제는 .NET Framework 4.7.1에서 해결되었습니다.

제안

.NET Framework 4.7.1로 업그레이드합니다. 또는 4.7 할당 알고리즘이 필요하지 않은 경우 다음 구성 설정을 사용할 수 있습니다.

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
이름 가치
범위 엣지
버전 4.7
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

.NET Framework 4.7.2

코어

UNC 공유와 유사한 URI에서 유니코드 허용

세부 정보

에서 System.UriUNC 공유 이름과 유니코드 문자를 모두 포함하는 파일 URI를 생성하면 더 이상 내부 상태가 잘못된 URI가 생성되지 않습니다. 동작은 다음이 모두 true인 경우에만 변경됩니다.

  • URI에는 스키마 file: 가 있으며 그 뒤에 4개 이상의 슬래시가 잇습니다.
  • 호스트 이름은 밑줄 또는 예약된 기호가 아닌 다른 기호로 시작합니다.
  • URI에는 유니코드 문자가 포함됩니다.

제안

유니코드를 지속적으로 포함하는 URI로 작업하는 애플리케이션은 UNC 공유에 대한 참조를 허용하지 않도록 이 동작을 사용할 수 있습니다. 이러한 애플리케이션은 대신 사용해야 IsUnc 합니다.

이름 가치
범위 엣지
버전 4.7.2
유형 실행 시간

영향을 받는 API

유니코드가 있는 경우 특수 상대 URI 표기법 지원

세부 정보

Uri 는 유니코드가 포함된 특정 상대 URI에 대해 NullReferenceException 를 호출할 때 더 이상 TryCreate 를 throw하지 않습니다. 가장 간단한 재현 NullReferenceException 은 다음과 같으며 두 문은 동일합니다.

bool success = Uri.TryCreate("http:%C3%A8", UriKind.RelativeOrAbsolute, out Uri href);
bool success = Uri.TryCreate("http:è", UriKind.RelativeOrAbsolute, out Uri href);

재현 NullReferenceException하려면 다음 항목이 true여야 합니다.

  • URI는 'http:'를 앞에 추가하고 뒤에 '//'를 사용하지 않음으로써, 상대 경로로 지정해야 합니다.
  • URI는 백분율로 인코딩된 유니코드 또는 예약되지 않은 기호를 포함해야 합니다.

제안

상대 URI를 허용하지 않으려는 사용자는 URI를 생성할 때 UriKind.Absolute를 지정해야 합니다.

이름 가치
범위 엣지
버전 4.7.2
유형 실행 시간

영향을 받는 API

실행 시간

Net.Tcp 인증서 인증에 대한 WCF 체인 신뢰 인증서 유효성 검사 개선

세부 정보

.NET Framework 4.7.2는 WCF에서 전송 보안으로 인증서 인증을 사용할 때 체인 신뢰 인증서 유효성 검사를 향상시킵니다. 이 향상된 기능으로 서버에 인증하는 데 사용되는 클라이언트 인증서는 클라이언트 인증을 위해 구성되어야 합니다. 마찬가지로 서버 인증을 위한 서버 인증서는 서버 인증을 위해 구성되어야 합니다. 이 변경으로 루트 인증서를 사용하지 않도록 설정하면 인증서 체인 유효성 검사가 실패합니다. Windows 보안 롤업을 통해 .NET Framework 3.5 이상 버전도 동일하게 변경되었습니다. 자세한 내용은 KB 4055269. 이 변경 내용은 기본적으로 켜져 있으며 구성 설정에서 해제할 수 있습니다.

제안

  • 서버 및 클라이언트 인증에 필요한 EKU OID가 있는지 확인합니다. 그렇지 않은 경우 인증을 업데이트합니다.

  • 루트 인증서가 잘못된지 확인합니다. 그렇다면 루트 인증서를 업데이트합니다.

  • 인증서를 업데이트할 수 없는 경우 다음 구성 설정을 사용하여 호환성이 손상되는 변경 문제를 일시적으로 해결할 수 있습니다. 그러나 변경 내용을 옵트아웃하면 시스템이 보안 문제에 취약해질 수 있습니다.

    <appSettings>
      <add key="wcf:useLegacyCertificateUsagePolicy" value="true" />
    </appSettings>
    
이름 가치
범위 사소한
버전 4.7.2
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

웹 애플리케이션

"dataAnnotations:dataTypeAttribute:disableRegEx" 앱 설정은 기본적으로 .NET Framework 4.7.2에서 설정됩니다.

세부 정보

.NET Framework 4.6.1에서는 사용자가 데이터 형식 특성(dataAnnotations:dataTypeAttribute:disableRegEx예: System.ComponentModel.DataAnnotations.EmailAddressAttributeSystem.ComponentModel.DataAnnotations.UrlAttribute, 및System.ComponentModel.DataAnnotations.PhoneAttribute)에서 정규식 사용을 사용하지 않도록 설정할 수 있는 앱 설정()이 도입되었습니다. 이렇게 하면 특정 정규식을 사용하여 서비스 거부 공격 가능성을 방지하는 등의 보안 취약성을 줄일 수 있습니다.
.NET Framework 4.6.1에서 RegEx 사용을 사용하지 않도록 설정하는 이 앱 설정은 기본적으로 설정 false 되었습니다. .NET Framework 4.7.2부터 이 구성 스위치는 기본적으로 .NET Framework 4.7.2 이상을 대상으로 하는 웹 애플리케이션의 보안 취약성을 추가로 줄이기 위해 설정 true 됩니다.

제안

.NET Framework 4.7.2로 업그레이드한 후 웹 애플리케이션의 정규식이 작동하지 않는 경우 설정 값을 dataAnnotations:dataTypeAttribute:disableRegEx 업데이트하여 false 이전 동작으로 되돌릴 수 있습니다.

<configuration>
<appSettings>
...
<add key="dataAnnotations:dataTypeAttribute:disableRegEx" value="false"/>
...
</appSettings>
</configuration>
이름 가치
범위 사소한
버전 4.7.2
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.

WPF(Windows Presentation Foundation)

WPF에서 키 팁 동작이 개선되었습니다.

세부 정보

Microsoft Word 및 Windows 탐색기의 동작과 일치시키기 위해 키팁 동작이 수정되었습니다. SystemKey (특히 Key 또는 F11)가 눌렸을 때 키 설명 상태가 활성화되어 있는지 확인함으로써, WPF는 키 설명 키를 적절하게 처리합니다. 이제 키 팁은 마우스로 열린 경우에도 메뉴를 닫습니다.

제안

해당 없음(N/A)

이름 가치
범위 엣지
버전 4.7.2
유형 실행 시간

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.