데이터 저장소 설계
데이터 저장소 설계
스토리지 선택
스토리지는 Application 성능에 영향을 미치는 핵심 요소 중 하나입니다.
모든 소프트웨어 Application은 설치, 로깅, 파일 액세스를 위해 스토리지와 상호작용합니다.
스토리지의 최적 솔루션은 다음 요소에 따라 달라질 수 있습니다.
| 액세스 방법 | 스토리지 고려 요소 |
|---|---|
| 액세스 패턴 | 순차적 액세스, 랜덤 액세스 |
| 액세스 빈도 | 온라인(Hot), 오프라인(Warm), 아카이브(Cold) |
| 업데이트 빈도 | 업데이트 빈도 높음(운영체제, 데이터베이스 볼륨), 낮음(파일 저장 등) |
| 액세스 가용성 | 단일 인스턴스 연결, 공유 연결 |
Samsung Cloud Platform에서 제공하는 스토리지 옵션은 아래와 같습니다.
| 구분 | Block Storage | File Storage | Object Storage | Archive Storage |
|---|---|---|---|---|
| 기능 | 데이터가 정해진 배열의 고정 크기 블록에 저장되며, 직접 서버에 할당하여 사용하는 고가용성 스토리지 서비스 | 네트워크를 통해 이기종 클라이언트에 데이터 액세스를 제공하는 파일 스토리지 | 사용자가 인터넷상에 원하는 데이터를 저장하고 사용할 수 있도록 구축된 객체 스토리지 서비스 | 대용량 데이터의 장기간 보관에 적합한 스토리지 서비스 |
| 액세스 구성 | VM 직접 연결/ Multi-Attach | NFS/CIFS | REST API (S3 호환) | Object Storage와 연결 |
| 접근제어 | - | Public IP / 서버 / VPC Endpoint | Public IP / 서버 / VPC Endpoint | Project 공용 / 개인 접근 설정 |
| 암호화 | KMS 암호화 볼륨 선택 | AES256 암호화 기본 적용 | AES256 암호화 선택 | AES256 암호화 선택 |
| 데이터 보호 | VM 스냅샷 | 스냅샷 | 버전 관리 | - |
| 디스크 | SSD | SSD/HDD | - | - |
| 용량 | 기본 OS: 16~12,288GB 추가 볼륨: 8GB~12,288GB 23개 추가 가능 | 제한 없음 | 제한 없음 | 제한 없음 |
| 용도 | 운영체제, 데이터베이스 등 높은 처리량의 데이터 저장 | 웹 콘텐츠 관리, 엔터테인먼트 데이터 처리를 위한 저장소, 컨테이너 스토리지, 빅 데이터 분석 | 웹 콘텐츠, 로그 등의 객체 저장 | 대용량 데이터 장기 보존 |
데이터베이스 선택
일반적으로 공통 플랫폼을 표준화하고 관리 효율성을 높이기 위해 데이터베이스를 활용합니다.
데이터 요구 사항에 따라 적절한 데이터베이스를 선택해야 하며, 선택이 적절하지 못할 경우 시스템의 지연 시간 증가와 성능 저하를 초래할 수 있습니다.
데이터베이스 선택은 가용성, 확장성, 데이터 구조, 처리량, 내구성 등 Application의 요구 사항에 따라 달라집니다.
데이터베이스를 선택할 때 고려해야 할 여러 요소 중 액세스 패턴은 기술 선택에 큰 영향을 미치므로, 이를 기반으로 데이터베이스를 최적화하는 것이 바람직합니다.
대부분의 데이터베이스는 워크로드 최적화를 위한 구성 옵션을 제공하며, 메모리, 캐시, 스토리지 최적화 등과 함께 확장성, 백업, 복구, 유지 관리 등 운영 측면도 검토할 수 있습니다.
본 문서에서는 Application의 데이터베이스 요구 사항을 충족하기 위한 다양한 기능을 살펴보겠습니다.
OLTP(Online Transaction Processing)
기존 관계형 데이터베이스는 대부분 온라인 트랜잭션 처리 방식(OLTP)을 사용합니다.
Samsung Cloud Platform은 관계형 데이터베이스 중 EPAS, MySQL, MariaDB, PostgreSQL, Microsoft SQL Server를 관리형 Database 서비스로 제공합니다.
관계형 데이터베이스는 금융, 전자상거래 등 복잡한 비즈니스 트랜잭션을 처리하는 Application에 적합하며, 데이터 집계 및 복잡한 쿼리 처리에 유리합니다.
관계형 데이터베이스 최적화에서 고려해야 할 사항은 다음과 같습니다.
- 컴퓨팅, 메모리, 스토리지, 네트워킹을 포함한 서버 타입 선정
- 스토리지 볼륨 구성
- 필요에 맞는 데이터베이스 엔진 선택
- 스키마, 인덱스, 뷰와 같은 데이터베이스 옵션
관계형 데이터베이스는 수직 확장을 통해 처리량을 높일 수 있으며, Replica를 통해 읽기 작업의 수평 확장도 가능합니다.
OLAP(Online Analytical Processing)
대규모의 구조화된 데이터를 분석하기 위해 데이터 웨어하우스 플랫폼을 활용할 수 있으며, Samsung Cloud Platform에서는 Vertica(DBaaS)를 통해 컬럼 기반의 고성능 MPP 분석 환경을 구현할 수 있습니다.
최신 데이터 웨어하우스 기술은 컬럼 형식을 채택하며, 데이터 분석 속도를 향상시키는데 도움이 되는 MPP(Massive Parallel Processing)를 사용합니다.
칼럼 형식을 사용하면 하나의 열에서만 데이터를 집계해야 하는 경우, 전체 테이블을 스캔할 필요가 없습니다.
이로 인해 로우 형식보다 스캔되는 데이터 양이 적어지고, 쿼리 성능이 향상됩니다.
MPP는 하위 node들 간에 분산하는 방식으로 데이터를 저장하고 리더 node에서 쿼리를 수행합니다.
리더 node는 파티션 키를 기반으로 쿼리를 하위 node들에 배포합니다.
여기서 각 node는 쿼리의 일부를 선택해 병렬 처리를 수행합니다.
그 후 리더 node는 각 하위 node에서 쿼리 결과를 수집하고 집계된 결과를 반환합니다.
이 병렬 처리 방식을 통해 쿼리 진행 속도가 빨라지고, 많은 양의 데이터를 더 빠르게 처리할 수 있습니다.
NoSQL
소셜 미디어, 사물인터넷, 클릭스트림 데이터, 로그 등 다양한 Application에서는 대량의 비정형 및 반정형 데이터가 생성됩니다.
이러한 데이터는 동적 스키마를 가지며, 각 레코드가 서로 다른 구조를 가질 수 있습니다.
이러한 데이터를 관계형 데이터베이스에 저장하는 것은 비효율적일 수 있습니다.
관계형 데이터베이스는 고정된 스키마를 기반으로 데이터를 저장해야 하므로, 불필요한 null 값이 저장되거나 데이터 손실이 발생할 수 있습니다.
비정형 또는 NoSQL 데이터베이스는 고정된 스키마에 구애 받지 않고 유연하게 데이터를 저장할 수 있습니다.
각 레코드는 서로 다른 수의 열을 가질 수 있으며, 동일한 테이블에 저장될 수 있습니다.
NoSQL 데이터베이스는 대용량 데이터 저장이 가능하며, 낮은 지연 시간을 제공합니다.
또한 필요 시 node를 추가하여 쉽게 확장할 수 있으며, 기본적으로 수평 확장을 지원합니다.
그러나 NoSQL 데이터베이스는 테이블 및 엔티티 조인과 같은 복잡한 쿼리를 지원하지 않기 때문에, 이 경우에는 관계형 데이터베이스 사용이 더 적합합니다.
Samsung Cloud Platform에서는 Redis 기반의 in-memory 데이터베이스로 CacheStore를 사용할 수 있는데, 빠른 성능의 데이터베이스 캐싱이나 Application 상태 저장의 용도로 사용할 수 있습니다.
데이터 검색
대량의 데이터를 빠르게 검색하여 문제를 신속하게 해결하거나 비즈니스 통찰력을 얻어야 하는 경우가 있습니다.
Application 데이터를 검색하면 자세한 정보에 접근하고 다양한 관점에서 분석하는 데 도움됩니다.
짧은 지연 시간과 높은 처리량으로 데이터를 검색하려면 검색 엔진 기술이 사용되어야 합니다.
Samsung Cloud Platform에서는 Search Engine 서비스를 제공하고 있습니다.
Search Engine은 데이터 분석을 위한 ElasticSearch 생성과 설정을 자동화하여 제공합니다.
Search Engine은 VM에 배포할 수 있으며, 클러스터 및 Replica 구성을 통해 가용성과 성능을 향상시킬 수 있습니다.
데이터베이스 성능 개선
DB 최적화
데이터베이스 성능 개선은 데이터베이스 성능을 최대한 오랫동안 유지하기 위해 데이터베이스를 설계하고 운영하는 것을 의미하며, 서버 단독의 성능 관리보다는 응답 속도나 단위 시간당 처리량 등 비즈니스 전체 관점에서의 효율성이 더 중요하게 작용합니다.
비즈니스의 지속적 변화, 동시 사용자 증가, 지속적인 데이터 증가에 따라 데이터베이스 성능은 저하됩니다.
일반적으로 데이터베이스 성능은 사용자의 요청에 대한 응답 시간으로 정의됩니다.
최적의 데이터베이스 성능이란 최소한의 자원으로 최대한의 성능을 발휘하게 하는 것이라 할 수 있습니다.
데이터베이스의 성능을 저하하는 요인은 초기의 분석, 설계 단계부터 개발 및 운영 전 단계에 걸쳐 발생할 수 있습니다.
| 단계 | 최적화 부문 | 내용 |
|---|---|---|
| 분석 | 비즈니스 프로세스 최적화 | 비효율적 요소 제거, 비즈니스 비전과 전략에 부합하는 프로세스 최적화를 수행 |
| 분석 | 아키텍처 | 트랜잭션 처리량, 성능, 데이터 증가 추이, 보안, 가용성 등을 고려하여 아키텍처의 방향성 설정 |
| 설계 | 물리적 설계 | 응답 시간, 분산 DB 환경, 동시 사용자 수, 데이터 크기, 병렬 프로세싱 및 분산, 집중, 중복에 대한 설계 수행 |
| 설계 | Application 설계 | DB와 연동한 최적 성능을 발휘하도록 접근 경로, 데이터 요구 형태, 인덱스 고려 |
| 개발 | SQL | 개발자의 능력 향상 및 개발표준 준수를 통해 성능 정책을 준수할 수 있게 함 |
| 운영 | OS 튜닝 | CPU, 메모리, 디스크 I/O 등에 대한 튜닝을 수행 |
| 운영 | 네트워크 튜닝 | 데이터, 파일 등의 전송량에 따른 튜닝 수행 |
| 운영 | DB 튜닝 | 데이터 아키텍처, 파라미터, 로그 파일 등의 요소에 대한 튜닝 수행 |
| 운영 | Application 튜닝 | 지속적으로 운영 시스템을 모니터링하고 성능 저하 Application에 대한 SQL, 인덱스 정책, 클러스터 정책 등을 반영해 튜닝 수행 |
캐싱 구현
캐싱은 향후 요청을 더 빠르게 처리하고 네트워크 처리량을 줄이기 위해, 클라이언트와 영구 스토리지 사이의 중간 위치에 데이터나 파일을 임시로 저장하는 프로세스입니다.
캐싱은 이전에 검색한 데이터를 재사용함으로써 Application의 속도를 높이고 비용은 절감할 수 있습니다. 아래 내용은 각 계층에서의 캐싱 메커니즘을 보여주고 있습니다.
| 계층 | 대상 | 캐싱 구현 |
|---|---|---|
| 웹 계층 | 웹 콘텐츠 | 웹 서버의 웹 콘텐츠 전송 지연 속도 개선 → Global CDN을 이용한 콘텐츠 전송 |
| Application 계층 | 사용자 세션 데이터 | 키/값 저장소와 로컬 캐시를 이용해 Application 성능과 데이터 접근 성능 향상 → CacheStore를 이용한 상태 관리 |
| 데이터베이스 계층 | 데이터 | 데이터베이스 버퍼와 키/값 저장소를 사용해 데이터베이스 쿼리를 요청할 때 지연 속도 감소 → CacheStore를 이용한 데이터 캐싱 구현, Replica 구성을 통한 읽기 부하 오프로드 |
웹 계층의 성능 효율성은 주로 이미지, 동영상, html 페이지와 같은 정적 콘텐츠의 전송과 관련되어 있습니다.
이러한 정적 콘텐츠는 사용자와 지리적으로 가까운 위치에서 제공될수록 지연 시간이 줄어들고 빠르게 응답할 수 있습니다.
Global CDN을 이용하여 캐싱을 구현하면 사용자의 위치와 가까운 곳에서 콘텐츠를 전송할 수 있어 더 나은 사용자 경험을 제공할 수 있습니다.
Application 계층에서 캐싱을 적용하여 복잡한 반복 요청의 결과를 저장해, 비즈니스 로직 계산과 데이터베이스 접속을 줄일 수 있습니다.
아울러 상태 관리 데이터베이스를 구현하여 상태 저장을 Application 서버에서 분리하면, 서버의 수평 확장 시 세션의 손실이나 집중을 피하면서 서비스의 성능을 향상시킬 수 있습니다.
일반적으로 전체 서비스의 속도와 처리량은 데이터베이스의 성능에 좌우됩니다.
관계형 데이터베이스를 사용하는 서비스의 경우, 서버를 수평 확장하여 자원을 늘릴 수 없으며, 수직 확장에는 한계가 있기 때문에 성능 관리에 많은 노력이 필요합니다.
데이터베이스에 캐싱을 적용하면 데이터베이스 처리량을 크게 늘리고 데이터 검색 대기 시간을 줄일 수 있습니다.
Redis 기반 CacheStore(DBaaS)를 데이터베이스 전방에 배치하거나, Database 서비스의 Replica를 구성해 읽기 부하를 분산시키는 것도 성능 향상에 효과적인 전략입니다.