Skip to main content
이 설정들은 system.merge_tree_settings에서 확인할 수 있으며, ClickHouse 소스 코드에서 자동 생성됩니다.

adaptive_write_buffer_initial_size

적응형 쓰기 버퍼의 초기 크기입니다.

add_implicit_sign_column_constraint_for_collapsing_engine

true로 설정하면 CollapsingMergeTree 또는 VersionedCollapsingMergeTree 테이블의 sign 컬럼에 암시적 제약 조건을 추가하여 유효한 값(1-1)만 허용합니다.

alter_column_secondary_index_mode

보조 인덱스가 적용된 컬럼을 수정하는 ALTER 명령을 허용할지와, 허용하는 경우 어떤 작업을 수행할지를 구성합니다. 기본적으로 이러한 ALTER 명령은 허용되며 인덱스가 다시 빌드됩니다. 가능한 값:
  • rebuild (기본값): ALTER 명령에서 해당 컬럼의 영향을 받는 모든 보조 인덱스를 다시 빌드합니다.
  • throw: 예외를 발생시켜 명시적 보조 인덱스가 적용된 컬럼에 대한 모든 ALTER를 막습니다. 암시적 인덱스는 이 제한에서 제외되며 다시 빌드됩니다.
  • drop: 종속된 보조 인덱스를 삭제합니다. 새 파트에는 해당 인덱스가 포함되지 않으므로, 다시 생성하려면 MATERIALIZE INDEX를 실행해야 합니다.
  • compatibility: 원래 동작과 동일하게 맞춥니다. ALTER ... MODIFY COLUMN에는 throw를, ALTER ... UPDATE/DELETE에는 rebuild를 적용합니다.
  • ignore: 전문가용 옵션입니다. 인덱스를 불일치한 상태로 남겨 두므로 잘못된 쿼리 결과가 발생할 수 있습니다.

apply_patches_on_merge

값이 true이면 머지 시 패치 파트가 적용됩니다

assign_part_uuids

활성화하면 새 part마다 고유한 part 식별자가 할당됩니다. 활성화하기 전에 모든 레플리카가 UUID 버전 4를 지원하는지 확인하십시오.

auto_statistics_types

모든 적합한 컬럼에 대해 자동으로 계산할 통계 타입의 쉼표로 구분된 목록입니다. 지원되는 통계 타입: basic, tdigest, countmin, uniq, uniq_v2. minmax 통계 타입은 더 이상 권장되지 않습니다. basic의 부분 집합이므로 대신 basic을 사용해야 합니다.

background_task_preferred_step_execution_time_ms

머지 또는 mutation의 한 단계 실행에 대한 목표 시간입니다. 한 단계 실행 시간이 더 길면 이 값을 초과할 수 있습니다.

clean_deleted_rows

더 이상 사용되지 않는 설정이며, 아무 동작도 하지 않습니다.

clone_replica_zookeeper_create_get_part_batch_size

레플리카를 복제할 때 ZooKeeper multi-create get-part 요청에 사용하는 Batch 크기입니다.

compatibility_allow_sampling_expression_not_in_primary_key

프라이머리 키에 샘플링 표현식이 없는 테이블을 생성할 수 있도록 허용합니다. 이는 이전 버전과의 호환성을 위해 잘못된 테이블이 있는 서버를 일시적으로 실행해야 할 때에만 필요합니다.

compute_exact_num_defaults_for_sparse_columns

희소 직렬화 여부를 결정할 때 사용하는 비용이 더 적은 샘플링 추정치 대신, 삽입 및 머지 중에 컬럼별 기본값의 정확한 개수를 계산합니다. 이 설정은 저장된 num_defaults 카운터를 사용하는 optimize_trivial_count_with_sparsity_filter에 필요합니다(널 허용 컬럼은 추가로 nullable_serialization_version = 'allow_sparse'가 필요합니다). 비활성화된 상태로 두면 삽입/머지 속도는 이전과 동일하게 유지되며, 활성화하면 희소 직렬화가 가능한 각 컬럼마다 O(rows) 패스가 추가됩니다.

deduplicate_merge_projection_mode

