본문 바로가기
독서

[견고한 데이터 엔지니어링] 6장. 데이터 저장 | LIM

by forestlim 2023. 8. 24.
728x90
반응형

데이터 저장은 데이터 엔지니어링 수명 주기의 토대로서 주요 단계인 수집, 변환 및 서빙의 기초가 된다.

 

데이터 스토리지의 기본 구성 요소

스토리지는 너무 일반적이다 보니 당연한 것으로 받아들이기 쉽다.

자기 디스크 드라이브는 오래전부터 사용되어 왔으며, 저장된 데이터의 기가바이트당 가격이 SSD보다 훨씬 저렴하므로 여전히 대용량 데이터 스토리지 시스템의 근간을 이룬다. 

 

[임의 접근 메모리]

우리는 일반적으로 임의 접근 메모리(Random-Access Memory) 와 메모리(Memory)라는 용어를 혼용해 사용한다. 엄밀히 말하자면 자기 드라이브와 SSD는 나중에 임의 접근 검색을 위해 데이터를 저장하는 메모리 역할도 하지만, RAM에는 다음과 같은 몇 가지 특징이 있다. 

  • CPU에 연결되고 CPU 주소 공간에 매핑된다.
  • CPU 가 실행하는 코드와 이 코드가 직접 처리하는 데이터를 저장한다.
  • RAM은 휘발성이며 자기 드라이브와 SSD는 비휘발성이다. RAM은 전원이 공급되지 않으면 1초 이내에 데이터가 손실된다.
  • SSD스토리지보다 훨씬 빠른 전송 속도와 빠른 검색 시간을 제공한다.
  • SSD스토리지보다 훨씬 비싼 GB당 약 10달러이다.
  • 개별 CPU 및 메모리 컨트롤러에 연결된 RAM의 양에 제한이 있다. 

현재의 CPU 구조는 거의 항상 폰 노이만 구조를 채택하고 있으며 코드와 데이터는 동일한 메모리 공간에 함께 저장된다. 

일부 데이터 베이스는 RAM을 기본 스토리지 계층으로 취급해 초고속 읽기 및 쓰기 성능을 제공한다. 메모리에 저장된 데이터가 클러스터 간에 복제되더라도, 정전으로 인해 여러 노드의 다운이 발생하면 데이터가 손실될 수 있다. 

 

[직렬화]

직렬화는 또 다른 원시 스토리지 구성 요소이자 데이터베이스 설계의 핵심 요소다. 소프트웨어에 의해 시스템 메모리에 저장되는 데이터는 일반적으로 디스크에 저장하거나 네트워크를 통해 전송하기에 적합한 형식이 아니다. 직렬화는 데이터를 평탄화하고 표준 포맷으로 패킹하는 프로세스로, 판독기가 디코딩할 수 있다. 데이터 엔지니어는 일반적인 직렬화 관행과 형식, 특히 현재 가장 인기 있는 형식(ex. 아파치 파케이), 하이브리드 직렬화(ex. 아파치 후디) 및 인메모리 직렬화(ex. 아파치 애로우)에 익숙해질 것을 권한다.

 

 

데이터 스토리지 시스템

데이터는 분산 스토리지라고 하는 여러 서버에 저장할 수 있다. 분산 스토리지는 데이터를 분산된 방식으로 저장하는 것이 목적인 분산 시스템이다. 예를 들어 객체 스토리지, 아파치 스파크 및 클라우드 데이터 웨어하우스는 분산 스토리지 아키텍처에 의존한다.

 

최종 일관성 vs 강력한 일관성

분산형 시스템은 스토리지와 쿼리 정확도 측면에서 딜레마를 안고 있다. 시스템 노드 간에 변경 내용을 복제하는 데는 시간이 걸리며, 대부분의 경우 현재 데이터를 가져오는 것과 분산 데이터베이스에서 '일종의' 현재 데이터를 가져오는 것 사이에 균형이 존재한다. 

 

BASE는 최종 일관성의 기초다. 기본적으로 가용성을 보장하는, 소프트한 상태의, 최종 일관성을 의미한다. 

최종 일관성은 어느 시점에서 데이터를 읽으면 일관된 값을 반환한다. 

 

최종 일관성의 반대 개념은 강력한 일관성이다. 강력한 일관성을 갖춘 분산형 데이터베이스는 먼저 모든 노드에 대한 쓰기가 합의에 따라 분산되고, 데이터베이스에 대한 모든 읽기가 일관된 값을 반환하도록 보장한다. 이러한 강력한 일관성은 쿼리 지연 시간이 길어지고 데이터베이스에서 읽을 때마다 정확한 데이터가 필요할 때 사용할 수 있다.

 

 

[네트워크 결합 스토리지]

