본문 바로가기
개인 공부 일지/아키텍처

소프트웨어 아키텍처 및 시스템 설계 - (4) 데이터 스토리지

by 대체로 무해함 2025. 9. 14.

해당 시리즈는 【한글자막】 소프트웨어 아키텍처 및 대규모 시스템 설계 강의를 보고 정리한 내용입니다.

데이터 스토리지 - 관계형 데이터베이스

  • 대규모 시스템에서 항상 스토리지 비용은 큰 문제임

장단점

  • 장점
    • 복잡하고 유연한 쿼리를 사용할 수 있음
    • 가격 절감 가능 (중복 레코드 관리 측면에서 적은 공간 사용)
    • 추론하기 쉬움 (직관성)
    • ACID 트랜잭션
  • 단점
    • 스키마 테이블이 강요됨 (테이블 구조 변경의 어려움)
    • 유지 관리 및 크기 조정에 대해 높은 비용
    • ACID를 지키기 위한 비교적 느린 성능

데이터 스토리지 - 비관계형 데이터베이스

  • 관계형 데이터베이스의 문제를 해결하기 위해 도입
    • 관계형 데이터베이스는 일부 레코드에 대한 정보를 넣더라도 모든 레코드에 대한 관리가 필요함
      • 비관계형의 경우 기존 레코드에 영향을 주지 않고, 하나 혹은 여러 레코드에 수정이 가능함
    • 테이블 구조만을 지원함
      • 실제 프로그래밍 언어 대부분은 테이블 구조가 아닌 다양한 자료구조를 지원함
      • 비관계형은 여러 자료구조를 지원하여 ORM의 필요성을 낮춤

Trade-off

  • 관계형 데이터베이스에 비해 빠른 성능에 초점을 맞춰 설계됨
  • 레코드 분석 능력
    • 데이터 구조가 레코드별로 다양하기 때문에 일괄 분석 불가
  • 기존 방식으로 테이블 연결 불가
    • 데이터 구조가 바뀌면서 기존의 방식이 제한됨
  • ACID 지원 불가

비관계형 데이터베이스의 유형

  1. Key / Value
    • 대규모 해시 테이블이나 각 키가 가진 유형에 대한 Dictionary와 같은 구조
    • 캐싱 페이지, 카운터 등 지연 없이 데이터를 읽는 경우 효과적인 구조
  2. Document
    • 문서 자체의 작은 규모의 구조를 갖춘 문서 집합을 저장
    • 좀 더 프로그래밍 언어에 쉽게 매핑됨
  3. Graph
    • 링크를 걸고 다중으로 분석함
    • 레코드를 읽고 분석하는데 뛰어남
    • 이상 거래 분석을 위한 동일 주소의 다중 트랜잭션 분석이나 추천 엔진에 주로 사용됨

데이터베이스의 가용성, 확장성, 성능을 개선하는 기술

인덱싱

  • 테이블 크기가 클수록 조건에 맞는 탐색에 걸리는 시간이 큼
  • 스캔과 정렬에 전체 테이블을 최소 1회는 탐색하게 됨 ⇒ 이런 작업은 병목 현상이 됨
  • 인덱스는 헬퍼 테이블로 하나 혹은 여러 열에 대해 생성할 수 있음
    • 해시 맵이나 B Tree를 활용함
  • 읽기 쿼리를 증가 시키지만 추가 공간과 쓰기 쿼리의 시간을 증가 시킴
  • 쿼리 속도를 높이기 위해 Document 유형의 비관계형 데이터베이스에도 사용됨

파티셔닝/샤딩

  • 데이터를 각각 서로 다른 데이터베이스에 분산하는 방법
  • 보통은 데이터베이스의 높은 성능을 위해 별도의 컴퓨터에 데이터베이스를 분산함
  • 다중 인스턴스를 통해 높은 처리량과 각기 다른 데이터에 대한 쿼리를 병렬로 정확히 처리 가능함
  • 여러 데이터 베이스를 사용하면서 확장성과 성능을 만족시킬 수 있음
  • 접근하려는 데이터가 있는 데이터베이스에 정확히 전달하는 것이 어렵고 오버헤드가 발생함
  • 비관계형 데이터베이스는 의도적으로 레코드를 분리하므로 데이터를 분산하기 관계형보다 훨씬 쉬움

복제

  • 모든 데이터를 한 곳에 저장하면 데이터베이스는 단일 장애점이 되기 쉬움
    • 데이터를 다중으로 복사하여 내결함성과 높은 가용성을 보장하여 이를 해결하는 방법
  • 여러 사용자의 쿼리를 여러 데이터베이스로 분산함으로써 높은 처리량도 만족시킬 수 있음
  • 레코드 생성, 수정, 삭제에 뛰어난 면을 보이나 충돌을 방지하고, 레코드의 일관성과 정확성을 보장해야 하는 면에서 구현이 어려움
  • 비관계형 데이터베이스는 구현에 따라 다양하게 지원함

