> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-vortex-format.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Cloud용 v26.6 changelog

> v26.6 changelog

<h2 id="backward-incompatible-changes">
  하위 호환되지 않는 변경 사항
</h2>

<h3 id="query-and-syntax-changes">
  쿼리 및 구문 변경 사항
</h3>

* 윈도우 함수 `RANK`와 `DENSE_RANK`는 이제 SQL 표준에 맞춰 인수를 허용하지 않으며 `NUMBER_OF_ARGUMENTS_DOESNT_MATCH` 예외를 발생시킵니다. 이전에는 `RANK(x) OVER (ORDER BY id)`와 같은 쿼리가 인수를 무시한 채 조용히 허용되었고, 이로 인해 혼란을 겪는 사용자가 많았습니다. 이전의 관대한 동작으로 되돌리려면 `allow_rank_dense_rank_arguments = 1`을 설정하십시오. [#104324](https://github.com/ClickHouse/ClickHouse/pull/104324) ([groeneai](https://github.com/groeneai)).

<h3 id="data-type-changes">
  데이터 타입 변경 사항
</h3>

* 이제 `icebergHash` 및 `icebergBucket`은 `Int128`, `UInt128`, `Int256`, `UInt256`, `Decimal256` 인수를 명시적인 오류와 함께 거부합니다. 이전에는 더 큰 값을 조용히 잘라내 해시 충돌을 일으켰습니다. Iceberg 사양에서는 32/64비트 정수와 정밀도가 최대 38인 Decimal에 대해서만 해싱을 정의합니다. 범위에 맞는 값에서 이전 동작을 유지하려면 `Int64` 또는 `Decimal128`로 캐스팅하십시오. [#105866](https://github.com/ClickHouse/ClickHouse/pull/105866) ([Algunenano](https://github.com/Algunenano)).
* `toUUID`, `toUUIDOrNull`, `toUUIDOrZero`, `toUUIDOrDefault`, `UUID` 및 `Nullable(UUID)`로의 `CAST`, `UUID`로의 `accurateCastOrNull`, 그리고 텍스트에서 UUID를 파싱하는 입력 형식(`Avro`, `MsgPack`, `JSONExtract` 등)은 이제 길이는 올바르지만 16진수가 아닌 문자를 포함하는 문자열을 거부합니다. 이전에는 이러한 입력이 16진수 조회 테이블의 끝을 벗어나 읽으면서 조용히 엉뚱한 UUID로 변환되었습니다. 이제 `toUUID`는 `CANNOT_PARSE_UUID`를 발생시키고, `Or*` 변형은 `NULL`, 0 UUID 또는 지정된 기본값을 반환합니다. [#104370](https://github.com/ClickHouse/ClickHouse/pull/104370) ([groeneai](https://github.com/groeneai)).
* 이제 `Dynamic` 및 `Variant` 타입이 윈도우의 `PARTITION BY` 절에서 검사됩니다. 이전에는 `allow_suspicious_types_in_group_by`가 비활성화된 경우에도 이 부분이 확인되지 않았습니다. `Dynamic` 또는 `Variant` 컬럼으로 윈도우를 파티셔닝하는 쿼리는 이제 `allow_suspicious_types_in_group_by = 1`이 아닌 한 오류를 발생시킵니다. [#105450](https://github.com/ClickHouse/ClickHouse/pull/105450) ([Avogar](https://github.com/Avogar)).

<h3 id="storage-and-index-changes">
  스토리지 및 인덱스 변경 사항
</h3>

* min/max 집계 및 MinMax 인덱스에서 중첩된 Dynamic/Variant를 허용하지 않습니다. 이전에는 최상위 수준의 Dynamic/Variant만 검사했습니다. [#105468](https://github.com/ClickHouse/ClickHouse/pull/105468) ([Avogar](https://github.com/Avogar)).
* 서버 설정 `insert_deduplication_version`의 기본값이 `compatible_double_hashes`에서 `new_unified_hash`로 변경됩니다. 이제 삽입 중복 제거는 파트/파티션별이 아니라 삽입된 블록 전체(삽입 1회당)에 적용됩니다. 따라서 동일한 삽입을 재시도하면 여전히 중복 제거되지만, 동일한 파트를 생성하는 서로 다른 2개의 삽입 간에는 더 이상 중복 제거되지 않으며, 같은 행을 순서만 바꿔 삽입한 경우에도 더 이상 중복 제거되지 않습니다. 이전 동작으로 되돌리려면 `insert_deduplication_version = compatible_double_hashes`를 설정하십시오. `new_unified_hash`에서는 비동기 삽입 중복 제거도 동기화 윈도우를 따릅니다. 활성화 여부(`replicated_deduplication_window`)와 보존 기간(`replicated_deduplication_window_seconds`, 기본값 1시간)이 모두 동기화 설정을 따르므로, `*_for_async_inserts`는 레거시이며 `old_separate_hashes` / `compatible_double_hashes`에만 적용됩니다. 기본값이 `old_separate_hashes`였던 릴리스에서 직접 업그레이드하는 인스턴스는 `new_unified_hash`를 사용하기 전에 가장 긴 관련 중복 제거 윈도우가 경과할 때까지 먼저 `compatible_double_hashes`로 실행해야 합니다(비동기 삽입을 사용하는 경우 기본값이 1주인 `replicated_deduplication_window_for_async_inserts` 포함). `compatible_double_hashes`에서 전환하는 비동기 워크로드는 `new_unified_hash`가 더 이상 장기간 유지되는 `async_blocks` ID를 확인하지 않으므로, 먼저 `replicated_deduplication_window[_seconds]`를 비동기 윈도우 수준으로 늘린 후 전체 비동기 윈도우 동안 실행하거나, 비동기 삽입을 중지하거나, `compatible_double_hashes`를 계속 사용해야 합니다. [#107886](https://github.com/ClickHouse/ClickHouse/pull/107886) ([CheSema](https://github.com/CheSema)).
* 구분자가 포함된 needle에서 `hasToken`이 `BAD_ARGUMENTS`를 발생시키지 않고 텍스트 인덱스를 통해 결과를 반환하던 문제를 수정했습니다. [#108189](https://github.com/ClickHouse/ClickHouse/pull/108189) ([Ergus](https://github.com/Ergus)).

<h3 id="removed-features">
  제거된 기능
</h3>

* 더 이상 사용되지 않는 Arrow 기반 Parquet 리더 및 writer를 사용할 수 없습니다. 대신 항상 네이티브 구현이 사용됩니다. 이전 구현을 선택하거나 조정하던 설정들은 이제 더 이상 사용되지 않으며 무시됩니다: `input_format_parquet_use_native_reader_v3`, `output_format_parquet_use_custom_encoder`, `output_format_parquet_version`, `output_format_parquet_compliant_nested_types`, `output_format_parquet_unsupported_types_as_binary`. Native writer는 항상 규격을 준수하는 nested types으로 Parquet V2.6 이상을 기록하며, 지원되지 않는 타입은 raw binary로 기록하는 대신 `UNKNOWN_TYPE`을 발생시킵니다. [#100949](https://github.com/ClickHouse/ClickHouse/pull/100949) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 더 이상 사용되지 않는 `allow_experimental_query_deduplication` 설정 및 지원되지 않는 실험적 쿼리 중복 제거 동작을 제거했습니다. [#99398](https://github.com/ClickHouse/ClickHouse/pull/99398) ([devcrafter](https://github.com/devcrafter)).
* 소스 테이블의 요청된 파티션에 파트가 없으면 `ALTER TABLE ... REPLACE PARTITION ... FROM ...`는 더 이상 대상 파티션의 데이터를 조용히 삭제하지 않습니다. 이전에는 이러한 요청으로 대상 파티션이 제거되고 그 자리에 아무 데이터도 기록되지 않았습니다. 이제 기본적으로 `BAD_ARGUMENTS` 오류와 함께 거부됩니다. 이는 하위 호환되지 않는 변경 사항입니다. 이전에는 성공하여 대상 파티션을 비우던 빈 소스에서의 `REPLACE PARTITION`은 업그레이드 후 오류를 발생시킵니다. 이전의 자동 삭제 동작을 복원하려면 새 설정 `allow_replace_partition_from_empty_source = 1`을 설정하거나(쿼리별 또는 profile에서), `compatibility`를 `26.5` 이하로 설정하십시오. 대상 데이터를 명시적으로 삭제하려면 `ALTER TABLE ... DROP PARTITION ...`를 사용하십시오. [#104939](https://github.com/ClickHouse/ClickHouse/pull/104939) ([groeneai](https://github.com/groeneai)).
* 실험적 KQL(Kusto) 함수 `array_sort_asc` 및 `array_sort_desc`와 해당 SQL 백엔드인 `kql_array_sort_asc` 및 `kql_array_sort_desc`를 제거했습니다. 이 함수들은 실험적 기능으로, 구현 품질이 낮았으며 정확성 및 파서 버그의 원인이었습니다. 이제 이 이름을 사용하는 쿼리는 `UNKNOWN_FUNCTION`을 반환합니다. [#108101](https://github.com/ClickHouse/ClickHouse/pull/108101) ([groeneai](https://github.com/groeneai)).

<h2 id="new-features">
  새 기능
</h2>

<h3 id="functions">
  함수
</h3>

* `prometheusQuery` 및 `prometheusQueryRange` 테이블 함수에서 PromQL `histogram_quantile` 함수를 지원합니다. 이를 통해 `le` 레이블로 식별되는 기존 Prometheus 히스토그램 버킷의 분위수를 계산할 수 있습니다. [#103477](https://github.com/ClickHouse/ClickHouse/pull/103477) ([Yasumoto](https://github.com/Yasumoto)).
* 중심 기반, 완전 포함, 겹침 포함 모드를 지원하는 `h3PolygonToCellsWithContainment` 함수를 추가했습니다. [#104455](https://github.com/ClickHouse/ClickHouse/pull/104455) ([yousefQadry](https://github.com/yousefQadry)).
* 이제 `formatReadableSize`, `formatReadableDecimalSize`, `formatReadableQuantity` 함수에 선택적 정밀도 인수를 지정하여 소수점 이하 자릿수를 제어할 수 있습니다. 기본값은 2이며, 기존 동작이 유지됩니다. [#104648](https://github.com/ClickHouse/ClickHouse/pull/104648) ([antoniofilipovic](https://github.com/antoniofilipovic)).
* `argMin` 및 `argMax`의 집계 별칭인 `min_by` 및 `max_by`를 추가했습니다. [#105712](https://github.com/ClickHouse/ClickHouse/pull/105712) ([itsjoeoui](https://github.com/itsjoeoui)).

<h3 id="sql-and-query-features">
  SQL 및 쿼리 기능
</h3>

* `formatReadableTimeDelta`가 이제 `Month` 및 `Year` 이외의 유형인 `INTERVAL` 표현식도 입력으로 받습니다. [#64315](https://github.com/ClickHouse/ClickHouse/pull/64315) ([Beetelbrox](https://github.com/Beetelbrox)).
* PNG 출력 형식을 지원하여 쿼리 결과를 PNG 이미지로 직접 렌더링할 수 있습니다. [#74691](https://github.com/ClickHouse/ClickHouse/pull/74691) ([m7kss1](https://github.com/m7kss1)).
* 워크로드를 위한 메모리 예약 기능을 도입했습니다. [워크로드 스케줄링](https://clickhouse.com/docs/operations/workload-scheduling) 문서를 참조하십시오. [#82414](https://github.com/ClickHouse/ClickHouse/pull/82414) ([serxa](https://github.com/serxa)).
* `IP_ADDRESS` 또는 `FORWARDED_IP_ADDRESS`를 기준으로 하는 QUOTA에 `IPV4_PREFIX_BITS` 및 `IPV6_PREFIX_BITS` 옵션을 추가했습니다. 이제 전체 IP 주소마다 개별적으로 QUOTA 제한을 적용하는 대신 IP 서브넷별로 제한을 공유할 수 있습니다. [#89270](https://github.com/ClickHouse/ClickHouse/pull/89270) ([adityachopra29](https://github.com/adityachopra29)).
* 기존 Enum 유형에 새 값을 추가할 때 현재의 모든 Enum 값을 다시 지정할 필요가 없도록 `ALTER TABLE` 쿼리에 `ADD ENUM VALUES`를 구현했습니다. [#93830](https://github.com/ClickHouse/ClickHouse/pull/93830) ([ilejn](https://github.com/ilejn)).
* 읽기용 `GeoJSON` 입력 형식을 추가했습니다. [#98124](https://github.com/ClickHouse/ClickHouse/pull/98124) ([mneedham](https://github.com/mneedham)).
* 토큰화 후 토큰을 변환하는 텍스트 인덱스용 후처리기를 추가했습니다. [#98939](https://github.com/ClickHouse/ClickHouse/pull/98939) ([Ergus](https://github.com/Ergus)).
* ClickHouse Keeper에서 TTL 노드를 선택적으로 지원합니다. TTL 노드는 구성된 수명이 지나면 자동으로 만료되며 하위 노드를 가질 수 없습니다. [#100397](https://github.com/ClickHouse/ClickHouse/pull/100397) ([scanhex12](https://github.com/scanhex12)).
* 정확한 `hasPhrase` 검색을 지원하도록 텍스트 인덱스에 토큰 위치 저장 기능을 추가했습니다. `support_phrase_search` 인덱스 인수와 `allow_experimental_text_index_phrase_search` `MergeTree` 설정을 활성화하십시오. [#103172](https://github.com/ClickHouse/ClickHouse/pull/103172) ([ahmadov](https://github.com/ahmadov)).
* arrayTopK 및 arrayBottomK 함수를 추가했습니다. - `arrayTopK(k, array)`는 가장 큰 K개의 원소를 내림차순으로 반환합니다. - `arrayBottomK(k, array)`는 가장 작은 K개의 원소를 오름차순으로 반환합니다. [#104563](https://github.com/ClickHouse/ClickHouse/pull/104563) ([vitlibar](https://github.com/vitlibar)).
* `* LIKE '<pattern>'` 및 `* ILIKE '<pattern>'`를 사용해 이름 패턴으로 컬럼을 선택하는 기능을 추가했습니다. `table.* LIKE '<pattern>'`, `table.* ILIKE '<pattern>'`와 같은 한정 형식도 지원합니다. `LIKE`는 컬럼명을 대소문자를 구분하여 일치시키고, `ILIKE`는 대소문자를 구분하지 않고 일치시킵니다. [#104569](https://github.com/ClickHouse/ClickHouse/pull/104569) ([niyue](https://github.com/niyue)).
* 스냅샷 읽기 시퀀스를 사용하는 `MergeTree` 테이블용 연속 쿼리를 추가했습니다. [#105114](https://github.com/ClickHouse/ClickHouse/pull/105114) ([Michicosun](https://github.com/Michicosun)).
* 스키마 진화 지원을 개선하기 위해 `RowBinaryWithNamesAndTypesAndDefaults` 포맷을 추가했습니다. [#105736](https://github.com/ClickHouse/ClickHouse/pull/105736) ([mzitnik](https://github.com/mzitnik)).
* SQL에서 Mapbox Vector Tiles를 직접 제공하기 위한 함수를 추가했습니다. `MVTEncodeGeom`은 지오메트리를 slippy-map 타일의 픽셀 공간에 투영하고 클리핑하며, `MVTEncode`는 그룹의 투영된 지오메트리를 단일 레이어 타일의 바이너리 바이트로 집계합니다. `MVTBoundingBox` / `MVTBoundingBoxMercator`는 행을 해당 타일로 제한하는 데 사용할 타일의 경계 상자를 반환합니다. Point, 선, Polygon 지오메트리를 지원합니다. PostGIS 별칭인 `ST_AsMVTGeom` 및 `ST_AsMVT`로도 사용할 수 있습니다. [#106107](https://github.com/ClickHouse/ClickHouse/pull/106107) ([saarthak2002](https://github.com/saarthak2002)).
* `LOCALTIME` 및 `LOCALTIMESTAMP`를 추가했습니다(SQL 표준 / PostgreSQL 구문). `LOCALTIMESTAMP`는 `now()`의 별칭이며(`DateTime` 반환), `LOCALTIME`은 현재 시간을 `Time` 값으로 반환합니다. [#106139](https://github.com/ClickHouse/ClickHouse/pull/106139) ([thomas-cabral](https://github.com/thomas-cabral)).
* 새 `load_balancing` 전략 2개인 `hostname_longest_common_prefix` 및 `hostname_longest_common_suffix`를 추가했습니다. 이 전략은 시작자 호스트명과 가장 긴 공통 접두사(각각 접미사)를 공유하는 레플리카를 우선적으로 선택합니다. 기존 `nearest_hostname` 및 `hostname_levenshtein_distance` 전략이 잘못된 레플리카를 선택할 수 있는, 숫자 세그먼트의 길이가 가변적인 호스트명의 접두사 또는 접미사에 데이터 센터 정보가 포함된 환경에서 유용합니다. [#107360](https://github.com/ClickHouse/ClickHouse/pull/107360) ([den-crane](https://github.com/den-crane)).
* 새 함수 `quantizeBFloat16ToInt8` 및 `dequantizeInt8ToBFloat16`: embedding 구성 요소를 256단계 Gaussian Lloyd-Max 양자화기를 사용해 8비트로 압축하는 스칼라 코덱입니다. 비트 절단을 통해 Int4/Int2/binary 코드를 추출할 수 있습니다. [#108102](https://github.com/ClickHouse/ClickHouse/pull/108102) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="table-engines-and-storage">
  테이블 엔진 및 스토리지
</h3>

* Azure Data Lake Storage Gen2에 데이터 쓰기 지원이 추가되었습니다. [#105406](https://github.com/ClickHouse/ClickHouse/pull/105406) ([scanhex12](https://github.com/scanhex12)).

<h3 id="settings-and-configuration">
  설정 및 구성
</h3>

* 값이 정수여도 부동 소수점 및 `Decimal` 숫자를 텍스트 포맷으로 출력할 때 항상 소수점을 표시하는 `output_format_always_write_decimal_point_in_float_and_decimal` 설정을 추가했습니다. 예를 들어 `1` 대신 `1.`을 출력합니다. 기본적으로 비활성화되어 있습니다. [#62614](https://github.com/ClickHouse/ClickHouse/pull/62614) ([qoega](https://github.com/qoega)).
* 기본적으로 비활성화되는 새 불변 `MergeTree` 설정 `allow_tuple_element_aggregation`을 추가했습니다. 활성화하면 `SummingMergeTree`, `AggregatingMergeTree`, `CoalescingMergeTree`는 머지 중에 `Tuple` 컬럼을 재귀적으로 평면화하고 각 리프 원소를 최상위 컬럼인 것처럼 독립적으로 집계합니다. 즉, `SummingMergeTree`는 값을 합산하고, `AggregatingMergeTree`는 집계 함수 상태를 머지하며, `CoalescingMergeTree`는 마지막 non-NULL 값을 유지합니다. 이 설정은 테이블 생성 시 지정해야 하며, 지원하지 않는 엔진에서는 별도 알림 없이 무시됩니다. [#98039](https://github.com/ClickHouse/ClickHouse/pull/98039) ([JingYanchao](https://github.com/JingYanchao)).
* 부동 소수점 텍스트 출력의 소수 자릿수를 제어하는 `output_format_float_precision` 설정을 추가했습니다. [#99721](https://github.com/ClickHouse/ClickHouse/pull/99721) ([phulv94](https://github.com/phulv94)).
* `materialize_projections_on_insert` 및 `materialize_projections_on_merge` MergeTree 테이블 설정을 추가했습니다. `materialize_projections_on_insert = 0`이면 INSERT 시 프로젝션 파트 생성을 건너뛰므로 프로젝션이 많은 테이블의 삽입 처리량이 향상됩니다. `materialize_projections_on_merge = 1`이면 머지 시 모든 소스 파트에 없는 프로젝션을 재구성하므로 삽입 시점이 아니라 머지 중에 프로젝션을 생성할 수 있습니다. 머지는 계속해서 동일한 프로젝션 집합을 공유하는 파트끼리만 결합합니다. [#100993](https://github.com/ClickHouse/ClickHouse/pull/100993) ([cwurm](https://github.com/cwurm)).
* 새 S3Queue 설정 `after_processing_move_preserve_path`를 추가했습니다. `after_processing='move'` 및 `after_processing_move_prefix`와 함께 활성화하면 처리된 객체는 파일 이름만 남기도록 평면화되지 않고 대상 접두사 아래에서 전체 소스 경로를 유지한 채 이동됩니다. [#105354](https://github.com/ClickHouse/ClickHouse/pull/105354) ([asya-ch](https://github.com/asya-ch)).
* 지정된 접두사로 시작하는 모든 경로를 일치시키기 위한 `url_prefix` 및 `full_url_prefix` HTTP 핸들러 구성 요소와 명시적인 `url_regexp`, `full_url_regexp`, `headers_regexp` 요소를 추가했습니다. 기존 `<url>regex:...</url>` 형식은 계속 지원됩니다. [#107492](https://github.com/ClickHouse/ClickHouse/pull/107492) ([vitlibar](https://github.com/vitlibar)).

<h3 id="authentication">
  인증
</h3>

* S3 역할 기반 접근을 위한 선택적 `external_id` 자격 증명을 추가했습니다. [#106941](https://github.com/ClickHouse/ClickHouse/pull/106941) ([eliangidoni](https://github.com/eliangidoni)).
* 인증서 기반 인증의 관측성을 개선하기 위해 TLS 클라이언트 인증서 정보(주체, 일련번호, 발급자, 유효 기간)를 `system.session_log` 테이블에 추가했습니다. [#107679](https://github.com/ClickHouse/ClickHouse/pull/107679) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="system-tables">
  시스템 테이블
</h3>

* `system.iceberg_files` 테이블을 추가했습니다. 이 테이블은 Iceberg 테이블의 파일별 메타데이터를 제공하며, 각 테이블의 현재 스냅샷에 있는 데이터 파일 또는 삭제 파일마다 하나의 행을 포함합니다. [#104415](https://github.com/ClickHouse/ClickHouse/pull/104415) ([asya-ch](https://github.com/asya-ch)).
* 가상(what-if) 스킵 인덱스를 추가했습니다. `CREATE HYPOTHETICAL INDEX ... ON t (expr) TYPE ...`를 사용해 세션 범위의 가상 스킵 인덱스를 정의한 다음, `EXPLAIN WHATIF SELECT ...`를 사용해 실제로 구체화하지 않고 스킵 비율과 비용을 추정할 수 있습니다. 정의된 인덱스는 새 `system.hypothetical_indexes` 테이블에서 확인할 수 있습니다. [#104608](https://github.com/ClickHouse/ClickHouse/pull/104608) ([yariks5s](https://github.com/yariks5s)).
* 제약 조건 이름, 유형, 표현식을 포함하여 모든 테이블의 CHECK 및 ASSUME 제약 조건에 대한 정보를 제공하는 `system.constraints` 테이블을 추가했습니다. [#105337](https://github.com/ClickHouse/ClickHouse/pull/105337) ([PedroTadim](https://github.com/PedroTadim)).
* 함수, 테이블 엔진, 데이터 타입, 설정, 포맷 등의 시스템 구성 요소에 내장된 참고 문서를 Markdown으로 렌더링하여 단일 테이블에 수집하는 새 시스템 테이블 `system.documentation`을 추가했습니다. [#107463](https://github.com/ClickHouse/ClickHouse/pull/107463) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h2 id="experimental-features">
  실험적 기능
</h2>

* 내부 조인용 실험적 `dphyp` 조인 순서 재정렬 알고리즘을 `query_plan_optimize_join_order_algorithm` 설정의 옵션으로 추가했습니다. 또한 조인 순서 검색 범위를 제한하고, 제한을 초과하면 체인의 다음 알고리즘으로 대체하는 `query_plan_optimize_join_order_max_searched_plans` 설정을 추가했습니다. 기존의 제한 없는 검색 동작을 유지하려면 `0`으로 설정하십시오. [#98798](https://github.com/ClickHouse/ClickHouse/pull/98798) ([davenger](https://github.com/davenger)).
* 텍스트 인덱스에 지연 포스팅 리스트 적용 모드를 추가했습니다. `SET allow_experimental_text_index_lazy_apply = 1` 및 `SET text_index_posting_list_apply_mode = 'lazy'`로 활성화하면 포스팅 리스트를 Roaring Bitmap으로 완전히 구체화하지 않고, 커서 기반 방식을 사용해 패킹 블록 단위로 필요할 때 디코딩합니다. 이를 통해 선택적인 텍스트 인덱스 쿼리의 메모리 사용량과 CPU 시간을 줄입니다. [#100035](https://github.com/ClickHouse/ClickHouse/pull/100035) ([fastio](https://github.com/fastio)).
* 선택적 접두사를 사용해 기본 HTTP 포트에 prometheus 핸들러를 연결할 수 있습니다. [#104975](https://github.com/ClickHouse/ClickHouse/pull/104975) ([JTCunning](https://github.com/JTCunning)).
* 작은 스킵 인덱스 서브스트림을 파트당 단일 `skp_idx.packed` 아카이브로 묶는 실험적 MergeTree 설정 `packed_skip_index_max_bytes`를 추가했습니다. 이를 통해 테이블에 많은 스킵 인덱스가 정의된 경우 inode 부담을 줄입니다. 이 결정은 쓰기 시점에 서브스트림별로 이루어집니다. 직렬화된 크기가 임곗값 이하인 서브스트림은 아카이브에 저장되고, 더 큰 서브스트림은 독립형 `skp_idx_<name>.idx2` / `.mrk2` 레이아웃을 유지합니다. 하나의 파트에서 두 레이아웃을 혼합할 수 있습니다. 전문 인덱스는 지원되지 않으며 항상 파일별로 저장됩니다. 기본값은 0(패킹 비활성화)입니다. [#105321](https://github.com/ClickHouse/ClickHouse/pull/105321) ([Algunenano](https://github.com/Algunenano)).
* `ABI BUFFERED_V1`을 사용하는 WebAssembly UDF에 `Buffers` 직렬화를 지원하고, 영속적인 WASM UDF 함수 설정으로 `webassembly_udf_enable_fuel`을 추가했습니다. [#105574](https://github.com/ClickHouse/ClickHouse/pull/105574) ([antonio2368](https://github.com/antonio2368)).
* 다단계 분산 쿼리 실행: 플래너가 쿼리 계획을 scatter / broadcast / gather / shuffle exchange로 연결된 단계로 분할하고, 계획 조각을 worker 노드에 디스패치합니다. 단계 간 데이터는 TCP를 통해 스트리밍되거나 공유 객체 스토리지의 임시 파일을 통해 전달됩니다. 이 경로는 분산 shuffle 및 broadcast 해시 조인, shuffle 집계, 분산 정렬을 지원합니다. 이 기능은 실험적 기능이며 기본적으로 비활성화되어 있습니다. [#106020](https://github.com/ClickHouse/ClickHouse/pull/106020) ([davenger](https://github.com/davenger)).
* 실험적 분산 쿼리 계획 엔진(`make_distributed_plan`)은 이제 `<remote_servers>`에서 각 레플리카에 `stateless_worker_port`와 `streaming_exchange_port`를 구성하여 worker마다 서로 다른 작업 디스패치 및 스트리밍 exchange 포트를 사용할 수 있습니다. 설정하지 않으면 기존 서버 수준 포트(`stateless_worker_client.port` 및 `distributed_query.streaming_exchange_port`)가 사용됩니다. 이를 통해 하나의 호스트에서 여러 worker를 실행할 수 있습니다. [#107885](https://github.com/ClickHouse/ClickHouse/pull/107885) ([davenger](https://github.com/davenger)).

<h2 id="performance-improvements">
  성능 개선
</h2>

<h3 id="join-performance">
  JOIN 성능
</h3>

* JOIN 뒤에 선택적인 LIMIT나 TopN 또는 다른 JOIN이 이어질 때 셀렉터 및 복제 인덱스를 지연 적용하도록 구현했습니다. 지연 셀렉터 인덱스를 활성화하는 데 필요한 페이로드 컬럼 수는 설정 `query_plan_min_columns_for_join_lazy_indexing`으로 제어합니다(0은 최적화가 비활성화됨을 의미합니다). 최적화가 적용될 LIMIT는 설정 `query_plan_max_limit_for_join_lazy_indexing`으로 제어합니다. [#98883](https://github.com/ClickHouse/ClickHouse/pull/98883) ([m-selmi](https://github.com/m-selmi)).
* `ASOF JOIN`에서 `parallel_hash` 조인 알고리즘을 사용할 수 있도록 하여, 서로 다른 동등 키 값별로 빌드 작업을 병렬화합니다. 이전에는 ASOF가 항상 `parallel_hash`에서 제외되었습니다. [#105375](https://github.com/ClickHouse/ClickHouse/pull/105375) ([gregakinman](https://github.com/gregakinman)).
* 해시 조인의 FixedHashMap을 프로브 측의 JOIN 런타임 필터로 공유합니다. 빌드 측 해시 테이블이 FixedHashMap이거나 FixedHashMap으로 변환할 수 있으면 런타임 필터로 게시되어, `BuildRuntimeFilterStep`이 설치했을 `Set`/`BloomFilter`를 대체합니다. 새로운 설정 `enable_join_runtime_filter_shared_fixed_hash_table`(기본값 `true`)으로 제어합니다. [#105640](https://github.com/ClickHouse/ClickHouse/pull/105640) ([wudidapaopao](https://github.com/wudidapaopao)).
* 이제 병렬 레플리카에서 DP JOIN 재정렬이 허용됩니다. [#105889](https://github.com/ClickHouse/ClickHouse/pull/105889) ([nickitat](https://github.com/nickitat)).
* JOIN에서 런타임 필터(기본 활성화된 `enable_join_runtime_filters`)를 사용할 때의 쿼리 계획을 개선했습니다. 이제 조인 재정렬 비용 모델은 오른쪽 하위 트리의 `WindowTransform`(및 기타 행을 보존하는 계획 단계)을 통과하여, 통계가 없는 것으로 처리하는 대신 기본 행 수와 컬럼별 NDV를 사용합니다. [#107229](https://github.com/ClickHouse/ClickHouse/pull/107229) ([UnamedRus](https://github.com/UnamedRus)).

<h3 id="query-optimization">
  쿼리 최적화
</h3>

* 희귀 토큰 처리를 최적화하여 여러 토큰을 검색할 때의 텍스트 인덱스 분석 성능을 개선했습니다. [#98226](https://github.com/ClickHouse/ClickHouse/pull/98226) ([CurtizJ](https://github.com/CurtizJ)).
* OpenSSL 3.x에서 행마다 암시적으로 OpenSSL provider를 조회하지 않도록 하여 `encrypt`, `decrypt`, `halfMD5` 함수의 성능을 개선했습니다. [#99105](https://github.com/ClickHouse/ClickHouse/pull/99105) ([thevar1able](https://github.com/thevar1able)).
* 임시 프로젝션 파트 수와 머지 오버헤드를 줄이기 위해 `MATERIALIZE PROJECTION` 중 `projection.calculate()` 전에 원본 블록을 병합합니다. 5,000만 행 테이블에서 약 3.4배 빨라집니다. [#100047](https://github.com/ClickHouse/ClickHouse/pull/100047) ([amosbird](https://github.com/amosbird)).
* Approximate Runtime Filters 및 Bloom Filter Indices의 성능을 개선했습니다. [#100201](https://github.com/ClickHouse/ClickHouse/pull/100201) ([cv4g](https://github.com/cv4g)).
* `LIMIT BY`의 컬럼이 `ORDER BY`의 접두사인 경우, `Sort` 중 각 병렬 정렬 스트림에서 `LIMIT BY`를 실행하여 `ORDER BY ... LIMIT BY` 쿼리의 속도를 높입니다. 이렇게 하면 최종 정렬 머지 및 이후 파이프라인 단계로 전달되는 행 수가 줄어듭니다. 이 최적화는 새 설정 `query_plan_push_limit_by_into_sort`로 제어되며 기본적으로 활성화되어 있습니다. [#104000](https://github.com/ClickHouse/ClickHouse/pull/104000) ([nihalzp](https://github.com/nihalzp)).
* 단순 SELECT 쿼리의 쿼리별 오버헤드(파싱, 분석, 계획 수립)를 줄였습니다. 예를 들어 단일 연결에서 실행하는 `SELECT count() FROM hits`는 약 50% 더 빨라집니다. [#104513](https://github.com/ClickHouse/ClickHouse/pull/104513) ([Algunenano](https://github.com/Algunenano)).
* 범위 검사 중 `rb_max`를 반복 호출하지 않도록 하여 `UInt64`가 아닌 `groupBitmap` 상태에서 `bitmapContains`의 성능을 개선했습니다. [#105960](https://github.com/ClickHouse/ClickHouse/pull/105960) ([niyue](https://github.com/niyue)).
* `bloom_filter` 인덱스가 있는 `LowCardinality` 컬럼의 삽입 성능을 개선했습니다. [#106410](https://github.com/ClickHouse/ClickHouse/pull/106410) ([EmeraldShift](https://github.com/EmeraldShift)).
* `QBit` 데이터 타입에서 `L2DistanceTransposed` 및 `cosineDistanceTransposed` 함수의 성능을 개선했습니다. [#106701](https://github.com/ClickHouse/ClickHouse/pull/106701) ([rienath](https://github.com/rienath)).
* 컬럼이 많은 테이블에 대한 쿼리 분석 성능을 개선했습니다. 필요하지 않을 때 전체 원본 테이블 표현식을 포함하는 컬럼 노드 해시를 계산하지 않습니다. 약 1,200개 컬럼이 있는 테이블의 중첩 `SELECT *` 서브쿼리 분석은 이제 약 50배 빨라집니다. [#106957](https://github.com/ClickHouse/ClickHouse/pull/106957) ([novikd](https://github.com/novikd)).
* BoringSSL에서 OpenSSL 3.x로 마이그레이션(24.4)하면서 저하된 성능을 복구하여 `encrypt`, `decrypt`, `tryDecrypt`, `aes_encrypt_mysql`, `aes_decrypt_mysql` 함수의 성능을 최대 10배 개선했습니다. [#107339](https://github.com/ClickHouse/ClickHouse/pull/107339) ([thevar1able](https://github.com/thevar1able)).
* 불필요한 문자열 구체화를 방지하여 `Array(LowCardinality(String))`에서 `arrayElement`의 실행 성능과 `LowCardinality(String)` 키 또는 값을 사용하는 맵의 LIKE 함수 성능을 개선했습니다. [#107450](https://github.com/ClickHouse/ClickHouse/pull/107450) ([EmeraldShift](https://github.com/EmeraldShift)).
* `DateTime64` 컬럼을 필터링하는 쿼리의 CPU 사용량을 줄이고 skip-index 평가 성능을 개선했습니다. [#107707](https://github.com/ClickHouse/ClickHouse/pull/107707) ([shankar-iyer](https://github.com/shankar-iyer)).
* `positionCaseInsensitiveUTF8`, `ILIKE`, `multiSearchAnyCaseInsensitiveUTF8`를 포함한 대소문자 비구분 부분 문자열 검색 성능을 개선했습니다. [#107882](https://github.com/ClickHouse/ClickHouse/pull/107882) ([Algunenano](https://github.com/Algunenano)).
* 예측기 테이블이 `VectorWithMemoryTracking`을 사용하기 시작하면서 발생한 ARM의 `FPC` 부동 소수점 코덱 처리량 약 16% 회귀를 수정했습니다. [#108182](https://github.com/ClickHouse/ClickHouse/pull/108182) ([groeneai](https://github.com/groeneai)).
* 단일 경량 `DELETE`로 인해 전체 테이블의 쿼리 조건 캐시가 비활성화되던 성능 회귀를 수정했습니다. 경량 DELETE가 한 번이라도 적용된 테이블에서 선택적 쿼리를 반복 실행하면 그래뉼 프루닝이 중단되고 모든 mark를 읽게 되었습니다. [#112947](https://github.com/ClickHouse/ClickHouse/pull/112947) ([fm4v](https://github.com/fm4v)).
* 컬럼 통계에서 `col IN (...)`의 선택도를 추정하는 비용을 제한했습니다. 이로 인해 단일 쿼리의 계획 수립에 수백 밀리초가 추가될 수 있었습니다. 이제 추정기는 선택도 값 하나만 필요한 집합을 채우기 위해 `col IN (subquery)`의 하위 쿼리를 실행하지 않으며, 빌드되지 않은 집합은 건너뜁니다. 새 `statistics_max_set_size_for_exact_selectivity_estimation` 설정(기본값 10000)보다 큰 집합의 선택도는 이제 집합의 크기와 경계 범위를 기반으로 추정합니다. [#114389](https://github.com/ClickHouse/ClickHouse/pull/114389) ([nickitat](https://github.com/nickitat)).

<h3 id="function-and-aggregation-performance">
  함수 및 집계 성능
</h3>

* 길거나 카디널리티가 높은 프라이머리 키의 프라이머리 키 인덱스 분석을 최적화했습니다. 긴 프라이머리 키에서는 이제 인덱스 분석 실행 시간이 프라이머리 키의 길이가 아니라 주로 쿼리 필터의 복잡성(실제로 사용하는 키 컬럼)에 따라 결정됩니다. 따라서 일부 컬럼만 필터링하는 쿼리에서는 정렬 키를 확장해도 인덱스 분석에 거의 추가 오버헤드가 발생하지 않습니다. ClickHouse가 키 컬럼 중 선택적인 접두사만 메모리에 유지하고 후행 컬럼은 로드하지 않는 카디널리티가 높은 프라이머리 키에서는, 이제 인덱스 분석이 전체 키 대신 메모리에 있는 접두사만 대상으로 수행됩니다. 이 최적화는 기본적으로 활성화되며, 새로운 설정 `use_lightweight_primary_key_index_analysis`로 비활성화할 수 있습니다. [#91836](https://github.com/ClickHouse/ClickHouse/pull/91836) ([nihalzp](https://github.com/nihalzp)).
* 큰 집계 상태(예: `groupArray`)가 포함된 부분 2단계 집계 결과를 머지할 때, 머지가 완료될 때까지 모든 상태를 유지하는 대신 머지 과정에서 각 버킷의 소스 상태를 점진적으로 해제하여 피크 메모리 사용량을 줄였습니다. [#102330](https://github.com/ClickHouse/ClickHouse/pull/102330) ([yurifedoseev](https://github.com/yurifedoseev)).
* 그룹화 키를 해싱해 행을 스레드 간에 분산함으로써, 각 스레드가 머지 단계 없이 서로 겹치지 않는 키 하위 집합을 집계하는 카디널리티가 높고 균등하게 분포된 키용 `GROUP BY` 최적화를 추가했습니다. 활성화하려면 `enable_sharding_aggregator = 1`로 설정하십시오. [#104233](https://github.com/ClickHouse/ClickHouse/pull/104233) ([nihalzp](https://github.com/nihalzp)).
* 제한을 적용하기 전에 모든 스트림을 하나로 머지하는 대신, 각 파티션의 스트림에서 `LIMIT BY`를 병렬로 실행하여 파티션된 `MergeTree` 테이블의 `LIMIT BY` 쿼리 속도를 높였습니다. 파티션 표현식이 `LIMIT BY` 컬럼의 결정론적 함수여서 어떤 `LIMIT BY` 그룹도 2개의 파티션에 걸칠 수 없을 때 적용됩니다. 새로운 설정 `allow_limit_by_partitions_independently`로 제어하며 기본적으로 활성화됩니다. [#105126](https://github.com/ClickHouse/ClickHouse/pull/105126) ([nihalzp](https://github.com/nihalzp)).
* `<cols>`가 테이블 정렬 키의 접두사이거나 `WHERE col = const`로 선행 컬럼이 고정된 후 접두사가 되는 경우, `SELECT ... LIMIT N BY <cols>` 쿼리 속도를 높였습니다. 활성화하면 `MergeTree`는 프라이머리 키 순서로 데이터를 읽고, `LIMIT BY`는 먼저 정렬된 스트림당 O(1) 메모리를 사용하는 스트리밍 모드에서 대부분의 데이터를 필터링한 다음, 축소된 데이터에 일반 `LIMIT BY`를 실행해 최종 결과를 얻습니다. 새로운 설정 `optimize_limit_by_in_order`로 제어하며 기본적으로 활성화됩니다. [#105135](https://github.com/ClickHouse/ClickHouse/pull/105135) ([nihalzp](https://github.com/nihalzp)).
* 중복 키 표현식을 제거하여 `LIMIT BY` 쿼리 속도를 높였습니다. 다른 키의 결정론적 함수인 키는 제거되며(예: `LIMIT 5 BY x, f(x)`는 `LIMIT 5 BY x`가 됨), 키의 단사 함수는 인수로 대체됩니다(예: `LIMIT 5 BY toString(x)`는 `LIMIT 5 BY x`가 됨). 이에 따라 행당 평가되는 표현식 수와 비용이 줄어듭니다. 새로운 설정 `optimize_limit_by_function_keys` 및 `optimize_injective_functions_in_limit_by`로 제어하며, 둘 다 기본적으로 활성화됩니다. [#106818](https://github.com/ClickHouse/ClickHouse/pull/106818) ([nihalzp](https://github.com/nihalzp)).
* 함수 확인 캐시에서 중복된 쿼리 트리 해시를 제거하여, 함수 호출이 많거나 깊게 중첩된 쿼리의 분석 속도를 높였습니다. [#107516](https://github.com/ClickHouse/ClickHouse/pull/107516) ([novikd](https://github.com/novikd)).
* 재귀 CTE 결과 처리를 병렬화했습니다. 이제 대규모 `WITH RECURSIVE` 결과에 대한 `GROUP BY` 또는 기타 작업은 단일 스레드로 제한되지 않습니다. [#107694](https://github.com/ClickHouse/ClickHouse/pull/107694) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="storage-and-io-performance">
  스토리지 및 I/O 성능
</h3>

* 동일한 엔드포인트와 버킷을 사용하는 S3 클라이언트가 캐시를 공유하여 중복된 리전 검색을 방지합니다. [#96802](https://github.com/ClickHouse/ClickHouse/pull/96802) ([zvonand](https://github.com/zvonand)).
* 블롭을 병렬로 복사하여 객체 스토리지 복사 성능을 개선했습니다. [#105089](https://github.com/ClickHouse/ClickHouse/pull/105089) ([asya-ch](https://github.com/asya-ch)).
* file 및 s3와 같은 파일 기반 테이블 함수에서 One 입력 형식을 사용할 때 파일 내용을 읽지 않도록 했습니다. [#105157](https://github.com/ClickHouse/ClickHouse/pull/105157) ([niyue](https://github.com/niyue)).
* 이제 `MergeTree` 프라이머리 키와 스킵 인덱스는 `ifNull(key = 0, 0)` 또는 `coalesce(key = 0, 0)`처럼 `ifNull` 또는 `coalesce`로 조건을 감싼 필터에서 그래뉼을 제외할 수 있습니다. 이러한 프레디케이트는 쿼리 생성기가 `NULL`이 될 수 있는 비교를 명확한 불리언 값으로 변환하기 위해 자주 생성하며, 이전에는 인덱스 분석에서 해석할 수 없어 그래뉼을 건너뛸 수 없었습니다. 이는 기본적으로 활성화되는 기존 `allow_key_condition_coalesce_rewrite` 설정을 확장한 것입니다. [#106272](https://github.com/ClickHouse/ClickHouse/pull/106272) ([andyzzhao](https://github.com/andyzzhao)).
* `BYTE_STREAM_SPLIT`으로 인코딩된 Parquet `FLOAT` 및 `DOUBLE` 컬럼의 디코딩 성능을 개선했습니다. [#106376](https://github.com/ClickHouse/ClickHouse/pull/106376) ([Algunenano](https://github.com/Algunenano)).
* 많은 액세스 엔터티(행 정책, 역할, 할당량, 설정 프로필)가 한 번에 변경될 때 복제된 액세스 스토리지에서 로그인 및 쿼리 시작이 장시간 지연되는 문제를 수정했습니다. 이제 엔터티별 캐시는 변경된 엔터티마다 한 번씩이 아니라 알림 배치마다 한 번씩만 다시 계산하므로, 액세스 잠금을 수분간 유지할 수 있던 이차 복잡도의 작업을 제거합니다. [#107672](https://github.com/ClickHouse/ClickHouse/pull/107672) ([azat](https://github.com/azat)).
* `s3` 및 기타 테이블 함수를 통해 객체 스토리지에서 많은 작은 파일을 읽을 때 프리페치가 중단되고 동기 읽기로 대체되어, 단일 스레드 또는 낮은 동시성으로 많은 작은 파일을 읽는 작업이 크게 느려지던 성능 회귀를 수정했습니다. [#108872](https://github.com/ClickHouse/ClickHouse/pull/108872) ([fm4v](https://github.com/fm4v)).
* 객체 스토리지 읽기가 파일 시스템 캐시(`filesystem_cache_name`)를 거칠 때 초기 소형 객체 프리페치를 활성화했습니다. 이전에는 파일 시스템 캐시가 활성화된 경우 `S3Queue` 수집처럼 많은 작은 파일을 읽는 작업이 동기식으로 처리되어 지연 시간의 영향을 받았습니다. [#109478](https://github.com/ClickHouse/ClickHouse/pull/109478) ([fm4v](https://github.com/fm4v)).
* 디스크상 크기를 고려하도록 `Map` 서브컬럼의 `PREWHERE` 최적화를 개선했습니다. [#110623](https://github.com/ClickHouse/ClickHouse/pull/110623) ([Avogar](https://github.com/Avogar)).
* 이제 `ORDER BY`가 없어도 `FINAL`, 필터 및 작은 `LIMIT`가 있는 쿼리에 지연 머티리얼라이즈가 적용됩니다(`ReplacingMergeTree`의 경우). [#110722](https://github.com/ClickHouse/ClickHouse/pull/110722) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* 여러 파티션에 걸친 비동기 삽입 플러시의 중복 제거에 필요한 CPU 시간을 줄였습니다. [#111150](https://github.com/ClickHouse/ClickHouse/pull/111150) ([valerypetrov](https://github.com/valerypetrov)).
* 테이블에 `LowCardinality` 컬럼이 있을 때 동일한 `MergeTree` 파트에 대해 독립적인 소규모 읽기를 많이 수행하는 쿼리에서 발생한 CPU 성능 회귀를 수정했습니다. 파트에 단일 공유 딕셔너리가 있는지 판단하는 검사는 이전에는 각 읽기 작업마다 전체 파트의 모든 마크를 검사했지만, 이제는 이진 검색으로 동일한 마크가 연속된 각 구간을 찾습니다. 작은 `index_granularity`를 가진 테이블에서는 이러한 형태의 쿼리가 26.6 이후 최대 수배까지 느려졌습니다. [#116134](https://github.com/ClickHouse/ClickHouse/pull/116134) ([groeneai](https://github.com/groeneai)).

<h3 id="memory-optimization">
  메모리 최적화
</h3>

* `Enum` 컬럼이 있는 테이블에서 `Enum` 유형 메타데이터에 사용하는 메모리를 최대 10배 줄였습니다. 값에서 이름으로의 조회 성능은 동일하거나 더 빠르며, 파싱 및 역직렬화 중 이름에서 값으로의 조회는 더 느려질 수 있습니다. [#95668](https://github.com/ClickHouse/ClickHouse/pull/95668) ([qoega](https://github.com/qoega)).
* 백업 항목을 기록할 때 내부 파일 정보 목록을 더 이상 복사하지 않아 `BACKUP`의 최대 메모리 사용량을 줄였습니다(수백만 개의 파일이 포함된 백업에서 특히 효과적입니다). [#111162](https://github.com/ClickHouse/ClickHouse/pull/111162) ([jkartseva](https://github.com/jkartseva)).

<h2 id="improvements">
  개선 사항
</h2>

<h3 id="query-and-sql-improvements">
  쿼리 및 SQL
</h3>

* 쿼리 계획에서 사용되지 않는 컬럼을 제거할 때 컬럼명 대신 위치를 기준으로 컬럼을 식별합니다. 따라서 중복된 컬럼명이 있어도 사용되지 않는 컬럼을 제거할 수 있습니다. [#100586](https://github.com/ClickHouse/ClickHouse/pull/100586) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* PostgreSQL / SQL 표준과의 호환성을 위해 `currentUser()`의 대소문자를 구분하지 않는 별칭으로 `SESSION_USER`를 추가했습니다. [#106081](https://github.com/ClickHouse/ClickHouse/pull/106081) ([takumihara](https://github.com/takumihara)).
* PostgreSQL wire 프로토콜을 통해 실행되는 쿼리의 취소 지연 시간을 줄였습니다. 이제 KILL QUERY는 전체 청크가 클라이언트로 전송될 때까지 기다리지 않고 청크 내에서 출력 직렬화를 중단합니다. [#106535](https://github.com/ClickHouse/ClickHouse/pull/106535) ([rvasin](https://github.com/rvasin)).
* 상수 인수가 있는 lambda(예: `arrayMap(t -> t.2, ...)`)를 포함하는 `serialize_query_plan = 1` 분산 쿼리에서 발생하는 `ILLEGAL_TYPE_OF_ARGUMENT` 오류를 수정했습니다. 이제 쿼리 계획을 직렬화하는 동안 `ActionsDAG` `INPUT` 노드의 상수 컬럼이 유지됩니다. [#107124](https://github.com/ClickHouse/ClickHouse/pull/107124) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* MySQL wire 프로토콜을 통해 실행되는 쿼리의 취소 지연 시간을 줄였습니다. 이제 KILL QUERY는 전체 청크가 클라이언트로 전송될 때까지 기다리지 않고 청크 내에서 출력 직렬화를 중단합니다. [#107228](https://github.com/ClickHouse/ClickHouse/pull/107228) ([rvasin](https://github.com/rvasin)).

<h3 id="functions-improvements">
  함수
</h3>

* 이제 `EXPLAIN SYNTAX`는 explain 출력에서 연산자를 일관되게 함수 호출 형식으로 포맷합니다(예: `1 + 2` 대신 `plus(1, 2)`). [#94681](https://github.com/ClickHouse/ClickHouse/pull/94681) ([1abdelhalim](https://github.com/1abdelhalim)).
* 이제 PostgreSQL 스타일의 `expr OP SOME(array)` / `expr OP ALL(array)`(오른쪽 피연산자가 하위 쿼리가 아닌 경우)를 지원하며, `=`/`<>`에는 `has` / `NOT has`로, 그 외 비교 연산자에는 `arrayExists` / `arrayAll` lambda로 재작성됩니다. `any`는 집계 함수이기도 하므로 배열 형식에서는 `ANY`를 사용할 수 없습니다. 대신 `SOME`을 사용하십시오. `ANY`/`SOME`/`ALL`의 하위 쿼리 형식은 계속해서 `IN` / `NOT IN`으로 변환됩니다. [#105129](https://github.com/ClickHouse/ClickHouse/pull/105129) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 텍스트 인덱스에서 함수 `multiSearchAny`, `multiSearchAnyUTF8`, `multiMatchAny`를 지원합니다. 또한 함수 `match`의 텍스트 인덱스 분석을 개선했습니다. 이제 대체 그룹이 있는 패턴으로 더 많은 그래뉼을 건너뛸 수 있습니다. [#106279](https://github.com/ClickHouse/ClickHouse/pull/106279) ([CurtizJ](https://github.com/CurtizJ)).
* 이제 함수 `h3PolygonToCells`는 `MultiPolygon`에 포함된 모든 다각형 전체에 최대 배열 크기 제한을 적용하고, 내부 H3 라이브러리의 반환 코드를 검증하며, 빈 결과를 조용히 반환하는 대신 `MultiLineString` 인수를 거부합니다. [#106399](https://github.com/ClickHouse/ClickHouse/pull/106399) ([Algunenano](https://github.com/Algunenano)).
* 이제 집계 함수 `contingency`, `cramersV`, `cramersVBiasCorrected`, `theilsU`의 상태를 역직렬화할 때 저장된 counts가 일관된 분할표를 구성하는지 검증하며, 그렇지 않으면 `CORRUPTED_DATA` 예외를 발생시킵니다. [#107185](https://github.com/ClickHouse/ClickHouse/pull/107185) ([nihalzp](https://github.com/nihalzp)).
* 쿼리 계획 최적화기의 카디널리티 추정을 개선했습니다. 이제 결정론적인 단일 인수 함수(예: `toYear(date)`)가 생성한 컬럼은 통계가 없는 상태로 남는 대신 인수의 고유값 수를 상한으로 상속하므로, 조인 순서 재정렬의 정확도가 향상됩니다. [#107757](https://github.com/ClickHouse/ClickHouse/pull/107757) ([davenger](https://github.com/davenger)).

<h3 id="table-engines-and-storage-improvements">
  테이블 엔진 및 스토리지
</h3>

* 파티션 할당 후에도 짧은 폴링 주기를 계속 사용하던 Kafka 테이블 엔진 소비자를 수정했습니다. 이제 구성된 `kafka_poll_timeout_ms`로 돌아가 리밸런싱 후 발생하는 과도한 빈 폴링, 작은 삽입 파트 및 추가 머지 오버헤드를 방지합니다. [#100431](https://github.com/ClickHouse/ClickHouse/pull/100431) ([sugaf1204](https://github.com/sugaf1204)).
* `Iceberg` 및 `DeltaLake`를 포함한 데이터 레이크 테이블 엔진에서 이제 캐시로 래핑된 S3 및 Azure 디스크를 사용할 수 있어, 반복 읽기 시 파일 시스템 캐시를 활용할 수 있습니다. [#102017](https://github.com/ClickHouse/ClickHouse/pull/102017) ([RinChanNOWWW](https://github.com/RinChanNOWWW)).
* 초기 PREWHERE 선택 이후 추가된 필터(프레디케이트 푸시다운, 런타임 필터 또는 플래너가 설정한 명시적 PREWHERE 및 WHERE)를 MergeTree 읽기 위의 별도 Filter 단계로 남겨 두는 대신, 두 번째 옵티마이저 패스에서 기존 PREWHERE와 병합할 수 있도록 했습니다. [#105445](https://github.com/ClickHouse/ClickHouse/pull/105445) ([yariks5s](https://github.com/yariks5s)).
* `wait_for_part_commit_in_dependent_materialized_views` 설정을 추가했습니다. 활성화하면 소스에 다시 조인하는 연쇄 materialized view에서 현재 삽입 중인 행을 확인할 수 있습니다. [#105943](https://github.com/ClickHouse/ClickHouse/pull/105943) ([ahmadov](https://github.com/ahmadov)).
* 시간대 오프셋의 시 및 분 값을 추출하는 PostgreSQL 호환 `EXTRACT(TIMEZONE_HOUR FROM dt)` 및 `EXTRACT(TIMEZONE_MINUTE FROM dt)`와, 인터벌에서 값을 추출하는 `EXTRACT(<unit> FROM INTERVAL n <unit>)` / `date_part('<unit>', INTERVAL n <unit>)`를 추가했습니다. [#106227](https://github.com/ClickHouse/ClickHouse/pull/106227) ([vinayakj592](https://github.com/vinayakj592)).
* `SYSTEM RESTART DISK <name>`을 구현했습니다. 이제 디스크의 메모리 내 메타데이터를 다시 로드하고 해당 디스크에 있는 읽기 전용 레플리카 테이블의 데이터 파트를 다시 스캔합니다. 이를 통해 공유 `plain_rewritable` 스토리지에 있는 테이블의 읽기 전용 레플리카가 `refresh_parts_interval`을 기다리거나 서버를 재시작하지 않고도 필요할 때 다른 서버가 쓴 데이터를 확인할 수 있습니다. [#106645](https://github.com/ClickHouse/ClickHouse/pull/106645) ([jrdi](https://github.com/jrdi)).
* JSON 고급 공유 데이터에서 불필요한 마크 파일 로드를 건너뜁니다. [#107051](https://github.com/ClickHouse/ClickHouse/pull/107051) ([Avogar](https://github.com/Avogar)).
* `MaterializedPostgreSQL` 데이터베이스 엔진에 생성 시 설정하는 `materialized_postgresql_use_extended_date_and_time_types` 설정을 추가했습니다. 기본값(활성화됨)에서는 PostgreSQL `date`/`timestamp` 컬럼이 `Date32`/`DateTime64`로 추론됩니다. `CREATE DATABASE` 시 이를 `0`으로 설정하면 더 좁은 `Date`/`DateTime` 타입으로 추론됩니다. 이 설정은 `MaterializedPostgreSQL` 테이블 엔진에는 적용되지 않습니다. [#107428](https://github.com/ClickHouse/ClickHouse/pull/107428) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 이제 MergeTree에서 블록마다 서로 다른 코덱을 사용하는 압축 스트림을 읽을 수 있습니다. 이는 적응형 코덱 선택을 위한 읽기 측 사전 조건입니다. [#108592](https://github.com/ClickHouse/ClickHouse/pull/108592) ([rienath](https://github.com/rienath)).
* `transform_null_in = 1`이고 `IN` 세트에 `NULL` 값이 없을 때 직접 인덱싱된 컬럼의 `IN` 프레디케이트에 `bloom_filter` 스킵 인덱스를 사용합니다. 이전에는 이러한 쿼리에서 인덱스를 건너뛰어 전체 스캔이 필요했습니다. [#111329](https://github.com/ClickHouse/ClickHouse/pull/111329) ([groeneai](https://github.com/groeneai)).

<h3 id="s3-and-object-storage-improvements">
  S3 및 객체 스토리지
</h3>

* 예외를 발생시키지 않는 `isGranted` 경로(`checkAccessWithFilter`)를 통한 검사를 포함해, 권한이 부여된 모든 액세스 검사에 대한 권한을 `system.query_log.used_privileges`에 기록합니다. 이전에는 예외를 발생시키는 진입점(`checkAccess` / `checkGrantOption`)을 통해 검사한 권한만 기록되었으므로, `file` / `s3` / `azure` / `url` 테이블 함수를 사용하는 `DESCRIBE`, `CREATE TABLE AS` 및 유사 쿼리의 `READ ON FILE` / `READ ON S3` / `READ ON AZURE` / `READ ON URL`이 감사 로그에 표시되지 않았습니다. 액세스 제어는 변경되지 않았습니다. [#104693](https://github.com/ClickHouse/ClickHouse/pull/104693) ([alexbakharew](https://github.com/alexbakharew)).
* 작업 추적기를 통해 최종 S3 멀티파트 업로드 요청을 비동기적으로 완료하여, 마무리 단계에서 순차적으로 실행하는 대신 마지막 파트 업로드와 동시에 진행할 수 있도록 했습니다. [#105487](https://github.com/ClickHouse/ClickHouse/pull/105487) ([asya-ch](https://github.com/asya-ch)).
* `S3Queue` 및 `AzureQueue`의 기본 `persistent_processing_node_ttl_seconds` 설정을 1시간에서 6시간으로 늘려, 장기 실행되거나 재시작된 처리 작업이 버킷 잠금을 너무 일찍 잃지 않도록 했습니다. [#106838](https://github.com/ClickHouse/ClickHouse/pull/106838) ([kssenii](https://github.com/kssenii)).
* `s3_storage_class_name` 설정에서 `STANDARD` 및 `INTELLIGENT_TIERING` 외에 `REDUCED_REDUNDANCY`, `STANDARD_IA`, `ONEZONE_IA`, `GLACIER_IR`, `EXPRESS_ONEZONE` 값도 지원합니다. [#107251](https://github.com/ClickHouse/ClickHouse/pull/107251) ([adityaksolves](https://github.com/adityaksolves)).
* 객체 스토리지 테이블(예: `S3`)의 Hive 파티셔닝 샘플 경로는 `CREATE`/`ATTACH` 시점이 아니라 테이블을 처음 사용할 때 해석되므로, 연결할 수 없는 엔드포인트가 더 이상 테이블 생성 및 서버 시작을 차단하지 않습니다. [#111842](https://github.com/ClickHouse/ClickHouse/pull/111842) ([evillique](https://github.com/evillique)).

<h3 id="settings-and-configuration-improvements">
  설정 및 구성
</h3>

* 호환성 설정 `file_like_engine_default_partition_strategy`에서 hive 파티션 전략을 기본값으로 설정했습니다. [#86746](https://github.com/ClickHouse/ClickHouse/pull/86746) ([kssenii](https://github.com/kssenii)).
* 텍스트 인덱스의 기본 매개변수를 제어하는 새로운 MergeTree 테이블 설정 4개를 추가했습니다. `text_index_dictionary_block_size`, `text_index_dictionary_block_frontcoding_compression`, `text_index_posting_list_block_size`, `text_index_posting_list_codec`입니다. 이 설정을 사용하면 각 인덱스 정의마다 매개변수를 지정하지 않고도 테이블 수준에서 텍스트 인덱스 동작을 조정할 수 있습니다. 인덱스별로 명시적으로 지정한 인수는 계속 우선 적용됩니다. [#100626](https://github.com/ClickHouse/ClickHouse/pull/100626) ([CurtizJ](https://github.com/CurtizJ)).
* `output_format_pretty_grid_charset`가 `UTF-8`일 때 테이블 스타일 `Pretty` 포맷에서 테이블 레이아웃 정렬용 공백을 `U+00A0` NO-BREAK SPACE로 렌더링하는 설정 `output_format_pretty_use_nbsp_for_padding`을 추가했습니다. 이를 통해 일반 공백을 축소하는 도구에서도 복사한 `Pretty` 출력의 테이블 정렬을 유지할 수 있습니다. 이 설정은 기본적으로 비활성화되어 있으며, `ASCII` 문자 집합 출력에서는 일반 공백을 유지합니다. [#103559](https://github.com/ClickHouse/ClickHouse/pull/103559) ([ashrithb](https://github.com/ashrithb)).
* `analyzer_compatibility_allow_non_aggregate_in_having` 설정을 통해 이전 분석기와의 호환성을 지원합니다. 활성화하면 비집계 조건이 HAVING에서 WHERE로 이동합니다. [#104232](https://github.com/ClickHouse/ClickHouse/pull/104232) ([novikd](https://github.com/novikd)).
* 대상 테이블에 `table_readonly = 1`이 설정된 경우 더 이상 `OPTIMIZE TABLE ... ON CLUSTER` 및 기타 DDL이 중단되지 않습니다. 이제 이 설정은 전용 오류 코드 `TABLE_IS_PERMANENTLY_READ_ONLY`를 발생시키며, `DDLWorker`는 이를 재시도하지 않는 오류로 처리합니다(일시적인 `ReplicatedMergeTree` ZooKeeper 연결 해제 중 발생하는 `TABLE_IS_READ_ONLY`와 구분됩니다). 또한 `table_readonly` 설정은 이제 테이블 생성 시와 `ALTER MODIFY SETTING`을 통해 `ReplicatedMergeTree`에 적용하려는 경우 모두 명시적으로 거부됩니다. [#105109](https://github.com/ClickHouse/ClickHouse/pull/105109) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `MergeTree` 정렬 키의 내림차순 정렬(예: `ORDER BY (time DESC, key)`)은 이제 항상 지원되며, 더 이상 사용되지 않는 Experimental 설정 `allow_experimental_reverse_key`도 더 이상 필요하지 않습니다. [#106440](https://github.com/ClickHouse/ClickHouse/pull/106440) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* 기존 `CREATE QUOTA ... KEYED BY normalized_query_hash` DDL 구문에 맞춰 정적 서버 구성(`users.xml`)에 정의된 할당량에서 `keyed_by_normalized_query_hash`를 지원합니다. [#107654](https://github.com/ClickHouse/ClickHouse/pull/107654) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 호환성 설정은 더 이상 사용되지 않는 설정에 적용되지 않으므로, 해당 설정을 변경된 것으로 표시하거나 관련 경고를 생성하지 않습니다. [#107737](https://github.com/ClickHouse/ClickHouse/pull/107737) ([UberDever](https://github.com/UberDever)).
* 설정 `analyzer_compatibility_multiple_joins_qualify_column_names`(기본값 `false`)를 추가했습니다. 이 설정을 활성화하고 쿼리의 `FROM` 절에 2개 이상의 `JOIN`이 포함된 경우, 분석기가 생성하는 결과 컬럼명은 이전 분석기의 다중 조인 재작성 방식을 따릅니다. `*`에서 확장된 컬럼은 `<alias-or-table>.<column>` 형식으로 이름이 지정되고, `SELECT` 목록의 별칭 없는 컬럼 참조는 작성한 이름을 그대로 유지합니다. 이를 통해 `SELECT ll.Date FROM (SELECT * FROM t AS ll JOIN t1 ON ... JOIN t2 ON ...)`처럼 이러한 한정된 이름을 참조하는 외부 쿼리가 이전 분석기와 동일하게 작동합니다. 또한 `group_by_use_nulls`를 `ROLLUP`, `CUBE` 또는 `GROUPING SETS`와 함께 사용할 때 분석기가 `*`에서 확장된 컬럼의 한정된 결과 컬럼명을 잃어버리던 문제를 수정했습니다. 이 문제로 중복된 결과 컬럼명이 생성되어 해당 컬럼에 대한 외부 참조가 작동하지 않았습니다. [#110746](https://github.com/ClickHouse/ClickHouse/pull/110746) ([novikd](https://github.com/novikd)).
* JOIN에서 가장 왼쪽 테이블의 `FINAL` 수정자가 다른 조인 테이블에도 적용되던 이전 동작을 복원하는 `analyzer_compatibility_apply_final_to_all_joined_tables` 설정을 추가했습니다. 이 설정은 설정 변경 이력에 등록되므로, 26.6 이전 버전의 `compatibility`를 사용하면 이전 의미 체계가 자동으로 복원됩니다. [#111589](https://github.com/ClickHouse/ClickHouse/pull/111589) ([fm4v](https://github.com/fm4v)).
* 텍스트 인덱스의 디스크 저장 포맷 버전을 제어하는 새 MergeTree 설정 `text_index_version`을 추가했습니다. 값은 `v0_initial`, `v1_with_codec`, `v2_with_positions`입니다. 롤링 업그레이드 중이거나 다운그레이드 전에는 최신 서버가 이전 서버에서도 읽을 수 있는 포맷으로 텍스트 인덱스 파트를 계속 작성하도록 이 값을 이전 버전으로 설정하십시오. `compatibility` 설정이 이 값을 자동으로 조정합니다. [#111803](https://github.com/ClickHouse/ClickHouse/pull/111803) ([CurtizJ](https://github.com/CurtizJ)).

<h3 id="system-tables-and-monitoring-improvements">
  시스템 테이블 및 모니터링
</h3>

* DataLakeCatalog를 통해 테이블을 쿼리할 때 `system.query_log`의 `used_storages`에 저장 엔진 이름을 기록합니다. [#100706](https://github.com/ClickHouse/ClickHouse/pull/100706) ([melvynator](https://github.com/melvynator)).
* 프로젝션 머지 진행 상황을 표시하기 위해 `system.merges`에 `current_projection`, `current_projection_progress`, `projections_completed`, `projections_remaining` 컬럼을 추가합니다. [#102611](https://github.com/ClickHouse/ClickHouse/pull/102611) ([amosbird](https://github.com/amosbird)).
* 테이블 엔진에 내장 문서가 추가되었으며, `system.table_engines` 테이블의 새 `description`, `syntax`, `examples`, `introduced_in`, `related` 컬럼을 통해 이를 확인할 수 있습니다. [#106177](https://github.com/ClickHouse/ClickHouse/pull/106177) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 데이터베이스 엔진에 내장 문서가 추가되었으며, `system.database_engines` 테이블의 새 `description`, `syntax`, `examples`, `introduced_in`, `related` 컬럼을 통해 이를 확인할 수 있습니다. [#106178](https://github.com/ClickHouse/ClickHouse/pull/106178) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 데이터 타입에 내장 문서가 추가되었으며, `system.data_type_families` 테이블의 새 `description`, `syntax`, `examples`, `introduced_in`, `related` 컬럼을 통해 이를 확인할 수 있습니다. [#106180](https://github.com/ClickHouse/ClickHouse/pull/106180) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 입출력 포맷에 내장 문서가 추가되었으며, `system.formats` 테이블의 새 `description`, `examples`, `introduced_in`, `related` 컬럼을 통해 이를 확인할 수 있습니다. [#106181](https://github.com/ClickHouse/ClickHouse/pull/106181) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 집계 함수 조합자에 내장 문서가 추가되었으며, `system.aggregate_function_combinators` 테이블의 새 `description`, `syntax`, `examples`, `introduced_in`, `related` 컬럼을 통해 이를 확인할 수 있습니다. [#106185](https://github.com/ClickHouse/ClickHouse/pull/106185) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 사용 가능한 데이터 스키핑 인덱스 유형과 내장 문서(`description`, `syntax`, `examples`, `introduced_in`, `related`)를 나열하는 새 `system.data_skipping_index_types` 테이블을 추가했습니다. [#106186](https://github.com/ClickHouse/ClickHouse/pull/106186) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 사용 가능한 디스크 유형과 내장 문서(`description`, `syntax`, `examples`, `introduced_in`, `related`)를 나열하는 새 `system.disk_types` 테이블을 추가했습니다. [#106187](https://github.com/ClickHouse/ClickHouse/pull/106187) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* MergeTree 계열 테이블에 저장된 데이터의 총 압축되지 않은 크기를 보고하는 비동기 메트릭 `TotalUncompressedBytesOfMergeTreeTables` 및 `TotalUncompressedBytesOfMergeTreeTablesSystem`을 추가했습니다. [#106364](https://github.com/ClickHouse/ClickHouse/pull/106364) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 운영자가 서버 전체 메모리 한도에 도달한 시점을 모니터링할 수 있도록 `GlobalMemoryLimitExceeded` 프로필 이벤트를 추가합니다. [#106466](https://github.com/ClickHouse/ClickHouse/pull/106466) ([sacheendra](https://github.com/sacheendra)).
* 하위 프로세스와 유휴 풀 워커를 포함해 `executable` 및 `executable_pool` 사용자 정의 함수의 상주 메모리(`VmRSS`)와 실행 중인 프로세스 수를 보고하는 비동기 메트릭 `ExecutableUserDefinedFunctionMemoryResidentBytes` 및 `ExecutableUserDefinedFunctionProcesses`를 추가했습니다. [#107300](https://github.com/ClickHouse/ClickHouse/pull/107300) ([HanziJiang](https://github.com/HanziJiang)).
* 사용자가 `system.tables`, `system.columns`, `system.completions`에서 `MySQL` 및 `PostgreSQL` 데이터베이스를 숨길 수 있도록 기본적으로 활성화되는 `show_remote_databases_in_system_tables`를 추가했습니다. `show_data_lake_catalogs_in_system_tables`는 계속해서 `DataLakeCatalog`의 표시 여부만 제어합니다. [#104416](https://github.com/ClickHouse/ClickHouse/pull/104416) ([pamarcos](https://github.com/pamarcos)). [#109082](https://github.com/ClickHouse/ClickHouse/pull/109082) ([pamarcos](https://github.com/pamarcos)).

<h3 id="clickhouse-keeper-improvements">
  ClickHouse Keeper
</h3>

* 전반적인 성능을 약 2배 향상하는 다양한 Keeper 변경 사항(배칭 개선, leader로의 메시지 파이프라이닝, 로그 추가 파이프라이닝). [#101757](https://github.com/ClickHouse/ClickHouse/pull/101757) ([al13n321](https://github.com/al13n321)).
* watch를 위한 Keeper profile 이벤트(서버 측 및 클라이언트 측)를 추가합니다. [#105336](https://github.com/ClickHouse/ClickHouse/pull/105336) ([scanhex12](https://github.com/scanhex12)).
* 로컬 ClickHouse Keeper 스냅샷 정보를 제공하는 새로운 Keeper 전용 `system.keeper_snapshots` 테이블을 추가합니다. [#105571](https://github.com/ClickHouse/ClickHouse/pull/105571) ([mstetsyuk](https://github.com/mstetsyuk)).
* 로컬 ClickHouse Keeper changelog(Raft 로그) 파일 정보를 제공하는 새로운 Keeper 전용 `system.keeper_changelogs` 테이블을 추가합니다. [#105617](https://github.com/ClickHouse/ClickHouse/pull/105617) ([mstetsyuk](https://github.com/mstetsyuk)).
* Keeper 전용 `system.keeper_cluster` 테이블을 추가합니다. 현재 Keeper에서 확인되는 Raft 클러스터 멤버마다 하나의 행을 포함합니다. [#105646](https://github.com/ClickHouse/ClickHouse/pull/105646) ([mstetsyuk](https://github.com/mstetsyuk)).
* `KeeperMemoryStorage`를 사용하는 ClickHouse Keeper에서 수신한 스냅샷을 적용할 때의 최대 메모리 사용량을 줄입니다. [#105851](https://github.com/ClickHouse/ClickHouse/pull/105851) ([antonio2368](https://github.com/antonio2368)).
* `NuRaft`의 커밋되지 않은 로그 항목 admission 제한 및 append-entries 역방향 probe 스로틀링을 위한 Keeper `coordination_settings`를 추가했습니다. [#106108](https://github.com/ClickHouse/ClickHouse/pull/106108) ([antonio2368](https://github.com/antonio2368)).

<h3 id="memory-management-improvements">
  메모리 관리
</h3>

* 파서가 statement 끝을 넘어 역추적할 때 인접한 메모리의 바이트가 포함될 수 있던 구문 오류 메시지를 수정했습니다. [#105086](https://github.com/ClickHouse/ClickHouse/pull/105086) ([groeneai](https://github.com/groeneai)).
* 백업을 열 때(`RESTORE`를 수행하거나 증분 `BACKUP`의 기반으로 사용할 때) 메모리 사용량을 줄였습니다. 이제 `.backup` 메타데이터를 인메모리 XML 문서 트리로 로드하는 대신 스트림으로 파싱하므로, 대규모(특히 증분) 백업에서 수 GB에 달하는 DOM 트리를 할당하지 않아도 됩니다. [#109107](https://github.com/ClickHouse/ClickHouse/pull/109107) ([jkartseva](https://github.com/jkartseva)).
* `BACKUP`을 완료할 때 최대 메모리 사용량을 줄였습니다. 이제 백업 메타데이터를 쓸 때 모든 파일의 정보를 임시 벡터에 복사하지 않고 제자리에서 순회하므로, 수백만 개 파일을 백업할 때 일시적으로 수 GB가 필요하던 문제가 해소됩니다. [#109861](https://github.com/ClickHouse/ClickHouse/pull/109861) ([jkartseva](https://github.com/jkartseva)).

<h3 id="data-formats-improvements">
  데이터 포맷
</h3>

* 이제 8비트/16비트/32비트/64비트 정수 Variant에 Avro Fixed 필드를 삽입할 수 있습니다. [#98139](https://github.com/ClickHouse/ClickHouse/pull/98139) ([patrickpichler](https://github.com/patrickpichler)).
* `AvroConfluent` 포맷은 이제 첫 번째 네트워크 문제 발생 시 INSERT를 중단하는 대신, 일시적인 장애(전송 시간 초과, 연결 거부, DNS 오류, HTTP `5xx`/`408`/`429`) 발생 시 Confluent 스키마 레지스트리 HTTP 클라이언트를 지수 백오프로 재시도합니다. 새 설정인 `format_avro_schema_registry_max_retries`(기본값 `5`) 및 `format_avro_schema_registry_retry_initial_backoff_ms`(기본값 `100`)로 이 정책을 제어합니다. 스키마 유효성 검사 오류(HTTP `409`, 잘못된 형식의 Avro JSON)는 계속 치명적 오류로 처리됩니다. [#106661](https://github.com/ClickHouse/ClickHouse/pull/106661) ([groeneai](https://github.com/groeneai)).
* Apache Arrow를 통해 반환된 오류에 대해서는 원래 ClickHouse 오류 코드를 유지했습니다. [#107267](https://github.com/ClickHouse/ClickHouse/pull/107267) ([azat](https://github.com/azat)).

<h3 id="named-collections-and-dictionaries">
  이름이 지정된 컬렉션 및 딕셔너리
</h3>

* `mysql` 테이블 함수, `MySQL` 테이블 엔진, `MySQL` 데이터베이스 엔진, 딕셔너리 `SOURCE(MYSQL)`, 이름이 지정된 컬렉션에 `enable_compression` 설정을 추가했습니다. 활성화하면 ClickHouse는 연결을 통해 전송되는 모든 데이터에 대해 MySQL 프로토콜 수준의 압축을 협상합니다. [#103229](https://github.com/ClickHouse/ClickHouse/pull/103229) ([bernardlim](https://github.com/bernardlim)).
* 사용 가능한 딕셔너리 레이아웃과 내장 문서(`description`, `syntax`, `examples`, `introduced_in`, `related`)를 함께 나열하는 새 `system.dictionary_layouts` 테이블을 추가했습니다. [#106182](https://github.com/ClickHouse/ClickHouse/pull/106182) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 사용 가능한 딕셔너리 소스와 내장 문서(`description`, `syntax`, `examples`, `introduced_in`, `related`)를 함께 나열하는 새 `system.dictionary_sources` 테이블을 추가했습니다. [#106184](https://github.com/ClickHouse/ClickHouse/pull/106184) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 이제 `system.server_settings`의 `named_collections_storage.type` 및 `getServerSetting('named_collections_storage_type')`를 통해 실제로 적용되는 이름이 지정된 컬렉션 스토리지 유형을 확인할 수 있습니다. [#111806](https://github.com/ClickHouse/ClickHouse/pull/111806) ([pamarcos](https://github.com/pamarcos)).

<h3 id="other-improvements">
  기타 개선 사항
</h3>

* 오류 메시지의 테이블 이름 힌트를 개선했습니다. 더 이상 동일한 이름을 그대로 제안하지 않으며, 제안에 데이터베이스 이름도 포함합니다(예: "other\_db.my\_table을 의미하셨나요?"). [#95116](https://github.com/ClickHouse/ClickHouse/pull/95116) ([matt-metivier](https://github.com/matt-metivier)).
* FROM 절이 없는 쿼리에서 해석할 수 없는 식별자에 대한 오류 메시지를 개선하여 FROM 절을 추가하도록 안내합니다. [#101769](https://github.com/ClickHouse/ClickHouse/pull/101769) ([Onyx2406](https://github.com/Onyx2406)).
* 프라이머리 키 컬럼에서 `IN` 서브쿼리와 함께 사용된 `PREWHERE`가 그래뉼 프루닝에 프라이머리 키 인덱스를 사용하지 않아 관련 그래뉼만 읽는 대신 전체 테이블 스캔이 발생하던 문제를 수정했습니다. [#102570](https://github.com/ClickHouse/ClickHouse/pull/102570) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* 이제 갱신 가능 구체화 뷰는 `EXCHANGE TABLES`로 대상 테이블을 대체하고 이전 테이블을 삭제한 후에도 계속 갱신됩니다. 이전에는 이전 테이블의 UUID를 유지하므로 `UNKNOWN_TABLE` 예외로 인해 갱신에 실패할 수 있었습니다. [#102724](https://github.com/ClickHouse/ClickHouse/pull/102724) ([seva-potapov](https://github.com/seva-potapov)).
* 기본적으로 `enable_join_transitive_predicates`를 활성화합니다. [#103724](https://github.com/ClickHouse/ClickHouse/pull/103724) ([davenger](https://github.com/davenger)).
* 이제 갱신 가능 구체화 뷰는 시간 기반 일정 대신 다른 RMV가 갱신될 때 갱신을 트리거하는 `REFRESH DEPENDS ON`을 지원합니다. (`REFRESH EVERY ... DEPENDS ON`은 이미 존재했지만 이 사용 사례에 안정적으로 사용할 수 없었습니다.) CREATE MATERIALIZED VIEW 문서를 참조하십시오. [#104440](https://github.com/ClickHouse/ClickHouse/pull/104440) ([al13n321](https://github.com/al13n321)).
* 반복되는 프로세서 체인을 간소화하는 `EXPLAIN PIPELINE` 옵션을 추가했습니다. [#104662](https://github.com/ClickHouse/ClickHouse/pull/104662) ([niyue](https://github.com/niyue)).
* Oracle/MySQL/Snowflake 호환성을 위해 `regexpExtract`의 대소문자를 구분하지 않는 별칭으로 `REGEXP_SUBSTR`를 추가했습니다. [#105122](https://github.com/ClickHouse/ClickHouse/pull/105122) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `EXTRACT(unit FROM expr)`의 문법적 편의 기능으로 `date_part('unit', expr)`를 추가했습니다. 표준 인터벌 종류와 PostgreSQL 추가 항목(`epoch`, `dow`, `doy`, `isodow`, `isoyear`, `century`, `decade`, `millennium`)을 모두 지원합니다. [#105127](https://github.com/ClickHouse/ClickHouse/pull/105127) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 이제 `QueryConditionCache`는 PREWHERE를 부분적으로 통과하는 읽기 배치에서도 개별적으로 필터링된 그래뉼을 기록하여 동일한 조건의 후속 쿼리에서 다시 읽는 마크 수를 줄입니다. [#105335](https://github.com/ClickHouse/ClickHouse/pull/105335) ([hanfei1991](https://github.com/hanfei1991)).
* 숫자 프레디케이트 함수에 BFloat16 지원을 추가했습니다. [#105391](https://github.com/ClickHouse/ClickHouse/pull/105391) ([mohhddhassan](https://github.com/mohhddhassan)).
* 적용 가능한 경우 숫자 최솟값/최댓값, 평균 문자열 길이 및 NULL 개수를 저장하는 간결한 컬럼별 통계인 기본 통계를 지원합니다. [#106048](https://github.com/ClickHouse/ClickHouse/pull/106048) ([hanfei1991](https://github.com/hanfei1991)).
* `CREATE TABLE`과 마찬가지로 `ALTER TABLE ... ADD/MODIFY COLUMN`에서 후행 `NULL` / `NOT NULL` 수정자를 지원합니다. [#106150](https://github.com/ClickHouse/ClickHouse/pull/106150) ([takumihara](https://github.com/takumihara)).
* 이제 PREWHERE 최적화기는 선택도를 추정하기 전에 동일한 컬럼 집합을 참조하는 논리곱 구성요소를 그룹화합니다. 따라서 `a > 2500 AND a < 2502`와 같은 조건은 독립적인 두 프레디케이트(각각 약 50%)가 아니라 결합된 범위(선택도 약 0.02%)로 함께 평가됩니다. 컬럼 통계를 사용할 수 있을 때 PREWHERE 조건의 순서를 더 정확하게 결정할 수 있습니다. [#106337](https://github.com/ClickHouse/ClickHouse/pull/106337) ([hanfei1991](https://github.com/hanfei1991)).
* 스택 트레이스가 실제로 비어 있는 경우 예외 메시지에 "Stack trace (when copying this message, always include the lines below):" 머리말을 출력하지 않습니다. [#106524](https://github.com/ClickHouse/ClickHouse/pull/106524) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 암호화된 디스크에서 `CREATE TABLE ... CLONE AS (and REPLACE / ATTACH PARTITION ... FROM)`가 데이터를 하드링크하지 않고 복사하던 문제를 수정했습니다. [#106731](https://github.com/ClickHouse/ClickHouse/pull/106731) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* `catalog_type = 'onelake'`인 `DataLakeCatalog` 데이터베이스가 기본적으로 OneLake Blob 엔드포인트(`.blob.fabric.microsoft.com`)를 사용해 테이블 데이터를 읽도록 수정했습니다. 이전 DFS 엔드포인트(`.dfs.fabric.microsoft.com`) 동작을 유지하려면 `onelake_use_blob_endpoint = false`를 설정하십시오. [#106843](https://github.com/ClickHouse/ClickHouse/pull/106843) ([scanhex12](https://github.com/scanhex12)).
* 로그 발생률이 높을 때 모든 메시지마다 알리는 대신, 큐가 비어 있는 상태에서 비어 있지 않은 상태로 전환될 때만 로그 consumer에 알리도록 하여 비동기 로깅의 CPU 오버헤드를 줄였습니다. [#107352](https://github.com/ClickHouse/ClickHouse/pull/107352) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* MySQL handshake에서 `auth_response` 길이를 읽을 때 길이 바이트를 부호 있는 `char`로 읽어 `>= 128`인 값이 수 GB 값으로 해석되던 문제를 수정했습니다. [#107384](https://github.com/ClickHouse/ClickHouse/pull/107384) ([uwezkhan](https://github.com/uwezkhan)).
* 이제 `MaterializedPostgreSQL`은 precision이 76보다 큰 PostgreSQL `numeric(p, 0)` 컬럼(예: 256비트 정수에 사용되는 `numeric(78, 0)`)을 "Precision too big" 오류로 실패시키는 대신 ClickHouse `Int256`에 매핑합니다. `Int256`에 맞지 않는 값은 명확한 오류와 함께 거부됩니다. [#107431](https://github.com/ClickHouse/ClickHouse/pull/107431) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 이제 `Nullable(Tuple(...))`는 Beta입니다. 기본적으로 비활성화되어 있으며, 사용하려면 `enable_nullable_tuple_type = 1`을 설정하십시오. [#107754](https://github.com/ClickHouse/ClickHouse/pull/107754) ([nihalzp](https://github.com/nihalzp)).
* 비동기 삽입은 더 이상 `trace`/`debug` 수준에서 전체 `query_id` 목록을 로깅하지 않습니다. 26.2부터 비동기 삽입 트래픽이 많은 서비스에서는 이로 인해 `text_log`가 과도하게 커질 수 있었습니다. 이제 상세 로그는 `test` 수준에서 기록됩니다. [#107852](https://github.com/ClickHouse/ClickHouse/pull/107852) ([CheSema](https://github.com/CheSema)).
* 무효화된 priority 항목을 즉시 해제하여 파일 시스템 캐시 메타데이터 사용량을 줄였습니다. [#107903](https://github.com/ClickHouse/ClickHouse/pull/107903) ([kssenii](https://github.com/kssenii)).
* 이제 `Array` 컬럼의 `bloom_filter` 스킵 인덱스는 `hasAny(column, set)` 및 `has(column, const)`에 이미 사용되던 방식과 동일하게 `arrayJoin(column) IN (set)`, `arrayJoin(column) GLOBAL IN (set)`, `arrayJoin(column) = const`에도 사용됩니다. 이전에는 이러한 `arrayJoin ...` 형식이 전체 스캔으로 처리되었습니다. [#109536](https://github.com/ClickHouse/ClickHouse/pull/109536) ([groeneai](https://github.com/groeneai)).
* 이제 `IS NOT DISTINCT FROM` 및 `IS TRUE`는 `=`와 마찬가지로 프라이머리 키와 MinMax 인덱스를 사용해 그래뉼을 프루닝합니다. 이전에는 `k IS NOT DISTINCT FROM 42` 및 `(k = 42) IS TRUE`가 모든 그래뉼을 스캔했습니다. [#110006](https://github.com/ClickHouse/ClickHouse/pull/110006) ([groeneai](https://github.com/groeneai)).

<h2 id="bug-fixes">
  버그 수정
</h2>

<h3 id="join-fixes">
  JOIN 수정 사항
</h3>

* `ARRAY JOIN`에서 내부적으로 사용하는 `nested` 함수가 컬럼 타입의 `LowCardinality`를 제거해 출력에서 `Array(LowCardinality(String))`이 `Array(String)`으로 변경되던 문제를 수정했습니다. [#98974](https://github.com/ClickHouse/ClickHouse/pull/98974) ([Onyx2406](https://github.com/Onyx2406)).
* 다른 테이블과 쉼표 조인(cross)된 `RIGHT`/`LEFT JOIN`에서 join reordering으로 인해 일치하지 않는 행이 조용히 누락되던 문제를 수정했습니다. 예: `t1 RIGHT JOIN t2 ON t1.c = t2.c, t3`. 이전에는 쿼리가 outer join 결과 대신 inner join 결과를 반환했습니다. [#101684](https://github.com/ClickHouse/ClickHouse/pull/101684) ([groeneai](https://github.com/groeneai)).
* JOIN 내 집계가 포함된 VIEW와 관련된 쿼리를 실행할 때 발생할 수 있던 `LOGICAL_ERROR`("Port is not connected", 코드 49)를 수정했습니다. [#102574](https://github.com/ClickHouse/ClickHouse/pull/102574) ([Ergus](https://github.com/Ergus)).
* 새 분석기에서 `GLOBAL IN` 및 `GLOBAL JOIN` 쿼리에 대해 `max_rows_to_transfer`와 `max_bytes_to_transfer`가 조용히 무시되던 문제를 수정했습니다. 이제 구체화된 외부 테이블이 구성된 제한을 초과하면 이전 분석기와 동일하게 설정에서 `SET_SIZE_LIMIT_EXCEEDED`를 발생시키거나(`transfer_overflow_mode`에 따라) 중단합니다. [#104119](https://github.com/ClickHouse/ClickHouse/pull/104119) ([groeneai](https://github.com/groeneai)).
* 최적화 과정에서 조회 컬럼의 순서가 변경될 때, 오른쪽에 `MergeTree` 테이블이 있는 `join_algorithm = 'direct'`를 사용하는 `JOIN` 쿼리가 잘못된 결과를 반환하거나 실패하던 문제를 수정했습니다. [#104174](https://github.com/ClickHouse/ClickHouse/pull/104174) ([groeneai](https://github.com/groeneai)).
* `JOIN` 뒤에 `arrayJoin`과 `ORDER BY ... LIMIT`를 함께 사용하는 쿼리가 조용히 0개의 행을 반환할 수 있던 버그를 수정했습니다. `arrayJoin`은 행 수를 변경할 수 있으므로, 함수 평가를 `SortingStep` 위로 끌어올리는 쿼리 계획 최적화는 끌어올린 표현식에 `arrayJoin`이 포함된 경우 더 이상 적용되지 않습니다. [#104558](https://github.com/ClickHouse/ClickHouse/pull/104558) ([groeneai](https://github.com/groeneai)).
* 일부 상황에서 `ARRAY JOIN`과 함께 사용할 때 음수 `LIMIT BY`에서 발생하던 논리 오류를 수정했습니다. [#105403](https://github.com/ClickHouse/ClickHouse/pull/105403) ([nihalzp](https://github.com/nihalzp)).
* 새 compatibility 설정 `analyzer_compatibility_prefer_alias_over_subcolumn`을 추가했습니다(기본적으로 비활성화됨). 활성화하면 새 분석기는 여러 부분으로 구성된 식별자에서 Tuple 하위 컬럼 또는 점 표기 컬럼 일치보다 별칭 접두사 해석을 우선하여 이전 인터프리터의 동작을 복원합니다. 이를 통해 조인에 `SELECT *`를 사용하는 CTE/하위 쿼리의 내부 테이블과 이름이 같은 테이블을 쿼리에서 조인할 때, 애스터리스크로 이름이 변경된 컬럼(예: `b.id`)이 내부 테이블 식별자를 외부 범위로 노출해 발생할 수 있는 `AMBIGUOUS_IDENTIFIER`(및 관련) 오류를 방지합니다. [#105491](https://github.com/ClickHouse/ClickHouse/pull/105491) ([vdimir](https://github.com/vdimir)).
* outer join의 NULL을 제공하는 쪽을 참조하는 후속 inner join과 outer join을 결합한 쿼리에서 잘못된 결과가 반환될 수 있던 문제를 수정했습니다. Join reordering이 inner join 조건을 outer join의 ON 절로 가져오는 계획을 선택할 수 있었습니다. [#105992](https://github.com/ClickHouse/ClickHouse/pull/105992) ([vdimir](https://github.com/vdimir)).
* 이전 분석기와의 호환성을 개선했습니다. 테이블에 `x.a Array, x.b Array, x String`과 같은 컬럼이 있으면 `ARRAY JOIN x`에서 배열을 우선합니다. [#106069](https://github.com/ClickHouse/ClickHouse/pull/106069) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* `enable_parallel_replicas`, `query_plan_use_new_logical_join_step`, `query_plan_optimize_join_order_algorithm = 'greedy'`가 활성화된 상태에서 왼쪽 `MergeTree` 테이블이 비어 있는 `INNER JOIN` 쿼리에서 발생하던 예외를 수정했습니다. [#106338](https://github.com/ClickHouse/ClickHouse/pull/106338) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* 조인 그래프에서 두 릴레이션이 동일한 컬럼명을 공유할 때 병렬 레플리카로 실행되는 조인에서 발생할 수 있는 조인 순서 최적화기의 논리 오류(`Left and right columns have same names`)를 수정했습니다. [#106418](https://github.com/ClickHouse/ClickHouse/pull/106418) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 오른쪽 키가 고유하고 `ON` 조건이 혼합되어 있으며 `max_joined_block_size_rows`가 작은 `LEFT JOIN`의 `JoiningTransform`에서 발생하는 `LOGICAL_ERROR`(`Invalid number of rows in Chunk`)를 수정했습니다. [#106928](https://github.com/ClickHouse/ClickHouse/pull/106928) ([groeneai](https://github.com/groeneai)).
* 조인 키에 `Tuple`, `Array` 또는 `Map` 안에 중첩된 `Variant` 또는 `Dynamic` 타입이 포함되고 조인 오른쪽에 서로 다른 값이 하나만 있을 때 JOIN 런타임 필터에서 발생하는 예외(`LOGICAL_ERROR`)를 수정했습니다. [#106931](https://github.com/ClickHouse/ClickHouse/pull/106931) ([groeneai](https://github.com/groeneai)).
* `Dynamic`에 대한 JOIN으로 생성된 `Dynamic` 컬럼에서 함수를 실행할 때 발생하는 `LOGICAL_ERROR`(`Expected the argument N to have X rows, but it has Y`)를 수정했습니다(예: `RIGHT`/`FULL JOIN`에서 조인되지 않은 행 또는 조인으로 비상관화된 상관 `EXISTS` 하위 쿼리). [#107095](https://github.com/ClickHouse/ClickHouse/pull/107095) ([groeneai](https://github.com/groeneai)).
* `JOIN ... USING` 키의 한정 애스터리스크(`t.*`)가 집계 함수에 전달되고 외부 JOIN의 반대쪽에 `Nullable` 키가 있을 때(`join_use_nulls = 0`) 발생하는 `Bad cast from type DB::IColumn const* to DB::ColumnNullable const*` 논리 오류 예외를 수정했습니다. [#107129](https://github.com/ClickHouse/ClickHouse/pull/107129) ([groeneai](https://github.com/groeneai)).
* 분리(부분 프레디케이트) 푸시다운 최적화가 JOIN으로 타입이 확장된 `USING` 키의 조건을 푸시다운할 때 발생하는 논리 오류(`Unexpected return type from equals. Expected Nullable(UInt8). Got UInt8`)를 수정했습니다. 또한 알 수 없는 식별자를 참조하는 상수 폴딩 가능한 `if`/`multiIf` 분기를 포함한 `JOIN ... USING` 쿼리에서 식별자를 해석할 때 분석기에서 발생하는 서버 충돌(세그멘테이션 폴트)도 수정했습니다. [#107407](https://github.com/ClickHouse/ClickHouse/pull/107407) ([groeneai](https://github.com/groeneai)).
* JSON 컬럼에서 잘못된 결과를 생성하던 런타임 조인 필터를 수정했습니다. [#107663](https://github.com/ClickHouse/ClickHouse/pull/107663) ([Avogar](https://github.com/Avogar)).
* 한정 애스터리스크(`t.*`)가 `JOIN USING` 키를 선택하고 해당 조인이 `PASTE`/`CROSS`/쉼표 조인이나 외부 `ON` 조인 아래에 중첩된 경우(`join_use_nulls = 0`) 발생하는 `Bad cast from type DB::ColumnNullable to DB::ColumnVector<...>` 논리 오류 예외를 수정했습니다. [#108043](https://github.com/ClickHouse/ClickHouse/pull/108043) ([groeneai](https://github.com/groeneai)).
* 새 분석기에서 JOIN의 한 테이블에 적용한 FINAL(예: `FROM t1 FINAL JOIN t2`)이 다른 조인 테이블에도 잘못 적용되어 쿼리가 느려질 수 있었던 버그를 수정했습니다. [#108979](https://github.com/ClickHouse/ClickHouse/pull/108979) ([vdimir](https://github.com/vdimir)).
* 이제 `analyzer_compatibility_join_using_top_level_identifier = 1`을 사용하면 이전 분석기의 동작과 동일하게 `JOIN ... USING`의 식별자를 SELECT 목록 내 하위 표현식에 정의된 별칭으로 해석할 수 있습니다(예: `SELECT uniqExact(lower(x) AS id) FROM t1 JOIN t2 USING (id)`). 이전에는 최상위 프로젝션 별칭만 고려되었으며, 설정을 활성화해도 이러한 쿼리는 `UNKNOWN_IDENTIFIER` 예외로 실패했습니다. 이제 일치하는 별칭이 중첩되어 있는 경우에도 이 설정을 제안하는 오류 힌트가 표시됩니다. [#110739](https://github.com/ClickHouse/ClickHouse/pull/110739) ([novikd](https://github.com/novikd)).
* 오른쪽 컬럼에 대한 `WHERE` 필터로 쿼리 플래너가 조인을 `SEMI` 또는 `ANTI`로 재작성할 수 있는 경우, `Join` 엔진 테이블의 `ANY` 조인에서 발생하던 `INCOMPATIBLE_TYPE_OF_JOIN` 오류를 수정했습니다. `Join` 엔진 테이블은 선언된 엄격성이 고정되어 변경할 수 있으므로, 이제 이러한 테이블에는 변환을 적용하지 않습니다. [#111362](https://github.com/ClickHouse/ClickHouse/pull/111362) ([groeneai](https://github.com/groeneai)).
* 딕셔너리에 대한 `JOIN`에서 딕셔너리 키가 래핑되지 않았는데 `Nullable`, `LowCardinality` 또는 `LowCardinality(Nullable)` 조인 키를 사용하는 경우 발생하는 `TYPE_MISMATCH` ("복합 키의 키 유형 ...이 일치하지 않음")를 수정했습니다. 이제 직접 조인 딕셔너리 조회는 `dictGet`/`dictHas`와 마찬가지로 키를 딕셔너리에 선언된 키 유형으로 정규화하며, `NULL` 키는 절대 일치하지 않습니다. [#111857](https://github.com/ClickHouse/ClickHouse/pull/111857) ([groeneai](https://github.com/groeneai)).
* `join_use_nulls = 1`에서 `WHERE` 절에 `JOIN ON` 조건을 반복하는 쿼리에서 발생하던 `AMBIGUOUS_COLUMN_NAME` (`Block 구조 불일치(동일한 이름의 컬럼은 동일한 구조를 가져야 함)`)를 수정했습니다. 이제 이러한 쿼리는 실패하지 않고 결과를 반환합니다. [#112007](https://github.com/ClickHouse/ClickHouse/pull/112007) ([groeneai](https://github.com/groeneai)).
* 키에 희소 직렬화를 사용하는 직접 딕셔너리 `JOIN`에서 잘못된 결과가 반환되거나 서버가 종료되던 문제를 수정했습니다. [#112327](https://github.com/ClickHouse/ClickHouse/pull/112327) ([groeneai](https://github.com/groeneai)).
* 8바이트보다 큰 유형(`UInt128`, `Int128`, `UInt256`, `Int256` 및 해당 `Nullable` 변형)의 단일 `LowCardinality` 키를 사용하는 해시 조인에서 잘못된 결과가 반환되던 문제를 수정했습니다. 이러한 조인은 키 값이 서로 다른 행을 아무런 오류 없이 반환했습니다. [#113230](https://github.com/ClickHouse/ClickHouse/pull/113230) ([groeneai](https://github.com/groeneai)).
* 반대쪽의 상수 컬럼이 포함된 `JOIN ON` 조건에 대한 파트 및 그래뉼 프루닝을 수정했습니다. [#113484](https://github.com/ClickHouse/ClickHouse/pull/113484) ([vdimir](https://github.com/vdimir)).
* `DirectKeyValueJoin`(예: `EmbeddedRocksDB`, `KeeperMap`, `Redis` 또는 딕셔너리 등의 키-값 스토리지)으로 처리되는 JOIN의 오른쪽에서 선택한 `_table` 또는 `_database` 같은 가상 컬럼이 잘못된 값을 반환하던 문제를 수정했습니다. 이전에는 쿼리가 데이터 컬럼의 내용을 반환하거나 `LOGICAL_ERROR`와 함께 실패했습니다. [#113698](https://github.com/ClickHouse/ClickHouse/pull/113698) ([groeneai](https://github.com/groeneai)).

<h3 id="query-and-analyzer-fixes">
  쿼리 및 분석기 수정
</h3>

* 세미콜론 뒤의 주석으로 끝나는 쿼리에서 splitMultipartQuery가 "Empty query" 오류를 발생시키는 버그를 수정했습니다. [#85491](https://github.com/ClickHouse/ClickHouse/pull/85491) ([yariks5s](https://github.com/yariks5s)).
* DESCRIBE TABLE에서 하위 쿼리 뒤에 오는 별칭을 파서가 허용하지 않아 구문 오류가 발생하는 문제를 수정했습니다. [#100205](https://github.com/ClickHouse/ClickHouse/pull/100205) ([yariks5s](https://github.com/yariks5s)).
* `EXPLAIN INSERT INTO ... SELECT ... FORMAT ...`에서 `FORMAT` 절이 `EXPLAIN` 출력에 적용되지 않고 `INSERT`에 의해 처리되던 문제를 수정했습니다. [#101772](https://github.com/ClickHouse/ClickHouse/pull/101772) ([Onyx2406](https://github.com/Onyx2406)).
* 동시 INSERT가 실행 중일 때 SELECT 쿼리가 현저히 느려지는 문제를 수정했습니다. 이전에는 대부분의 슬롯이 실제로 사용되지 않더라도 INSERT 파이프라인이 쿼리 시작 시 `max_threads`만큼의 CPU 슬롯을 예약하여 동시에 실행되는 SELECT에 필요한 리소스가 부족해졌습니다. 이제 CPU 슬롯은 수요에 따라 할당됩니다. 파이프라인은 실제로 병렬화 가능한 작업을 전달할 때만 슬롯을 요청합니다. 이는 동시성 제어와 워크로드용 선점형 CPU 스케줄러 모두에 적용됩니다. 새로운 서버 설정 `concurrent_threads_lazy_allocation`(기본값 `true`)은 롤백 수단으로 사용할 수 있습니다. [#102928](https://github.com/ClickHouse/ClickHouse/pull/102928) ([seva-potapov](https://github.com/seva-potapov)).
* 서버가 쿼리를 거부한 경우에도 `EmbeddedRocksDB` 테이블에서 `ALTER TABLE ... MODIFY SETTING`을 실행하면 잘못된 설정값이 테이블 메타데이터 파일에 저장될 수 있는 버그를 수정했습니다. 다음에 서버를 재시작하면 테이블 연결이 `CANNOT_PARSE_BOOL`(또는 유사한 파싱 오류)로 실패했으며, 로드 실패가 치명적인 데이터베이스에서는 서버가 시작되지 않았습니다. 이제 메타데이터를 기록하기 전에 잘못된 설정값을 거부합니다. [#103417](https://github.com/ClickHouse/ClickHouse/pull/103417) ([groeneai](https://github.com/groeneai)).
* `HTTP` 인터페이스 및 `INSERT SELECT FROM input`에서 `input_format_max_block_wait_ms`를 사용하는 스트리밍 `INSERT`를 수정하여, 요청이 완료되기 전에 부분 입력 블록이 플러시되도록 했습니다. [#104534](https://github.com/ClickHouse/ClickHouse/pull/104534) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 표현식과 `WHEN` 값이 모두 `NULL`일 때 `CASE` 표현식이 일치하는 `THEN` 대신 `ELSE` 분기를 반환하는 문제를 수정했습니다. [#105556](https://github.com/ClickHouse/ClickHouse/pull/105556) ([Algunenano](https://github.com/Algunenano)).
* `MATERIALIZED VIEW` 정의에서 `WASM` SQL UDF를 사용할 수 있도록 지원을 수정했습니다. [#106161](https://github.com/ClickHouse/ClickHouse/pull/106161) ([niyue](https://github.com/niyue)).
* 이전 분석기에서 SELECT 목록의 ORDER BY 열에 별칭이 지정된 경우 `INTERPOLATE ()`가 `INVALID_WITH_FILL_EXPRESSION`을 발생시키는 문제를 수정했습니다. [#106252](https://github.com/ClickHouse/ClickHouse/pull/106252) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* 이제 함수 `base58Encode`, `base58Decode`, `tryBase58Decode`는 대규모 입력에서 `max_execution_time` 및 쿼리 취소를 준수하며, 매우 오랫동안 실행되는 대신 10 KB를 초과하는 입력을 거부합니다. 이 제한은 새로운 설정 `function_base58_max_input_size`를 통해 구성할 수 있습니다(`0`은 제한을 비활성화함). [#106428](https://github.com/ClickHouse/ClickHouse/pull/106428) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `f(const)`가 NaN으로 평가될 때 `WHERE c0 = const`가 `ORDER BY f(c0)`를 사용하는 테이블에서 행을 반환하지 않는 잘못된 결과 버그를 수정했습니다. 예를 들어 음수 상수를 사용하는 `ORDER BY sqrt(c0)`가 해당합니다. 기본 키 분석이 모든 그래뉼을 잘못 제거하고 이후 쿼리의 쿼리 조건 캐시를 오염시켰습니다. [#106507](https://github.com/ClickHouse/ClickHouse/pull/106507) ([groeneai](https://github.com/groeneai)).
* 암시적 `_minmax_count_projection`, 명시적 집계 프로젝션 또는 일반 프로젝션이 있는 테이블에서 `SELECT c, count() FROM t WHERE c GROUP BY c` 실행 시 잘못된 결과가 반환되던 문제를 수정했습니다. 이전에는 모든 그룹이 상수 키와 전체 행 수를 가진 하나의 행으로 합쳐졌습니다. [#106590](https://github.com/ClickHouse/ClickHouse/pull/106590) ([groeneai](https://github.com/groeneai)).
* `SETTINGS`가 `FORMAT`보다 앞에 있거나 출력 형식이 `Values`인 경우에도 `FORMAT`이 `EXPLAIN ... INSERT ... SELECT ... FORMAT ...`의 `EXPLAIN` 출력에 적용되도록 했습니다. [#106686](https://github.com/ClickHouse/ClickHouse/pull/106686) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 재사용된 스레드 로컬 요청 객체에 이전 요청의 실패 상태가 남아 있어, 실제로 워크로드 리소스에 대한 액세스가 부여된 쿼리에서 드물게 발생하던 잘못된 `RESOURCE_ACCESS_DENIED` 오류("Scheduler queue with resource request is about to be destructed")를 수정했습니다. [#106690](https://github.com/ClickHouse/ClickHouse/pull/106690) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 16진수 또는 8진수 이스케이프를 포함하는 정규식에서 `match`, `extract`, `extractAll`, `countMatches`가 잘못된 결과를 반환하던 문제를 수정했습니다. [#106709](https://github.com/ClickHouse/ClickHouse/pull/106709) ([ofeliacode](https://github.com/ofeliacode)).
* 길이 필드가 4보다 작은 메시지로 인해 `size - 4`에서 래핑이 발생하고 과도한 `resize`/`ignore`가 수행되던 PostgreSQL wire 프로토콜 파서의 정수 언더플로를 수정했습니다. [#107485](https://github.com/ClickHouse/ClickHouse/pull/107485) ([uwezkhan](https://github.com/uwezkhan)).
* 기본값인 `enable_analyzer = 1`을 사용하면, 다른 데이터베이스에만 존재하는 테이블을 이름만으로 쿼리할 때 이제 올바른 테이블을 제안합니다. 예를 들어 `SELECT * FROM functions`는 `Maybe you meant system.functions?`를 표시합니다. 이전에는 새 분석기가 힌트 없는 `Unknown table expression identifier` 오류를 반환했지만, 기존 분석기는 이미 유용한 제안을 제공했습니다. [#107550](https://github.com/ClickHouse/ClickHouse/pull/107550) ([groeneai](https://github.com/groeneai)).
* 워커 상태 확인이 다음 확인을 다시 예약하지 못할 때(예: 종료 시 `CANNOT_SCHEDULE_TASK` 또는 `MEMORY_LIMIT_EXCEEDED`) 분산 계획 쿼리(`make_distributed_plan = 1`)를 정리하는 과정에서 발생하던 서버 중단(`std::terminate`, signal 6)을 수정했습니다. 이제 쿼리는 정상적으로 실패하고 서버는 계속 실행됩니다. [#107575](https://github.com/ClickHouse/ClickHouse/pull/107575) ([groeneai](https://github.com/groeneai)).
* 공통 하위 표현식을 공유하는 `ALIAS` 컬럼을 선택하는 분산 쿼리에서 잘못된 결과가 반환되던 문제를 수정했습니다. 컬럼 정렬이 어긋나 값이 잘못된 컬럼에 반환될 수 있었습니다. [#107675](https://github.com/ClickHouse/ClickHouse/pull/107675) ([vdimir](https://github.com/vdimir)).
* `CODEC` 또는 엔진 선언 내 인수 없는 윈도 함수(예: `CODEC(cume_dist() OVER (...))`)에서 발생하던 `Inconsistent AST formatting` 논리 오류를 수정했습니다. 이제 이러한 함수는 괄호를 유지하므로 쿼리가 포맷/파싱 왕복 과정에서도 유지됩니다. [#107806](https://github.com/ClickHouse/ClickHouse/pull/107806) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 이제 `getClientHTTPHeader`가 비결정적으로 올바르게 처리되므로, 그 결과가 쿼리 결과 캐시에 잘못 재사용되지 않습니다. [#108029](https://github.com/ClickHouse/ClickHouse/pull/108029) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 쿼리 조건 캐시(기본값인 설정 `use_query_condition_cache = 1`)와 함께 `SELECT [...] SAMPLE [...]`를 사용할 때 잘못된 결과가 반환되던 문제를 수정했습니다. [#108488](https://github.com/ClickHouse/ClickHouse/pull/108488) ([groeneai](https://github.com/groeneai)).
* `enable_identifier_resolve_cache`가 활성화된 경우(기본값), 복합 프레디케이트에 `GROUP BY`에서 별칭을 지정한 후 다시 참조할 때 발생하는 `NOT_FOUND_COLUMN_IN_BLOCK` 오류를 수정했습니다. `optimize_and_compare_chain` 최적화는 멱등적이지 않았으며, 공유되는 해석 노드에 중복된 전이적 논리곱 조건이 누적되었습니다. [#108553](https://github.com/ClickHouse/ClickHouse/pull/108553) ([groeneai](https://github.com/groeneai)).
* `Distributed` 테이블의 하위 쿼리가 동일한 표현식으로 확장되는 2개 이상의 `ALIAS` 컬럼(예: `a1 String ALIAS toString(x), a2 String ALIAS toString(x)`)을 읽고 그 결과가 외부 쿼리에 사용될 때 발생하는 `NUMBER_OF_COLUMNS_DOESNT_MATCH` 오류를 수정했습니다. 예: `SELECT count() FROM (SELECT a1, a2 FROM dist GROUP BY a1, a2)`. [#108725](https://github.com/ClickHouse/ClickHouse/pull/108725) ([groeneai](https://github.com/groeneai)).
* 다른 컬럼에 인라인 별칭을 정의하고 참조하는 `DEFAULT` 또는 `MATERIALIZED` 표현식이 있을 때 `ALTER TABLE ... DROP COLUMN`에서 발생하는 `UNKNOWN_IDENTIFIER` 오류를 수정했습니다. [#109374](https://github.com/ClickHouse/ClickHouse/pull/109374) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 쿼리가 `name`/`database` 컬럼만 읽을 때 데이터베이스별 권한이 부여된 사용자의 데이터베이스를 `system.tables`에서 자동으로 건너뛰는 문제를 수정했습니다. 26.2에 도입되었습니다. [#109723](https://github.com/ClickHouse/ClickHouse/pull/109723) ([samay-sharma](https://github.com/samay-sharma)).
* 분석기가 활성화된 상태에서 뷰에 저장된 쿼리에서 CTE 이름으로 한정된 컬럼(`cte_name.column`)에 발생하는 `UNKNOWN_IDENTIFIER` 오류를 수정했습니다. [#111386](https://github.com/ClickHouse/ClickHouse/pull/111386) ([novikd](https://github.com/novikd)).
* `FINAL` 쿼리가 `SELECT` 목록에 없는 정렬 키 컬럼으로 필터링하고 해당 필터가 `PREWHERE`로 이동될 때 발생하는 `NOT_FOUND_COLUMN_IN_BLOCK` 오류를 수정했습니다(예: `optimize_move_to_prewhere_if_final = 1`이 설정된 `SELECT s FROM t FINAL WHERE k GROUP BY s`). [#111721](https://github.com/ClickHouse/ClickHouse/pull/111721) ([groeneai](https://github.com/groeneai)).
* `enable_analyzer = 0`이 서버 기본값일 때 재귀 CTE가 있는 뷰에서 `WITH RECURSIVE is not supported with the old analyzer` 오류로 인해 서버 시작 및 `ATTACH`가 실패하던 문제를 수정했습니다. [#112784](https://github.com/ClickHouse/ClickHouse/pull/112784) ([evillique](https://github.com/evillique)).
* `accurateCastOrDefault`의 쿼리 설정 전파 및 NULL 처리를 수정했습니다. [#114912](https://github.com/ClickHouse/ClickHouse/pull/114912) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `system.query_thread_log`의 `read_rows`, `read_bytes`, `written_rows`, `written_bytes`가 기록된 쿼리의 값 대신 스레드 수명 동안의 누적 합계를 보고하던 문제를 수정했습니다. 특히 쿼리를 시작한 `HTTPHandler` 스레드와 같은 장기간 유지되는 풀 스레드의 행이 영향을 받았습니다. [#115596](https://github.com/ClickHouse/ClickHouse/pull/115596) ([groeneai](https://github.com/groeneai)).

<h3 id="mergetree-and-storage-fixes">
  MergeTree 및 스토리지 관련 수정 사항
</h3>

* `tryN` 접미사가 붙은 분리된 파트를 이제 삭제할 수 있습니다. [#58957](https://github.com/ClickHouse/ClickHouse/pull/58957) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* 병렬 레플리카로 실행할 때 중첩된 서브쿼리 안에서 중복된 프로젝션 별칭(예: `SELECT *, day + 365 AS day`)을 사용하는 쿼리에서 발생하는 `MULTIPLE_EXPRESSIONS_FOR_ALIAS` 예외를 수정했습니다. [#80310](https://github.com/ClickHouse/ClickHouse/pull/80310) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 테이블 수준의 `default_compression_codec` 설정을 명시적으로 구성했을 때 `MergeTree` 파트에 잘못된 압축 코덱이 선택되던 문제를 수정했습니다. 삽입 시, 머지 중, 프로젝션용으로 기록된 파트가 테이블 수준 설정 대신 서버 전체의 기본 코덱을 사용했습니다. 완전 삭제 mutation으로 생성되는 빈 파트도 이제 올바르게 처리됩니다. [#101784](https://github.com/ClickHouse/ClickHouse/pull/101784) ([Onyx2406](https://github.com/Onyx2406)).
* 병렬 레플리카와 `parallel_replicas_local_plan = 0`을 사용하여 `PREWHERE` / `WHERE` / `HAVING` / `QUALIFY`에서 프로젝션 별칭(예: `SELECT x AS a, y AS b, (a AND b) AS c FROM t PREWHERE c`)을 참조하는 쿼리 또는 컬럼 이름이 겹치는 자체 조인에 대한 `SELECT *` 쿼리를 실행할 때 원격 레플리카에서 발생하는 `MULTIPLE_EXPRESSIONS_FOR_ALIAS` 오류를 수정했습니다. [#103806](https://github.com/ClickHouse/ClickHouse/pull/103806) ([groeneai](https://github.com/groeneai)).
* `ALTER TABLE ... DROP PARTITION ID 'patch-...'` 후 `DETACH`/`ATTACH TABLE`을 실행했을 때 패치 파트가 손상되던 문제를 수정했습니다. 이전에는 빈 커버링 파트가 `partition.dat`와 `source_parts.dat` 없이 기록되어, 다음 attach 또는 서버 재시작 후 `system.detached_parts`에 `broken-on-start_patch-...` 항목이 생성되었습니다. [#104353](https://github.com/ClickHouse/ClickHouse/pull/104353) ([groeneai](https://github.com/groeneai)).
* `ALTER TABLE ... RENAME COLUMN`이 `OPTIMIZE TABLE ... FINAL` 또는 다른 백그라운드 머지와 동시에 실행될 때 데이터가 기본값으로 조용히 대체되던 문제를 수정했습니다. [#104822](https://github.com/ClickHouse/ClickHouse/pull/104822) ([groeneai](https://github.com/groeneai)).
* `enable_materialized_cte`를 사용하는 쿼리에서 발생하던 두 가지 `LOGICAL_ERROR: Reading from materialized CTE 'X' before it has been materialized` 패턴을 수정했습니다. (1) 다른 구체화된 CTE에 대한 `IN (subquery)`로 필터링되는 재사용 구체화된 CTE, (2) 중첩된 IN 서브쿼리를 통해 MergeTree 기본 키를 사용하는 `WHERE ... IN (...)` 필터 내부와 직접 참조되는 구체화된 CTE입니다. 계획 최적화 중 버그가 발생했으므로 동일한 쿼리에 대한 `EXPLAIN`도 영향을 받았습니다. [#105041](https://github.com/ClickHouse/ClickHouse/pull/105041) ([novikd](https://github.com/novikd)).
* `skip_cache_on_disk_failure = 1`을 사용하면 이제 `FileCache`가 디스크 캐시 디렉터리를 생성하지 못해도 쿼리가 계속 실행됩니다. 쿼리를 실패시키는 대신 해당 실패를 로그에 기록합니다. [#105250](https://github.com/ClickHouse/ClickHouse/pull/105250) ([Diskein](https://github.com/Diskein)).
* `ALTER TABLE <memory_table> APPLY PATCHES` 및 `ALTER TABLE <memory_table> APPLY DELETED MASK`에서 발생하던 논리적 오류 예외 `Mutation of Memory table produced incomplete output`를 수정했습니다. `Memory` 테이블은 패치 파트나 삭제 마스크를 보유하지 않으므로 이제 두 명령 모두 올바르게 아무 작업도 수행하지 않는 작업으로 처리됩니다. [#105286](https://github.com/ClickHouse/ClickHouse/pull/105286) ([groeneai](https://github.com/groeneai)).
* `distributed_group_by_no_merge=1`에서 `Distributed` 위의 `Merge` 위에 있는 `Merge`에 대해 발생하는 `CANNOT_CONVERT_TYPE`를 수정했습니다. [#105330](https://github.com/ClickHouse/ClickHouse/pull/105330) ([azat](https://github.com/azat)).
* 여러 고유 값을 이미 관찰한 상태를 머지할 때 `singleValueOrNullMerge`가 `NULL` 대신 특정 값을 반환하던 문제를 수정했습니다. [#105734](https://github.com/ClickHouse/ClickHouse/pull/105734) ([fallintoplace](https://github.com/fallintoplace)).
* 컬렉션 이름이 비어 있거나 NUL 바이트를 포함할 때 `mongodb` 테이블 함수, MongoDB 스토리지 및 MongoDB 딕셔너리 소스에서 발생하는 충돌을 수정했습니다. [#105776](https://github.com/ClickHouse/ClickHouse/pull/105776) ([Algunenano](https://github.com/Algunenano)).
* 명시적으로 지정된 `SummingMergeTree` 및 `CoalescingMergeTree`의 `columns_to_sum` 컬럼에 대해 `ALTER TABLE ... CLEAR COLUMN`이 거부되던 문제를 수정했습니다. [#105785](https://github.com/ClickHouse/ClickHouse/pull/105785) ([antonio2368](https://github.com/antonio2368)).
* 데이터베이스 이름을 쿼리 매개변수로 지정한 매개변수화된 뷰를 생성할 때 발생하던 `UNKNOWN_DATABASE` 오류를 수정했습니다. [#105799](https://github.com/ClickHouse/ClickHouse/pull/105799) ([groeneai](https://github.com/groeneai)).
* analyzer 사용 시 `Merge` 테이블의 순서 읽기 최적화를 복원했습니다. [#105867](https://github.com/ClickHouse/ClickHouse/pull/105867) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* 카탈로그를 통해 액세스하는 Iceberg 테이블의 `UPDATE` 및 `DELETE` 뮤테이션 문제를 수정했습니다. 여기에는 일치하는 행이 없는 반복 업데이트 및 삭제도 포함됩니다. [#106111](https://github.com/ClickHouse/ClickHouse/pull/106111) ([scanhex12](https://github.com/scanhex12)).
* 프레디케이트가 상위에 적용된 상태에서 `Merge` 테이블 또는 `merge` 테이블 함수를 통해 `Distributed` 테이블을 쿼리할 때 `optimize_skip_unused_shards`가 적용되지 않고 `force&#95;optimize&#95;skip&#95;unused&#95;shards`가 잘못 실패하던 문제를 수정했습니다. [#106250](https://github.com/ClickHouse/ClickHouse/pull/106250) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* 뮤테이션(`DELETE`/`UPDATE`) 프레디케이트에 다른 하위 쿼리 안에 중첩된 기본 테이블 표현식에서 읽는 `IN`/`EXISTS` 하위 쿼리가 포함될 때 발생하는 논리 오류 `Column identifier ... is already registered`를 수정했습니다. [#106414](https://github.com/ClickHouse/ClickHouse/pull/106414) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `read_in_order_use_virtual_row_per_block = 1` 및 작은 `max_block_size`를 사용해 와이드 파트를 역순으로 읽을 때 `ORDER BY ... DESC` 쿼리에서 간헐적으로 잘못된 결과가 발생하던 문제를 수정했습니다. [#106429](https://github.com/ClickHouse/ClickHouse/pull/106429) ([vdimir](https://github.com/vdimir)).
* `cache`/`direct` 레이아웃과 단일 문자열(복합) 키로 `STORAGE_TYPE 'simple'`을 사용하는 Redis 딕셔너리에서 발생하던 `Bad cast exception`을 수정했습니다. 이제 이러한 딕셔너리를 사용할 수 있으며, `simple` 스토리지의 복합 키는 명확한 오류를 보고합니다. [#106501](https://github.com/ClickHouse/ClickHouse/pull/106501) ([vdimir](https://github.com/vdimir)).
* `APPLY PATCHES`, `APPLY DELETED MASK`, `MATERIALIZE STATISTICS`, `MATERIALIZE INDEX`, `MATERIALIZE PROJECTION`, `REWRITE PARTS`를 포함해, `Memory` 엔진에서 행별 데이터에 영향을 주지 않는 `ALTER TABLE <memory_table>` 명령으로 인해 발생하던 예외 `Mutation of Memory table produced incomplete output`을 수정했습니다. `Memory` 테이블은 이러한 구조를 보유하지 않으므로 이제 이 명령은 아무 작업도 수행하지 않는 것으로 처리됩니다. [#106621](https://github.com/ClickHouse/ClickHouse/pull/106621) ([groeneai](https://github.com/groeneai)).
* `MergeTree` 테이블에 0개의 그래뉼과 디스크에 비어 있지 않은 마크 파일이 있는 skip-index 파트가 있을 때 서버가 `Too many marks in file ...skp_idx_idx.cmrk4, marks expected 0 (bytes size 0)` 오류와 함께 시작하지 못하던 문제를 수정했습니다. [#106675](https://github.com/ClickHouse/ClickHouse/pull/106675) ([groeneai](https://github.com/groeneai)).
* UNION에 빈 테이블이 포함되어 UNION을 사용하는 뷰에 병렬 레플리카가 적용되지 않던 문제를 수정했습니다. [#106900](https://github.com/ClickHouse/ClickHouse/pull/106900) ([devcrafter](https://github.com/devcrafter)).
* 완전히 중복 제거된 블록을 `ReplicatedMergeTree` 테이블에 동기식으로 삽입할 때, 충돌한 파트의 중복 제거 노드가 이미 제거된 경우(예: 동시에 실행된 `DROP PARTITION`으로 인해) 발생할 수 있던 논리 오류 예외 `conflicted_part_name.has_value()`를 수정했습니다. [#107026](https://github.com/ClickHouse/ClickHouse/pull/107026) ([groeneai](https://github.com/groeneai)).
* `enable_filesystem_query_cache_limit = 1`로 생성된 파일 시스템 캐시 디스크를 통해 `MergeTree` 테이블을 읽을 때 발생할 수 있던 드문 `LOGICAL_ERROR` "Attempt to release query context that does not exist"와 이에 따른 서버 크래시를 수정했습니다. [#107028](https://github.com/ClickHouse/ClickHouse/pull/107028) ([groeneai](https://github.com/groeneai)).
* 빈 파트를 `plain_rewritable` 디스크로 이동할 때 발생하던 서버 크래시를 수정했습니다(예: `remove_empty_parts = 0`으로 유지된 빈 파트에 `ALTER TABLE ... MOVE PARTITION ... TO DISK`를 실행하는 경우). [#107040](https://github.com/ClickHouse/ClickHouse/pull/107040) ([groeneai](https://github.com/groeneai)).
* `adaptive_write_buffer_initial_size`가 매우 큰 값으로 설정된 경우 `MergeTree` 테이블에 `INSERT`할 때 발생하던 `Logical error: Too large size passed to allocator` 예외를 수정했습니다. 이제 적응형 쓰기 버퍼의 초기 크기는 버퍼 최대 크기로 제한됩니다. [#107104](https://github.com/ClickHouse/ClickHouse/pull/107104) ([groeneai](https://github.com/groeneai)).
* `MODIFY SETTING`/`RESET SETTING`과 주석 변경(예: `MODIFY COMMENT 'x', MODIFY SETTING old_parts_lifetime = 123`)을 혼합한 `ALTER TABLE ... ON CLUSTER` 배치가 리더 레플리카에만 적용되어 다른 레플리카와 불일치가 발생하던 문제를 수정했습니다. 또한 위치 기반 또는 컬럼별 `SETTINGS`를 사용하는 `MODIFY COLUMN ... COMMENT`가 로컬 주석 전용 메타데이터 변경으로 잘못 분류되어, 복제된 메타데이터에서 컬럼 재정렬이 누락되고 레플리카 재시작 시 `INCOMPATIBLE_COLUMNS` 오류를 유발할 수 있던 문제도 수정했습니다. [#107142](https://github.com/ClickHouse/ClickHouse/pull/107142) ([groeneai](https://github.com/groeneai)).
* `group_by_use_nulls` 설정을 활성화한 상태에서 `grouping` 함수를 사용하는 쿼리에 발생하던 `Argument ... of GROUPING function is not a part of GROUP BY clause` 오류를 수정했습니다. [#107206](https://github.com/ClickHouse/ClickHouse/pull/107206) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* 복제되지 않은 `MergeTree` 테이블에서 레거시 병렬 레플리카를 활성화한 경량 `UPDATE` 쿼리 문제를 수정했습니다. [#107246](https://github.com/ClickHouse/ClickHouse/pull/107246) ([groeneai](https://github.com/groeneai)).
* SYSTEM SYNC DATABASE REPLICA ... STRICT에서 발생할 수 있는 논리 오류 예외를 수정하고, STRICT 수정자가 데이터베이스 레플리카에 실제로 적용되도록 했습니다. [#107344](https://github.com/ClickHouse/ClickHouse/pull/107344) ([PedroTadim](https://github.com/PedroTadim)).
* 스칼라 서브쿼리에 동일한 테이블을 읽는 중첩 서브쿼리가 포함된 경우 병렬 레플리카에서 발생할 수 있던 `Logical error: 'Duplicate announcement received for replica number N'` 오류를 수정했습니다. [#107381](https://github.com/ClickHouse/ClickHouse/pull/107381) ([groeneai](https://github.com/groeneai)).
* 아직 적용되지 않은 경량 `UPDATE` 패치가 있는 파티션에서 `REPLACE PARTITION`, `MOVE PARTITION`, `DETACH PARTITION` 또는 `DETACH PART`를 실행할 때 일반(복제되지 않은) `MergeTree`에서 발생하던 무음 데이터 손실을 수정했습니다. 이제 이러한 작업은 커밋된 업데이트를 조용히 되돌리는 대신(`ReplicatedMergeTree`와 마찬가지로) `ALTER TABLE ... APPLY PATCHES`를 안내하며 명령을 거부합니다. [#107386](https://github.com/ClickHouse/ClickHouse/pull/107386) ([groeneai](https://github.com/groeneai)).
* PostgreSQL 데이터베이스 또는 테이블 이름에 대문자가 포함된 경우 `MaterializedPostgreSQL`이 변경 사항의 복제를 조용히 중단하던 문제를 수정했습니다(`pgoutput` 소비자가 대소문자를 보존하는 publication과 일치하지 않는, 따옴표 없이 소문자로 변환된 publication 이름을 요청했습니다). [#107423](https://github.com/ClickHouse/ClickHouse/pull/107423) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `optimize_if_transform_strings_to_enum = 1`이고 최적화된 문자열 리터럴 기반 `if`/`transform` 표현식이 분산 테이블 또는 병렬 레플리카의 `GROUP BY` 또는 `ORDER BY` 키인 경우 발생하는 `THERE_IS_NO_COLUMN` 오류를 수정했습니다. [#107455](https://github.com/ClickHouse/ClickHouse/pull/107455) ([groeneai](https://github.com/groeneai)).
* 일반 `MergeTree`에서 `ReplacingMergeTree`, `SummingMergeTree` 또는 `AggregatingMergeTree`로 파트를 채택한 뒤 `CREATE TABLE ... CLONE AS`, `ATTACH PARTITION ... FROM` 또는 `MOVE PARTITION ... TO TABLE`을 수행하면 `SELECT ... FINAL` 및 `OPTIMIZE TABLE ... FINAL`이 중복 행을 반환하던 문제를 수정했습니다. 이제 원본 엔진과 대상 엔진이 다르면 채택된 파트의 머지 수준이 0으로 재설정되므로, 다음 머지에서 대상 엔진이 중복을 제거합니다. [#107481](https://github.com/ClickHouse/ClickHouse/pull/107481) ([groeneai](https://github.com/groeneai)).
* ReplicatedMergeTree에서 쿼럼을 기다리는 동안 쿼리 취소를 더 정확하게 추적하도록 개선했습니다. [#107513](https://github.com/ClickHouse/ClickHouse/pull/107513) ([nickitat](https://github.com/nickitat)).
* rapidjson 라이브러리(`prettyPrintJSON`, `JSONMergePatch` 및 rapidjson JSON 파서)가 사용하는 메모리를 메모리 트래커에 반영하여, 비정상적인 입력이 제한 없이 메모리를 할당하는 대신 `MEMORY_LIMIT_EXCEEDED`로 거부되도록 했습니다. [#107555](https://github.com/ClickHouse/ClickHouse/pull/107555) ([Algunenano](https://github.com/Algunenano)).
* `Dynamic` 컬럼이 있는 테이블의 mutation으로 생성된 `MergeTree` 파트를 머지하거나 읽을 때 발생할 수 있는 `Logical error: Stream ... variant_discr ... is not found` 오류를 수정했습니다. [#107562](https://github.com/ClickHouse/ClickHouse/pull/107562) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `optimize_prewhere_after_pushdown`이 활성화된 상태에서 명시적 `PREWHERE`와 `WHERE`를 모두 사용해 `file()`, `url()` 또는 객체 스토리지 소스를 쿼리할 때 발생하던 `LOGICAL_ERROR`(`updateFormatPrewhereInfo called more than once`)를 수정했습니다. [#107568](https://github.com/ClickHouse/ClickHouse/pull/107568) ([groeneai](https://github.com/groeneai)).
* `Replicated` 데이터베이스 내 `TimeSeries` 테이블과 관련된 `RENAME TABLE`, `RENAME DATABASE` 또는 `CREATE OR REPLACE TABLE`에서 발생할 수 있던 서버 예외(`Digest does not match` 논리 오류)를 수정했습니다. 이제 `TimeSeries` 테이블 이름 변경이 지원됩니다. [#107583](https://github.com/ClickHouse/ClickHouse/pull/107583) ([groeneai](https://github.com/groeneai)).
* 이전에는 내부 테이블이 남아 있고 백그라운드 삭제 작업이 무한히 재시도되던 `Replicated` 데이터베이스의 `TimeSeries` 테이블에 대한 `DROP TABLE` 문제를 수정했습니다(`DROP TABLE ... SYNC`가 멈춤). [#107604](https://github.com/ClickHouse/ClickHouse/pull/107604) ([groeneai](https://github.com/groeneai)).
* 악의적인 레플리카가 파트 디렉터리 외부에 파일을 쓸 수 있던 복제 파트 가져오기 프로토콜의 경로 탐색 취약점 2건을 수정했습니다. [#107606](https://github.com/ClickHouse/ClickHouse/pull/107606) ([antonio2368](https://github.com/antonio2368)).
* 일반 `MergeTree` 테이블에서 `ALTER TABLE ... REPLACE PARTITION`을 실행한 후 서버를 재시작하면 교체된 파트가 다시 나타나, 테이블이 대체 행과 기존의 교체된 행을 모두 반환하던 문제를 수정했습니다. [#107623](https://github.com/ClickHouse/ClickHouse/pull/107623) ([groeneai](https://github.com/groeneai)).
* `TO` 대상 테이블에서 뷰의 `SELECT`가 생성하는 것보다 더 넓은 `Enum`을 가진 컬럼을 선언한 materialized view에 삽입할 때 발생하던 `LOGICAL_ERROR`("`ConvertingTransform` 및 `RemovingReplicatedColumnsTransform` 간의 Block structure mismatch ...")를 수정했습니다. 이제 직접 `INSERT ... SELECT`와 마찬가지로 materialized view 삽입 경로에서도 유효한 `Enum` 확장이 적용됩니다. [#107648](https://github.com/ClickHouse/ClickHouse/pull/107648) ([groeneai](https://github.com/groeneai)).
* 동일한 표현식으로 확장되는 여러 `ALIAS` 컬럼이 있는 `Distributed` 테이블을 쿼리하거나 병렬 레플리카를 사용하면서 해당 컬럼을 `ORDER BY`/`GROUP BY`/`HAVING`와 함께 참조할 때 발생하는 `NUMBER_OF_COLUMNS_DOESNT_MATCH` 오류를 수정했습니다. [#107913](https://github.com/ClickHouse/ClickHouse/pull/107913) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* 읽기 전용 테이블의 데이터 파트를 갱신하는 중 발생하는 일시적 오류가 더 이상 백그라운드 갱신 작업을 영구적으로 중지시키지 않습니다. [#108034](https://github.com/ClickHouse/ClickHouse/pull/108034) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 이제 `AggregateFunction` 상태 컬럼에 `index_granularity_bytes`가 적용됩니다. 이전에는 이러한 컬럼(예: `AggregatingMergeTree` 테이블 및 집계 프로젝션의 `uniqExact` 상태)에 세분화 단위의 바이트 제한이 적용되지 않아, 구성된 제한보다 훨씬 큰 세분화 단위가 생성되고 읽기 증폭 및 쿼리 시 메모리 사용량이 증가했습니다. [#108297](https://github.com/ClickHouse/ClickHouse/pull/108297) ([groeneai](https://github.com/groeneai)).
* 활성 레플리카 수가 과반수에 미치지 않을 때 `insert_quorum = 'auto'`가 삽입을 즉시 거부하지 않던 문제를 수정했습니다. 이제 이러한 삽입은 로컬 파트를 기록한 후 나중에 `UNKNOWN_STATUS_OF_INSERT`로 시간 초과되는 대신 즉시 `TOO_FEW_LIVE_REPLICAS`로 실패합니다. [#108800](https://github.com/ClickHouse/ClickHouse/pull/108800) ([gagandhakrey](https://github.com/gagandhakrey)).
* `optimize_on_insert`로 인해 삽입 블록이 비어 있을 때(예: `SummingMergeTree`에서 행의 합계가 0인 경우) 중복 제거를 사용하는 비동기 삽입에서 발생하던 서버 충돌을 수정했습니다. [#109229](https://github.com/ClickHouse/ClickHouse/pull/109229) ([Diskein](https://github.com/Diskein)).
* 머지가 `ALTER TABLE ... RENAME COLUMN`과 동시에 실행되거나 컬럼의 유일한 값이 경량 `UPDATE`에서 비롯된 경우, 기본 표현식이 없는 컬럼의 데이터가 손실되던 문제를 수정했습니다. 해당 컬럼이 병합된 파트에서 삭제되어 다시 읽을 때 모든 값이 NULL로 반환될 수 있었습니다. [#109356](https://github.com/ClickHouse/ClickHouse/pull/109356) ([groeneai](https://github.com/groeneai)).
* `GROUPING SETS`, `ROLLUP` 또는 `CUBE`와 병렬로 `uniqExact` 집계 상태를 머지할 때 드물게 발생하던 서버 종료를 수정했습니다. [#109389](https://github.com/ClickHouse/ClickHouse/pull/109389) ([groeneai](https://github.com/groeneai)).
* 롤업 머지가 무기한 재예약되던 문제를 수정했습니다. [#109410](https://github.com/ClickHouse/ClickHouse/pull/109410) ([Michicosun](https://github.com/Michicosun)).
* 구체화된 가상 컬럼 또는 영구 가상 컬럼이 있는 테이블의 `GROUP BY` 뮤테이션 문제를 수정했습니다. [#109532](https://github.com/ClickHouse/ClickHouse/pull/109532) ([Michicosun](https://github.com/Michicosun)).
* 새로 삽입된(0레벨) 파트가 있는 테이블에서 `add_minmax_index_for_block_number_column`/`add_minmax_index_for_block_offset_column`이 생성한 암시적 minmax 인덱스에 대해 `ALTER TABLE ... MATERIALIZE INDEX`를 실행할 때 발생하는 `UNKNOWN_IDENTIFIER: Missing columns: '_block_offset'` 오류를 수정했습니다. 이제 해당 파트에서 실패하는 대신 인덱스가 생성됩니다. [#110236](https://github.com/ClickHouse/ClickHouse/pull/110236) ([groeneai](https://github.com/groeneai)).
* 읽기 전용 객체 스토리지 레플리카(`read_only = true`로 구성된 디스크)가 `refresh_parts_interval`을 통해 새 파트를 검색하지 못하던 문제와, 이러한 디스크에서 "table\_disk is not supported for non-ObjectStorage disks" 메시지와 함께 `table_disk = true`가 거부되던 문제를 수정했습니다. [#110460](https://github.com/ClickHouse/ClickHouse/pull/110460) ([jkartseva](https://github.com/jkartseva)).
* 표현식에서 IN 연산자(다른 `ALIAS` 컬럼을 통해 사용하는 경우 포함)를 사용하는 `ALIAS` 컬럼이 있는 테이블에서 `ALTER TABLE ... DROP COLUMN`, `ALTER TABLE ... DELETE`/`UPDATE` 뮤테이션 및 경량 DELETE 수행 시 발생하는 LOGICAL\_ERROR("No set is registered for key")를 수정했습니다. [#111039](https://github.com/ClickHouse/ClickHouse/pull/111039) ([PedroTadim](https://github.com/PedroTadim)).
* 쿼리 실행 중 MergeTree 프로젝션에 ROW POLICY가 적용되지 않던 문제를 수정했습니다. [#112329](https://github.com/ClickHouse/ClickHouse/pull/112329) ([yariks5s](https://github.com/yariks5s)).
* 직접 I/O를 사용하는 `encrypted` 디스크에서 `Compact` 파트를 읽을 때 발생하던 `ReadBufferFromEncryptedFile: Wrong file position` 논리 오류를 수정했습니다. 이 오류로 인해 머지가 `system.replication_queue`에서 멈추던 문제를 해결했습니다. [#112943](https://github.com/ClickHouse/ClickHouse/pull/112943) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `merge` 테이블 함수와 `Merge` 테이블 엔진을 통해 내부 `_temporary_and_external_tables` 데이터베이스를 읽을 수 있던 문제를 수정했습니다. 이 문제로 한 세션에서 다른 세션 및 사용자의 임시 테이블을 읽을 수 있었고, 이전 분석기 경로에서는 예외가 발생했습니다. 이제 데이터베이스 정규식에서 해당 데이터베이스를 제외하며, 직접 액세스와 마찬가지로 명시적으로 이름을 지정하는 것도 거부됩니다. [#113224](https://github.com/ClickHouse/ClickHouse/pull/113224) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 스칼라 하위 쿼리가 포함된 ROW POLICY가 `Merge` 테이블을 통해 테이블을 읽은 뒤 한 번만 평가되고 이후 계속 재사용되던 문제를 수정했습니다. 파싱된 정책 조건은 캐시되어 모든 쿼리에서 공유되는데, `Merge`를 통한 읽기가 캐시된 표현식을 제자리에서 다시 작성하면서 동일한 정책을 사용하는 동시 쿼리 간 데이터 레이스도 발생했습니다. [#113563](https://github.com/ClickHouse/ClickHouse/pull/113563) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 사용자 정의 키 병렬 레플리카가 있는 `Distributed` 테이블을 포함한 `Merge` 테이블을 읽을 때 발생하던 `CANNOT_CONVERT_TYPE` 오류를 수정했습니다. [#113742](https://github.com/ClickHouse/ClickHouse/pull/113742) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 자식 테이블이 `IN`을 포함하는 `ALIAS` 컬럼을 선언하고 해당 컬럼의 기본값이 자식 테이블마다 다를 때 `Merge` 테이블을 통해 읽으면 발생하던 `Logical error: No set is registered for key ...`를 수정했습니다. [#113757](https://github.com/ClickHouse/ClickHouse/pull/113757) ([groeneai](https://github.com/groeneai)).
* mergeTreeIndex 테이블 함수가 원본 테이블의 SELECT ROW POLICY로 숨겨진 행의 프라이머리 키 및 minmax 인덱스 값을 노출하던 ROW POLICY 우회 문제를 수정했습니다. 이제 ROW POLICY가 적용된 테이블에 대해 mergeTreeIndex를 읽는 작업은 거부됩니다. [#115304](https://github.com/ClickHouse/ClickHouse/pull/115304) ([yariks5s](https://github.com/yariks5s)).

<h3 id="data-type-and-serialization-fixes">
  데이터 타입 및 직렬화 관련 수정 사항
</h3>

* `LowCardinality` 숫자 타입 사용 시 `ARRAY JOIN`에서 발생하던 예외를 수정했습니다. [#91784](https://github.com/ClickHouse/ClickHouse/pull/91784) ([Ergus](https://github.com/Ergus)).
* `data_type_default_nullable = 1`이고 테이블을 `Replicated` 데이터베이스 또는 `ON CLUSTER`를 통해 생성할 때 `NOT NULL` 컬럼이 자동으로 `Nullable`로 생성되던 문제를 수정했습니다. [#97572](https://github.com/ClickHouse/ClickHouse/pull/97572) ([xiaohuanlin](https://github.com/xiaohuanlin)).
* 뷰가 `integer` 컬럼을 `Bool` 컬럼에 매핑하는 경우, `query_plan_enable_optimizations = 0`이 설정된 `MaterializedView` 쿼리가 잘못된 행 수를 반환하던 문제를 수정했습니다. [#100692](https://github.com/ClickHouse/ClickHouse/pull/100692) ([Maximus5](https://github.com/Maximus5)).
* 기본 직렬화가 아닌 직렬화가 적용된 컬럼의 뮤테이션 후 파트 메타데이터가 일관되지 않던 문제를 수정했습니다. [#102817](https://github.com/ClickHouse/ClickHouse/pull/102817) ([korowa](https://github.com/korowa)).
* `Nullable(Tuple(...))` 컬럼에서 추출한 서브컬럼을 읽을 때 `NULL`이 올바르게 전파되지 않던 문제를 수정했습니다. 예를 들어 `tup Nullable(Tuple(s Nullable(String)))`에서 이제 `SELECT tup.s`는 외부 튜플이 `NULL`인 행에 대해 잘못된 값 대신 올바르게 `NULL`을 반환합니다. 이는 `NULL`을 표현할 수 있는 모든 요소 타입, 즉 `Nullable`, `Dynamic`, `Variant`, `LowCardinality(Nullable(...))`에 적용됩니다. [#102942](https://github.com/ClickHouse/ClickHouse/pull/102942) ([nihalzp](https://github.com/nihalzp)).
* `recursiveRemoveLowCardinality`가 사용자 지정 geometry 타입 이름(예: `LineString`과 `Ring`, `MultiLineString`과 `Polygon`)을 삭제하여 geometry 타입이 잘못 해석되던 문제를 수정했습니다. [#103041](https://github.com/ClickHouse/ClickHouse/pull/103041) ([jh0x](https://github.com/jh0x)).
* 딕셔너리에 값이 없는 `Nullable` 키 컬럼으로 호출할 때 `dictGetOrNull`이 `SELECT` 프로젝션의 다른 컬럼을 자동으로 `NULL`로 덮어쓰던 문제를 수정했습니다. 이 함수는 입력 별칭의 null 맵을 제자리에서 변경했지만, 이제 뮤테이션 전에 결과 컬럼을 딥 클론합니다. [#104327](https://github.com/ClickHouse/ClickHouse/pull/104327) ([groeneai](https://github.com/groeneai)).
* `optimize_skip_unused_shards_rewrite_in`이 활성화된 경우 세그먼트 키에 빈 `IN` 튜플이 포함된 분산 쿼리에서 발생하던 예외를 수정했습니다. [#104966](https://github.com/ClickHouse/ClickHouse/pull/104966) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Float64` 리터럴과의 비교를 포함해 `Float32` 컬럼의 count-min 통계에 대한 `PREWHERE` 선택도 추정 문제를 수정했습니다. [#105047](https://github.com/ClickHouse/ClickHouse/pull/105047) ([hanfei1991](https://github.com/hanfei1991)).
* `quantileExactWeightedInterpolated`, `quantileDD` 또는 `quantilePrometheusHistogram` 집계 상태를 해당 복수형 `quantilesXxxMerge` 함수와 병합할 때(또는 그 반대) 발생하던 `ILLEGAL_TYPE_OF_ARGUMENT` 문제를 수정했습니다. 이 3개 분위수 계열의 단수형과 복수형 변형은 동일한 내부 집계 상태를 공유하지만 내부 이름 매핑 테이블에 등록되지 않아, 함수 간 상태 병합과 이들 계열의 함수 융합 최적화가 거부되었습니다. [#105189](https://github.com/ClickHouse/ClickHouse/pull/105189) ([groeneai](https://github.com/groeneai)).
* 결과가 `Date` 범위를 벗어나는 `Date32` 및 `DateTime64` 인수에서 `toStartOfWeek`, `toLastDayOfWeek`, `toMonday`, `toStartOfMonth`, `toLastDayOfMonth`, `toStartOfQuarter`, `toStartOfYear`가 잘못된 결과를 반환하던 문제를 수정했습니다. 임의의 날짜로 오버플로우하는 대신, `1970-01-01` 이전 결과는 이제 `1970-01-01`로 제한되며 `2149-06-06` 이후 결과는 `2149-06-06`로 제한됩니다. 또한 범위를 벗어난 값을 포함하는 `Date32` 또는 `DateTime64` 키의 `WHERE` 절에서 이러한 함수를 사용할 때 잘못된 쿼리 결과(파트 및 그래뉼이 잘못 제거됨)가 발생하던 문제도 수정했습니다. [#105244](https://github.com/ClickHouse/ClickHouse/pull/105244) ([yariks5s](https://github.com/yariks5s)).
* 첫 번째 인수가 모든 대안이 두 번째 인수의 타입과 호환되지 않는 `Variant` 배열이고 `variant_throw_on_type_mismatch`가 비활성화된 경우 `arrayRemove`에서 발생하던 논리 오류를 수정했습니다. 이제 함수는 비교를 "절대 같지 않음"으로 처리하며, 서버 측 `assertTypeEquality` 실패를 유발하는 대신 배열을 변경 없이 반환합니다. [#105248](https://github.com/ClickHouse/ClickHouse/pull/105248) ([groeneai](https://github.com/groeneai)).
* `Dynamic`에서 `toFloat64`/`toUInt32`/`toString` 등이 `cast_keep_nullable`를 무시하던 문제를 수정했습니다. [#105467](https://github.com/ClickHouse/ClickHouse/pull/105467) ([Avogar](https://github.com/Avogar)).
* 널 허용 인수와 함께 `GROUP BY ... WITH ROLLUP`, `WITH CUBE` 또는 `WITH TOTALS`를 사용할 때 `uniqStateOrNull` / `uniqStateOrDefault` / `uniqOrNullState`(및 `uniq`에 대한 유사한 combinator 체인)에서 발생하던 서버 segfault를 수정했습니다. [#105470](https://github.com/ClickHouse/ClickHouse/pull/105470) ([groeneai](https://github.com/groeneai)).
* 음수(에포크 이전) `DateTime64` 값에서 `toStartOfMillisecond` 및 `toStartOfMicrosecond`가 거의 1초 차이 나는 결과를 반환하던 문제를 수정하고, `INT64_MIN`에 가까운 `DateTime64` 입력에서 `toStartOfSecond`, `toStartOfMillisecond`, `toStartOfMicrosecond`에 발생하던 `UndefinedBehaviorSanitizer` signed-integer-overflow를 수정했습니다. [#105482](https://github.com/ClickHouse/ClickHouse/pull/105482) ([groeneai](https://github.com/groeneai)).
* `JSON`의 `singleValueOrNull` 상태를 역직렬화할 때 서버가 종료되던 문제를 수정했습니다. [#105535](https://github.com/ClickHouse/ClickHouse/pull/105535) ([Avogar](https://github.com/Avogar)).
* JSON의 공유 데이터에 삽입할 때 `input_format_try_infer_datetimes`가 무시되던 문제를 수정했습니다. [#105544](https://github.com/ClickHouse/ClickHouse/pull/105544) ([Avogar](https://github.com/Avogar)).
* `JSONExtract` 및 텍스트 역직렬화에서 범위를 벗어난 값에 대해 `DateTime` 값이 래핑되던 문제를 수정했습니다. [#105551](https://github.com/ClickHouse/ClickHouse/pull/105551) ([Avogar](https://github.com/Avogar)).
* 동일한 VALUES 절에서 크기가 서로 다른 튜플을 `String` 컬럼에 삽입할 때 발생하던 충돌을 수정했습니다. [#105582](https://github.com/ClickHouse/ClickHouse/pull/105582) ([Avogar](https://github.com/Avogar)).
* NULL 값을 포함하는 시간대가 지정된 `DateTime`에서 `toString` 사용 시 발생하던 NOT\_IMPLEMENTED 오류를 수정했습니다. [#105587](https://github.com/ClickHouse/ClickHouse/pull/105587) ([yariks5s](https://github.com/yariks5s)).
* Native 입력에서 형식이 잘못된 flattened `Dynamic` 컬럼에 대한 유효성 검사를 추가했습니다. [#105666](https://github.com/ClickHouse/ClickHouse/pull/105666) ([Avogar](https://github.com/Avogar)).
* 결과 타입이 `Variant`이고 두 번째 또는 세 번째 분기가 `Int64`에 맞는 `UInt64` 리터럴에 대한 상수 조건 `if`인 `if` 표현식의 쿼리 계획 중 발생하던 `LOGICAL_ERROR`(`Unexpected return type from if`)를 수정했습니다. [#105680](https://github.com/ClickHouse/ClickHouse/pull/105680) ([groeneai](https://github.com/groeneai)).
* 집계 상태를 직렬화할 때(예: 병렬 레플리카, 바이너리 상태 포맷터를 통한 `sumMapState`, 외부 집계) `Nested(... Nullable(Decimal(P, S)))` 컬럼에서 `sumMap` 및 `sumMapWithOverflow` 실행 시 발생하던 `Bad get: has Decimal32, requested Decimal128` 문제를 수정했습니다. [#105816](https://github.com/ClickHouse/ClickHouse/pull/105816) ([groeneai](https://github.com/groeneai)).
* `ALTER MODIFY COLUMN ... LowCardinality(...)` 뮤테이션 전에 온더플라이 `UPDATE`/`DELETE` 뮤테이션이 대기열에 있는 테이블에서 `apply_mutations_on_fly = 1`을 사용할 때 발생하던 `Expected ColumnLowCardinality, got String` / `Bad cast from type DB::ColumnString to DB::ColumnLowCardinality` 오류를 수정했습니다. [#105847](https://github.com/ClickHouse/ClickHouse/pull/105847) ([Algunenano](https://github.com/Algunenano)).
* 새 분석기에서 `IN Array(...)` 필터를 사용하는 분산 쿼리의 `Cannot find column` 오류를 수정했습니다. [#105894](https://github.com/ClickHouse/ClickHouse/pull/105894) ([KochetovNicolai](https://github.com/KochetovNicolai)).
* 한 `ALTER`이 `STATISTICS`가 있는 컬럼을 삭제하는 동시에 다른 `ALTER`이 해당 컬럼을 `Nullable`로 수정할 때 발생하던 서버 종료 문제를 수정했습니다. [#105917](https://github.com/ClickHouse/ClickHouse/pull/105917) ([groeneai](https://github.com/groeneai)).
* `RowBinaryWithNamesAndTypes` 타입 디코딩(`input_format_binary_decode_types_in_binary_format = 1`) 중 범위를 벗어난 `IntervalKind` 바이트를 거부하고, 이후 해시 경로에서 정의되지 않은 동작을 일으킬 수 있는 잘못된 kind의 `DataTypeInterval`을 생성하는 대신 명확한 `INCORRECT_DATA` 오류를 반환하도록 했습니다. [#106261](https://github.com/ClickHouse/ClickHouse/pull/106261) ([groeneai](https://github.com/groeneai)).
* Nullable(JSON)에서 'null' 서브컬럼을 null-map이 아닌 JSON 경로로 읽도록 수정했습니다. [#106295](https://github.com/ClickHouse/ClickHouse/pull/106295) ([Avogar](https://github.com/Avogar)).
* 배열이 모두 비어 있고 키가 상수가 아닌 컬럼을 해싱할 때 `sipHash64Keyed`, `sipHash128Keyed`, `sipHash128ReferenceKeyed`에서 발생하던 범위를 벗어난 읽기 문제를 수정했습니다. [#106355](https://github.com/ClickHouse/ClickHouse/pull/106355) ([Algunenano](https://github.com/Algunenano)).
* 두 번째 인수가 상수가 아닌 튜플일 때 `IN`의 첫 번째 인수에 스칼라 서브쿼리를 사용할 수 없었던 버그를 수정했습니다. [#106610](https://github.com/ClickHouse/ClickHouse/pull/106610) ([yariks5s](https://github.com/yariks5s)).
* `LowCardinality(DateTime)` 컬럼을 텍스트 포맷(CSV, TSV, JSONEachRow 등)으로 직렬화할 때 `session_timezone`이 무시되는 문제를 수정했습니다. 이전에는 서버에서 `LowCardinality(DateTime)` 컬럼을 처음 기록한 후, 해당 컬럼을 기록하는 이후의 모든 쿼리가 `session_timezone`과 관계없이 처음 확인된 시간대의 현지 시각 문자열을 표시했습니다. [#106634](https://github.com/ClickHouse/ClickHouse/pull/106634) ([groeneai](https://github.com/groeneai)).
* 조건이 상수 `Nullable(Nothing)` 값일 때 `if` 및 `multiIf`에서 발생하던 서버 종료 문제를 수정했습니다. [#106678](https://github.com/ClickHouse/ClickHouse/pull/106678) ([groeneai](https://github.com/groeneai)).
* `sumMap` / `-Map` 조합자가 `ILLEGAL_TYPE_OF_ARGUMENT: Values for -Map cannot be summed` 오류와 함께 사용자 지정 이름의 숫자 값 타입(예: `SimpleAggregateFunction(sum, T)` 및 `Bool`)을 거부하여 기존에 작동하던 집계를 중단시킨 변경 사항을 되돌렸습니다. [#106729](https://github.com/ClickHouse/ClickHouse/pull/106729) ([fm4v](https://github.com/fm4v)).
* 키 컬럼이 `LowCardinality`이고 프레디케이트 상수가 `LowCardinality(Nullable(...))`일 때 `MinMax` 통계로 파트를 프루닝하는 동안 발생하던 `Bad cast` 예외를 수정했습니다. [#106793](https://github.com/ClickHouse/ClickHouse/pull/106793) ([groeneai](https://github.com/groeneai)).
* ASCII가 아닌 입력 바이트가 포함된 `parseDateTime`의 논리 오류를 수정했습니다. [#106856](https://github.com/ClickHouse/ClickHouse/pull/106856) ([Avogar](https://github.com/Avogar)).
* 집계 함수 인수를 널 허용 타입으로 캐스팅해야 하는 경우, `optimize_rewrite_aggregate_function_with_if` 최적화와 관련된 분산 쿼리에서 발생하는 `THERE_IS_NO_COLUMN` 예외를 수정했습니다. [#106908](https://github.com/ClickHouse/ClickHouse/pull/106908) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* 가중치 배열에 큰 정수 값이 포함된 경우 `arrayLevenshteinDistanceWeighted` 및 `arraySimilarity`에서 발생하는 부호 있는 정수 오버플로우(정의되지 않은 동작)를 수정했습니다. 이제 정수 가중치의 가중 거리는 더 넓은 정수 타입에 누적되므로 큰 정수 가중치도 더 이상 오버플로우하지 않으며 정확하게 유지됩니다. [#106934](https://github.com/ClickHouse/ClickHouse/pull/106934) ([groeneai](https://github.com/groeneai)).
* 로컬 저장소 순서가 전역 순서와 다른 `Map` 변형을 가진 `Variant` 컬럼이 포함된 정렬된 블록을 병합할 때 발생하는 충돌(`Source column is not Map` / `SIGSEGV`)을 수정했습니다. [#107011](https://github.com/ClickHouse/ClickHouse/pull/107011) ([groeneai](https://github.com/groeneai)).
* 지연 머티리얼라이즈로 인해 정렬 컬럼 앞에 다른 컬럼이 배치될 때 `ORDER BY <numeric column> ... LIMIT n` 쿼리에서 발생하는 `TYPE_MISMATCH` 오류("Cannot convert string ... to type ...")를 수정했습니다. 이제 상위 K 임계값을 올바른 정렬 컬럼에서 읽습니다. [#107060](https://github.com/ClickHouse/ClickHouse/pull/107060) ([groeneai](https://github.com/groeneai)).
* 타입이 다른 컬럼 간에 해제된 컬럼명(“교환”)을 재사용하는 복합 `ALTER TABLE ... RENAME COLUMN a TO b, RENAME COLUMN c TO a` 문제를 수정했습니다. 구체화된 파트에 잘못된 컬럼 타입이 기록되어 이후 `SELECT`가 `Conversion between numeric types and IPv6 is not supported` 오류와 함께 실패하거나, 디버그 빌드에서는 파트 로드 중 중단되었습니다. [#107064](https://github.com/ClickHouse/ClickHouse/pull/107064) ([groeneai](https://github.com/groeneai)).
* 경계 배열에 `NaN`이 포함될 때 발생하는 `roundDown` 함수의 비결정적 결과를 수정했습니다. 동일한 입력 값이 배치 내 주변 행에 따라 유한한 경계 또는 `NaN`을 반환할 수 있었습니다. 이제 `NaN` 경계는 무시되므로 결과는 유한한 경계에만 의존합니다. [#107065](https://github.com/ClickHouse/ClickHouse/pull/107065) ([groeneai](https://github.com/groeneai)).
* 보간된 분위수가 소수이지만 범위 내에 있을 때 `Date` 및 `DateTime` 인수에 대해 `quantileTDigest` 및 `quantileTDigestWeighted`가 `DECIMAL_OVERFLOW`를 발생시키는 문제를 수정했습니다(예: 모든 값이 타입 범위 내에 있는 `quantileTDigestWeighted(date, weight)`). 이제 소수 결과는 `quantilesTDigestWeighted`와 일치하도록 결과 타입으로 잘리며, 실제 범위를 벗어난 값은 계속 오류를 발생시킵니다. [#107066](https://github.com/ClickHouse/ClickHouse/pull/107066) ([groeneai](https://github.com/groeneai)).
* `Enum8`/`Enum16` 타입 정의에서 범위를 벗어난 정수 값이 자동으로 잘리던 문제를 수정했습니다. 이제 `Enum8('a' = 200)`은 자동으로 `Enum8('a' = -56)`을 생성하는 대신 `ARGUMENT_OUT_OF_BOUND`를 발생시킵니다. [#107081](https://github.com/ClickHouse/ClickHouse/pull/107081) ([groeneai](https://github.com/groeneai)).
* 여러 행이 선행 컬럼에서 동률일 때 널 허용 컬럼을 기준으로 정렬하는 다중 컬럼 `ORDER BY ... LIMIT` 쿼리에서 잘못된 행 순서가 발생하는 문제(및 디버그 빌드의 `LOGICAL_ERROR` "Rows are not sorted with permutation")를 수정했습니다. [#107094](https://github.com/ClickHouse/ClickHouse/pull/107094) ([groeneai](https://github.com/groeneai)).
* 기본값으로 채워진 `Array(Tuple(...))` 컬럼을 읽을 때 발생하는 `Logical error: 'Bad cast from type DB::ColumnVector<...> to DB::ColumnTuple'`를 수정했습니다. 이는 `ALTER TABLE ... ADD COLUMN` 이후 또는 즉석에서 적용된 미완료 `ALTER TABLE ... CLEAR COLUMN` 뮤테이션 이후에 발생할 수 있습니다. [#107232](https://github.com/ClickHouse/ClickHouse/pull/107232) ([groeneai](https://github.com/groeneai)).
* TTL 실행 중 나중에 `ILLEGAL_TYPE_OF_ARGUMENT` 오류로 실패하는 대신, `CREATE TABLE` 시점에 TTL 표현식에서 지원되지 않는 `AggregateFunction` 컬럼 사용(예: `TTL toDateTime(state)`)을 거부하도록 수정했습니다. 이는 `Variant` 대안 및 `Dynamic` 값 내부에 포함된 상태에도 적용됩니다. `finalizeAggregation`과 같이 상태를 인식하는 유효한 소비자는 계속 허용됩니다. [#107366](https://github.com/ClickHouse/ClickHouse/pull/107366) ([Ria-K912](https://github.com/Ria-K912)).
* `Decimal` 크기 인수를 사용하는 `arrayResize`를 수정했습니다. 이제 원시 스케일 미적용 표현이 아니라 실제 값으로 크기를 해석합니다(예: `arrayResize([1, 2, 3], 1.5::Decimal(2, 1))`는 원소 하나를 반환합니다). [#107389](https://github.com/ClickHouse/ClickHouse/pull/107389) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `ALTER MODIFY COLUMN ... LowCardinality(...)` 뮤테이션 이전에, 대상 컬럼이 앞선 즉석 `UPDATE`의 함수 인수로도 읽히는 보류 중인 즉석 `UPDATE`가 있는 테이블에서 `apply_mutations_on_fly = 1`을 사용할 때 발생하는 `LOGICAL_ERROR: Unexpected return type from materialize`(및 유사한 유형 불일치 오류)를 수정했습니다. [#107475](https://github.com/ClickHouse/ClickHouse/pull/107475) ([groeneai](https://github.com/groeneai)).
* Arrow/ORC 데이터를 `LowCardinality(Nullable(...))` 컬럼에 삽입할 때 NULL 값이 조용히 빈 문자열로 변환되는 문제를 수정했습니다. 이는 26.5에서 도입된 회귀였습니다. [#107532](https://github.com/ClickHouse/ClickHouse/pull/107532) ([Ergus](https://github.com/Ergus)).
* `make_distributed_plan = 1`인 쿼리에서 양쪽에 공통 유형이 없는 함수로 래핑된 키를 조인할 때 발생하는 `LOGICAL_ERROR`("Input nodes size mismatch in dag")를 수정했습니다(예: 오른쪽 키가 `UInt64`인 `ON intDiv(-1, t1.key) = t2.key`). [#107701](https://github.com/ClickHouse/ClickHouse/pull/107701) ([groeneai](https://github.com/groeneai)).
* 서버 설정 `insert_deduplication_version = new_unified_hash`에서 `String` 및 `Array` 컬럼의 해시를 잘못 계산하던 삽입 중복 제거 문제를 수정했습니다. 중복 제거 해시가 삽입된 블록 내 행의 위치에 따라 달라져 동일한 삽입이 중복 제거되지 않을 수 있었습니다. [#107915](https://github.com/ClickHouse/ClickHouse/pull/107915) ([CheSema](https://github.com/CheSema)).
* `LowCardinality` 인수로 `Dynamic` 키를 가진 `Map`을 검색할 때 `has`에서 발생하던 서버 종료 문제를 수정했습니다. [#107956](https://github.com/ClickHouse/ClickHouse/pull/107956) ([groeneai](https://github.com/groeneai)).
* `PREWHERE`와 함께 사용되는 `Map` 서브컬럼의 성능 회귀를 수정했습니다. [#107988](https://github.com/ClickHouse/ClickHouse/pull/107988) ([Avogar](https://github.com/Avogar)).
* `accurateCastOrNull` 또는 `accurateCastOrDefault`를 사용하여 `Tuple` 내부에 중첩된 `Dynamic` 또는 `Variant` 컬럼을 널 허용이 아닌 원소 타입으로 캐스팅할 때 발생하는 논리 오류를 수정했습니다. [#108061](https://github.com/ClickHouse/ClickHouse/pull/108061) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 희소 저장된 컬럼에서 직접 읽기 폴백 경로를 통해 `text` 인덱스를 읽는 `LIKE` 쿼리에서 발생하는 `Bad cast from type DB::ColumnSparse to DB::ColumnVector<char8_t>` 논리 오류 예외를 수정했습니다. [#108068](https://github.com/ClickHouse/ClickHouse/pull/108068) ([groeneai](https://github.com/groeneai)).
* 비상수이거나 거짓인 조건의 `ALTER UPDATE col = ... WHERE <cond>` 뒤에 `ALTER MODIFY COLUMN col <new type>`를 실행한 후 `apply_mutations_on_fly = 1`에서 컬럼을 읽을 때 발생하던 `LOGICAL_ERROR`("Unexpected return type from if")를 수정했습니다. [#108128](https://github.com/ClickHouse/ClickHouse/pull/108128) ([groeneai](https://github.com/groeneai)).
* `Int64` 범위 한계에 가까운 극단적인 `DateTime64` 값에서 `hour` 및 `minute` 단위로 `dateDiff`를 사용할 때 발생하던 `signed integer overflow`(정의되지 않은 동작)를 수정했습니다. [#108229](https://github.com/ClickHouse/ClickHouse/pull/108229) ([groeneai](https://github.com/groeneai)).
* `Array(Dynamic)` 또는 `Array(Variant)`를 `accurateCastOrNull`로 `QBit`에 캐스팅할 때 발생하던 서버 예외(`IColumn::insertFrom`의 `Logical error`)를 수정했습니다. 예: `accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)')`. [#108288](https://github.com/ClickHouse/ClickHouse/pull/108288) ([groeneai](https://github.com/groeneai)).
* 시간대를 지정한 `parseDateTimeBestEffort`가 `toString(Nullable(DateTime64))`의 NULL 행에서 `CANNOT_PARSE_DATETIME`을 발생시키던 문제를 수정했습니다. [#108310](https://github.com/ClickHouse/ClickHouse/pull/108310) ([yariks5s](https://github.com/yariks5s)).
* `max_parser_depth`를 큰 값으로 설정했을 때 `[[[ ... ]]]` 또는 `array(array( ... ))`처럼 깊게 중첩된 표현식으로 인해 발생하던 서버 충돌(스택 오버플로우)을 수정했습니다. [#108493](https://github.com/ClickHouse/ClickHouse/pull/108493) ([Algunenano](https://github.com/Algunenano)).
* 프로젝션 생성 후 `ALTER TABLE ... ADD COLUMN ... DEFAULT`로 추가된 컬럼을 읽을 때 `SELECT *` 프로젝션이 해당 `DEFAULT` 값(예: `-1`) 대신 컬럼 유형의 기본값(예: `0`)을 반환하던 문제를 수정했습니다. 기본 테이블에서 읽는 경우는 이미 올바르게 작동했으며, 프로젝션을 다시 빌드하기 전까지 프로젝션이 처리한 읽기만 영향을 받았습니다. [#108569](https://github.com/ClickHouse/ClickHouse/pull/108569) ([tiandiwonder](https://github.com/tiandiwonder)).
* 키 컬럼 `LowCardinality(FixedString)`(또는 `LowCardinality(Nullable(FixedString))`)이 키 내 함수로 감싸진 경우 파티션 및 기본 키 프루닝이 아무 알림 없이 비활성화되던 문제를 수정했습니다. 예를 들어 `WHERE k = 'literal'`과 함께 `PARTITION BY sipHash64(k) % N`을 사용하는 경우입니다. 이러한 쿼리는 파티션을 프루닝하지 않고 모든 파티션을 스캔했습니다. [#108777](https://github.com/ClickHouse/ClickHouse/pull/108777) ([groeneai](https://github.com/groeneai)).
* 이에 의존하는 비교 연산을 수정하기 위해 버킷형 Map 직렬화에서 원래 키 순서를 유지합니다. [#109178](https://github.com/ClickHouse/ClickHouse/pull/109178) ([Avogar](https://github.com/Avogar)).
* `Arrow`, `ArrowStream`, `Avro` 형식 및 레거시 `ORC`, `Parquet` 리더의 스키마 추론이 널 허용 구조체 컬럼에 대해 허용되지 않는 `Nullable(Tuple)` 유형을 반환하던 문제를 수정했습니다(`allow_experimental_nullable_tuple_type`가 비활성화된 경우). `DESCRIBE`가 `CREATE TABLE`에서 거부되는 유형을 반환해, 추론된 스키마로 테이블을 생성하거나 데이터를 삽입할 때 `Nullable Tuple type is not allowed` 오류와 함께 실패했습니다. [#109185](https://github.com/ClickHouse/ClickHouse/pull/109185) ([nihalzp](https://github.com/nihalzp)).
* 서버가 인라인 데이터를 직접 파싱할 때(`send_table_structure_on_insert_with_inline_data = 0`) 인라인 `VALUES` 데이터와 함께 `INSERT INTO TABLE FUNCTION`(예: `remote(...)` 또는 `file(...)`)을 사용하면 컬럼 `DEFAULT` 값이 적용되지 않던 버그를 수정했습니다. `DEFAULT`가 있는 널 비허용 컬럼에 명시적으로 `NULL`을 삽입하면 선언된 기본값 대신 `0`이 저장되었습니다. 이제 일반 테이블 `INSERT` 및 HTTP protocol과 동일하게 동작합니다. [#109258](https://github.com/ClickHouse/ClickHouse/pull/109258) ([groeneai](https://github.com/groeneai)).
* `groupArrayLastMerge`의 segfault를 수정했습니다. 이제 집계 함수 상태의 역직렬화 시 유효성을 검사하므로 손상된 상태로 인해 OOB가 발생하지 않습니다. [#109485](https://github.com/ClickHouse/ClickHouse/pull/109485) ([mstetsyuk](https://github.com/mstetsyuk)).
* 역직렬화 단계에서 손상된 집계 함수 상태를 거부하도록 하여 `largestTriangleThreeBuckets` 집계 함수의 segfault를 수정했습니다. [#109492](https://github.com/ClickHouse/ClickHouse/pull/109492) ([mstetsyuk](https://github.com/mstetsyuk)).
* 요청한 ClickHouse 유형이 널 비허용 `Tuple`을 `Nullable`로 감싸는 경우(예: `Nullable(Tuple(...))`) Parquet 컬럼을 읽을 때 이전에는 `TYPE_MISMATCH`로 실패하던 문제를 수정했습니다. [#109615](https://github.com/ClickHouse/ClickHouse/pull/109615) ([groeneai](https://github.com/groeneai)).
* 이제 Parquet v3 네이티브 리더에서 물리적으로 널 허용인 구조체 컬럼(Parquet OPTIONAL 그룹)을 `Nullable(Tuple(...))`로 읽을 수 있습니다. 이전에는 `TYPE_MISMATCH`가 발생했습니다. [#109898](https://github.com/ClickHouse/ClickHouse/pull/109898) ([groeneai](https://github.com/groeneai)).
* 깊게 중첩된 `Array`/`Tuple`/`Map`/`Object` 리터럴을 복사하거나 삭제할 때 발생하는 서버 충돌(네이티브 스택 오버플로)을 수정했습니다. 예를 들어 `max_parser_depth`를 높인 상태에서 매우 깊게 중첩된 리터럴이 포함된 쿼리에서 발생할 수 있습니다. [#110393](https://github.com/ClickHouse/ClickHouse/pull/110393) ([Algunenano](https://github.com/Algunenano)).
* 메타데이터 전용 `ALTER MODIFY COLUMN T`로 `Nullable(T)`로 변경된 컬럼에서 `optimize_functions_to_subcolumns` 사용 시 발생하던 잘못된 `IS NULL` / `IS NOT NULL` / `count()` 결과를 수정했습니다. 변환 전에 작성된 파트에서는 `.null` 서브컬럼이 물리적으로 존재하는 부모 컬럼에서 파생되지 않고 스토리지 유형의 기본값(NULL)으로 채워져, 기존의 널이 아닌 행이 NULL로 잘못 보고되었습니다. [#110584](https://github.com/ClickHouse/ClickHouse/pull/110584) ([groeneai](https://github.com/groeneai)).
* `LowCardinality` 키 컬럼이 `LowCardinality`를 다시 도입하는 중첩 `CAST` 체인으로 감싸진 경우(예: `WHERE CAST(CAST(s, 'LowCardinality(String)'), 'String') < '5'`) 기본 키 인덱스 분석 중 발생하던 `LOGICAL_ERROR` ("ColumnString에서 ColumnLowCardinality로 잘못 캐스팅")를 수정했습니다. 디버그 및 새니타이저 빌드에서는 서버가 중단되고, 릴리스 빌드에서는 쿼리가 실패했습니다. [#111050](https://github.com/ClickHouse/ClickHouse/pull/111050) ([groeneai](https://github.com/groeneai)).
* 이전에는 offsets 버퍼가 너무 작다는 `INCORRECT_DATA` 오류로 거부되었던, Apache Arrow Java 19.0.0 이전 버전(Apache Spark에 번들로 포함됨)에서 생성한 빈 중첩 `Array` 또는 `Map` 컬럼이 포함된 `Arrow` 및 `ArrowStream` 데이터를 읽는 문제를 수정했습니다. [#111101](https://github.com/ClickHouse/ClickHouse/pull/111101) ([Algunenano](https://github.com/Algunenano)).
* `Tuple`, `Array`, `Map`, `Nullable` 또는 `Variant` 같은 컨테이너 컬럼 안에 중첩된 호환 가능한 집계 상태 컬럼(예: `quantileState` 및 `quantilesState(0.9)`)에 대한 집합 연산에서 발생하던 논리 오류 `Block structure mismatch`(디버그 및 새니타이저 빌드)와 `Illegal types of arguments` 오류를 수정했습니다. [#111191](https://github.com/ClickHouse/ClickHouse/pull/111191) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 네이티브 프로토콜을 통해 수신한 손상된 복제 인덱스 데이터에 대한 유효성 검사를 추가했습니다. [#112331](https://github.com/ClickHouse/ClickHouse/pull/112331) ([Avogar](https://github.com/Avogar)).
* 행 수를 변경하는 materialized view를 거쳐 파티션된 대상 테이블에 쓰는 `INSERT`에서 발생하던 삽입 중복 제거 중 범위 밖 읽기를 수정했습니다. [#112649](https://github.com/ClickHouse/ClickHouse/pull/112649) ([CheSema](https://github.com/CheSema)).
* 선언된 정밀도에 매핑되는 타입보다 물리적 타입이 더 넓은 `Parquet` `DECIMAL` 컬럼(예: 물리적으로 `INT64`로 저장된 `DECIMAL(9, 2)`)을 읽을 때 발생하던 범위 초과 쓰기 문제를 수정했습니다. 이러한 파일은 유효한 `Parquet` 파일이며 다른 작성 도구에서도 생성되지만, 리더는 선언된 정밀도를 기준으로 대상 컬럼의 크기를 정하는 반면 디코더는 물리적 너비만큼 데이터를 기록해 메모리를 손상시켰습니다. 이제 이러한 파일을 읽을 때 값이 선언된 정밀도에 맞지 않으면 손상된 데이터를 반환하는 대신 `DECIMAL_OVERFLOW`를 발생시키며, 물리적 타입 이상으로 넓은 타입 힌트를 사용하면 데이터 손실 없이 읽을 수 있습니다. [#113046](https://github.com/ClickHouse/ClickHouse/pull/113046) ([groeneai](https://github.com/groeneai)).
* `PARTITION BY (a)`, `ORDER BY (b)`, `INDEX ix (b * c) TYPE minmax`, `PROJECTION p (SELECT (b) ...)`, `CONSTRAINT c CHECK (a > 0)`, `TTL (d + INTERVAL 10 YEAR)` 또는 `DEFAULT (a + 1)`처럼 불필요한 괄호를 포함해 작성된 정의를 가진 테이블에서 `ATTACH PARTITION FROM`, `REPLACE PARTITION`, `MOVE PARTITION TO TABLE` 및 `ReplicatedMergeTree` 레플리카 추가가 `Tables have different ...`, `METADATA_MISMATCH` 또는 `INCOMPATIBLE_COLUMNS` 오류와 함께 실패하던 문제를 수정했습니다. [#114188](https://github.com/ClickHouse/ClickHouse/pull/114188) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `http_response_headers` 또는 `additional_table_filters`가 있는 설정 프로필처럼 `Map` 값을 갖는 설정이 포함된 액세스 엔터티가 ClickHouse에서 다시 읽을 수 없는 형식으로 저장되어, 재시작 후 엔터티를 영구적으로 로드할 수 없게 되는 버그를 수정했습니다. [#114620](https://github.com/ClickHouse/ClickHouse/pull/114620) ([groeneai](https://github.com/groeneai)).
* 빈 `String`이나 숫자 0처럼 원소 타입의 기본값과 같은 상수 `LowCardinality` 검색값에 대해 `has`, `indexOf`, `countEqual`, `mapContainsKey`, `mapContainsValue` 및 `Map` 첨자가 "찾을 수 없음"을 반환하던 문제를 수정했습니다. [#114624](https://github.com/ClickHouse/ClickHouse/pull/114624) ([groeneai](https://github.com/groeneai)).
* `DISTINCT`, `QUALIFY`, 윈도우 함수 또는 프로젝션의 `arrayJoin`이 포함된 쿼리에서 단순 `GROUP BY ... LIMIT` 최적화(설정 `optimize_trivial_group_by_limit_query`)가 잘못된 결과를 반환하던 문제를 수정했습니다. 이러한 요소는 집계 후 그룹을 소비하거나 필터링하므로, 집계를 `LIMIT + OFFSET`개의 키로 제한하면 행이 너무 적게 반환되거나 값이 잘못될 수 있었습니다. 이제 이 최적화는 이러한 쿼리에 적용되지 않습니다. [#114695](https://github.com/ClickHouse/ClickHouse/pull/114695) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 기본 설정인 `optimize_trivial_count_query = 1`에서 `SELECT count(arrayJoin(arr))`가 잘못된 결과를 반환하던 문제를 수정했습니다. 배열 원소 수 대신 저장된 행 수가 반환되었으며, `file()` 및 `url()`에서는 쿼리가 `0`을 반환했습니다. [#115227](https://github.com/ClickHouse/ClickHouse/pull/115227) ([groeneai](https://github.com/groeneai)).
* `Nullable` 컬럼에 대한 `uniqExact(tuple(x))`처럼 널 허용 여부를 숨기는 단사 함수로 감싼 인수에서 `uniq`, `uniqExact`, `uniqHLL12` 및 `uniqTheta`가 잘못된 결과를 반환하던 문제를 수정했습니다. `optimize_injective_functions_inside_uniq` 최적화가 래핑 함수를 제거한 후 NULL 행이 계산되지 않고 건너뛰어졌습니다. [#115466](https://github.com/ClickHouse/ClickHouse/pull/115466) ([vdimir](https://github.com/vdimir)).
* 동등한 기본 키가 불필요한 바깥쪽 괄호의 유무만 다른 경우 KeeperMap 리더가 공유 메타데이터를 허용하도록 했습니다. [#115642](https://github.com/ClickHouse/ClickHouse/pull/115642) ([skuznetsov-clickhouse](https://github.com/skuznetsov-clickhouse)).

<h3 id="text-index-and-skip-index-fixes">
  텍스트 인덱스 및 스킵 인덱스 버그 수정
</h3>

* 여러 `minmax` 스킵 인덱스와 `use_skip_indexes_for_disjunctions = 1`이 설정된 `MergeTree` 테이블에서 중첩된 `coalesce`/`ifNull` 비교(예: `WHERE coalesce(a, b, coalesce(c, d), e) = const`)를 사용하는 쿼리로 인해 서버가 중단되는 문제를 수정했습니다. 이제 `<op>(coalesce(...), const)`의 스킵 인덱스 재작성이 내부 `coalesce` 인수에도 재귀적으로 적용되므로, 인덱스별 `KeyCondition` RPN이 분기 추적 코드에서 가정하는 템플릿 RPN과 일치합니다. [#103929](https://github.com/ClickHouse/ClickHouse/pull/103929) ([groeneai](https://github.com/groeneai)).
* 25.8에서 생성되고 별도의 `ALTER TABLE ... ADD COLUMN`으로 추가된 컬럼의 스킵 인덱스를 포함하는 파트에서 `ALTER TABLE ... MATERIALIZE INDEX` 실행 시 발생하는 `NOT_FOUND_COLUMN_IN_BLOCK` 문제를 수정했습니다. 이제 강제 재계산 시 뮤테이션이 해당 파트의 기존 모든 스킵 인덱스와 프로젝션에 필요한 모든 컬럼을 올바르게 읽습니다. [#105039](https://github.com/ClickHouse/ClickHouse/pull/105039) ([groeneai](https://github.com/groeneai)).
* `use_query_condition_cache = 1`(기본값)일 때 `SELECT` 쿼리 결과가 조용히 과소 집계되는 문제를 수정했습니다. bloom-filter 스킵 인덱스가 있는 컬럼에 대해 `PREWHERE pk_prefix = X WHERE non_pk IN (...)` 형태의 쿼리를 실행하면 `pk_prefix = X` 프레디케이트의 `QueryConditionCache`가 오염되어, 이후 정상적인 `SELECT count() ... WHERE pk_prefix = X`가 부정확하게 과소 집계된 결과를 반환했습니다. 모든 26.x 릴리스에 영향을 미쳤습니다. [#105686](https://github.com/ClickHouse/ClickHouse/pull/105686) ([groeneai](https://github.com/groeneai)).
* 벡터 검색 쿼리가 벡터 인덱스 및 `minmax` 같은 다른 스킵 인덱스를 사용하고 `use_skip_indexes_on_data_read = 1`이 설정된 경우 발생하는 예외를 수정했습니다. [#106473](https://github.com/ClickHouse/ClickHouse/pull/106473) ([shankar-iyer](https://github.com/shankar-iyer)).
* 빈 병합된 파트의 텍스트 인덱스에서 발생하는 "Too many marks" 문제를 수정했습니다. [#106867](https://github.com/ClickHouse/ClickHouse/pull/106867) ([azat](https://github.com/azat)).
* `query_plan_optimize_lazy_final`이 활성화된 상태에서 텍스트 인덱스 필터와 함께 `FINAL`을 사용해 `ReplacingMergeTree` 테이블을 쿼리할 때 잘못된 결과가 반환되는 문제를 수정했습니다. 지연 실행 `FINAL` 최적화가 텍스트 인덱스의 직접 읽기를 재현하지 못하는 읽기 단계를 생성하여 필터가 일치하는 모든 행을 제거했습니다. [#106894](https://github.com/ClickHouse/ClickHouse/pull/106894) ([Ergus](https://github.com/Ergus)).
* `LowCardinality` 멤버를 포함하는 `Variant` 상수를 키 표현식이 비단조 결정론적 함수인 키 컬럼(예: `sipHash64(col)`에 대한 `minmax` 스킵 인덱스)과 비교할 때 발생하는 `LOGICAL ERROR`(`Bad cast from type DB::ColumnString to DB::ColumnLowCardinality`)를 수정했습니다. [#107111](https://github.com/ClickHouse/ClickHouse/pull/107111) ([groeneai](https://github.com/groeneai)).
* `use_skip_indexes_for_top_k` 최적화가 활성화되어 있고 정렬 컬럼에 `minmax` 스킵 인덱스가 있는 파트에서 경량 `DELETE`로 행이 제거된 경우, `ORDER BY <col> LIMIT n`이 잘못된(대개 비어 있는) 결과를 반환하는 문제를 수정했습니다. 이제 이 최적화는 경량 삭제된 파트의 오래된 minmax 값을 실제 상위 행을 보유한 파트보다 높은 순위로 지정하지 않습니다. [#107320](https://github.com/ClickHouse/ClickHouse/pull/107320) ([groeneai](https://github.com/groeneai)).
* Set 스킵 인덱스가 LowCardinality 컬럼의 그래뉼을 프루닝하지 않는 문제를 수정했습니다. [#107868](https://github.com/ClickHouse/ClickHouse/pull/107868) ([thevar1able](https://github.com/thevar1able)).
* 이제 `use_skip_indexes_on_data_read` 설정을 `compatibility` 설정을 통해 26.1 이전 기본값인 `false`로 되돌릴 수 있습니다. 이에 따라 on-data-read 경로가 `minmax`/`set`/`bloom_filter` 스킵 인덱스의 마크 범위 프루닝을 방해하는 성능 회귀를 우회할 수 있습니다. [#108330](https://github.com/ClickHouse/ClickHouse/pull/108330) ([egor-click](https://github.com/egor-click)).
* 부분적으로 구체화된 여러 텍스트 인덱스에 대한 직접 읽기 문제를 수정했습니다. [#108607](https://github.com/ClickHouse/ClickHouse/pull/108607) ([CurtizJ](https://github.com/CurtizJ)).
* 분석기를 사용해 `Distributed` 엔진 테이블을 통해 테이블을 쿼리할 때 `mapValues(map)` 또는 `mapKeys(map)`에 정의된 텍스트 인덱스가 조용히 사용되지 않던 문제를 수정했습니다. 로컬 테이블 및 `cluster()`/`remote()`를 통해서는 인덱스가 사용되었지만, `Distributed` 엔진 테이블을 통한 쿼리에서는 인덱스를 건너뛰었고(`force_data_skipping_indices` 사용 시 `INDEX_NOT_USED` 오류 발생) 문제가 발생했습니다. [#109188](https://github.com/ClickHouse/ClickHouse/pull/109188) ([groeneai](https://github.com/groeneai)).
* 필수 인덱스 인수가 생략되었을 때 `CREATE HYPOTHETICAL INDEX ... TYPE set`(및 `ngrambf_v1`/`tokenbf_v1`)에서 발생하던 서버 크래시를 수정했습니다. 이제 이러한 SQL 문은 명확한 오류와 함께 거부됩니다. [#109294](https://github.com/ClickHouse/ClickHouse/pull/109294) ([groeneai](https://github.com/groeneai)).
* 텍스트 인덱스가 있을 때 빈 검색 문자열을 사용하는 함수 `has`, `mapContainsKey`, `mapContainsValue`가 잘못된 결과를 반환하던 문제를 수정했습니다. [#110246](https://github.com/ClickHouse/ClickHouse/pull/110246) ([rschu1ze](https://github.com/rschu1ze)).
* 병합할 파트 중 하나가 비어 있을 때(예: mutation으로 해당 파트의 모든 행을 삭제한 후) 텍스트 인덱스가 있는 파트를 머지하는 과정에서 발생하던 `ATTEMPT_TO_READ_AFTER_EOF` 오류를 수정했습니다. [#112490](https://github.com/ClickHouse/ClickHouse/pull/112490) ([CurtizJ](https://github.com/CurtizJ)).
* `WHERE` 절에 점이 많은 큰 문자열 상수가 포함되고 테이블에 `bloom_filter`, `tokenbf_v1`, `ngrambf_v1` 또는 `text` 스킵 인덱스가 있을 때 발생하던 쿼리 계획 최적화 중단 문제를 수정했습니다. 필터 컬럼명을 `JSONAllPaths(...)` 인덱스 컬럼과 대조하는 과정에서 이름을 점으로 분할할 수 있는 모든 경우를 열거하여, 스킵 인덱스 조건 생성의 복잡도가 상수 길이에 대해 이차적으로 증가했습니다. [#113289](https://github.com/ClickHouse/ClickHouse/pull/113289) ([groeneai](https://github.com/groeneai)).
* 행 정책이 쿼리의 유일한 필터이고 정렬 컬럼에 `minmax` 스킵 인덱스가 있을 때 `ORDER BY ... LIMIT`가 요청한 것보다 적은 행을 반환하거나 행을 전혀 반환하지 않던 문제를 수정했습니다. top-K 최적화가 행 정책을 적용하기 전에 읽기 범위를 좁혔습니다. [#114073](https://github.com/ClickHouse/ClickHouse/pull/114073) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="data-lake-fixes">
  데이터 레이크 버그 수정
</h3>

* 외부 도구(예: Spark)로 포맷 버전이 업그레이드된 Iceberg 테이블을 읽을 때 발생하는 논리 오류 예외를 수정했습니다. [#100407](https://github.com/ClickHouse/ClickHouse/pull/100407) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* PREWHERE 최적화가 활성화된 ORC 데이터 파일이 포함된 Iceberg 테이블을 읽을 때 발생하는 예외(`LOGICAL_ERROR: 'PREWHERE passed to format that doesn't support it'`)를 수정했습니다. [#101206](https://github.com/ClickHouse/ClickHouse/pull/101206) ([groeneai](https://github.com/groeneai)).
* 동시 Iceberg 메타데이터 업데이트 또는 DeltaLake 테이블의 `merge` 읽기처럼 고정된 `datalake_table_state` 없이 읽기 파이프라인에 도달할 수 있는 경로로 `Iceberg` 또는 `DeltaLake` 데이터 레이크 테이블을 읽을 때 발생하는 `LOGICAL_ERROR` 예외를 수정했습니다. [#102033](https://github.com/ClickHouse/ClickHouse/pull/102033) ([groeneai](https://github.com/groeneai)).
* 비동기 메타데이터 로드 중 일반 데이터베이스에서 `Iceberg` 엔진 테이블을 로드할 때 `DataLakeConfiguration::getCatalog`에서 간헐적으로 발생하는 `Logical error: 'Database <name> not found'` 오류를 수정했습니다. [#103775](https://github.com/ClickHouse/ClickHouse/pull/103775) ([groeneai](https://github.com/groeneai)).
* `show_data_lake_catalogs_in_system_tables`가 활성화된 DataLake 카탈로그 데이터베이스에서 삽입 또는 DDL 문이 존재하지 않는 테이블을 참조할 때 발생하는 과도한 카탈로그/S3 메타데이터 읽기를 수정했습니다. 오타 힌트 제안 경로에서 전체 카탈로그의 모든 테이블에 대한 전체 Iceberg 메타데이터를 로드해 대규모 카탈로그에서는 메모리가 고갈될 수 있었습니다. [#104124](https://github.com/ClickHouse/ClickHouse/pull/104124) ([il9ue](https://github.com/il9ue)).
* Parquet 파일을 읽을 때 `read_bytes` 값(및 `system.query_log`, 진행률 표시줄 등에 표시되는 여기서 파생된 bytes/s)이 부풀려지는 문제를 수정했습니다. 이전 구현에서는 모든 청크에 row group의 전체 압축된 크기를 보고했으므로, N개 컬럼 중 K개를 읽을 때 `N / K`만큼 과대 계산되었습니다. 이제 선택된 컬럼에 대해서만 합산됩니다. 또한 이전에는 데이터 파일 크기를 전혀 보고하지 않았던 Iceberg 테이블의 파일 수준 진행률 추적도 수정했습니다. [#105413](https://github.com/ClickHouse/ClickHouse/pull/105413) ([groeneai](https://github.com/groeneai)).
* 설정을 사용하지 않는 다른 작성자(예: `icebergLocal`/`icebergS3` 테이블 함수)가 테이블을 업데이트한 후 `iceberg_use_version_hint = 1`을 사용해 Iceberg 테이블을 읽을 때 잘못된 결과가 반환되는 문제를 수정했습니다. 이제 파일이 존재하는 경우 모든 작성자가 `version-hint.text`를 동기화된 상태로 유지하므로, 힌트를 사용하는 후속 리더에서 최신 스냅샷을 확인할 수 있습니다. [#105682](https://github.com/ClickHouse/ClickHouse/pull/105682) ([groeneai](https://github.com/groeneai)).
* 이제 Iceberg 쓰기에서 `Nullable(T)` 파티션 컬럼의 NULL 값을 보존합니다. 이전에는 ClickHouse가 쓴 NULL이 Spark 또는 다른 Iceberg 리더에서 다시 읽힐 때 내부 유형의 기본값(`int`의 경우 `0`)으로 표시되었습니다. [#105862](https://github.com/ClickHouse/ClickHouse/pull/105862) ([groeneai](https://github.com/groeneai)).
* 단일 삭제 파일이 여러 데이터 파일을 참조하고 여러 삭제 파일이 동일한 데이터 파일에 적용될 때 `Iceberg` v2 merge-on-read 위치 삭제에서 잘못된 행이 반환되는 문제를 수정했습니다. 이제 삭제 항목은 참조하는 파일 경로를 기준으로 필터링됩니다. [#105888](https://github.com/ClickHouse/ClickHouse/pull/105888) ([groeneai](https://github.com/groeneai)).
* `DETACH` + `ATTACH` 주기 또는 서버 재시작 후 `IcebergLocal` 테이블 엔진이 읽기 전용이 되어 이후 모든 `INSERT`가 `Local object storage Local is readonly. (READONLY)` 오류와 함께 실패하는 문제를 수정했습니다. [#106016](https://github.com/ClickHouse/ClickHouse/pull/106016) ([groeneai](https://github.com/groeneai)).
* 객체 메타데이터에 blob ETag가 포함되지 않아 Azure Blob Storage(예: Azure 기반 Delta Lake 테이블)에서 파일 시스템 캐시가 자동으로 비활성화되는 문제를 수정했습니다. [#106091](https://github.com/ClickHouse/ClickHouse/pull/106091) ([thewisenerd](https://github.com/thewisenerd)).
* 메타데이터가 구성된 스토리지 위치 외부의 객체에 액세스하지 못하도록 Delta Lake 테이블에 대한 경로 유효성 검사를 추가했습니다. [#106115](https://github.com/ClickHouse/ClickHouse/pull/106115) ([scanhex12](https://github.com/scanhex12)).
* 이제 Iceberg 파티션 프루닝이 분석기에서 스칼라 서브쿼리 결과를 소스 타입과 대상 타입이 일치하는 내부 `_CAST(Const, 'TargetType')`로 래핑하는 `WHERE partition_col = (SELECT ... FROM ...)` 필터를 올바르게 처리합니다. 이전에는 이러한 필터로 인해 파티션 프루닝이 비활성화되고 전체 테이블 스캔이 수행되었습니다. [#106204](https://github.com/ClickHouse/ClickHouse/pull/106204) ([groeneai](https://github.com/groeneai)).
* 테이블이 포함된 `Iceberg` REST 카탈로그가 비어 있는 것으로 잘못 보고되던 문제를 수정했습니다. [#106301](https://github.com/ClickHouse/ClickHouse/pull/106301) ([LefterisXefteris](https://github.com/LefterisXefteris)).
* Parquet V3 네이티브 리더를 사용해 `SELECT` 목록에 없는 컬럼에 대한 `IS NOT NULL`을 포함하는 복합 `WHERE` 조건으로 Iceberg 또는 S3 테이블을 쿼리할 때 발생하던 `NOT_FOUND_COLUMN_IN_BLOCK` 예외를 수정했습니다. [#106443](https://github.com/ClickHouse/ClickHouse/pull/106443) ([tiandiwonder](https://github.com/tiandiwonder)).
* `_file` 또는 `_path` 필터로 Iceberg 테이블을 읽을 때 진행 상태가 과도하게 보고되던 문제를 수정했습니다. 이전에는 필터링 여부와 관계없이 매니페스트의 모든 파일이 `total_bytes_to_read` 진행 상태에 포함되었습니다. [#106491](https://github.com/ClickHouse/ClickHouse/pull/106491) ([PedroTadim](https://github.com/PedroTadim)).
* 쓰기 블록의 컬럼명이 최신 스키마의 필드 ID와 일치하지 않는 `Iceberg` 테이블에 삽입할 때 발생하던 서버 예외(`std::out_of_range` 논리 오류)를 수정했습니다(예: 동시 작성기가 `iceberg_metadata_staleness_ms` 기간 내에 컬럼명을 변경한 경우). 이제 삽입은 서버를 중단하는 대신 명확한 쿼리 오류와 함께 실패합니다. [#107279](https://github.com/ClickHouse/ClickHouse/pull/107279) ([groeneai](https://github.com/groeneai)).
* MsgPack, BSON, ORC, Parquet, JSON, DeltaLake, Iceberg 및 Paimon 형식에서 매우 깊게 중첩된 스키마 또는 값을 읽을 때 발생할 수 있는 서버 스택 오버플로(크래시)를 수정했습니다. 이제 이러한 깊게 중첩된 입력은 예외와 함께 거부됩니다. [#107341](https://github.com/ClickHouse/ClickHouse/pull/107341) ([Algunenano](https://github.com/Algunenano)).
* 메타데이터 버전 간에 기존 `schema-id`를 다른 스키마에 다시 바인딩하는 메타데이터가 있는 Iceberg 테이블을 읽을 때 발생하던 크래시(디버그 빌드의 `LOGICAL_ERROR`)와 잘못된 결과가 조용히 반환되는 버그(릴리스 빌드)를 수정했습니다. 이제 이러한 메타데이터는 `ICEBERG_SPECIFICATION_VIOLATION`과 함께 거부됩니다. [#107370](https://github.com/ClickHouse/ClickHouse/pull/107370) ([groeneai](https://github.com/groeneai)).
* Parquet 데이터 파일에 예약된 행 계보 컬럼(예: `_row_id`)이 포함된 Iceberg v3 테이블을 읽는 문제를 수정했습니다. 이제 네이티브 Parquet 리더는 테이블 스키마에 포함되지 않은 예약된 필드 ID에 대해 `ICEBERG_SPECIFICATION_VIOLATION`을 발생시키지 않습니다. [#107377](https://github.com/ClickHouse/ClickHouse/pull/107377) ([gregakinman](https://github.com/gregakinman)).
* 파일이 동시에 교체되는 동안 로컬 디스크 객체 스토리지 디렉터리(예: `local` 디스크의 Iceberg 테이블)를 나열할 때 발생하던 불필요한 `filesystem error: in last_write_time: No such file or directory` 예외를 수정했습니다. 이제 동시에 제거된 항목은 나열 작업을 중단하는 대신 목록에서 제외됩니다. [#107432](https://github.com/ClickHouse/ClickHouse/pull/107432) ([groeneai](https://github.com/groeneai)).
* Azure에서 Delta Lake 테이블을 읽을 때 발생하던 'Account must be specified' 오류를 수정했습니다. [#107620](https://github.com/ClickHouse/ClickHouse/pull/107620) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
* 동등 삭제 파일이 있는 Iceberg 테이블을 읽을 때 발생하는 크래시를 수정했습니다. 동등 삭제 파일의 컬럼은 널 허용인데 테이블 스키마의 해당 컬럼은 널 허용이 아니거나(또는 그 반대인 경우), 삭제 파일에서 읽은 값이 검증되지 않은 캐스트(컬럼 타입 혼동)를 통해 다른 타입의 컬럼에 삽입되어 컬럼이 손상되고 서버가 크래시될 수 있었습니다. [#109551](https://github.com/ClickHouse/ClickHouse/pull/109551) ([mstetsyuk](https://github.com/mstetsyuk)).
* 메타데이터 파일마다 decimal(또는 다른 매개변수화된 Primitive) 타입이 서로 다른 공백 형식으로 직렬화된 Iceberg 테이블을 읽을 때 발생하던 잘못된 `ICEBERG_SPECIFICATION_VIOLATION` 오류를 수정했습니다. 예를 들어 테이블 메타데이터에는 `decimal(20,0)`로, 매니페스트에는 `decimal(20, 0)`으로 직렬화된 경우입니다. 이제 사양상 동등한 이러한 타입 문자열은 공백을 무시하고 비교됩니다. [#109676](https://github.com/ClickHouse/ClickHouse/pull/109676) ([groeneai](https://github.com/groeneai)).
* 기본 정렬 순서에서 인용 처리가 필요한 컬럼(예: `@timestamp`)을 참조하는 Iceberg 테이블을 읽지 못하던 문제를 수정했습니다. 합성된 스토리지 `ORDER BY`가 이스케이프 처리되지 않은 컬럼명으로 구성되어 `SYNTAX_ERROR`와 함께 구문 분석에 실패했기 때문에 이러한 테이블을 읽을 수 없었습니다. [#110233](https://github.com/ClickHouse/ClickHouse/pull/110233) ([groeneai](https://github.com/groeneai)).
* 널 허용 `ARRAY` 또는 `MAP` 컬럼을 포함하는 Paimon 테이블을 읽지 못하던 문제를 수정했습니다. 스키마 매퍼가 복합 타입을 ClickHouse에서 허용하지 않는 `Nullable`로 감쌌기 때문에 이러한 테이블은 전혀 읽을 수 없었고, `DESC`와 `SELECT` 모두 `Nested type Array(Nullable(Int32)) cannot be inside Nullable type` 오류로 실패했습니다. 이제 널 허용 복합 컬럼은 `Nullable`이 아닌 복합 타입에 매핑되며, `NULL` 값은 빈 값으로 읽습니다. [#113450](https://github.com/ClickHouse/ClickHouse/pull/113450) ([groeneai](https://github.com/groeneai)).
* 테이블 파일을 쓰기 전에 catalog에 Iceberg 네임스페이스를 등록하도록 했습니다(SeaweedFS에 필요). [#114285](https://github.com/ClickHouse/ClickHouse/pull/114285) ([azat](https://github.com/azat)).

<h3 id="s3-azure-object-storage-fixes">
  S3/Azure/객체 스토리지 수정 사항
</h3>

* 병렬 레플리카가 활성화된 쿼리에서 `url`, `s3` 또는 유사한 테이블 함수를 사용할 때 발생하는 "Distributed task iterator is not initialized" 예외를 수정했습니다. [#100146](https://github.com/ClickHouse/ClickHouse/pull/100146) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 플래너가 `recursive_with` 플래그가 설정되어 있지만 `WITH` 표현식이 없는 `SELECT`를 생성할 때 클러스터 테이블 함수(`s3Cluster`, `urlCluster`, `fileCluster`, ...)에서 발생할 수 있는 서버 segfault를 수정했습니다. [#105433](https://github.com/ClickHouse/ClickHouse/pull/105433) ([groeneai](https://github.com/groeneai)).
* `IN (subquery)` 프레디케이트의 `Parquet` 및 `ORC` 필터 푸시다운을 수정하여 `file`, `url`, `s3` 및 객체 스토리지 읽기에서 행 그룹/페이지/bloom 필터 프루닝이 작동하도록 했습니다. [#105863](https://github.com/ClickHouse/ClickHouse/pull/105863) ([arsenmuk](https://github.com/arsenmuk)).
* 목록 조회와 읽기 사이에 원격 S3 객체가 더 짧은 콘텐츠로 덮어써질 때 캐시 사전 다운로드 중 발생하는 `LOGICAL_ERROR` 예외를 수정했습니다. [#106375](https://github.com/ClickHouse/ClickHouse/pull/106375) ([fm4v](https://github.com/fm4v)).
* `s3` 테이블 함수가 소문자로 지정된 위치 기반 `partition_strategy`(예: `hive`)를 자동으로 무시하던 문제를 수정했습니다. [#107297](https://github.com/ClickHouse/ClickHouse/pull/107297) ([jkartseva](https://github.com/jkartseva)).
* `compatibility = '26.6'` 설정(`hive` 파티션 전략을 암시적으로 활성화함) 시 `BAD_ARGUMENTS`를 발생시키는 대신 S3 및 객체 스토리지 테이블 경로의 `{_partition_id}`를 자동으로 허용하던 회귀를 수정했습니다. [#107437](https://github.com/ClickHouse/ClickHouse/pull/107437) ([LefterisXefteris](https://github.com/LefterisXefteris)).
* 키-값 인수가 중복될 때 `s3` 및 기타 객체 스토리지 테이블 함수가 `BAD_ARGUMENTS` 대신 `LOGICAL_ERROR`를 발생시키던 문제를 수정했습니다. 예: `s3('http://...', format = 'CSV', format = 'TSV')`. [#107670](https://github.com/ClickHouse/ClickHouse/pull/107670) ([groeneai](https://github.com/groeneai)).
* `s3`/`gcs` 테이블 함수의 위치 기반 시크릿 인수 형식과 이름 지정 시크릿 인수 형식을 혼용한 잘못된 쿼리를 포맷할 때 발생하는 서버 예외(`Logical error: 'index >= result.start'`)를 수정했습니다. 예: `s3('url', 'a', 'b', secret_access_key = 'c')`. [#107818](https://github.com/ClickHouse/ClickHouse/pull/107818) ([groeneai](https://github.com/groeneai)).
* URL 범위의 `<s3>` 엔드포인트 블록이 최상위 `<s3>` 기본값보다 우선하도록 S3 설정의 우선순위를 수정했습니다. [#109251](https://github.com/ClickHouse/ClickHouse/pull/109251) ([bharatnc](https://github.com/bharatnc)).
* Azure 서비스에서 발생하는 `411 Length Required` 오류를 수정했습니다. 이제 Poco 기반 Azure HTTP 전송은 헤더를 직접 설정하지 않는 SDK 클라이언트(예: Azure Key Vault)의 요청 본문을 기반으로 `Content-Length`를 설정합니다. [#110299](https://github.com/ClickHouse/ClickHouse/pull/110299) ([thevar1able](https://github.com/thevar1able)).

<h3 id="s3queue-fixes">
  S3Queue 수정 사항
</h3>

* 배치에 처리할 수 없는 파일이 포함되어 있고, 동시에 배치를 처리 중으로 설정하는 Keeper 요청이 실패할 때 `enable_hash_ring_filtering = 1`을 사용하는 `S3Queue`/`AzureQueue`에서 발생하던 서버 크래시(범위를 벗어난 접근) 문제를 수정했습니다. [#108977](https://github.com/ClickHouse/ClickHouse/pull/108977) ([groeneai](https://github.com/groeneai)).
* `SHOW CREATE`, `system.query_log`, 서버 로그 및 `EXPLAIN` 출력에서 자격 증명이 노출되는 문제를 수정했습니다. 이제 모든 `S3` 로케이터 형식에서 `session_token`, Google ADC 시크릿, 모든 인수 위치의 `extra_credentials`/`headers` 값, 중복되거나 표현식으로 구성된 시크릿 키, 잘못된 위치 기반 형식(안전하게 차단됨), S3 URL에 포함된 자격 증명이 마스킹됩니다. 이는 명시적 URL 및 명명된 컬렉션을 사용하는 `s3`/`s3Cluster` 테이블 함수, S3 기반 테이블 엔진(`S3`, `GCS`, 데이터 레이크 엔진, `S3Queue`), `S3` 데이터베이스 엔진, `BACKUP ... TO S3`, `Backup` 데이터베이스 엔진에 적용됩니다. 또한 표현식으로 구성된(SQL UDF에서 인라인된 경우 포함) `encrypt`/`decrypt`/HMAC의 시크릿 인수는 이제 프로젝션 이름, `EXPLAIN QUERY TREE`, `EXPLAIN actions`에서 숨겨집니다. [#109768](https://github.com/ClickHouse/ClickHouse/pull/109768) ([Algunenano](https://github.com/Algunenano)).
* 영구 처리 노드를 사용하는 `S3Queue`/`AzureQueue`의 ordered mode를 수정했습니다. 이제 스트리밍 중에 버킷 잠금이 갱신되므로 TTL 정리(`persistent_processing_node_ttl_seconds`)가 활성 프로세서의 잠금을 제거하지 않습니다. 잠금 소유권이 상실되더라도 이를 감지하고 보고하며(논리 오류 및 `ObjectStorageQueueBucketLockLostOwnership` 프로필 이벤트), 스트리밍은 새 파일 이터레이터로 복구됩니다. [#110292](https://github.com/ClickHouse/ClickHouse/pull/110292) ([kssenii](https://github.com/kssenii)).

<h3 id="security-and-access-control-fixes">
  보안 및 액세스 제어 관련 수정
</h3>

* HTTP 또는 native protocol을 통해 `ENGINE` 절 없이 `CREATE TABLE ... TO INNER UUID '...'`를 전송할 때 `CREATE TABLE` 권한이 있는 모든 사용자가 유발할 수 있는 서버 크래시(SIGSEGV)를 수정했습니다. 동일한 버그로 클라이언트도 크래시될 수 있었습니다. 이제 파서는 null 포인터를 역참조하는 대신 적절한 `BAD_ARGUMENTS` 오류를 보고합니다. [#105579](https://github.com/ClickHouse/ClickHouse/pull/105579) ([groeneai](https://github.com/groeneai)).
* `allow_experimental_delta_kernel_rs`를 활성화한 상태에서 잘못된 바이트가 포함된 자격 증명 또는 옵션으로 DeltaLake 테이블을 쿼리할 때 발생하던 서버 크래시를 수정했습니다(Rust FFI가 `extern "C"` 경계를 넘어 패닉을 일으켰습니다). [#106109](https://github.com/ClickHouse/ClickHouse/pull/106109) ([Algunenano](https://github.com/Algunenano)).
* Arrow IPC 포맷 리더(`ArrowColumnToCHColumn`)에서 발생하는 여러 힙 범위 밖 읽기를 수정했습니다. 잘못된 형식의 Arrow 파일은 버퍼에 포함된 행 수보다 많은 행을 선언하거나, 부모와 일관되지 않은 list/struct/map 하위 요소 길이를 선언하거나, 단조 증가하지 않는 list 오프셋을 제공하거나, 하위 유효성 비트맵을 잘라낼 수 있어 힙 할당 영역의 끝을 넘어 읽기가 발생할 수 있었습니다. 이는 `file()`, `format()`, 테이블 함수 또는 ArrowFlight 입력을 통해 `SELECT` 권한이 있는 모든 사용자가 유발할 수 있습니다. 이제 원시 포인터에 접근하기 전에 모든 데이터, 오프셋, view-struct 및 유효성 비트맵 버퍼를 검증하며, list/struct/map 형태와 오프셋의 일관성도 확인합니다. [#106395](https://github.com/ClickHouse/ClickHouse/pull/106395) ([Algunenano](https://github.com/Algunenano)).
* `system.query_log`의 `used_privileges` 및 `missing_privileges` 컬럼에 다른 사용자, 데이터베이스 또는 세션의 무관한 이전 쿼리에서 유출된 권한 문자열이 포함될 수 있던 버그를 수정했습니다. [#106425](https://github.com/ClickHouse/ClickHouse/pull/106425) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 단일 `SELECT` 권한이 있는 모든 사용자가 유발할 수 있는, 확장되는 HTML 엔터티 `&nGt;` 또는 `&nLt;`를 포함한 문자열을 디코딩할 때 `decodeHTMLComponent`에서 발생하던 힙 버퍼 오버플로(서버 크래시)를 수정했습니다. [#106741](https://github.com/ClickHouse/ClickHouse/pull/106741) ([Algunenano](https://github.com/Algunenano)).
* 즉석 뮤테이션(`apply_mutations_on_fly`) 또는 패치 파트가 `PREWHERE` 전에 행을 필터링할 때 쿼리 조건 캐시로 인해 잘못된 쿼리 결과가 발생하던 문제를 수정했습니다. `apply_mutations_on_fly = 1`로 읽는 쿼리는 캐시를 오염시켜, 이후 `apply_mutations_on_fly = 0`에서 동일한 프레디케이트를 사용하는 쿼리가 읽어야 할 마크를 건너뛰고 너무 적은 행을 반환할 수 있었습니다. 이번 수정은 `PREWHERE` 앞에 필터로 추가되는 행 수준 보안 정책도 처리합니다. 제한적인 행 정책에서 실행된 쿼리는 해당 정책 없이 동일한 프레디케이트를 사용하는 이후 쿼리의 캐시를 오염시킬 수 있었습니다. [#107145](https://github.com/ClickHouse/ClickHouse/pull/107145) ([groeneai](https://github.com/groeneai)).
* 단일 `SELECT` 권한이 있는 모든 사용자가 유발할 수 있는, 범위를 벗어난 이벤트 유형으로 조작된 집계 함수 상태를 마무리할 때 `windowFunnel`에서 발생하던 힙 버퍼 오버플로(서버 크래시)를 수정했습니다. [#107412](https://github.com/ClickHouse/ClickHouse/pull/107412) ([uwezkhan](https://github.com/uwezkhan)).
* 비동기 삽입 플러시 경로(`async_insert = 1`)에서 `currentUser()`, `user()`, `SESSION_USER`, `authenticatedUser()`가 빈 문자열로 평가되던 문제를 수정했습니다. 이 문제는 이러한 함수를 참조하는 `DEFAULT`/`MATERIALIZED` 컬럼 표현식과 materialized view에 영향을 주었으며, 삽입한 사용자 대신 빈 문자열이 아무런 알림 없이 저장되었습니다. [#107541](https://github.com/ClickHouse/ClickHouse/pull/107541) ([groeneai](https://github.com/groeneai)).
* 동일한 사용자 또는 역할에 여러 쿼터가 할당된 경우, 이제 비결정적으로 선택된 하나의 쿼터만 적용하는 대신 모든 쿼터를 함께 적용합니다(하나라도 초과하면 쿼리가 거부됨). 이제 `SHOW QUOTA` 및 `system.quota_usage`는 현재 사용자에게 적용되는 모든 쿼터를 표시합니다. [#107664](https://github.com/ClickHouse/ClickHouse/pull/107664) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 이제 `SYSTEM RESET DDL WORKER`를 실행하려면 새 `SYSTEM RESET DDL WORKER` 권한이 필요합니다. 이전에는 인증된 모든 사용자(`readonly` 사용자 포함)가 이를 실행해 DDL worker 상태를 반복적으로 재설정하고 `ON CLUSTER` DDL을 차단할 수 있었습니다. [#108460](https://github.com/ClickHouse/ClickHouse/pull/108460) ([groeneai](https://github.com/groeneai)).
* 단일 `*` 와일드카드가 정확히 하나의 이름 구성 요소와만 일치하도록 `ssl_certificate` 사용자 식별 방식을 수정했습니다(RFC 6125 6.4.3). 이전에는 `CN` 또는 `DNS:` SAN 주체의 와일드카드(예: `*.corp.example.com`)가 `evil.deep.corp.example.com`과 같은 다중 레이블 이름에도 일치하여, 더 깊은 하위 도메인용 인증서 보유자가 와일드카드 사용자로 인증할 수 있었습니다. `URI:` SAN 일치 방식은 변경되지 않았습니다. [#108472](https://github.com/ClickHouse/ClickHouse/pull/108472) ([groeneai](https://github.com/groeneai)).
* 이제 MySQL wire 프로토콜 명령 `COM_FIELD_LIST` (`mysql_list_fields`) 및 `COM_INIT_DB` (`USE database`)에도 SQL 대응식(`SHOW COLUMNS`/`DESCRIBE` 및 `USE`)과 동일한 액세스 제어가 적용됩니다. 이전에는 사용자가 일부 컬럼에 대한 권한만 가진 테이블의 컬럼명을 노출하거나, `SHOW DATABASES` 권한 없이 현재 데이터베이스를 전환할 수 있었습니다. [#108508](https://github.com/ClickHouse/ClickHouse/pull/108508) ([groeneai](https://github.com/groeneai)).
* `http_forbid_headers`를 대소문자 구분 없이 일치하도록 수정했습니다. HTTP header 이름은 대소문자를 구분하지 않으므로, 이제 `Authorization`을 금지하면 `authorization`, `AUTHORIZATION` 및 기타 대소문자 변형도 차단됩니다. 구성된 `header_regexp` 패턴도 명시적인 `(?i)` 플래그 없이 대소문자 구분 없이 일치합니다. [#108509](https://github.com/ClickHouse/ClickHouse/pull/108509) ([groeneai](https://github.com/groeneai)).
* `DESCRIBE loop('db', 'table')` 및 `DESCRIBE loop(<inner table function>)`가 `SHOW COLUMNS` / 소스 액세스 검사를 우회하여 권한이 없는 사용자가 테이블의 컬럼 스키마를 읽을 수 있었던 메타데이터 노출 문제를 수정했습니다. [#108624](https://github.com/ClickHouse/ClickHouse/pull/108624) ([groeneai](https://github.com/groeneai)).
* 이전 버전(25.12 이하)에서 잘못된 형식의 `auth_header`를 사용해 생성한 `DataLakeCatalog` 데이터베이스가 26.2 이상으로 업그레이드한 후 ATTACH되지 않아 서버 시작이 실패하던 문제를 수정했습니다. 이제 `auth_header`는 `CREATE` 시에만 검증되며, `ATTACH` 시에는 시작 과정이 아니라 처음 사용할 때 카탈로그가 지연 생성됩니다. 따라서 잘못 구성되었거나 연결할 수 없는 카탈로그 데이터베이스 하나가 더 이상 서버 시작을 차단하지 않습니다. [#108674](https://github.com/ClickHouse/ClickHouse/pull/108674) ([groeneai](https://github.com/groeneai)).
* 악의적으로 큰 AMQP 프레임으로부터 RabbitMQ 연결을 보호하도록 강화하고, `remote_url_allow_hosts` 검사를 `rabbitmq_address`에 일관되게 적용했습니다. [#112479](https://github.com/ClickHouse/ClickHouse/pull/112479) ([kssenii](https://github.com/kssenii)).
* 컬럼 목록 없이 실행한 `CREATE TABLE ... ENGINE = Distributed(...)`가 생성 사용자가 볼 권한이 없는 로컬 테이블의 구조를 노출할 수 있었던 문제를 수정했습니다. `CREATE`의 경우 로컬 서버가 자체적으로 실행하므로, 이제 구조는 사용자 컨텍스트에서 추론되며 `Remote` engine에서와 마찬가지로 대상 테이블에 대한 `SHOW COLUMNS` 권한이 필요합니다. DDL queue에서 재실행되는 `CREATE`(`ON CLUSTER` 또는 `Replicated` 데이터베이스 내의 `CREATE`)에는 적용되지 않습니다. [#113220](https://github.com/ClickHouse/ClickHouse/pull/113220) ([groeneai](https://github.com/groeneai)).
* 컬럼 목록 없이 `CREATE TABLE ... ENGINE = Buffer(...)`를 사용할 때, 생성 작업을 수행한 사용자에게 열람 권한이 없는 대상 테이블의 구조가 노출될 수 있던 문제를 수정했습니다. 로컬 서버에서 직접 실행되는 `CREATE`는 이제 해당 사용자의 Context에서 구조를 추론하므로, `Merge` 및 `Remote`와 마찬가지로 대상 테이블에 대한 `SHOW COLUMNS` 권한이 필요합니다. DDL 큐(`ON CLUSTER` 또는 `Replicated` 데이터베이스 내)에서 재실행된 `CREATE`에는 적용되지 않습니다. [#113372](https://github.com/ClickHouse/ClickHouse/pull/113372) ([groeneai](https://github.com/groeneai)).
* authentication 전에 읽히는 PostgreSQL wire 프로토콜 시작 메시지의 크기를 제한했습니다. [#115708](https://github.com/ClickHouse/ClickHouse/pull/115708) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="backup-and-restore-fixes">
  Backup 및 복원 수정 사항
</h3>

* 순환 종속성이 있는 테이블을 포함한 백업을 `RESTORE`하는 동안 서버가 비정상 종료되는 문제를 수정했습니다. [#103824](https://github.com/ClickHouse/ClickHouse/pull/103824) ([thevar1able](https://github.com/thevar1able)).
* `S3` 디스크 및 객체 스토리지에서 멀티파트 업로드를 통해 기록된 객체에 S3 스토리지 클래스(`s3_storage_class` / `s3_storage_class_name`)가 적용되지 않아 대용량 객체가 기본 `STANDARD` 클래스로 생성되던 문제를 수정했습니다. 이제 디스크, 객체 스토리지 및 백업에서 `s3_storage_class`와 `s3_storage_class_name`을 모두 옵션 이름으로 사용할 수 있습니다. [#106214](https://github.com/ClickHouse/ClickHouse/pull/106214) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `SYSTEM RELOAD CONFIG`가 엔드포인트별 Azure Blob Storage 설정(예: `use_native_copy`)을 삭제하여 서버를 재시작할 때까지 디스크에 구성된 설정이 `BACKUP`/`RESTORE`에서 무시되던 문제를 수정했습니다. [#106357](https://github.com/ClickHouse/ClickHouse/pull/106357) ([jkartseva](https://github.com/jkartseva)).
* 백업을 시작한 레플리카에 materialized view가 아직 생성되지 않은 Replicated 또는 Shared 데이터베이스에서 갱신 가능 구체화 뷰의 REPLACE 대상이 수집될 때 백업이 FILE\_DOESNT\_EXIST 오류로 실패하던 문제를 수정했습니다. [#106411](https://github.com/ClickHouse/ClickHouse/pull/106411) ([jkartseva](https://github.com/jkartseva)).
* 레거시 형식의 `azure_blob_storage` 디스크에서 Azure BACKUP/RESTORE가 엔드포인트 설정을 무시하던 문제를 수정했습니다. [#106784](https://github.com/ClickHouse/ClickHouse/pull/106784) ([jkartseva](https://github.com/jkartseva)).
* `AzureBlobStorage`로 수행하는 `BACKUP`을 수정했습니다. 백업 내 데이터 파일을 복사할 때 대상 객체가 백업 디렉터리 외부에 기록되던 문제를 해결했습니다. 이제 `S3` 대상의 백업 객체 존재 여부 확인은 접두사 목록 대신 정확한 `HeadObject` 요청을 사용하여 유사한 접두사를 가진 키가 잘못 일치하는 문제를 방지합니다. [#107153](https://github.com/ClickHouse/ClickHouse/pull/107153) ([pamarcos](https://github.com/pamarcos)).
* 증분 백업은 더 이상 `.backup` 메타데이터 파일의 `<base_backup>` 위치 지정자에 `S3` 자격 증명을 저장하지 않습니다. `use_same_s3_credentials_for_base_backup = 1`로 생성되었거나 이 백업 위치 지정자와 일치하는 명시적 기준 백업 자격 증명으로 생성된 백업은 비밀 정보가 없는 마커를 저장하며, 복원 시 추가 설정 없이 복원됩니다. 서로 다른 명시적 기준 백업 자격 증명 또는 추가 기준 인증 인수로 생성된 백업은 `base_backup` 설정을 사용하여 이를 `RESTORE`에 전달하십시오. 포함된 자격 증명으로 이전 버전에서 생성된 백업도 계속 복원할 수 있습니다. [#107357](https://github.com/ClickHouse/ClickHouse/pull/107357) ([pamarcos](https://github.com/pamarcos)).
* `ReplicatedMergeTree` 테이블의 `RESTORE`에서 백업의 중복 콘텐츠 파트가 자동으로 중복 제거되지 않고 유지되도록 수정했습니다. [#107652](https://github.com/ClickHouse/ClickHouse/pull/107652) ([pamarcos](https://github.com/pamarcos)).
* 명시적인 `partition_strategy`가 없는 파일형 엔진(`S3`, `AzureBlobStorage`, `URL` 등)의 경로에 `{_partition_id}` 플레이스홀더가 있으면 `file_like_engine_default_partition_strategy`와 관계없이 다시 `wildcard` 전략으로 간주됩니다. 이로써 `BAD_ARGUMENTS`("Partition strategy hive can not be used with a '\_partition\_id' wildcard in the path") 오류와 함께 실패하기 시작한 26.6 이전 DDL의 이전 버전과의 호환성을 복원합니다. [#111279](https://github.com/ClickHouse/ClickHouse/pull/111279) ([fm4v](https://github.com/fm4v)).

<h3 id="clickhouse-keeper-fixes">
  ClickHouse Keeper 수정 사항
</h3>

* 쓰기 실패 후 `Keeper` 스냅샷 정리 문제를 수정했습니다. 이제 부분 스냅샷이 안전하게 정리되며, `latest_snapshot_meta`를 갱신하지 않고 실패한 쓰기를 재시도할 수 있습니다. [#105779](https://github.com/ClickHouse/ClickHouse/pull/105779) ([antonio2368](https://github.com/antonio2368)).
* 새 요청 디스패처의 응답 큐가 응답 스레드 시작 전에 가득 찰 때 팔로워 동기화 과정에서 발생하던 `Keeper` 오류를 수정했습니다. [#106049](https://github.com/ClickHouse/ClickHouse/pull/106049) ([antonio2368](https://github.com/antonio2368)).
* `nuraft_max_log_gap_in_stream` 설정을 기본값이 아닌 값으로 지정했을 때 Keeper가 시작 중 간헐적으로 멈추는 문제를 수정했습니다(기본값은 0이며, 즉 append\_entries 요청의 파이프라이닝을 비활성화합니다). [#106220](https://github.com/ClickHouse/ClickHouse/pull/106220) ([al13n321](https://github.com/al13n321)).
* Keeper의 내부 Raft TLS가 이제 `openSSL.client.verificationMode` 설정을 따릅니다. 이전에는 이 설정과 관계없이 Keeper 간 Raft 통신에서 피어 인증서 검증이 항상 활성화되어 `none` 설정이 무시되었습니다. 이제 `none`은 Raft 피어 인증서 검증을 명시적으로 비활성화하며, 설정을 지정하지 않으면 기존의 기본 보안 동작이 유지됩니다. `none`을 명시적으로 설정한 구성에서는 업그레이드 후 설정 의도에 따라 Raft 피어 인증서 검증이 중단됩니다. [#106726](https://github.com/ClickHouse/ClickHouse/pull/106726) ([antonio2368](https://github.com/antonio2368)).
* 구성 다시 로드 시 ZooKeeper 세션이 불필요하게 재생성되는 문제를 수정했습니다. [#107096](https://github.com/ClickHouse/ClickHouse/pull/107096) ([azat](https://github.com/azat)).
* 오래되었거나 중복된 스냅샷을 설치한 후 `last_snapshot`(및 `mntr`의 `zk_latest_snapshot_size`)으로 보고되는 스냅샷 메타데이터가 이전 값으로 되돌아갈 수 있던 ClickHouse Keeper 버그를 수정했습니다. 이 문제로 인해 동일한 인덱스의 로컬 스냅샷이 피어로 스트리밍되거나 S3에 업로드되는 동안 등록된 스냅샷 파일을 제자리에서 덮어쓸 수도 있었습니다. [#107321](https://github.com/ClickHouse/ClickHouse/pull/107321) ([antonio2368](https://github.com/antonio2368)).
* 부적절한 시점에 ZooKeeper 연결이 끊어질 경우 갱신 가능 구체화 뷰가 멈추는 문제를 수정했습니다. [#108234](https://github.com/ClickHouse/ClickHouse/pull/108234) ([al13n321](https://github.com/al13n321)).
* 파티션에 쿼리 매개변수를 사용하는 뮤테이션(`ALTER TABLE ... UPDATE/DELETE ... IN PARTITION {param:Type}`) 문제를 수정했습니다. 대체된 파티션 값이 다시 파싱할 수 없는 형식으로 뮤테이션 항목에 직렬화되어 테이블을 로드할 수 없었습니다(복제된 테이블의 경우 모든 레플리카에서 발생). 이제 뮤테이션 명령어는 ZooKeeper 또는 디스크에 기록되기 전에 다시 파싱할 수 있는지도 검증하므로, 유사한 불일치가 발생하면 테이블이 손상되는 대신 `ALTER` 쿼리가 실패합니다. [#111518](https://github.com/ClickHouse/ClickHouse/pull/111518) ([al13n321](https://github.com/al13n321)).
* `system.zookeeper_info`의 데이터를 파싱하는 동안 발생하는 숫자 오버플로우를 수정했습니다. [#111629](https://github.com/ClickHouse/ClickHouse/pull/111629) ([kssenii](https://github.com/kssenii)).

<h3 id="crash-and-stability-fixes">
  크래시 및 안정성 관련 수정
</h3>

* 새 분석기에서 상수 컬럼과 함께 `LIMIT BY`, `DISTINCT`, `ORDER BY`를 사용할 때 발생하는 NOT\_FOUND\_COLUMN\_IN\_BLOCK 예외를 수정했습니다. [#93195](https://github.com/ClickHouse/ClickHouse/pull/93195) ([ashrithb](https://github.com/ashrithb)).
* Hive Metastore와 통신하는 중 발생하는 TTransportException 오류를 처리하기 위해 자동 재시도 메커니즘과 재연결 로직을 추가하여 HiveCatalog 연결 안정성을 개선했습니다. [#98471](https://github.com/ClickHouse/ClickHouse/pull/98471) ([otselnik](https://github.com/otselnik)).
* 정적으로 도달할 수 없는 분기에서 분석 단계에 더 이상 예외가 발생하지 않도록 short-circuit 함수(`if`, `multiIf`, `and`, `or` 등)의 분석기 단계 상수 폴딩을 수정했습니다. 예를 들어 이제 `WITH 0 AS n SELECT multiIf(n = 0, 0, intDiv(100, n))`는 0으로 나누기 오류로 실패하지 않고 올바르게 `0`을 반환합니다. [#103157](https://github.com/ClickHouse/ClickHouse/pull/103157) ([fastio](https://github.com/fastio)).
* 자체 상태를 반환하는 집계 함수에 `runningAccumulate`를 호출할 때 발생하던 서버 종료 문제를 수정했습니다. [#105085](https://github.com/ClickHouse/ClickHouse/pull/105085) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* `system.server_settings`에서 보고하는 값과 일치하도록, 런타임에 변경 가능한 서버 설정(`max_server_memory_usage`, `mark_cache_size`, `max_concurrent_queries`, 스레드 풀 크기 등)의 현재 유효 값을 반환하도록 `getServerSetting`을 수정했습니다. [#105172](https://github.com/ClickHouse/ClickHouse/pull/105172) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 분석기가 활성화된 상태에서 `ORDER BY ... WITH FILL INTERPOLATE`와 `LIMIT N BY`를 함께 사용할 때 발생하는 `NOT_FOUND_COLUMN_IN_BLOCK` 예외를 수정했습니다. [#105481](https://github.com/ClickHouse/ClickHouse/pull/105481) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* 본문이 상관 하위 쿼리인 `MATERIALIZED` CTE를 `IN`의 오른쪽 피연산자로 사용할 때 발생하는 서버 예외(`Trying to execute PLACEHOLDER action` 논리 오류)를 수정했습니다. 이제 이러한 CTE는 분석 단계에서 거부되며, CTE를 `FROM`에서 직접 참조할 때 동일한 패턴이 이미 거부되는 방식과 일치합니다. [#105518](https://github.com/ClickHouse/ClickHouse/pull/105518) ([groeneai](https://github.com/groeneai)).
* `variant_throw_on_type_mismatch/dynamic_throw_on_type_mismatch=false`가 함수 실행 중 예외를 포착하지 못하던 문제를 수정했습니다. [#105543](https://github.com/ClickHouse/ClickHouse/pull/105543) ([Avogar](https://github.com/Avogar)).
* TTL 표현식이 하위 컬럼을 참조할 때 발생하는 NOT\_FOUND\_COLUMN\_IN\_BLOCK 예외를 수정했습니다. [#105578](https://github.com/ClickHouse/ClickHouse/pull/105578) ([Avogar](https://github.com/Avogar)).
* PostgreSQL 테이블 함수, PostgreSQL 테이블 엔진 또는 PostgreSQL 소스를 사용하는 딕셔너리를 통해 PostgreSQL에서 읽는 쿼리가 취소되고(예: KILL QUERY 사용), 원격 PostgreSQL 쿼리 취소에 실패할 때 발생할 수 있던 서버 크래시를 수정했습니다. [#105949](https://github.com/ClickHouse/ClickHouse/pull/105949) ([rorylshanks](https://github.com/rorylshanks)).
* 쿼리에 포함되어 전송된 지나치게 큰 문자열 리터럴로 인해 발생할 수 있던 크래시를 수정했습니다. [#105996](https://github.com/ClickHouse/ClickHouse/pull/105996) ([nickitat](https://github.com/nickitat)).
* `ORDER BY`에서 정렬 접두사와 `use_with_fill_by_sorting_prefix`가 활성화된 상태로 빈 `INTERPOLATE ()`를 사용할 때 발생하는 `INVALID_WITH_FILL_EXPRESSION` 예외를 수정했습니다. 이제 정렬 접두사 컬럼은 암시적 보간 대상에서 올바르게 제외되며, 이름을 명시한 `INTERPOLATE (col)`의 동작과 일치합니다. [#106001](https://github.com/ClickHouse/ClickHouse/pull/106001) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* 이제 `RowBinary` 입력 또는 쿼리 매개변수에서 형식이 잘못된 `AggregateFunction(uniqTheta, ...)` 상태는 서버를 종료하는 대신 `CORRUPTED_DATA`로 거부됩니다. [#106260](https://github.com/ClickHouse/ClickHouse/pull/106260) ([groeneai](https://github.com/groeneai)).
* 제약 조건 기반 최적화(`optimize_using_constraints`)를 연관 서브쿼리와 함께 사용할 때 발생하는 크래시와 `NOT_FOUND_COLUMN_IN_BLOCK` 오류 가능성을 수정했습니다. [#106349](https://github.com/ClickHouse/ClickHouse/pull/106349) ([Algunenano](https://github.com/Algunenano)).
* 동일한 표현식으로 확장되는 ALIAS 컬럼이 2개 이상(예: 둘 다 `toString(x)`로 정의됨) 있는 `Distributed` 테이블을 `ORDER BY` 절과 함께 쿼리하거나, 동일한 표현식을 ALIAS 컬럼 참조와 SELECT 목록에 직접 모두 작성할 때 발생하는 `NUMBER_OF_COLUMNS_DOESNT_MATCH` 예외를 수정했습니다. [#106404](https://github.com/ClickHouse/ClickHouse/pull/106404) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy)).
* `multiIf` 내의 애스터리스크를 테이블 함수의 인수로 전달하는 쿼리(예: `numbers(multiIf(*, ...), 2)`)에서 발생하던 `LOGICAL_ERROR` "컬럼이 아닌 항목의 이름을 가져오려고 합니다: `ExpressionList`"를 수정했습니다. 이제 쿼리는 확인할 수 없는 매처를 `UNSUPPORTED_METHOD`로 거부합니다. [#106647](https://github.com/ClickHouse/ClickHouse/pull/106647) ([groeneai](https://github.com/groeneai)).
* 디렉터리 목록 조회 시 무한 재귀를 유발할 수 있는 비정상적인 `file` 글롭 패턴을 거부합니다. 이제 최대 재귀 깊이가 1000으로 제한되며, 이를 초과하는 쿼리는 스택 오버플로우로 서버를 중단시키는 대신 `TOO_DEEP_RECURSION`을 발생시킵니다. [#106676](https://github.com/ClickHouse/ClickHouse/pull/106676) ([groeneai](https://github.com/groeneai)).
* 쿼리에서 두 곳 이상에서 참조되는 구체화되지 않은 CTE로 테이블 함수 `input`을 감쌀 때 발생하던 `'Trying to read from input() twice.'` 예외를 수정했습니다. 이제 쿼리는 계획 수립 시점에 명확한 `INVALID_USAGE_OF_INPUT` 오류로 거부됩니다. `input`은 일회성 클라이언트 스트림이므로 쿼리 계획에서 단일 소스만 사용할 수 있습니다. [#106682](https://github.com/ClickHouse/ClickHouse/pull/106682) ([groeneai](https://github.com/groeneai)).
* 파싱 중 예외(예: MEMORY\_LIMIT\_EXCEEDED)가 발생할 때 일관되지 않은 컬럼이 생성되어 이후 LOGICAL\_ERROR를 유발하는 문제를 수정했습니다. [#106802](https://github.com/ClickHouse/ClickHouse/pull/106802) ([azat](https://github.com/azat)).
* `input_format_allow_errors_num > 0`으로 잘린 Protobuf 데이터를 읽을 때 발생하는 서버 크래시(SIGSEGV)를 수정했습니다. [#106905](https://github.com/ClickHouse/ClickHouse/pull/106905) ([atsarevskiy](https://github.com/atsarevskiy)).
* RocksDB 핸들이 해제된 `EmbeddedRocksDB` 테이블에서 `TRUNCATE` 또는 `DROP`을 실행할 때 발생하는 서버 크래시(null 포인터 역참조)를 수정했습니다. 예를 들어 이전 `TRUNCATE`로 데이터 디렉터리가 비워진 `read_only` 테이블에서 발생할 수 있습니다. [#106940](https://github.com/ClickHouse/ClickHouse/pull/106940) ([groeneai](https://github.com/groeneai)).
* 매우 큰 `max_streams_for_files_processing_in_cluster_functions` 설정에서 `urlCluster` 같은 `*Cluster` 테이블 함수로 읽을 때 발생하는 예외(`LOGICAL_ERROR`로 보고되는 `std::length_error`)를 수정했습니다. 이제 스트림 수는 적절한 값으로 제한됩니다. [#106946](https://github.com/ClickHouse/ClickHouse/pull/106946) ([groeneai](https://github.com/groeneai)).
* 분산 쿼리가 샤드로 전송되기 직전에 취소될 때 발생하는 서버 종료 문제를 수정했습니다. [#106950](https://github.com/ClickHouse/ClickHouse/pull/106950) ([groeneai](https://github.com/groeneai)).
* 동일한 원본 테이블을 사용하는 두 materialized view가 동일한 대상 테이블에 쓰고, 종속 뷰가 해당 대상 테이블을 읽는 상황에서 `materialized_views_squash_parallel_inserts`가 활성화되어 있을 때 `INSERT` 시 발생하던 서버 예외(논리 오류 `this->visited_views == right->visited_views`)를 수정했습니다. [#107027](https://github.com/ClickHouse/ClickHouse/pull/107027) ([groeneai](https://github.com/groeneai)).
* 쓰기 스키마와 일치하지 않는 컬럼(예: 서브컬럼으로 평면화되는 `Nested` 컬럼 또는 명시적 컬럼 하위 집합을 지정한 테이블 함수)을 포함한 DeltaLake 테이블에 삽입할 때 발생하던 `LOGICAL_ERROR` 예외를 수정했습니다. 이제 이러한 삽입은 사용자에게 표시되는 `INCOMPATIBLE_COLUMNS` 오류와 함께 실패합니다. [#107058](https://github.com/ClickHouse/ClickHouse/pull/107058) ([groeneai](https://github.com/groeneai)).
* 정규화된 애스터리스크 매처(예: `x.*`)가 자체 재귀 항에서 이름으로 재귀 CTE를 참조할 때 발생하던 `LOGICAL_ERROR` ("Table expression ... data must be initialized")를 수정했습니다. 이제 이러한 매처는 해당 위치에서 정규화된 컬럼(`x.a`)이나 정규화되지 않은 매처(`*`)와 마찬가지로 재귀 테이블의 컬럼으로 확장됩니다. [#107144](https://github.com/ClickHouse/ClickHouse/pull/107144) ([groeneai](https://github.com/groeneai)).
* 갱신 가능 구체화 뷰에 정규화되지 않은 이름이 임시 테이블 또는 CTE 이름과 일치하는 `REFRESH ... DEPENDS ON <name>` 종속성이 있을 때, 재시작 시 서버가 크래시 루프에 빠질 수 있던 `LOGICAL_ERROR` ("Unexpected exception in refresh scheduling")를 수정했습니다. [#107156](https://github.com/ClickHouse/ClickHouse/pull/107156) ([groeneai](https://github.com/groeneai)).
* `toString` 또는 `concat` 같은 함수가 NULL과 함께 단일 비어 있지 않은 variant를 포함하는 `Variant` 또는 `Dynamic` 컬럼에 적용되고, 함수가 입력 컬럼을 그대로 반환할 때 발생하던 `LOGICAL_ERROR` (`Variant N (T) has size X, but expected Y`)를 수정했습니다. [#107374](https://github.com/ClickHouse/ClickHouse/pull/107374) ([groeneai](https://github.com/groeneai)).
* `use_strict_insert_block_limits`가 활성화된 상태에서 `Alias` 테이블에 비동기 `INSERT`를 수행할 때 발생하던 `LOGICAL_ERROR` (`block.rows() == getRows()`)를 수정했습니다. [#107400](https://github.com/ClickHouse/ClickHouse/pull/107400) ([groeneai](https://github.com/groeneai)).
* 키 표현식(`ORDER BY`, `PRIMARY KEY`, `PARTITION BY` 또는 스킵 `INDEX`)에 오른쪽 피연산자가 테이블인 `IN` 연산자(예: `ORDER BY (x IN some_table)`)가 포함될 때 발생하던 서버 예외(`Logical error: Not-ready Set is passed as the second argument for function 'in'`)를 수정했습니다. 이제 이러한 키 표현식은 테이블 생성 시 거부됩니다. [#107424](https://github.com/ClickHouse/ClickHouse/pull/107424) ([groeneai](https://github.com/groeneai)).
* 고유 키 집합을 초기화하는 동안 할당에 실패할 경우(예: 메모리 한도에 도달한 경우) 발생할 수 있던 드문 `DISTINCT` 처리 중 서버 크래시를 수정했습니다. [#107467](https://github.com/ClickHouse/ClickHouse/pull/107467) ([groeneai](https://github.com/groeneai)).
* 다음 작업 전에 캐시된 자격 증명을 갱신하여 임시 S3 자격 증명이 만료된 후 `DeltaLake` 작업이 실패하던 문제를 수정했습니다. STS assume-role 자격 증명도 인증 실패 후 갱신됩니다. [#107480](https://github.com/ClickHouse/ClickHouse/pull/107480) ([ahmadov](https://github.com/ahmadov)).
* `PARTITION BY` 키가 있는 테이블을 쿼리할 때 더 큰 표현식으로 감싼 `IN`/`NOT IN` 서브쿼리(예: `WHERE (c0 IN (SELECT ...)) != 0`)로 인해 발생하던 `Not-ready Set is passed as the second argument for function 'in'` (`LOGICAL_ERROR`)를 수정했습니다. [#107515](https://github.com/ClickHouse/ClickHouse/pull/107515) ([groeneai](https://github.com/groeneai)).
* `log_formatted_queries = 1`에서 분산 쿼리 계획을 로컬로 실행할 때(`make_distributed_plan` + `distributed_plan_execute_locally`) 발생할 수 있던 크래시(null 포인터 역참조)를 수정했습니다. [#107570](https://github.com/ClickHouse/ClickHouse/pull/107570) ([groeneai](https://github.com/groeneai)).
* 쿼리를 `enable_analyzer = 0`으로 실행하면서 대상이 `Distributed` 테이블인 구체화된 뷰(Materialized View)를 읽을 때 발생하는 서버 크래시를 수정했습니다. [#107653](https://github.com/ClickHouse/ClickHouse/pull/107653) ([groeneai](https://github.com/groeneai)).
* `input_format_allow_errors_num > 0`으로 Protobuf 데이터를 읽을 때 동일한 블록에서 유효한 메시지 다음에 잘못된(건너뛸 수 있는) 메시지가 있을 경우 발생하는 서버 크래시(SIGSEGV)를 수정했습니다. [#107739](https://github.com/ClickHouse/ClickHouse/pull/107739) ([atsarevskiy](https://github.com/atsarevskiy)).
* 원격 테이블 구조를 추론하는 동안 브리지가 응답하지 않을 때 `odbc` 및 `jdbc` 테이블 함수가 몇 분간 멈추고 쿼리 취소(`KILL QUERY`, `max_execution_time`)를 무시하던 문제를 수정했습니다. [#107809](https://github.com/ClickHouse/ClickHouse/pull/107809) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `remote()`/`remoteSecure()`에 전달된 명명된 컬렉션의 `database`/`db` 재정의가 상수 데이터베이스 이름이 아닐 때(예: `remote(nc, database = (SELECT 1))`) 발생할 수 있던 크래시(null 포인터 역참조)를 수정했습니다. 이제 쿼리는 크래시되는 대신 명확한 오류와 함께 실패합니다. [#108271](https://github.com/ClickHouse/ClickHouse/pull/108271) ([groeneai](https://github.com/groeneai)).
* 이제 `_distance` 컬럼을 SELECT하는 벡터 검색 쿼리는 `LOGICAL_ERROR`로 실패하는 대신 적절한 오류를 반환합니다. [#108423](https://github.com/ClickHouse/ClickHouse/pull/108423) ([rschu1ze](https://github.com/rschu1ze)).
* `quantileTDigest` 계열 집계 함수 상태 컬럼을 `GROUP BY` 키로 사용하고 여러 스레드에서 동시에 직렬화할 때 발생할 수 있던 크래시(heap-buffer-overflow)를 수정했습니다. [#110263](https://github.com/ClickHouse/ClickHouse/pull/110263) ([groeneai](https://github.com/groeneai)).
* 역순(내림차순) 정렬 키(`ORDER BY (g, r DESC)`)가 있는 테이블에서 프라이머리 키 인덱스 분석으로 인해 잘못된 가지치기가 발생하던 문제를 수정했습니다. 선행 키 컬럼의 값이 변경된 뒤 내림차순 키 컬럼이 이어지는 범위에 걸친 그래뉼이 잘못 가지치기되어 일치하는 행이 누락될 수 있었습니다. [#111059](https://github.com/ClickHouse/ClickHouse/pull/111059) ([nihalzp](https://github.com/nihalzp)).
* `INSERT`가 대상이 `Alias`이고 내부 쿼리가 행 수를 변경하는 종속 구체화된 뷰를 통과하며, 별칭을 거쳐 중복 제거 테이블에 연결할 수 있는 경우 발생하는 논리 오류 `block.rows() == getRows()`를 수정했습니다. 이 오류는 릴리스 빌드에서 범위를 벗어난 읽기와 삽입 중복 제거 손상을 유발했습니다. [#111103](https://github.com/ClickHouse/ClickHouse/pull/111103) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `String` 값을 포함하는 잘못된 집계 함수 상태를 역직렬화할 때 범위를 벗어난 메모리 접근으로 인해 발생하는 segfault를 수정했습니다. 이제 이러한 상태는 segfault를 유발하는 대신 검증 후 거부됩니다. [#111606](https://github.com/ClickHouse/ClickHouse/pull/111606) ([mstetsyuk](https://github.com/mstetsyuk)).
* 블룸 필터 메타데이터가 일관되지 않은 Parquet 파일을 읽을 때 발생하는 크래시를 수정했습니다. 이러한 파일은 실제보다 적은 행을 아무런 경고 없이 반환할 수도 있었습니다. [#112498](https://github.com/ClickHouse/ClickHouse/pull/112498) ([tiandiwonder](https://github.com/tiandiwonder)).
* `Avro`처럼 추가를 지원하지 않는 포맷에서 `File` 엔진 또는 `file` 테이블 함수로 비어 있지 않은 파일에 `INSERT`할 때 발생하는 segfault 및 조용한 데이터 손상 문제를 수정했습니다. 파일 디스크립터 또는 파티션된 경로를 통한 쓰기는 기존 검사를 우회하여 포맷 접두사가 생략되고 기존 데이터 뒤에 두 번째 헤더가 기록되므로 파일을 읽을 수 없게 되었습니다. 이제 이러한 `INSERT`는 일반 경로와 마찬가지로 `CANNOT_APPEND_TO_FILE` 오류와 함께 거부됩니다. [#112839](https://github.com/ClickHouse/ClickHouse/pull/112839) ([groeneai](https://github.com/groeneai)).
* 갱신 쿼리 계획 수립 중 갱신 가능 구체화 뷰가 차단될 때 `DROP TABLE` 및 `SYSTEM STOP VIEW`가 멈추는 문제를 수정했습니다. [#113188](https://github.com/ClickHouse/ClickHouse/pull/113188) ([evillique](https://github.com/evillique)).
* 비동기 삽입 큐 항목의 마감 시간이 동일할 때 드물게 서버가 종료되는 문제를 수정했습니다. [#113363](https://github.com/ClickHouse/ClickHouse/pull/113363) ([mstetsyuk](https://github.com/mstetsyuk)).
* 예를 들어 `SOURCE(FILE(... format 'Parquet'))`를 사용하는 딕셔너리와 같이 자체 읽기 버퍼를 소유하는 입력 형식으로 Parquet를 읽을 때 발생하는 힙 메모리 손상 문제를 수정했습니다. 파이프라인이 버퍼를 해제한 후에도 백그라운드 프리페치 및 디코드 작업이 해당 버퍼를 통해 읽기와 쓰기를 수행할 수 있어 서버가 중단될 수 있었습니다. [#114668](https://github.com/ClickHouse/ClickHouse/pull/114668) ([groeneai](https://github.com/groeneai)).
* 이름이 내부 테이블 이름보다 사전순으로 앞서는 `TimeSeries` 테이블(예: `-ts`라는 이름의 테이블)이나 `ENGINE = TimeSeries`로 선언된 materialized view를 삭제할 때 멈추는 문제를 수정했습니다. 삭제 작업이 DDL 가드에서 자체 교착 상태에 빠져 `KILL QUERY`로 취소할 수 없었습니다. [#114953](https://github.com/ClickHouse/ClickHouse/pull/114953) ([groeneai](https://github.com/groeneai)).

<h3 id="other-bug-fixes">
  기타 버그 수정
</h3>

* 함수 `like`, `ilike`, `notLike`, `notILike`, `match`가 이제 비상수 needle과 함께 사용되는 상수 haystack(예: `'foo' LIKE pattern_column`)을 지원합니다. 이전에는 `ILLEGAL_COLUMN` 오류가 발생했습니다. [#100479](https://github.com/ClickHouse/ClickHouse/pull/100479) ([Onyx2406](https://github.com/Onyx2406)).
* 일반 PROJECTION이 있는 테이블에 대한 VIEW에서 조회할 때 발생하는 `NOT_FOUND_COLUMN_IN_BLOCK` 오류를 수정했습니다. [#101218](https://github.com/ClickHouse/ClickHouse/pull/101218) ([amosbird](https://github.com/amosbird)).
* `max_bytes_per_second`, `max_cpus` 등의 workload 설정에서 음수 Float64 값(예: `-100.5`)을 거부합니다. 이전에는 음의 정수만 검증되어 음의 부동 소수점 값으로 손상된 scheduler 노드가 조용히 생성될 수 있었습니다. [#101842](https://github.com/ClickHouse/ClickHouse/pull/101842) ([groeneai](https://github.com/groeneai)).
* 객체 스토리지 읽기 작업이 이제 쿼리 취소에 신속하게 응답합니다. [#103016](https://github.com/ClickHouse/ClickHouse/pull/103016) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
* `max_insert_block_size_bytes`가 `0`(기본값)일 때 `INSERT` 파싱 중 `input_format_max_block_size_bytes`가 조용히 무시되던 문제를 수정했습니다. 이제 이 설정이 행 입력 포맷에서 생성되는 블록의 크기를 올바르게 제한합니다. [#103068](https://github.com/ClickHouse/ClickHouse/pull/103068) ([Fgrtue](https://github.com/Fgrtue)).
* 후행 null bytes를 잘못 제거해 ClickHouse가 간헐적으로 유효하지 않은 GSSAPI 토큰을 생성하던 문제를 수정했습니다. [#103114](https://github.com/ClickHouse/ClickHouse/pull/103114) ([EmeraldShift](https://github.com/EmeraldShift)).
* EXPLAIN SYNTAX가 매개변수화된 뷰(Parameterized View)를 확장합니다. [#103263](https://github.com/ClickHouse/ClickHouse/pull/103263) ([jrdi](https://github.com/jrdi)).
* `INSERT INTO FUNCTION hdfs(...)`를 통해 HDFS에 Parquet(및 ORC, Arrow 등 트레일러가 포함되는 다른 포맷)을 쓸 때 발생하는 데이터 손상 문제를 수정했습니다. 26.1부터 `WriteBufferFromHDFS`가 `finalize()`에서 작업 버퍼를 플러시하지 않아, Parquet `PAR1` 푸터를 포함해 각 파일 끝부분의 최대 `DBMS_DEFAULT_BUFFER_SIZE`바이트가 조용히 손실되었습니다. 이러한 파일을 읽으면 `Not a Parquet file (wrong magic bytes at the end of file)` 오류가 반환되었습니다. [#103268](https://github.com/ClickHouse/ClickHouse/pull/103268) ([groeneai](https://github.com/groeneai)).
* join 크기 제한(`max_rows_in_join` / `max_bytes_in_join`)이 `join_overflow_mode = 'break'`와 함께 설정된 경우 상관 서브쿼리에서 잘못된 결과가 반환되거나 logical error가 발생할 수 있던 문제를 수정했습니다. 이제 상관 서브쿼리를 평가하기 위해 내부적으로 생성되는 join은 이러한 사용자 제한을 무시하므로, 조기에 중단되어 행이 누락되지 않습니다. [#103322](https://github.com/ClickHouse/ClickHouse/pull/103322) ([groeneai](https://github.com/groeneai)).
* 집계 PROJECTION에 서로 다른 `IN (...)` 조건을 사용하는 여러 `sumIf` 집계가 포함된 경우 잘못된 결과가 반환되거나 projection이 누락되던 문제를 수정했습니다. [#104765](https://github.com/ClickHouse/ClickHouse/pull/104765) ([Ergus](https://github.com/Ergus)).
* 0을 넘나드는 부호 있는 정수 타입에서 `deltaSumTimestamp`가 잘못된 결과를 반환하던 문제를 수정했습니다. [#104830](https://github.com/ClickHouse/ClickHouse/pull/104830) ([thevar1able](https://github.com/thevar1able)).
* 메타데이터 파일이 손상되었거나 로드할 수 없는 새로 attached 상태인 `Iceberg`, `DeltaLake`, `Hudi` 테이블에서 `DELETE FROM` 실행 시 발생하던 `Logical error: 'Metadata is not initialized'` 문제를 수정했습니다. 대신 일반적인 사용자 대상 예외가 보고되며 서버는 계속 실행됩니다. [#104917](https://github.com/ClickHouse/ClickHouse/pull/104917) ([groeneai](https://github.com/groeneai)).
* 스토리지 절(`ORDER BY`, `PARTITION BY`, `PRIMARY KEY`, `SAMPLE BY`, `TTL`, `UNIQUE KEY` 또는 엔진 `SETTINGS`)을 지정하지만 `ENGINE`이 없는 `ATTACH TABLE name <clauses>;` 쿼리는 이제 저장된 정의를 사용해 테이블을 자동으로 다시 연결하고 사용자가 지정한 절을 무시하는 대신 `BAD_ARGUMENTS`를 발생시킵니다. 쿼리 수준 세션 `SETTINGS`(`log_comment` 등)은 계속 적용됩니다. 저장된 메타데이터를 사용해 다시 연결하려면 `ATTACH TABLE t;`를 사용하고, 설정을 변경하려면 `ATTACH` 후 `ALTER TABLE t MODIFY SETTING ...`을 사용하십시오. [#105068](https://github.com/ClickHouse/ClickHouse/pull/105068) ([groeneai](https://github.com/groeneai)).
* 바이너리 또는 문자열 컬럼의 중간 오프셋이 손상된 Arrow 또는 ArrowStream 파일을 읽을 때 발생하는 힙 버퍼 오버플로우와, 지리 태그가 지정된 Arrow 컬럼을 읽을 때 발생하는 널 포인터 역참조 문제를 수정했습니다. [#105449](https://github.com/ClickHouse/ClickHouse/pull/105449) ([Algunenano](https://github.com/Algunenano)).
* `ALTER` 후 압축된 `Memory` 테이블에서 `Dynamic` 서브컬럼을 읽을 때 서버가 종료되는 문제를 수정했습니다. [#105464](https://github.com/ClickHouse/ClickHouse/pull/105464) ([Avogar](https://github.com/Avogar)).
* `WithNames` 포맷의 스키마 캐시 키에 `skip_first_lines`를 포함했습니다. [#105469](https://github.com/ClickHouse/ClickHouse/pull/105469) ([Avogar](https://github.com/Avogar)).
* 정렬되지 않은 작은 입력에서 `histogram`이 잘못된 결과를 반환하는 문제를 수정했습니다. [#105548](https://github.com/ClickHouse/ClickHouse/pull/105548) ([Avogar](https://github.com/Avogar)).
* `optimize_trivial_insert_select`가 활성화된 경우 테이블 함수에서 삽입 테이블을 사용하는 문제를 수정했습니다. [#105555](https://github.com/ClickHouse/ClickHouse/pull/105555) ([Avogar](https://github.com/Avogar)).
* `estimateCompressionRatio` 윈도 함수가 행 간에 누적 데이터를 잃는 문제를 수정했습니다. [#105581](https://github.com/ClickHouse/ClickHouse/pull/105581) ([Avogar](https://github.com/Avogar)).
* Hive 파티션 값 추출이 이제 `cast_string_to_date_time_mode` 설정을 준수하며, 기본적으로 파티션 키에서 시간대 접미사(예: `+0000`, `+00:00`, `Z`)가 있는 ISO 8601 타임스탬프를 허용합니다. [#105584](https://github.com/ClickHouse/ClickHouse/pull/105584) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 잘못된 형식의 행 뒤에 `Template` 입력 형식에서 오류를 복구하는 문제를 수정했습니다. [#105735](https://github.com/ClickHouse/ClickHouse/pull/105735) ([niyue](https://github.com/niyue)).
* 핸들러 인수가 공백 하나로 구분되도록 `SYSTEM INSTRUMENT ADD` 포맷팅을 수정했으며, 값이 2개를 초과하거나 최솟값이 최댓값보다 큰 범위를 포함하는 잘못된 `SLEEP` instrumentation 인수 목록을 거부합니다. [#105984](https://github.com/ClickHouse/ClickHouse/pull/105984) ([pamarcos](https://github.com/pamarcos)).
* Bool 파티션 키에 대한 ALTER TABLE 파티션 작업이 아무 오류 없이 실패하는 문제를 수정했습니다. [#106004](https://github.com/ClickHouse/ClickHouse/pull/106004) ([Avogar](https://github.com/Avogar)).
* 기본값이 있는 타입 지정 JSON 경로에서 `JSONExtractRaw` 및 `JSONHas` 관련 문제를 수정했습니다. [#106005](https://github.com/ClickHouse/ClickHouse/pull/106005) ([Avogar](https://github.com/Avogar)).
* 데이터 레이크 구성에서 빈 기본 경로에 잘못된 `/` 접두사가 붙는 문제를 수정했습니다. [#106013](https://github.com/ClickHouse/ClickHouse/pull/106013) ([thewisenerd](https://github.com/thewisenerd)).
* `SHOW DICTIONARIES` 권한이 일부만 취소된 경우 `system.dictionaries`가 0개 행을 반환하는 문제를 수정했습니다. [#106105](https://github.com/ClickHouse/ClickHouse/pull/106105) ([Avogar](https://github.com/Avogar)).
* `(c0 / -42)` 또는 `intDiv(c0, -42)`처럼 단조 감소 함수가 포함된 `ORDER BY`를 사용하는 테이블 쿼리에서 잘못된 결과가 반환되던 문제를 수정했습니다. 기본 열에 대한 프레디케이트(예: `c0 < 0`)가 일치하는 행이 포함된 그래뉼을 잘못 제외해 결과가 누락될 수 있었습니다. [#106136](https://github.com/ClickHouse/ClickHouse/pull/106136) ([nihalzp](https://github.com/nihalzp)).
* 삽입 중 형식이 잘못된 `DDSketch` 집계 상태에 대한 유효성 검사를 추가했습니다. [#106236](https://github.com/ClickHouse/ClickHouse/pull/106236) ([yariks5s](https://github.com/yariks5s)).
* 실패한 `SLRU` 다운그레이드 후 파일 시스템 캐시의 일관성 문제를 수정해 항목이 축출 상태에 계속 남아 있지 않도록 했습니다. 또한 `System`/`Data` 분할 캐시의 크기 조정 및 여유 공간 정리 문제를 수정해 제한값이 원자적으로 업데이트되고 두 캐시 세그먼트에서 모두 공간을 회수할 수 있도록 했습니다. [#106286](https://github.com/ClickHouse/ClickHouse/pull/106286) ([kssenii](https://github.com/kssenii)).
* 가수 시프트의 오프바이원 오류로 인해 비정규 `Float16` 값이 `Float32`로 잘못 변환되던 문제(예: Numpy `.npy` 파일에서 읽을 때)를 수정했습니다. [#106343](https://github.com/ClickHouse/ClickHouse/pull/106343) ([jh0x](https://github.com/jh0x)).
* 캡처 그룹이 없는 패턴에서 `INDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGE`를 발생시키는 대신 전체 일치 항목을 반환하도록 `regexpExtract(haystack, pattern)`을 수정했습니다. [#106374](https://github.com/ClickHouse/ClickHouse/pull/106374) ([groeneai](https://github.com/groeneai)).
* `NaN` 또는 무한대 점 좌표를 포함하는 소스 데이터로 polygon dictionary를 빌드할 때 발생하는 논리 오류를 수정했습니다. 이제 이러한 좌표는 명확한 오류 메시지와 함께 거부됩니다. [#106423](https://github.com/ClickHouse/ClickHouse/pull/106423) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 이제 HTTP 딕셔너리에서 이름이 지정된 컬렉션을 통해 요청 헤더를 지정할 수 있습니다. [#106459](https://github.com/ClickHouse/ClickHouse/pull/106459) ([ZelvaMan](https://github.com/ZelvaMan)).
* 형식이 잘못된 `Avro` 열거형 값은 이제 범위를 벗어난 메모리 접근 및 서버 종료를 유발하는 대신 유효성 검사 후 예외와 함께 거부됩니다. [#106476](https://github.com/ClickHouse/ClickHouse/pull/106476) ([mstetsyuk](https://github.com/mstetsyuk)).
* 동률을 판단할 때 `ORDER BY ... COLLATE`의 콜레이션을 적용하지 않던 `LIMIT WITH TIES` 및 소수 `LIMIT WITH TIES` 문제를 수정했습니다. 콜레이션상 동일한 행(예: 숫자 콜레이션에서 `'1'`과 `'01'`)이 바이트 단위로 비교되어 일부 동률 행이 결과에서 잘못 제외되었습니다. [#106539](https://github.com/ClickHouse/ClickHouse/pull/106539) ([nihalzp](https://github.com/nihalzp)).
* 입력이 콜레이션(`ORDER BY ... COLLATE`)으로 정렬된 경우 잘못된 결과를 반환하던 순서 기반 `DISTINCT` 및 순서 기반 `LIMIT BY` 최적화(음수 `LIMIT BY` 포함)를 수정했습니다. 콜레이션상 동일한 행(예: 대소문자를 구분하지 않는 콜레이션에서 `'a'`와 `'A'`)은 콜레이션 키로 정렬되며 값 기준으로 인접하지 않으므로, 이제 collator를 사용할 때 순서 기반 최적화를 건너뜁니다. [#106564](https://github.com/ClickHouse/ClickHouse/pull/106564) ([nihalzp](https://github.com/nihalzp)).
* NATS consumer 종료 중 서버가 종료될 수 있던 경쟁 상태를 수정했습니다. [#106692](https://github.com/ClickHouse/ClickHouse/pull/106692) ([mstetsyuk](https://github.com/mstetsyuk)).
* 신뢰할 수 없는 입력을 통해 발생할 수 있는 형식 리더의 여러 메모리 안전성 및 리소스 고갈 문제를 수정했습니다. 여기에는 기본 Parquet 리더의 `DataPageV2` 정의/반복 수준 길이 처리에서 발생하는 힙 범위 밖 읽기, 깊게 중첩된 스키마를 가진 Parquet 파일에서의 스택 오버플로우, GeoParquet WKB/WKT Geometry 및 Avro 문자열/바이트를 파싱할 때 `max_memory_usage`를 무시하던 메모리 할당이 포함됩니다. [#106739](https://github.com/ClickHouse/ClickHouse/pull/106739) ([Algunenano](https://github.com/Algunenano)).
* HTTPS 클라이언트에 평문 HTTP 응답을 반환하던 `keeper_server.http_control.secure_port` 문제를 수정했습니다. 이제 보안 포트가 HTTPS를 올바르게 제공합니다. [#106822](https://github.com/ClickHouse/ClickHouse/pull/106822) ([linjiayu1025-collab](https://github.com/linjiayu1025-collab)).
* 다른 키워드와 달리 `restrictive`/`permissive`를 대문자가 아닌 소문자로 출력하던 `SHOW CREATE ROW POLICY` 문제를 수정했습니다. [#106865](https://github.com/ClickHouse/ClickHouse/pull/106865) ([valerypetrov](https://github.com/valerypetrov)).
* 파티션 키에 `LowCardinality(Nullable(...))` 컬럼이 있는 테이블에서 파트를 다시 로드할 때마다(서버 재시작, `DETACH` 또는 `ATTACH`) 파트가 손상된 것으로 표시되어 분리되던 문제를 수정했습니다. 26.5부터 이러한 컬럼의 최솟값과 최댓값이 `NULL`인 경우 파트별 minmax 인덱스 파일이 기록되지 않았지만, 파트 일관성 검사는 여전히 해당 파일을 요구했습니다. 영향을 받은 버전에서 기록된 파트에는 minmax 인덱스 파일이 없으므로 여전히 수동으로 다시 연결해야 합니다. [#106945](https://github.com/ClickHouse/ClickHouse/pull/106945) ([PedroTadim](https://github.com/PedroTadim)).
* 비동기 삽입 플러시(`AsyncInsertFlush`) 쿼리에서 `system.processors_profile_log` 및 `system.query_log`의 `elapsed_us`가 항상 0으로 기록되고 `read_rows`/`read_bytes`가 적게 집계되던 문제를 수정했습니다. [#106982](https://github.com/ClickHouse/ClickHouse/pull/106982) ([cwurm](https://github.com/cwurm)).
* `UNION`/`INTERSECT`/`EXCEPT`의 한 브랜치가 `Sparse`로 직렬화된 컬럼을 읽고 다른 브랜치가 같은 컬럼을 전체 컬럼으로 읽을 때(예: materialized view에 푸시할 때) 발생하던 `Block structure mismatch in UnionStep stream` 논리 오류(디버그/새니타이저 빌드에서는 서버 중단, 릴리스 빌드에서는 `Code: 49`)를 수정했습니다. [#107041](https://github.com/ClickHouse/ClickHouse/pull/107041) ([groeneai](https://github.com/groeneai)).
* `optimize_read_in_order` 및 `read_in_order_use_virtual_row`가 활성화된 상태에서 `UNION ALL`에 대한 `ORDER BY` 쿼리의 행 순서가 잘못되던 문제를 수정했습니다. [#107053](https://github.com/ClickHouse/ClickHouse/pull/107053) ([vdimir](https://github.com/vdimir)).
* `SHOW ROW POLICIES` 또는 `SHOW MASKING POLICIES` 뒤에 `FORMAT`, `SETTINGS` 또는 `INTO OUTFILE` 절이 올 때 발생하던 구문 오류를 수정했습니다(예: `SHOW ROW POLICIES FORMAT TabSeparated`). [#107061](https://github.com/ClickHouse/ClickHouse/pull/107061) ([groeneai](https://github.com/groeneai)).
* 사용자 지정 트림 문자 집합이 16자보다 길면 `trimLeft`, `trimRight`, `trimBoth`(및 별칭 `ltrim`, `rtrim`, `trim`)가 `TOO_LARGE_STRING_SIZE` 오류를 발생시키던 문제를 수정했습니다. 이제 길이에 관계없이 트림 집합이 다시 지원됩니다. [#107071](https://github.com/ClickHouse/ClickHouse/pull/107071) ([fm4v](https://github.com/fm4v)).
* 큰 범위에 걸친 `Int64` 입력에서 잘못된 결과를 생성할 수 있던 `quantileExactExclusive`, `quantilesExactExclusive`, `quantileExactInclusive`, `quantilesExactInclusive`의 부호 있는 정수 오버플로를 수정했습니다. [#107154](https://github.com/ClickHouse/ClickHouse/pull/107154) ([groeneai](https://github.com/groeneai)).
* 이제 구성 다시 로드 시 시작 스크립트를 다시 실행하지 않으므로, 일회성 시작 작업이 다시 실행되는 것을 방지합니다. [#107187](https://github.com/ClickHouse/ClickHouse/pull/107187) ([mstetsyuk](https://github.com/mstetsyuk)).
* `max_streams_for_union_step` 설정으로 인해 UNION 파이프라인이 축소된 경우, `optimize_read_in_order`가 활성화된 `UNION ALL`에 대한 `ORDER BY` 결과 순서가 잘못되던 문제를 수정했습니다. 이제 계획이 정렬된 UNION 출력 스트림에 의존하는 경우 축소를 건너뜁니다. [#107208](https://github.com/ClickHouse/ClickHouse/pull/107208) ([vdimir](https://github.com/vdimir)).
* 서버 종료 후반에 프록시 구성을 확인하는 동안 발생할 수 있는 널 포인터 역참조 문제를 수정했습니다. [#107231](https://github.com/ClickHouse/ClickHouse/pull/107231) ([PedroTadim](https://github.com/PedroTadim)).
* `ORDER BY ... WITH FILL`에서 채우기 컬럼 앞의 ORDER BY 컬럼에 `COLLATE` 콜레이션이 사용될 때 추가 행이 생성되던 문제를 수정했습니다. 이제 해당 콜레이션을 적용해 정렬 접두사별로 행을 그룹화하므로 정렬 순서와 일치합니다. [#107365](https://github.com/ClickHouse/ClickHouse/pull/107365) ([groeneai](https://github.com/groeneai)).
* 유한하지 않은 부동 소수점 값(예: `nan` 또는 `inf`)이 `prometheusQuery` / `prometheusQueryRange` 테이블 함수의 타임스탬프/기간 인수로 전달될 때 발생하던 정의되지 않은 동작을 수정했습니다. 이제 이러한 인수는 잘못된 타임스탬프를 생성하는 대신 `BAD_ARGUMENTS` 오류를 발생시킵니다. [#107417](https://github.com/ClickHouse/ClickHouse/pull/107417) ([groeneai](https://github.com/groeneai)).
* `NULL` 페이로드 값을 보존하는 집계 함수(`*_respect_nulls` 계열: `anyRespectNulls`, `first_value_respect_nulls`, `anyLast_respect_nulls`, `last_value_respect_nulls`)에서 `optimize_rewrite_aggregate_function_with_if` 최적화로 인해 잘못된 결과가 생성되던 문제를 수정했습니다. 이제 이 최적화는 이러한 함수에 대해 `f(if(cond, x, NULL))`를 `-If` 형식으로 재작성하지 않습니다. [#107430](https://github.com/ClickHouse/ClickHouse/pull/107430) ([groeneai](https://github.com/groeneai)).
* ORC 입력의 잘못된 경계값에 대한 유효성 검사를 추가했습니다. [#107580](https://github.com/ClickHouse/ClickHouse/pull/107580) ([al13n321](https://github.com/al13n321)).
* MySQL 프로토콜 포트에서 인증 없이 메모리 고갈을 유발할 수 있는 서비스 거부 문제를 수정했습니다. [#107599](https://github.com/ClickHouse/ClickHouse/pull/107599) ([tiandiwonder](https://github.com/tiandiwonder)).
* `MySQL Connector/J` 8.2.0 이상(9.x 포함)에서 MySQL 인터페이스를 사용할 수 없던 문제를 수정했습니다. 이제 `OK` 패킷의 `info` 필드는 MySQL 서버와 마찬가지로 길이 인코딩되므로 JDBC 드라이버가 연결할 수 있습니다. [#107693](https://github.com/ClickHouse/ClickHouse/pull/107693) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `UNION`/`INTERSECT`/`EXCEPT`의 형제 브랜치가 `WHERE` 프레디케이트만 다르고 한 브랜치의 프레디케이트가 상수 폴딩되어 `Const` 컬럼이 되는 경우 발생하던 `Block structure mismatch in UnionStep stream` 논리 오류(디버그/새니타이저 빌드에서는 서버 중단, 릴리스 빌드에서는 `Code: 49`)를 수정했습니다. [#107719](https://github.com/ClickHouse/ClickHouse/pull/107719) ([groeneai](https://github.com/groeneai)).
* Apache Arrow Java 19.0.0 이전 버전(Apache Spark 포함)에서 생성된 비어 있는 `String` 또는 `Binary` 컬럼이 포함된 `Arrow` 및 `ArrowStream` 데이터를 읽을 때 더 이상 `INCORRECT_DATA` 오류가 발생하지 않습니다. [#107764](https://github.com/ClickHouse/ClickHouse/pull/107764) ([Algunenano](https://github.com/Algunenano)).
* `Variant` 판별자가 존재하지 않는 variant를 참조하는 잘못된 Native 블록은 이제 안전하게 거부됩니다. [#107991](https://github.com/ClickHouse/ClickHouse/pull/107991) ([uwezkhan](https://github.com/uwezkhan)).
* 여러 스레드로 `Dynamic` 컬럼을 읽을 때 발생하던 성능 회귀를 수정했습니다. [#107997](https://github.com/ClickHouse/ClickHouse/pull/107997) ([Avogar](https://github.com/Avogar)).
* 더 이상 사용되지 않는 데이터 레이크 설정 `storage_catalog_url`이 이제 카탈로그 가드에서 올바르게 거부되며(이전에는 `storage_catalog_type` 및 `storage_aws_access_key_id`만 확인됨), 오류 메시지에 모든 더 이상 사용되지 않는 설정이 나열됩니다. [#108040](https://github.com/ClickHouse/ClickHouse/pull/108040) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 선택 사항인 `dataset` 키가 없는 명명된 컬렉션을 `ArrowFlight` 테이블 함수/엔진이 `No such key 'dataset'` 오류와 함께 거부하던 문제를 수정했습니다. [#108041](https://github.com/ClickHouse/ClickHouse/pull/108041) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 이제 로그에 기록된 뷰 SQL에 시크릿 및 자격 증명이 노출되지 않고 `system.query_views_log.view_query`에서 마스킹됩니다. [#108214](https://github.com/ClickHouse/ClickHouse/pull/108214) ([Fidelaggio](https://github.com/Fidelaggio)).
* JSON의 타입이 지정된 경로에서 `type_json_allow_duplicated_key_with_literal_and_nested_object`가 작동하지 않던 문제를 수정했습니다. [#108218](https://github.com/ClickHouse/ClickHouse/pull/108218) ([Avogar](https://github.com/Avogar)).
* 입력 문자열이 32768바이트보다 크고 문자 집합을 감지할 수 없을 때 `detectCharset` 및 `detectLanguageUnknown` 함수에서 발생하던 정의되지 않은 동작(`memcpy`에 널 포인터 전달)을 수정했습니다. [#108250](https://github.com/ClickHouse/ClickHouse/pull/108250) ([groeneai](https://github.com/groeneai)).
* 지연 구체화와 함께 WHERE 절에서 `_part_starting_offset/_part_offset` 가상 컬럼을 사용하는 쿼리의 `NOT_FOUND_COLUMN_IN_BLOCK` 오류를 수정했습니다. [#108287](https://github.com/ClickHouse/ClickHouse/pull/108287) ([vdimir](https://github.com/vdimir)).
* 기본값으로 비활성화된 `format_display_secrets_in_show_and_select` 설정에서 `EXPLAIN actions`, `EXPLAIN header`, `EXPLAIN PIPELINE` 출력 시 `encrypt`, `decrypt`, `HMAC` 등의 함수에 전달되는 시크릿 인수를 숨깁니다. [#108386](https://github.com/ClickHouse/ClickHouse/pull/108386) ([Algunenano](https://github.com/Algunenano)).
* 갱신 가능 구체화 뷰의 `TO` 대상이 해당 뷰에 이미 속해 있으면 이제 `CREATE OR REPLACE`가 성공합니다. 다른 뷰에 속한 대상은 계속 거부됩니다. [#108392](https://github.com/ClickHouse/ClickHouse/pull/108392) ([evillique](https://github.com/evillique)).
* `file()` 및 딕셔너리 소스와 마찬가지로 `catboostEvaluate`의 모델 경로를 `user_files` 디렉터리로 제한했습니다. 이전에는 이 함수가 경로 제한 검사 없이 임의의 파일 시스템 경로를 허용하여 `user_files` 외부 파일의 존재 여부를 확인하고 읽기를 트리거할 수 있었습니다. 이제 모델은 반드시 `user_files` 내부에 있어야 합니다. [#108463](https://github.com/ClickHouse/ClickHouse/pull/108463) ([groeneai](https://github.com/groeneai)).
* `CREATE OR REPLACE MATERIALIZED VIEW ... POPULATE`로 인해 새 뷰가 원본 테이블을 구독하지 않아 대체 후 삽입된 모든 행이 조용히 손실되던 문제를 수정했습니다. [#108728](https://github.com/ClickHouse/ClickHouse/pull/108728) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `GROUPING SETS`, `ROLLUP` 또는 `CUBE`와 `max_threads > 1`을 함께 사용해 `uniqExact` 집계 상태를 병합할 때 발생하는 세그먼테이션 오류를 수정했습니다. [#108928](https://github.com/ClickHouse/ClickHouse/pull/108928) ([Algunenano](https://github.com/Algunenano)).
* compatibility 설정을 상향 조정하는 동안 발생할 수 있는 논리 오류 "Unexpected substream ... for column ..."를 수정했습니다. [#109496](https://github.com/ClickHouse/ClickHouse/pull/109496) ([Avogar](https://github.com/Avogar)).
* 이제 `getClientHTTPHeader` 함수는 [RFC 9110](https://www.rfc-editor.org/info/rfc9110/#section-5.1)에 따라 헤더 이름을 대소문자를 구분하지 않고 처리합니다. 특히 `authorization` 헤더는 대소문자와 관계없이 필터링됩니다. [#109791](https://github.com/ClickHouse/ClickHouse/pull/109791) ([Felixoid](https://github.com/Felixoid)).
* 비동기 삽입 및 중복 제거(`async_insert=1`, `async_insert_deduplicate=1`)에서 발생하던 무음 데이터 손실을 수정했습니다. 서로 다른 `insert_deduplication_token` 값을 가진 여러 비동기 삽입 항목이 서로 다른 파티션에 기록되는 하나의 플러시로 통합될 때, 각 토큰이 해당 행이 기록된 파티션뿐 아니라 플러시가 처리한 모든 파티션의 중복 제거 로그에 등록되었습니다. 이후 해당 토큰 중 하나를 이전에 기록된 적 없는 파티션에 재사용해 삽입하면 해당 삽입이 조용히 중복 제거되었습니다. 이제 토큰은 해당 행이 실제로 기록된 파티션에만 등록됩니다. [#111049](https://github.com/ClickHouse/ClickHouse/pull/111049) ([groeneai](https://github.com/groeneai)).
* `ALTER ... MODIFY COLUMN` 후 호환되지 않게 된 버퍼링 항목 하나 때문에 전체 일괄 삽입이 실패하지 않도록 비동기 Native 포맷 삽입을 수정했습니다. [#111108](https://github.com/ClickHouse/ClickHouse/pull/111108) ([Felixoid](https://github.com/Felixoid)).
* 다른 종류의 객체로 딕셔너리에 `CREATE OR REPLACE`를 수행할 때 발생하던 문제를 수정했습니다. 교체 작업이 이미 커밋된 뒤 `CANNOT_DETACH_DICTIONARY_AS_TABLE` 오류로 실패하면서 고아 상태의 `_tmp_replace_*` 테이블이 남던 문제입니다. [#111142](https://github.com/ClickHouse/ClickHouse/pull/111142) ([evillique](https://github.com/evillique)).
* 인증서 검증이 활성화된 TLS 핸드셰이크 중 발생하던 피어 인증서 메모리 누수를 수정했습니다. [#111425](https://github.com/ClickHouse/ClickHouse/pull/111425) ([thevar1able](https://github.com/thevar1able)).
* 필터 컬럼명이 입력 컬럼명과 같은 `WHERE` 절에서 필터 분할 최적화(`query_plan_split_filter`)가 실행될 때 발생할 수 있던 논리적 오류 `Block structure mismatch in IntersectOrExceptStep stream: different number of columns`를 수정했습니다. 이 최적화로 인해 내부 `__split_filter` 컬럼이 브랜치 출력 헤더에 남아, 이후 `INTERSECT` 또는 `UNION` 같은 집합 연산의 다른 브랜치와 불일치하던 문제입니다. [#111930](https://github.com/ClickHouse/ClickHouse/pull/111930) ([groeneai](https://github.com/groeneai)).
* 일광 절약 시간제를 사용하는 시간대에서 `Time`, `Time64` 또는 `DateTime` 값과 함께 `toString`을 사용하는 필터나 `ORDER BY` 표현식에서 잘못된 결과가 반환되던 문제를 수정했습니다. 또한 테이블 정렬 키의 접두사에 대한 `ORDER BY` 및 `String`에서 `Nullable(String)`으로 변환할 때 순서대로 읽기 최적화를 복원했습니다. [#113291](https://github.com/ClickHouse/ClickHouse/pull/113291) ([vdimir](https://github.com/vdimir)).
* `kafka_num_consumers`가 CPU 코어 수에 따라 계산된 제한을 초과할 때 `Kafka` 테이블의 `ATTACH`가 실패하던 문제를 수정했습니다. [#113390](https://github.com/ClickHouse/ClickHouse/pull/113390) ([evillique](https://github.com/evillique)).
* 잘못된 쿼리 결과를 방지하기 위해 프로젝션 사용 시 분산 인덱스 분석을 비활성화했습니다. [#115132](https://github.com/ClickHouse/ClickHouse/pull/115132) ([azat](https://github.com/azat)).
* 행을 빈 결과로 포맷할 때 잘못된 결과 또는 논리적 오류가 발생할 수 있던 함수 `formatRowNoNewline`의 버그를 수정했습니다. [#115669](https://github.com/ClickHouse/ClickHouse/pull/115669) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 길이가 8의 배수가 아닌 바이너리 문자열 리터럴의 결과나 본문이 없는 압축 블록을 처리하는 LZ4 압축 해제기에서 초기화되지 않은 메모리를 반환하지 않도록 했습니다. [#115704](https://github.com/ClickHouse/ClickHouse/pull/115704) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 서로 다른 객체 값이 잘못 중복 제거되는 것을 방지하기 위해 중복 제거 해시에 객체 경로를 포함했습니다. [#115866](https://github.com/ClickHouse/ClickHouse/pull/115866) ([Felixoid](https://github.com/Felixoid)).