네트워크 결합 스토리지(Network-attached Storage)(NAS) 시스템은 네트워크를 통해 클라이언트에 파일 스토리지 시스템을 제공한다. 네트워크를 통해 파일 시스템에 접근하면 성능 저하가 발생하지만, 중복성과 안정성, 리소스의 세밀한 제어, 대규모 가상 볼륨을 위한 여러 디스크 간의 스토리지 풀링, 여러 시스템 간의 파일 공유 등 스토리지 가상화에도 상당한 이점이 있다. 

또한, NAS를 사용하는 이유로는 비용 효율성 측면도 있다. 전용 스토리지 솔류션에 비해 NAS는 상대적으로 저렴하며, 일반적인 소비자나 중소기업에게 적합한 스토리지 솔류션을 제공한다. 

 

이러한 장점들로 NAS는 개인, 가정, 중소기업에서 데이터 저장, 공유 및 백업 솔루션으로 널리 사용되고 있다. 

 

[객체 스토리지]

객체 스토리지에는 모든 형태와 크기의 객체가 포함된다. 객체 스토리지라는 용어가 다소 혼란스러울 수 있는데 여기서는 특수한 파일형 구조를 가리키는데, 이는 TXT, CSV, JSON, 이미지, 비디오, 오디오 등 모든 유형의 파일이 될 수 있다. 객체 저장소는 랜덤 쓰기 또는 덧붙이기 작업을 지원하지 않는다. 대신 바이트 스트림으로 한 번만 쓰인다. 

 

객체 저장소는 여러 디스크에 걸쳐 매우 뛰어난 성능의 병렬 스트림 쓰기 및 읽기를 지원한다. 특히 읽기 대역폭의 경우 병렬 요청 수, 데이터 읽기에 사용되는 가상 머신 수, CPU 코어 수에 따라 확장할 수 있다. 이러한 특성 덕분에 객체 스토리지는 대용량의 웹 트래픽을 처리하거나 고도로 병렬 분산된 쿼리 엔진에 데이터를 전달하는 데 이상적이다. 

 

또한 클라우드 객체스토리지는 컴퓨팅과 스토리지를 분리하는 핵심 요소로, 엔지니어는 임시 클러스터로 데이터를 처리하고 필요에 따라 클러스터를 확장 및 축소할 수 있다. 

 

객체 저장소는 매초마다 많은 소규모 갱신이 이루어지는 트랜잭션 워크로드에 적합하지 않으며, 이러한 사용 사례는 트랜잭션 데이터베이스 또는 블록 스토리지 시스템에서 훨씬 잘 처리된다. 즉, 객체 저장소는 각 작업에서 대량의 데이터를 갱신하는 낮은 속도의 갱신 작업에 적합하다. 

 

[객체 조회]

객체 저장소는 키-값 쌍 저장소다. 파일 저장소와 달리 객체 저장소는 디렉터리 트리를 사용해 객체를 검색하지 않는다.

클라우드 객체 저장소가 디렉터리 트리 시맨틱을 지원하는 것처럼 보일 수 있지만, 실제 디렉터리 계층은 존재하지 않는다. 

 

S3://oreilly-data-engineering-book/project-data/11/23/2021/data.txt

 

표면적으로는 디렉터리 트리 시맨틱을 지원하는 것처럼 보일 수 있으나, 백그라운드에서 객체 시스템은 디렉터리 트리를 탐색해 객체에 도달하지 않는다. 이것은 사소한 기술적 세부 사항처럼 보일 수 있지만, 엔지니어는 객체 저장소에서 특정 '디렉터리' 수준의 작업 비용이 많이 든다는 것을 이해해야 한다. 

 

 

[스트리밍 스토리지]

아파치 카프카가 스트리밍 스토리지의 대표적인 예시다. 메시지 큐의 경우 저장된 데이터는 일시적이며 일정 기간이 지나면 사라질 것으로 예상된다. 하지만 아파치 카프카 같은 분산되고 확장 가능한 스트리밍 프레임워크는 매우 오랜 기간 동안 스트리밍 데이터를 보존할 수 있게 됐다. 카프카는 자주 접근하지 않는 오래된 메시지를 객체 스토리지에 푸시해 무기한 데이터 보존을 지원한다. 

 

이러한 시스템의 데이터 보관과 밀접하게 관련된 개념이 리플레이다. 리플레이를 사용하면 스트리밍 시스템에 저장된 과거 데이터의 범위를 반환할 수 있다. 

 

 

데이터 엔지니어링 스토리지 개요

데이터 과학, 데이터 분석 및 보고 활용 사례를 지원하는 추상화에 대해 알아보자. 

데이터 엔지니어에게 필요한 스토리지 추상화는 몇 가지 주요 고려 사항으로 요약된다.

 

📌 목적 및 사용 사례

데이터를 저장하는 목적 파악. 어떤 용도로 사용할 것인가?

 

📌 갱신 패턴

추상화는 대량 갱신, 스트리밍 입력 또는 갱신 입력에 최적화되어 있는가?

 

📌 비용

직/간접적인 재정 비용은 얼마인가? 가치 실현 시간과 기회비용은 어떠한가?

 

📌스토리지와 컴퓨팅 분리

 

 