(Replicated, Shared) MergeTree가 아닌 비클래식 MergeTree를 사용하는 테이블에서 프로젝션 생성을 허용할지 지정합니다. ignore 옵션은 순전히 compatibility를 위한 것이며, 잘못된 결과를 초래할 수 있습니다. 허용하는 경우에는 프로젝션을 머지할 때 수행할 동작을 지정하며, drop 또는 rebuild 중 하나를 선택합니다. 따라서 클래식 MergeTree에서는 이 설정이 무시됩니다. 또한 OPTIMIZE DEDUPLICATE도 제어하지만, 모든 MergeTree 엔진 계열 구성원에 영향을 미칩니다. lightweight_mutation_projection_mode 옵션과 마찬가지로, 이것도 part 수준입니다. 가능한 값:
  • ignore
  • throw
  • drop
  • rebuild

deduplication_hashes_cache_update_wait_ms

각 삽입 반복에서 인메모리 deduplication_hashes 캐시가 더 최신 버전으로 갱신될 때까지 대기한 뒤, 이미 삽입된 블록이 있는지 다시 확인하는 시간을 지정합니다. 이 캐시는 ClickHouse Keeper의 deduplication_hashes 디렉터리를 미러링하므로, 삽입 시 Keeper와 왕복 통신하지 않고도 중복을 감지할 수 있습니다.

default_compression_codec

테이블 선언에서 특정 컬럼에 압축 코덱이 정의되어 있지 않은 경우 사용할 기본 압축 코덱을 지정합니다. 컬럼의 압축 코덱 선택 순서는 다음과 같습니다.
  1. 테이블 선언에서 해당 컬럼에 정의된 압축 코덱
  2. default_compression_codec에 정의된 압축 코덱(이 설정)
  3. compression 설정에 정의된 기본 압축 코덱 기본값: 빈 문자열(정의되지 않음)입니다.

디스크

스토리지 디스크의 이름입니다. 스토리지 정책 대신 지정할 수도 있습니다.

dynamic_serialization_version

Dynamic 데이터 타입의 직렬화 버전입니다. compatibility를 위해 필요합니다. 가능한 값:
  • v1
  • v2
  • v3

enforce_index_structure_match_on_partition_manipulation

파티션 조작 쿼리(ATTACH/MOVE/REPLACE PARTITION)의 대상 테이블에서 이 설정을 활성화하면, 원본 테이블과 대상 테이블의 인덱스와 프로젝션이 서로 동일해야 합니다. 그렇지 않으면 대상 테이블은 원본 테이블의 인덱스와 프로젝션을 모두 포함하는 상위 집합이어도 됩니다.

execute_merges_on_single_replica_time_threshold

이 설정값이 0보다 크면 하나의 레플리카만 즉시 머지를 시작하고, 다른 레플리카는 로컬에서 머지를 수행하는 대신 해당 시간 동안 결과를 다운로드하기 위해 대기합니다. 선택된 레플리카가 그 시간 안에 머지를 완료하지 못하면 표준 동작으로 폴백합니다. Possible values:
  • 양의 정수 아무 값이나 가능합니다.

finished_mutations_to_keep

완료된 뮤테이션에 대한 레코드를 몇 개까지 유지할지 지정합니다. 0이면 모두 유지합니다.

force_read_through_cache_for_merges

머지 시 파일 시스템 캐시를 통한 읽기를 강제합니다

initialization_retry_period

테이블 초기화를 재시도하는 주기이며, 단위는 초입니다.

kill_threads

더 이상 사용되지 않는 설정이며, 아무런 효과가 없습니다.

lightweight_mutation_projection_mode

기본적으로 경량한 삭제 DELETE는 프로젝션이 있는 테이블에서는 작동하지 않습니다. 이는 프로젝션의 행이 DELETE 작업의 영향을 받을 수 있기 때문입니다. 따라서 기본값은 throw입니다. 하지만 이 옵션을 사용하면 동작 방식을 변경할 수 있습니다. 값이 drop 또는 rebuild이면 프로젝션이 있는 테이블에서도 삭제가 작동합니다. drop은 프로젝션을 삭제하므로 현재 쿼리에서는 프로젝션이 제거되어 더 빠를 수 있지만, 이후 쿼리에서는 attached 상태인 프로젝션이 없어 더 느려질 수 있습니다. rebuild는 프로젝션을 다시 빌드하므로 현재 쿼리의 성능에 영향을 줄 수 있지만, 이후 쿼리 속도는 빨라질 수 있습니다. 또한 이러한 옵션은 part 수준에서만 작동합니다. 즉, 영향을 받지 않은 part의 프로젝션은 삭제나 재빌드 같은 작업을 유발하지 않고 그대로 유지됩니다. 가능한 값:
  • throw
  • drop
  • rebuild

