-
Checksum 알아보기 (Data Integrity, 데이터 무결성, 체크섬)BigData 2023. 12. 23. 21:30728x90반응형
- 목차
소개.
데이터 무결성 (Data Integrity) 을 검증하는 하나의 방식인 checksum 에 대해서 알아보려고 합니다.
체크섬은 네트워크 트래픽이나 Disk IO 관점에서 주로 사용되는 방식이구요.
Disk IO 도 하나의 네트워크라고 생각했을 때에 데이터가 전송되는 과정에서 올바르게 카피되었는지를 판단하는 하나의 방식입니다.
예를 들어, 인터넷을 통해서 파일을 다운로드하는 경우가 있습니다.
웹 브라우저를 통해서 어떠한 파일을 다운로드는 받을 때,
파일을 관리하는 파일서버는 웹브라우저라는 클라이언트에게 파일을 제공합니다.
파일 서버는 전송해야할 파일의 checksum 을 계산하고 클라이언트에게 checksum 을 제공합니다.
클라이언트는 시간을 들여 파일을 모두 다운로드받게 되며,
그 이후에 checksum 을 계산하여 파일서버가 건내준 checksum 과 일치하는지 검증하게 됩니다.
즉 checksum 은 데이터 전달 과정에서 데이터의 Loss 가 있진 않은지, 데이터가 Corrupted 되진 않았는지를 확인하는 한가지 수단으로 생각할 수 있습니다.
checksum 이 사용되는 분야는 매우 넓습니다.
데이터베이스, 네트워크, 파일 다운로드 등 여러 분야에서 사용됩니다.
이번 글에서 checksum 에 대한 내용에 대해서 알아보겠습니다.
Data Integrity (무결성).
Data Integrity 는 데이터의 무결성을 의미합니다.
어떠한 시스템이 Data Integrity 를 준수한다는 의미는 데이터가 손상되지 않음을 보장한다는 뜻입니다.
파일의 관점에서 Data Integrity 의 설명을 이어나가보겠습니다.
하나의 파일이 여러 서버와 서버를 이동합니다.
파일을 다운로드하거나 데이터를 백업하는 등의 오늘날에는 데이터의 이동이 굉장히 잦습니다.
이때에 데이터가 손상될 수 있는 경우의 수는 매우 많습니다.
- 파일 서버의 디스크에 존재하는 파일을 메모리로 로드해야합니다.
- 로드된 파일은 Network Protocol 에 따라 잘게 쪼개지고 정보가 추가됩니다.
- 네트워크를 통해 데이터가 이동합니다.
- 클라이언트는 제공된 데이터를 읽어들이고 저장합니다.
위 상황에서 checksum 이 흔히 사용된다고 생각하시면 됩니다.
TCP Packet Header.
네트워크 전송 단계에서 Transport Layer 가 존재합니다.
Transport Layer 의 대표적인 프로토콜이 TCP 와 UDP 인데요.
이 프로토콜은 상위 Application Layer 에서 제공된 데이터를 Packet 이라는 단위로 잘게 쪼갭니다.
그리고 각 Packet 에 Header 를 추가하게 되는데, 이 Header 에 checksum 정보를 추가하죠.
서버와 클라이언트는 Packet 을 주고 받기 때문에 Packet Header 의 checksum 을 기준으로
Data Integrity 을 확인하게 됩니다.
파일 다운로드.
HDFS, S3 와 같은 데이터 스토리지는 기본적으로 checksum 을 사용합니다.
S3 의 경우에는 업로드된 Object 파일 자체에 checksum 값이 추가됩니다.
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/checking-object-integrity.html
HDFS 에서도 DataNode 에 저장되는 Data Block 들이 자체적인 Checksum 값을 가지고 있습니다.
파일 서버를 통한 클라이언트의 파일 다운로드도 그 맥락을 같이 합니다.
각 파일마다 checksum 값을 가지고 있어도 되고,
클라이언트가 파일 다운로드를 요청할 때에 checksum 값을 만들어도 됩니다.
이는 파일 서버의 권한이자 재량이구요.
어찌되었든 클라이언트는 그 파일의 checksum 을 반드시 제공받아 정상적인 파일 다운로드가 되었음을 확인할 수 있어야합니다.
Checksum 에서 사용하는 알고리즘.
checksum 은 주로 Hashing 알고리즘이나 Bit 연산이 사용됩니다.
네트워크 Packet 이나 컴퓨터 내부에서의 데이터 이동의 경우에는 Byte 단위의 데이터가 흐릅니다.
이 과정에서는 단순히 Bit 를 Sum 하는 방식으로 checksum 을 만들어냅니다.
그리고 파일의 관점에서는 Hashing 알고리즘을 사용하게 됩니다.
데이터 이동의 전 Hashing 값과 데이터 이동의 후 Hashing 값이 동일함을 비교하는 방식으로 사용되구요.
주로 사용되는 알고리즘은 MD5, SHA-256 등이 사용됩니다.
Bit 연산이나 Hashing 은 알다시피 Encrypt - Decrypt 가 되는 양방향 구조가 아닙니다.
그리고 여러 input 이 동일한 output 으로 수렴될 수 있죠.
이러한 한계가 있다는 점도 알아두시면 좋을 것 같습니다.
반응형'BigData' 카테고리의 다른 글
[Avro] Avro Schema 알아보기 (0) 2024.03.06 Docker 로 Minio Storage 구현하기 (0) 2024.01.12 ASCII 코드 알아보기 (2) 2023.12.22 Trino 도커로 따라하기 (0) 2023.12.03 Thrift 알아보기 (0) 2023.11.04