스토리지의 주요 아이디어와 동향

[데이터 카탈로그]

조직 전체의 모든 데이터에 대한 중앙 집중식 메타데이터 저장소다. 데이터 카탈로그는 일반적으로 운영 및 분석 데이터 원천에서 작동하며 데이터 계통과 데이터 관계 표현을 통합하고 사용자가 데이터 설명을 편집할 수 있도록 한다. 

 

데이터 카탈로그를 사용하면 시스템에서 메타데이터를 쉽게 사용할 수 있다. 데이터 카탈로그를 조직적으로 사용하면 비즈니스 사용자, 분석가, 데이터 과학자 및 엔지니어가 질문에 답할 데이터를 검색할 수 있다. 데이터 카탈로그는 조직 간 커뮤니케이션과 협업을 간소화한다.

 

[컴퓨팅과 스토리지의 분리]

컴퓨팅과 스토리지의 분리는 오늘날 클라우드 시대의 표준 데이터 접근 및 쿼리 패턴으로 부상했다. 

 

코로게이션 vs 분리

컴퓨팅과 스토리지의 코로게이션은 오랫동안 데이터베이스 성능을 개선하기 위한 표준적인 방법으로 사용되어 왔다. 트랜잭션 데이터베이스의 경우에는 코로게이션을 통해 지연 시간이 짧은 디스크 읽기와 높은 대역폭을 확보할 수 있었다. 

 

이런 코로게이션이 높은 성능을 제공한다면, 왜 컴퓨팅과 스토리지를 분리하는 방향으로 전환하는걸까?

다음과 같은 이유들이 있다. 

  • 임시성과 확장성
  • 데이터 내구성과 가용성

[무복사 복제]

무복사 복제는 데이터의 물리적 복사 없이 데이터셋의 복제본을 생성하는 기술. 이 방식은 특히 대용량 데이터를 다루는 환경에서 매우 유용하며, 스토리지 비용, 시간, 및 리소스를 절약할 수 있다. 포인터를 생성해 실제 데이터를 복사하는 게 아니고 원본 데이터를 가리키도록 한다. 변경이 발생하면, 변경된 데이터만 실제로 디스크에 기록되고, 변경된 데이터를 참조하도록 한다. 

 

 

[데이터의 온도]

핫 데이터 vs 웜 데이터 vs 콜드 데이터

오른쪽으로 갈 수록 접근이 빈번하지 않고 스토리지 비용이 저렴하며 검색 비용이 높아진다. 

데이터 엔지니어는 핫 스토리지에서 웜 또는 콜드 스토리지로의 파급 효과, 즉 스필오버를 고려해야 한다. 

데이터에 대해서 자동 수명 주기 정책을 만드는 것도 좋은 방법이다. 

 

[데이터 보존]

언젠가 이 데이터가 필요할지도 모른다는 기대감 때문에 시작된 막연한 데이터 보존은 필연적으로 다루기 어렵고 지저분해져서 데이터 늪과 데이터 보존에 대한 규제 단속을 초래한다. 데이터 엔지니어는 데이터 보존과 관련해 어떤 데이터를 얼마나 오래 보존해야 할 지를 고려해야 한다. 

 

  • 가치
  • 시간
  • 컴플라이언스
    • 특정 규정에 따라 일정 기간 데이터를 보관해야 할 수 있다. 이러한 상황에서는 접근 요청이 발생할 가능성이 낮더라도 요청 시 데이터에 접근할 수 있어야 한다.
  • 비용
    • 데이터는 ROI가 있는 자산이다. 데이터를 보존해야 하는 타임라인을 고려하자. 

 

[싱글테넌트 스토리지와 멀티테넌스 스토리지 비교]

싱글테넌트 스토리지를 채택하면 모든 테넌트에 전용 스토리지가 제공된다. 각 테넌트는 각 데이터베이스를 얻는다고 하면 이러한 데이터베이스 간에는 데이터가 공유되지 않으며 스토리지가 완전히 격리된다. 싱글테넌트 스토리지를 사용하는 예로는 각 고객의 데이터를 분리해 저장해야 하며 다른 고객의 데이터와 혼합할 수 없는 경우를 들 수 있다. 하지만 이는 복잡해질 수 있으며 여러 테넌트의 테이블을 쿼리해 통합 보기를 생성해야 할 때 문제가 발생할 수 있다. 

 

멀티테넌트 스토리지를 사용하면 단일 데이터베이스 내에 여러 테넌트를 저장할 수 있다. 예를 들어 고객이 자체 데이터베이스를 사용하는 싱글테넌트 시나리오 대신, 여러 고객이 멀티 테넌트 데이터베이스의 동일한 데이터베이스 스키마 또는 테이블에 상주할 수 있다. 

 


데이터 스토리지에 대한 책임 분담은 관련된 조직의 성숙도에 크게 달라진다. 또한 보안 및 데이터 관리도 매우 중요하다는 것을 잊지 말아야 한다. 

728x90
반응형

댓글