---
title: Plank의 레이크 쓰기 방식
description: 레코드가 타입이 지정된 Parquet 파일, 준비된 작업, Iceberg 커밋, 키 기반 병합, 암호화, 복구를 거치는 과정을 살펴봅니다.
species: concept
---
# Plank의 레이크 쓰기 방식

Plank는 소스 레코드를 변경 불가능한 Parquet 파일과 준비된 테이블 작업으로 변환합니다. 카탈로그가 이 작업을 Iceberg 메타데이터에 적용하므로, 소스 실행은 읽기 작업에서 이미 사용하는 파일을 변경하지 않고 새 스냅샷을 게시할 수 있습니다.

## 파일은 변경되지 않습니다

행은 타입이 지정된 테이블 스트림으로 들어옵니다. Plank는 레이크에서 허용하는 닫힌 타입 집합에 따라 각 값을 검증하고, 크기가 제한된 행 그룹을 구성하며, 표준 형식의 Parquet를 씁니다. 파일이 준비된 뒤에는 그 바이트가 바뀌지 않습니다.

따라서 업데이트는 새 데이터 파일 또는 삭제 파일과 새 Iceberg 스냅샷을 생성합니다. 기존 스냅샷은 보존 정책에 따라 더는 도달할 수 없다는 것이 확인될 때까지 기존 파일을 계속 참조합니다.

## 커밋 전에 작업을 준비합니다

완료된 스트림은 레이크, 네임스페이스, 테이블, 스키마, 파일, 병합 의도를 명시하는 작업을 생성합니다. 준비만으로 데이터가 공개되지는 않습니다. 카탈로그는 먼저 식별 정보와 예상 상태를 검증한 다음 포인터 갱신을 조정하여 메타데이터를 게시합니다.

이렇게 단계를 분리하므로 안전하게 재시도할 수 있습니다. 응답이 유실되면 정확히 준비된 작업의 근거와 대조하여 상태를 확인할 수 있습니다. 알 수 없는 커밋 상태를 확정된 충돌로 보고하지 않습니다. 커밋 여부가 불확실한 상태에서 파일을 삭제하면 실제로 게시된 데이터를 없앨 수 있기 때문입니다.

## 키 기반 병합

증분 소스 테이블은 선언된 키를 기준으로 들어오는 행을 병합합니다. 새 스냅샷은 각 키의 최신 행을 유지하고, 소스가 행의 부재를 확인하면 삭제 표시를 포함합니다.

조정 과정에서는 변경되지 않은 표준 Parquet 행 그룹을 바이트 그대로 이어 붙이고 변경된 그룹만 다시 인코딩할 수 있습니다. 이는 최적화일 뿐 의미가 다른 별도 처리 방식은 아닙니다. 스키마가 일치하지 않거나 지원하지 않는 레이아웃이면 전체 다시 쓰기로 전환합니다.

## 체크포인트와 복구

장시간 소스 읽기는 크기가 제한된 주기마다 완료 상태를 확정합니다. 비정상 종료가 발생하면 커밋되지 않은 스트림은 폐기하고, 다음 실행은 마지막으로 영구 저장된 소스 위치에서 재개합니다. 현재 스트림의 식별 정보는 두 시도가 동일한 메모리 핸들을 통해 게시하지 못하도록 막습니다.

준비된 작업은 카탈로그가 수락하거나 명확히 거부할 때까지 재실행할 수 있습니다. 정리는 파일의 경과 시간만이 아니라 검증된 메타데이터에서의 도달 가능성을 기준으로 합니다.

## 암호화와 무결성

Plank는 파일 형식의 암호화 경계를 담당하고, 권한이 있는 읽기 작업에 필요한 메타데이터를 기록합니다. 읽기 작업은 버킷 전체에 대한 권한 대신 범위와 유효기간이 제한된 스토리지 자격 증명을 받습니다.

저장된 스키마, 키, 통계, 파일 참조는 읽을 때 모두 신뢰할 수 없는 입력으로 취급합니다. 할당 전에 한도를 검사합니다. 잘못된 형식의 파일이나 메타데이터 문서는 거부합니다. 타입을 추측하거나 무결성 검사를 건너뛰지 않습니다.

그 결과 소스 실행과 읽기 작업을 직접 조율하지 않아도 원자적 스냅샷, 영속적으로 저장된 이력, 키 기반 병합, Parquet 내보내기를 통해 확인할 수 있는 물리적 계약이 성립합니다.