CAP 이론

CAP?

  • C = Consistency, A = Availability, P = Partition Tolerance
  • 네트워크 분할이 일어난 경우, 분산 데이터베이스는 일관성과 가용성을 모두 만족시키지 못한다는 이론
    • 네트워크 분할로 특정 데이터베이스가 고립됐을 때, 해당 데이터베이스에 요청이 발생한 경우
      • 가용성을 우선할 경우 다른 데이터베이스와 다를 수 있음을 파악하고 요청에 응답
      • 일관성을 우선할 경우 해당 요청을 나중에 처리하도록 미룸

실제로 어떤 의미?

  • 특정 환경에서 데이터베이스를 선택하거나 정리할 경우 3가지 속성 중 하나를 포기해야 함
  • 포기 유형
    • CA - 일관성과 가용성을 가지나 분할 포용성이 없음
      • 중앙 집중식으로 배치된 하나의 데이터베이스
      • 네트워크 통신을 제거하여 네트워크 분할 가능성을 없앰
    • CP -일관성과 분할 포용성이 있으나 가용성이 없음
      • 상품 판매 사이트, 티켓팅 등
    • AP - 가용성과 분할 포용성이 있으나 일관성이 없음
      • 좋아요와 같이 꼭 최신 데이터가 필요하진 않은 경우
  • 포기한다고 해서 0이거나 100인 구조는 아님
    • 일관성과 가용성을 필요에 따라 비율을 조정하는 식으로 선택하게 됨
    • 아키텍처 설계 관점에서 이러한 부분의 절충은 매우 중요함

확장 가능한 비정형 데이터 스토리지

비정형 데이터란?

  • Blob과 같이 특정 데이터 형태가 없는 데이터
  • 주로 사용자가 업로드하는 영상, 이미지 파일 등에 해당함
  • 시스템에 사용되는 데이터베이스의 Snapshot과 같은 백업을 비정형 데이터로 저장할 수 있음
    • 재해 복구, 아카이빙 등에 활용할 수 있음
  • 분석이나 AI에 활용하기 위한 데이터 포인트도 비정형 데이터임
    • 크기가 크거나 이진 데이터를 포함할 수 있음
    • 테라바이트나 페타바이트 단위가 될 수 있음

분산 파일 시스템

  • 네트워크 상에 상호 연결된 스토리지 장치를 활용하는 방식
    • 별도의 분산 파일 시스템을 통해 복사본에 대한 일관성이나 자동 복구를 보장함
    • 이진 파일을 폴더 안의 파일이 있는 트리 구조로 저장할 수 있음
  • 장점
    • 파일에 접근하는데 있어 별도의 API를 요구하지 않음
    • 필요에 의해 쉽게 파일을 수정할 수 있음
    • 성능을 요구하는 작업에 효율적임
  • 한계점
    • 생성 가능한 파일 수의 제한이 있음
    • 웹 API로 쉽게 접근할 수 없음 - 필요하면 별도의 추상화가 요구됨

객체 저장소

  • 확장 가능한 스토리지 솔루션
    • 여러 개의 컨테이너(버킷)가 있는 수평 구조
    • 저장하는 객체의 갯수에 제한이 따로 없음 (예산적 제한은 존재)
  • 객체에 대한 메타데이터에 대한 저장 공간이 추가적으로 요구됨
  • 제공하는 업체에 따라 스케일이 상이함
    • 예산상, 법률상, 성능상으로 제약이 따라올 수 있음
    • 오픈 소스 및 타사 관리 솔루션을 통해 온프레미스 환경을 객체 저장소로 전환할 수 있음
    • 클라우드와 데이터 센터를 모두 하나의 API로 통합하여 동일하게 접근 가능하게 하는 방법
  • 백그라운드에서 데이터 복제를 진행하므로 물리적 스토리지 손상에 따른 데이터 손상이 적음
  • 장점
    • 비정형 데이터를 인터넷 규모로 저장할 수 있음
      • 선형으로 확장할 경우 분산 파일 시스템처럼 파일 시스템을 추가하는 방식을 사용함
    • 저장 가능한 이진 객체 개수에 제한이 없음
    • 단일 크기 제한이 높음
      • 데이터베이스 백업이나 아카이빙 용도의 솔루션이 됨
    • 별도의 HTTP + REST API를 제공하여 이미지, 영상이나 웹 컨텐츠 저장에 적합함
    • 저장하는 객체에 대해 버저닝을 지원함
  • 단점
    • 객체를 접근하여 수정할 수 없고, 새 버전으로 교체만 가능
      • 성능에 부정적인 영향을 끼치고, 협업 목적의 경우 데이터 추가가 불가능함
    • 객체를 읽을 때 파일 시스템과 달리 별도의 HTTP나 REST API로 접근해야 함
    • 분산 파일 시스템에 비해 높은 처리량 작업에 불리함