load_existing_rows_count_for_old_parts

exclude_deleted_rows_for_part_size_in_merge와 함께 활성화하면, 기존 데이터 파트의 삭제된 행 수를 테이블 시작 과정에서 계산합니다. 이로 인해 시작 시 테이블 로딩이 느려질 수 있습니다. 가능한 값:
  • true
  • false
관련 항목

lock_acquire_timeout_for_background_operations

머지, 뮤테이션 등의 백그라운드 작업에서 테이블 잠금을 획득하지 못한 상태로 실패 처리되기까지의 시간(초)입니다.

mutation_workload

뮤테이션과 다른 워크로드 간에 리소스를 어떻게 사용하고 공유할지 조절하는 데 사용됩니다. 지정한 값은 이 테이블의 백그라운드 뮤테이션에 대한 workload 설정 값으로 사용됩니다. 지정하지 않으면(빈 문자열) 서버 설정 mutation_workload가 대신 사용됩니다. 관련 항목

non_replicated_deduplication_window

중복 여부를 확인하기 위해 해시 합을 저장하는, 비복제 MergeTree 테이블에서 가장 최근에 삽입된 블록의 수입니다. Possible values:
  • 임의의 양의 정수
  • 0 (중복 제거 비활성화)
복제된 테이블(자세한 내용은 replicated_deduplication_window 설정 참조)과 유사한 중복 제거 메커니즘을 사용합니다. 중복 제거 해시 합은 삽입된 블록 전체를 포함합니다. 해시 합은 ClickHouse Keeper가 아니라 디스크의 로컬 파일에 기록됩니다.

notify_newest_block_number

최신 block 번호를 SharedJoin 또는 SharedSet에 전달합니다. ClickHouse Cloud에서만 지원됩니다.

nullable_serialization_version

Nullable(T) 컬럼에 사용되는 직렬화 메서드를 제어합니다. 가능한 값:
  • basic — Nullable(T)에 표준 직렬화를 사용합니다.
  • allow_sparse — Nullable(T)에서 희소 인코딩을 사용할 수 있도록 허용합니다.

object_serialization_version

JSON 데이터 타입의 직렬화 버전입니다. compatibility를 위해 필요합니다. 가능한 값:
  • v1
  • v2
  • v3
shared data 직렬화 버전을 변경할 수 있는 버전은 v3뿐입니다.

old_parts_lifetime

예기치 않은 server 재부팅 시 데이터 손실을 방지하기 위해 비활성 파트를 보관하는 시간(초)입니다. Possible values:
  • 임의의 양의 정수.
여러 파트를 새 파트로 머지한 후 ClickHouse는 원래 파트를 비활성으로 표시하고, old_parts_lifetime초가 지난 후에만 삭제합니다. 비활성 파트는 현재 쿼리에서 사용되지 않는 경우, 즉 파트의 refcount가 1인 경우 제거됩니다. 새 파트에는 fsync가 호출되지 않으므로 일정 시간 동안 새 파트는 server의 RAM(OS cache)에만 존재합니다. server가 예기치 않게 재부팅되면 새 파트가 손실되거나 손상될 수 있습니다. 데이터를 보호하기 위해 비활성 파트는 즉시 삭제되지 않습니다. 시작 시 ClickHouse는 파트의 무결성을 검사합니다. 병합된 파트가 손상된 경우 ClickHouse는 비활성 파트를 active 목록으로 되돌린 뒤 나중에 다시 머지합니다. 그런 다음 손상된 파트의 이름이 변경되고(broken_ 접두사가 추가됨) detached 폴더로 이동됩니다. 병합된 파트가 손상되지 않은 경우에는 원래 비활성 파트의 이름이 변경되고(ignored_ 접두사가 추가됨) detached 폴더로 이동됩니다. 기본 dirty_expire_centisecs 값(Linux 커널 설정)은 30 초(RAM에만 기록된 데이터가 저장되는 최대 시간)이지만, 디스크 시스템에 부하가 큰 경우 데이터는 훨씬 나중에 기록될 수 있습니다. 실험적으로 old_parts_lifetime 값은 480초로 선택되었으며, 이 시간 동안에는 새 파트가 디스크에 기록되는 것이 보장됩니다.

optimize_row_order

새로 삽입되는 테이블 파트의 압축 효율을 높이기 위해, 삽입 중 행 순서를 최적화할지 제어합니다. 일반적인 MergeTree 엔진 테이블에서만 효과가 있습니다. 특수한 MergeTree 엔진 테이블(예: CollapsingMergeTree)에는 적용되지 않습니다. MergeTree 테이블은 압축 코덱을 사용해 (선택적으로) 압축됩니다. LZ4 및 ZSTD와 같은 범용 압축 코덱은 데이터에 패턴이 있을 때 최대 압축률을 달성합니다. 같은 값이 길게 반복되는 구간은 일반적으로 매우 잘 압축됩니다. 이 설정을 활성화하면 ClickHouse는 새로 삽입된 파트의 데이터를, 새 테이블 파트의 여러 컬럼에 걸쳐 동일한 값이 연속으로 반복되는 구간 수를 최소화하는 행 순서로 저장하려고 시도합니다. 즉, 동일한 값의 반복 구간 수가 적을수록 각 구간은 길어지고 압축도 더 잘됩니다. 최적의 행 순서를 찾는 일은 계산적으로 실현 가능하지 않습니다(NP-hard). 따라서 ClickHouse는 원래 행 순서보다 압축률을 개선할 수 있는 행 순서를 빠르게 찾기 위해 휴리스틱을 사용합니다. 활성화하면 새 데이터의 행 순서를 분석하고 최적화하기 위한 추가 CPU 비용이 삽입 작업에 발생합니다. 데이터 특성에 따라 INSERT는 30-50% 더 오래 걸릴 수 있습니다. LZ4 또는 ZSTD의 압축률은 평균적으로 20-40% 향상됩니다. 이 설정은 기본 키가 없거나 low-cardinality 기본 키를 가진 테이블, 즉 서로 다른 기본 키 값이 적은 테이블에서 가장 효과적입니다. 예를 들어 DateTime64 타입의 timestamp 컬럼을 포함하는 high-cardinality 기본 키는 이 설정의 효과를 보기 어렵습니다.

packed_skip_index_max_bytes

이 임계값(직렬화된 온디스크 바이트 수, 즉 서브스트림의 압축과 해시 체인 이후 크기)보다 작은 skip-index 서브스트림은 별도의 skp_idx_<name>.idx2 / .mrk2 파일로 기록되지 않고, 각 파트별 단일 skp_idx.packed 아카이브로 묶입니다. 이보다 큰 서브스트림은 기존 파일별 레이아웃을 유지합니다. 이 결정은 쓰기 시점에 서브스트림별로 독립적으로 이루어지므로, 하나의 파트 안에서도 작은 인덱스(예: minmax)는 패킹되고 큰 인덱스(예: 규모가 큰 bloom_filter)는 파일별로 저장될 수 있습니다. 패킹을 완전히 비활성화하려면 0으로 설정합니다(기본값). 각 skip-index 서브스트림은 실제로 데이터 파일과 마크 파일로 구성되며, spill 여부를 결정하기 전까지 두 파일 모두 메모리에서 임계값까지 버퍼링됩니다. 따라서 쓰기 중 최대 메모리 사용량은 2 * packed_skip_index_max_bytes * (number of substreams that stay below the threshold)에 비례합니다. 전체 텍스트 인덱스는 이 설정에서 지원되지 않으며 패킹되지 않습니다. 패킹을 사용하면 테이블에 많은 skip 인덱스가 정의된 경우 inode 부담을 줄일 수 있습니다(예: add_minmax_index_for_numeric_columns 사용 시). 온디스크 포맷은 자체 기술형입니다. 리더는 skp_idx.packed를 감지하고 그 안의 패킹된 서브스트림을 투명하게 처리합니다. 이 설정을 변경해도 새로 기록되는 파트에만 영향을 미치며, 기존 파트는 쓰기 시점의 레이아웃을 그대로 유지합니다.

part_minmax_index_columns

파트별 min-max 인덱스에 포함할 컬럼을 선택합니다. 각 값은 이전 값에 더해 추가 컬럼 그룹을 활성화합니다. 가능한 값:
  • partition_key_only — 파티션 키 컬럼만 추적합니다.
  • with_block_number_offset — 파티션 키 컬럼에 더해 영속적으로 저장된 _block_number_block_offset 가상 컬럼도 추적합니다. 이 컬럼을 기준으로 파트 수준 프루닝을 사용할 수 있습니다.

propagate_types_serialization_versions_to_nested_types

true인 경우, string_serialization_version과 같은 직렬화 버전이 Array/Map/Nullable/JSON/etc.와 같은 중첩 타입 내부로 전파됩니다. 비활성화하면 직렬화 버전은 이 타입의 최상위 컬럼과 Tuple el에만 적용됩니다

ratio_of_defaults_for_sparse_serialization

컬럼에서 기본 값의 개수를 전체 값의 개수로 나눈 최소 비율입니다. 이 값을 설정하면 컬럼이 희소 직렬화를 사용하여 저장됩니다. 컬럼이 희소한 경우(대부분의 값이 0인 경우), ClickHouse는 이를 희소 포맷으로 인코딩하여 계산을 자동으로 최적화할 수 있습니다. 즉, 쿼리 중에 데이터를 완전히 압축 해제할 필요가 없습니다. 이 희소 직렬화를 활성화하려면 ratio_of_defaults_for_sparse_serialization 설정을 1.0보다 작게 지정하십시오. 값이 1.0 이상이면 컬럼은 항상 일반적인 전체 serialization을 사용하여 기록됩니다. 가능한 값:
  • 희소 직렬화를 활성화하려면 01 사이의 Float 값
  • 희소 직렬화를 사용하지 않으려면 1.0(또는 그 이상)
예시 다음 테이블에서는 s 컬럼의 값이 전체 행의 95%에서 빈 문자열입니다. my_regular_table에서는 희소 직렬화를 사용하지 않고, my_sparse_table에서는 ratio_of_defaults_for_sparse_serialization을 0.95로 설정합니다:
my_sparse_tables 컬럼이 디스크에서 차지하는 저장 공간이 더 적다는 점을 확인하십시오:
컬럼이 희소 인코딩을 사용하는지 여부는 system.parts_columns 테이블의 serialization_kind 컬럼을 확인하여 검증할 수 있습니다:
s에서 어느 부분이 희소 직렬화로 저장되었는지 확인할 수 있습니다:

reduce_blocking_parts_sleep_ms

ClickHouse Cloud에서만 사용할 수 있습니다. 범위가 삭제되거나 대체되지 않은 경우, 다시 blocking 파트를 줄이기 전에 대기하는 최소 시간입니다. 이 설정값을 낮추면 background_schedule_pool의 작업이 더 자주 트리거되어 대규모 클러스터에서 ZooKeeper로 많은 요청이 발생합니다.

replace_long_file_name_to_hash

컬럼의 파일 이름이 너무 길면(‘max_file_name_length’ 바이트 초과) SipHash128로 대체됩니다

replicated_can_become_leader

true이면 이 노드의 복제된 테이블 레플리카가 리더 역할을 맡으려고 시도합니다. 가능한 값:
  • true
  • false

search_orphaned_parts_disks

ClickHouse는 정책에 포함되지 않은 정의되지 않은 디스크의 데이터 파트를 누락하지 않도록, ATTACH 또는 CREATE table 시마다 모든 디스크에서 고아 파트를 스캔합니다. 고아 파트는 잠재적으로 안전하지 않은 스토리지 재구성으로 인해 발생하며, 예를 들어 디스크가 스토리지 정책에서 제외된 경우에 생길 수 있습니다. 이 설정은 디스크의 특성에 따라 검색할 디스크 범위를 제한합니다. 가능한 값:
  • any - 범위가 제한되지 않습니다.
  • local - 범위가 로컬 디스크로 제한됩니다.
  • none - 범위가 비어 있으며, 검색하지 않습니다

serialization_info_version

serialization.json을 작성할 때 사용하는 serialization info version입니다. 이 설정은 cluster upgrade 중 compatibility를 유지하는 데 필요합니다. 가능한 값:
  • basic - 기본 포맷입니다.
  • with_types - 추가 types_serialization_versions 필드가 포함된 포맷이며, 타입별 직렬화 버전을 사용할 수 있습니다. 이렇게 하면 string_serialization_version과 같은 설정이 적용됩니다.
rolling upgrade 중에는 새 server가 기존 server와 호환되는 data part를 생성하도록 이 값을 basic으로 설정하십시오. upgrade가 완료되면 타입별 직렬화 버전을 활성화하려면 WITH_TYPES로 전환하십시오.

share_nested_offsets

활성화된 경우(기본값), 공통 접두사를 가진 점 표기 이름의 Array 컬럼(예: n.a 및 n.b)은 Nested 구조의 일부로 처리됩니다. 즉, 디스크에서 하나의 offsets 파일(예: n.size0)을 공유하며, INSERT 중에는 배열 크기가 서로 같은지 검증합니다. 비활성화된 경우 각 Array 컬럼은 자체적인 독립 offset 파일을 가지며, 점 표기 이름은 더 이상 특별한 시맨틱을 갖지 않습니다. 또한 동일한 접두사를 공유하는 점 표기 Array 컬럼과 스칼라 컬럼이 함께 존재할 수 있습니다 (예: n UInt32와 n.a Array(String)). 이 설정은 테이블 생성 후에는 변경할 수 없습니다.

simultaneous_parts_removal_limit

오래된 파트가 많으면 정리 스레드가 한 번의 반복에서 최대 simultaneous_parts_removal_limit개의 파트를 삭제합니다. simultaneous_parts_removal_limit0으로 설정하면 제한 없이 삭제합니다.

storage_policy

스토리지 디스크 정책 이름

string_serialization_version

최상위 String 컬럼의 직렬화 포맷을 제어합니다. 이 설정은 serialization_info_version이 “with_types”로 설정된 경우에만 적용됩니다. with_size_stream으로 설정하면 최상위 String 컬럼은 문자열 길이를 저장하는 별도의 .size 서브컬럼을 사용해 직렬화되며, 인라인으로 저장되지 않습니다. 이렇게 하면 실제 .size 서브컬럼을 사용할 수 있고 압축 효율도 향상될 수 있습니다. 중첩된 String 타입(예: Nullable, LowCardinality, Array, Map 내부)은 Tuple 안에 있는 경우를 제외하면 영향을 받지 않습니다. 가능한 값:
  • single_stream — 크기 정보를 인라인으로 저장하는 표준 직렬화 포맷을 사용합니다.
  • with_size_stream — 최상위 String 컬럼에 별도의 크기 스트림을 사용합니다.

temporary_directories_lifetime

tmp_-directories를 유지하는 기간(초)입니다. 이 값을 낮추지 마십시오. 이 설정값이 너무 낮으면 머지와 뮤테이션이 제대로 작동하지 못할 수 있습니다.

try_fetch_recompressed_part_timeout

재압축을 동반한 머지를 시작하기 전에 대기하는 타임아웃(초)입니다. 이 시간 동안 ClickHouse는 이 재압축 머지가 할당된 레플리카에서 재압축된 파트를 가져오려고 시도합니다. 대부분의 경우 재압축은 느리므로, 이 타임아웃이 지나기 전에는 재압축을 동반한 머지를 시작하지 않고, 대신 이 재압축 머지가 할당된 레플리카에서 재압축된 파트를 가져오려고 시도합니다. 가능한 값:
  • 임의의 양의 정수.

ttl_only_drop_parts

해당 파트의 모든 행이 TTL 설정에 따라 만료되었을 때, MergeTree 테이블에서 데이터 파트 전체를 삭제할지 제어합니다. ttl_only_drop_parts가 비활성화된 경우(기본값), TTL 설정에 따라 만료된 행만 삭제됩니다. ttl_only_drop_parts가 활성화된 경우, 해당 파트의 모든 행이 TTL 설정에 따라 만료되면 파트 전체가 삭제됩니다.

wait_for_unique_parts_send_before_shutdown_ms

테이블은 종료되기 전에 현재 레플리카에만 존재하는 고유 파트를 다른 레플리카가 가져갈 수 있도록 지정된 시간 동안 대기합니다(0은 비활성화를 의미합니다).

zookeeper_session_expiration_check_period

ZooKeeper 세션 만료 확인 주기입니다. 단위는 초입니다. 가능한 값:
  • 양의 정수 아무 값이나 가능합니다.
마지막 수정일 2026년 7월 24일