RAD 스튜디오 12.0 아테네 "새 기능 한글 요약본: 델파이 RTL과 데이터" 입니다.
12.0 아테네의 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New (영문 보기, 한글 자동 번역 보기) 와 관련 페이지를 보기 바랍니다.
12.0 아테네 새 기능 요약 - 델파이 RTL과 데이터
델파이 RTL
RAD 스튜디오 12.0은 RTL 라이브러리 안에서 강화된 것들이 상당히 많다.
GetCompilerVersion과 GetRTLVersion
RAD 스튜디오 12.0은 아래 두 가지 새 함수가 System 유닛 안에 추가되었다.
- GetCompilerVersion : 이 시스템 유닛이 컴파일되었을 때의 컴파일러 버전 번호를 반환한다. 상위 바이트에는 컴파일러의 주요 버전이 들어 가고, 하위 바이트는 컴파일러의 부가 버전이 들어 간다.
- GetRTLVersion : 이 시스템 유닛이 컴파일되었을 때의 RTL 버전 번호를 반환한다. 상위 바이트에는 RTL의 주요 버전이 들어 가고, 하위 바이트는 RTL의 부가 버전이 들어 간다.
부동-소수점 예외를 비활성화하기 (모든 플랫폼에서)
RAD 스튜디오 12.0은 RTL 부동 소수점 예외 설정의 기본값(Default8087CW, DefaultMXCSR, DefaultFPSCR , DefaultFPSCR)을 변경했다. 부동 소수점 연산에서 사고가 감지되면 기본적으로 모든 부동 소수점 예외를 비활성화하는 것을 목표로 했다. 모든 플랫폼(윈도우, 맥OS, iOS, 안드로이드, 리눅스)과 C++빌더가 영향을 받는다. 사용자는 스레드 수준에서 애플리케이션의 FP 예외를 수동으로 다시 활성화할 수 있다.
이 변경 사항은 다음과 같은 영향을 미친다.
-
기본적인 4가지 산술 연산(덧셈, 뺄셈, 곱셈, 나눗셈)을 포함하는 표현식:
- 윈도우 플랫폼 (32와 64)은 부동 소수점 예외를 억제하도록 변경된다.
- 다른 플랫폼과 Windows FMX 애플리케이션은 변경되지 않는다(이전 동작에 예외를 발생시키지 않았다).
-
삼각함수(sin, cos, tan) 및 초월함수(ln, exp) 등의 수학 함수(들):
- 윈도우 플랫폼 (32와 64), 그리고 대부분의 다른 플랫폼은 부동 소수점 예외를 억제하도록 변경된다.
- 맥OS/Arm64, 윈도우 FMX 애플리케이션만 이미 예외를 억제하므로 변경되지 않는다.
애플리케이션에서 부동 소수점 예외가 예상되는 경우, 다음을 시도해 보라.
- 이전 동작 복원
- 예외를 방지하도록 코드를 업데이트(현재와 향우의 윈도우가 아닌 그 밖의 새 플랫폼을 지원하려면 권장).
자세한 내용은 Floating Point Operation Exception Masks (부동 소수점 연산 예외 마스크 문서) 페이지를 참조하면 된다.
리스트(List), 배열(Array), 컬렉션(Collection) 강화
개선 사항 목록은 다음과 같다.
- TList 및 하위 클래스(들)의 경우, "List Index out of bounds (목록 인덱스가 범위를 벗어났습니다)" 오류 메시지가 향상되어서 이제는 사용 중인 인덱스와 유효한 범위(또는 구조가 비어 있다는 사실)를 포함되었다. 여기에는 클래스 이름이 포함된다.
- TSparseArray.Add 함수를 최적화했다.
- 새 TArray 메소드가 추가되었다: IndexOf, LastIndexOf, Contains.
- TDictionary가 키 유형의 해시 키를 생성할 때, 해당 키 타입과 동일한 크기의 해시 키를 생성하도록 방법을 변경했다. 또한 일부 GetHashCode 기능이 개선되었다.
- System.Generics.Collections, System.Generics.Default, System.Classes.TList는 이제 모든 인덱스에서 Integer 대신 NativeInt를 사용한다.
BOM 인코딩이 없는 UTF 텍스트 파일 지원 강화
RAD 스튜디오 12.0에서는 BOM 인코딩이 없는 UTF 텍스트 파일에 대한 지원이 향상되었다.
새로운 TEncoding.UseBOM 프로퍼티를 모든 하위 클래스에서 사용할 수 있다. 따라서 이전 버전의 동작을 변경할 수 있다. 이 값은 새 오버로드된 생성자에 파라미터로 전달될 수 있다. 코드 안에서 이것은 스트림을 읽고 쓸 때 사용된다.
또한, 새 TEncoding.IsBufferValid 오버로드된 메서드(다른 입력 값 포함)도 있다. 목표는 주어진 인코딩에 유효한 데이터가 주어진 버퍼 안에 들어 있는지 확인하는 것이다. 이는 BOM이 없는 텍스트 파일이 UTF-8인지 ASCII인지를 결정할 때 특히 관련이 있다. 주요 기능은 이 메서드를 TUTF8Encoding 클래스를 위해 구현한다.
TEncoding.IsBufferValid 코드는 Bjoern Hoehrmann 알고리즘을 사용하여 빠른 크로스 플랫폼 솔루션을 제공한다.
기타 RTL 강화
RAD 스튜디오 12.0에는 다음과 같은 추가 개선 사항이 도입되었다.
- 더 많은 색상이 System.UIConsts.Colors(StringToColor와 ColorToString 함수에서 사용)에 추가되었다. 추가된 색상들은 오브젝트 인스펙터(Object Inspector)에 표시된다
- 이제 TMessageManager 안에 있는 FListener가 보호된다.
- System.Generics.Collections.TArray에 새로 방식이 추가되었다. 이제는 단순화된 방식으로 특정 형식과 구분 기호를 사용하여 요소들의 목록을 문자열 표현으로 변환할 수 있다.
class function ToString<T>(const Values: array of T; const AFormatSettings: TFormatSettings; const ASeparator: string = ','; const ADelim1: string = ''; const ADelim2: string = ''): string; reintroduce; overload; static; class function ToString<T>(const Values: array of T; const ASeparator: string = ','; const ADelim1: string = ''; const ADelim2: string = ''): string; reintroduce; overload; static;
-
Zip 지원 개선 사항:
- TZipHeader.ModifiedTime 프로퍼티가 추가되었고, TZipFile 안에서 Deflate64 지원이 추가되었다.
- 윈64에서, 4GB보다 큰 파일에 대한 지원이 추가되었다.
- Decrypt 및 Encrypt 메소드를 가지는 IZipCryptor 인터페이스가 추가되었다. 고객은 이제 Zip 파일 안에 암호화 지원을 끼워넣을 수 있다.
-
병렬 프로그래밍 라이브러리:
- TThreadPool은 이제 스레드를 초기화하는 방법을 제공한다.다음 프로퍼티(들)을 사용한다.
- RAD 스튜디오 12.0은 스레드 풀에 새로운 구성을 추가했다. TThreadPool 클래스에 새로 들어간 UnlimitedWorkerThreadsWhenBlocked 프로퍼티가 그것이다. 기본값은 True이다. MaxWorkerThreads 임계값에 도달할 때 시스템을 엄격한 제한으로 강제 실행하는 동작으로 되돌리려면 False로 설정하면 된다.
- System.IOUtils 안에 있는 TPath.Combine에는 이제 여러 오버로드된 버전이 있다.
- 기본 경로를 액세스하는 새 방법으로 TPath.GetDesktopPath와 TPath.GetAppPath가 추가되었다.
- TRttiInvokableType 클래스 안에 새로 CreateImplementation 메서드가 추가되었다.
- 파일 내용을 읽기 위한 새 열거자들(enumerators)이 추가되었다.
데이터와 인터넷
다음 장은 데이터와 인터넷 영역에서 강화된 것들이다.
JSON과 JSON 데이터 바인딩 마법사
JSON Data Binding Wizard(JSON 데이터 바인딩 마법사)가 새로 생겼다. New > New Items > Delphi > Web에서 사용할 수 있다. JSON Data Binding 마법사는 JSON 데이터 구조를 기반으로 델파이 데이터 타입을 생성해준다.
iOS 시뮬레이터 용 IBLite/IBToGo
RAD 스튜디오는 이제 델파이 iOS 시뮬레이터 플랫폼용 인터베이스 임베디드 버전을 지원한다.
RAD 서버
RAD 서버 엔진은 FastMM5 메모리 관리자를 통해 구축된다. FastMM5는 성능을 향상시킨다. 특히 부담이 큰 멀티-쓰레드 상황에서 더욱 그렇다. 평균적으로, 성능 향상은 5% 이다. 아래 내용은 RAD 서버 영역에서 향상된 더 많은 것들을 나열하고 있다.
페이징 강화
RAD 스튜디오 12.0에는 TEMSDataSetResource로 전송되는 LIST 요청에 대한 옵션이 추가되었다. 이 옵션은 파라미터 안에 동적 페이지 크기를 명시한다. 이는 다음 두 가지 새로운 프로퍼티를 사용하여 수행된다.
- TEMSDataSetResource.PageSizeParamName : LIST 요청 안에 들어가서 동적 페이지 크기를 지정하는 파라미터의 이름을 정의한다. 기본값은 "psize"이다. 지정하지 않은 경우, TEMSDataSetResource.PageSize가 사용된다.
- TEMSDataSetResourceOption.roEnablePageSizing : TEMSDataSetResource.Options 안에 이것이 포함된 경우, 시스템은 동적 페이지 크기 매개변수를 고려할 때 PageSizeParamName 프로퍼티에 정의된 이름을 사용한다.
URL 용 Sqid들
기본적으로 데이터 구조(예: 데이터베이스 테이블)를 탐색할 때 RAD 서버는 레코드에 대한 특정 정보가 포함될 수 있는 URL을 노출한다. 이것이 이상적이지 않은 이유는 여러 가지가 있다. 내부 세부 정보를 공유한다는 사실에서부터 레코드 ID가 노출됨으로 인한 잠재적 보안 영향에 이르기까지 다양하다.
따라서, RAD 서버는 Sqids를 도입했다. 이것은 Hashids의 향상된 버전이며,민감한 데이터를 인코딩한다. 보다 자세한 내용은 여기에서 읽을 수 있다.
이를 위해, RAD 스튜디오 12.0에는 System.NetEncoding.TSqidsEncoding이라는 새로운 클래스가 도입되었다. 여기를 클릭하면 사용 방법에 대한 튜토리얼을 볼 수 있다.
RAD 서버 세션 인증 강화
TBackendAuth 컴포넌트를 사용하면, 사용자가 사용자 이름과 비밀번호를 지정할 수 있다. 일단 RAD 서버에 로그인하게 되면, 사용자는 세션 토큰을 갖게 되는데, 이 토큰은 관리하기 어렵다. RAD 스튜디오 12.0에서는 다음과 같은 새로운 방법을 통해 이 토큰을 관리하는 방법이 향상되었다.
- TCustomBackendAuth.ExportLogin : 로그인 정보(예: 토큰 및 관련 세부 정보)를 문자열로 내보낸다. 암호화되도록 선택하는 옵션도 있다.
- TCustomBackendAuth.ImportLogin : 이전에 내보낸 로그인 정보를 문자열에서 가져온다. 문자열 인수를 지정하면 복호화된다.
RAD 서버 품질
- RAD 스튜디오 IDE의 도구 메뉴에 RAD Server Console이 추가되었다.
- TBackendAuth.LoggedInValue.ExpiresAt는 이제 인증 토큰이 만료되는 현지 시간을 반환한다.
- 이제 클라이언트 측 OnNeedClientCertificate 이벤트를 제공한다. OnValidateCertificate 이벤트와 동일한 것이다.
인터넷 관련 일반적인 향상
- 이제 FormatXMLData에는 들여쓰기에 사용할 공백 수를 나타내는 파라미터가 포함된다. 기본값은 공백 2개입니다.
- TWinHTTPClient.DoExecuteRequest 메서드는 4GB가 넘는 데이터 전송을 지원한다.
-
콘텐츠를 가지는 HTTP DELETE 메서드에 대한 지원이 추가되었다.
- AStream 인수를 가지는 THttpClient.Delete/BeginDelete 오버로드 메서드.
- AStream 인수를 가지는 TNetHTTPClient.Delete 오버로드 메서드.
-
REST 클라이언트 라이브러리 개선 사항은 다음과 같다.
- RESTClient는 Content-Type이 application/vnd.retailer.v8+json인 경우 응답을 JSON으로 인식한다 (11.3 핫픽스 1에서 이미 사용 가능).
- TCustomRESTRequest에 새 OnBeforeExecute 이벤트가 추가되었다.
- 더 나은 리디렉션과 쿠키 관리를 위해 RAD 스튜디오 12.0에는 다음 이벤트들이 추가되었다.
- TMultipartFormData 클래스(System.Net.Mime 유닛)에서대용량 파일에 대한 지원을 향상하기 위해, RAD 스튜디오 12.0에는 다음이 추가되었다.
- TMultipartFormData.AddStream 오버로드 메서드.
- 새 AHeaders: TMultipartFormData 메소드들의 TStrings = nil 인수.
- System.Classes 유닛 안에 새 TProxyAggregateStream 클래스.
- HTTP 클라이언트 라이브러리는 기반 운영 체제의 API를 사용하여 HTTP(S) 요청을 실행하는 것이 기본 설정이다. 이 라이브러리는 libcurl을 사용한다. libcurl은 크로스-플랫폼이며, 리눅스에서만 작동하는 리눅스-고유의 HTTP 라이브러리가 아니다. 이러한 이유로, RAD 스튜디오 12.0에는 다른 플랫폼에 대한 Curl 지원이 추가되었다. 이를 통해 일부 플랫폼 제한 사항을 우회할 수 있다. THTTPClient가 윈도우에서 libcurl을 사용하기 위해서는, 사용자가 System.Net.HttpClient.Linux를 uses 절에 추가해야 한다.
-
데이터가 단일 HTTP(또는 REST) 요청 안에서 수신되는 되는 동안, 그 데이터를 액세스 할 수 있는 기능이 추가되었다. 이는 단일 HTTP 요청(예: AI-집중 REST API) 내에서 데이터를 논리적 덩어리로 반환하는 서버가 있다는 점을 고려한 것이다. 이와 비슷한 상황들을 고려하여, RAD 스튜디오 12.0에는 아래에 있는 것들이 추가되었다.
- System.Net.HttpClient 안에:
- System.Net.HttpClientComponents 안에:
- REST.Client 안에: