원문은 2020년 6월 17일 Onica.com/blog에 게시되었습니다.
다양한 산업 분야의 기업들이 운영 및 핵심 비즈니스 활동에 데이터 분석을 적극적으로 활용하고 있습니다. 그러나 데이터 볼륨이 급증할수록 데이터 관리와 가치 추출 작업은 점점 더 복잡해집니다.
Amazon Redshift란?
Amazon® Redshift®는 Amazon Web Services®(AWS)에서 제공하는 강력한 클라우드 데이터 웨어하우스 서비스입니다. 방대한 데이터를 손쉽게 관리하고 분석할 수 있도록 지원하며, 이번 글에서는 Amazon Redshift를 살펴보고 쿼리 성능을 최적화하기 위해 적용할 수 있는 모범 사례들을 자세히 알아보겠습니다.
데이터 레이크와 데이터 웨어하우스의 차이
Amazon Redshift를 본격적으로 살펴보기 전에, 데이터 레이크와 데이터 웨어하우스의 차이를 이해하는 것이 중요합니다. Amazon S3와 같은 데이터 레이크(data lake)는 구조화된 데이터와 비정형 데이터를 어떤 규모로든, 다양한 소스로부터 원본 그대로 저장하는 중앙 집중식 데이터 저장소입니다. 반면 데이터 웨어하우스(data warehouse)는 지속적인 분석 작업에 최적화된 형태로 데이터를 통합·정제하여 저장하며, 데이터 레이크에서 분석에 필요한 데이터만 로드합니다.
Amazon Redshift는 여기서 한 단계 더 나아가 데이터 레이크와 웨어하우스의 장점을 결합한 '레이크 하우스(lake house)' 방식을 제공합니다. 이를 통해 엑사바이트급 대규모 데이터 레이크를 쿼리하면서도 비용 효율성을 유지하고, 데이터 중복과 유지보수 부담, 운영 비용을 최소화할 수 있습니다.
Amazon Redshift 아키텍처
Amazon Redshift는 대규모 데이터셋에 대한 복잡한 쿼리를 신속하게 처리하기 위해 대규모 병렬 처리(MPP, Massively Parallel Processing) 아키텍처를 지원합니다. 작업을 여러 컴퓨팅 노드에 분산하여 동시에 처리하는 방식입니다.
이러한 노드들은 클러스터로 그룹화되며, 각 클러스터는 세 가지 유형의 노드로 구성됩니다.
리더 노드(Leader Node): 연결을 관리하고 SQL 엔드포인트 역할을 수행하며, 병렬 SQL 처리를 조율합니다.
컴퓨팅 노드(Compute Nodes): '슬라이스(slice)' 단위로 구성되며, 컬럼 기반 포맷으로 저장된 1MB 불변 블록의 데이터에 대해 쿼리를 병렬 실행합니다. 하나의 Amazon Redshift 클러스터는 1개에서 128개까지의 컴퓨팅 노드를 포함할 수 있으며, 각 노드는 테이블 데이터를 보유하고 로컬 처리 영역 역할을 하는 슬라이스로 분할됩니다.
Amazon Redshift Spectrum 노드: Amazon S3 데이터 레이크에 직접 쿼리를 실행합니다.

쿼리 성능 최적화 방법
클러스터 내 데이터의 물리적 배치를 실제 쿼리 패턴에 맞게 조정하면 최적의 쿼리 성능을 끌어낼 수 있습니다. Amazon Redshift의 성능이 기대에 미치지 못한다면, 워크로드 관리(WLM) 설정을 재구성하는 것을 고려해 보세요.
워크로드 관리(WLM) 재구성
WLM은 기본 설정으로 두고 사용되는 경우가 많지만, 이를 세밀하게 조정하면 성능을 크게 개선할 수 있습니다. WLM 튜닝은 자동화하거나 수동으로 수행할 수 있습니다. 자동화할 경우 Amazon Redshift가 클러스터 리소스 사용량을 기반으로 메모리 사용량과 동시성을 관리하며, 우선순위가 지정된 최대 8개의 큐를 설정할 수 있습니다. 수동으로 구성하면 동시 쿼리 수, 메모리 할당량, 목표치 등을 직접 조정할 수 있습니다.
또한 다음과 같은 WLM 구성 파라미터를 통해 쿼리 성능을 최적화할 수 있습니다.
쿼리 모니터링(Query Monitoring) 규칙: 비용이 많이 드는 쿼리나 통제 불가능한(runaway) 쿼리를 관리하는 데 도움이 됩니다.
짧은 쿼리 액셀러레이션(Short Query Acceleration): 머신러닝 알고리즘으로 쿼리 실행 시간을 예측하여, 오래 걸리는 쿼리보다 짧게 실행되는 쿼리에 우선순위를 부여합니다.
동시성 확장(Concurrency Scaling): 임시 클러스터를 몇 초 만에 추가하여 동시 읽기 쿼리 처리 속도를 높입니다.
WLM 모범 사례
WLM 튜닝 시 권장되는 모범 사례는 다음과 같습니다.
- 워크로드 유형별로 서로 다른 WLM 쿼리 큐를 생성합니다.
- 메인 클러스터의 최대 총 동시성을 15 이하로 제한하여 처리량을 극대화합니다.
- 동시성 확장(concurrency scaling)을 활성화합니다.
- 큐당 할당되는 리소스 수를 최소화합니다.
데이터 분산(Distribution) 최적화
Amazon Redshift는 다음과 같은 분산 스타일에 따라 테이블의 행을 노드 슬라이스에 자동으로 분배합니다.
AUTO: ALL 방식으로 시작하고, 테이블이 커지면 EVEN 방식으로 자동 전환됩니다.ALL: 작은 크기이면서 자주 조인되고 수정이 드문 테이블을 각 컴퓨팅 노드의 첫 번째 슬라이스에 전체 복제하여 배치합니다.EVEN: 자주 조인되거나 집계되지 않는 독립적인 대형 팩트 테이블을 라운드 로빈(round-robin) 방식으로 슬라이스 전반에 고르게 분배합니다.KEY: 자주 조인되는 팩트 테이블 또는 대형 디멘전 테이블에 적합합니다. 특정 컬럼 값을 해싱하여 동일한 해시 값을 가진 행을 같은 슬라이스에 배치합니다.
적절한 분산 패턴을 사용하면 JOIN, GROUP BY, INSERT INTO SELECT 연산의 성능을 극대화할 수 있습니다.
데이터 정렬(Sorting) 최적화
정렬 키(Sort Key)는 디스크상 데이터의 물리적 순서를 정의합니다. WHERE 절 조건에 자주 사용되는 테이블 컬럼이 정렬 키로 적합하며, 일반적으로 날짜 또는 시간 관련 컬럼이 많이 활용됩니다. 메모리에 저장되고 자동으로 생성되는 존 맵(Zone Map)을 사용하면 각 데이터 블록의 값 범위(최솟값/최댓값)를 정의할 수 있습니다. 정렬 키와 존 맵을 효과적으로 함께 활용하면 스캔 범위를 필요한 최소 블록 수로 제한할 수 있습니다.
아래 다이어그램은 시간 기반 쿼리에서 테이블 정렬이 스캔 대상을 좁혀 쿼리 성능을 향상시키는 과정을 보여줍니다.

최적의 쿼리 성능을 위한 추가 모범 사례
앞서 소개한 Amazon Redshift 최적화 기법들을 활용하면 쿼리 성능은 물론 비용과 리소스 효율성도 함께 개선할 수 있습니다. 추가적인 성능 향상을 위해 적용할 수 있는 모범 사례는 다음과 같습니다.
WHERE절 필터에 자주 사용되는 컬럼에는SORTKEY(정렬 키)를 적용합니다.JOIN조건에 자주 사용되는 컬럼에는DISTKEY(분산 키)를 적용합니다.- 첫 번째 정렬 키 컬럼을 제외한 나머지 모든 컬럼에 압축을 적용합니다.
- 데이터 레이크의 데이터는 액세스 패턴과 같은 쿼리 필터 기준으로 파티셔닝합니다.
더 많은 모범 사례를 살펴보고 Amazon Redshift 최적화 기법을 심층적으로 이해하고 싶다면, AWS 파트너 네트워크(APN) 블로그에서 상세한 쿼리 분석 예제를 확인해 보시기 바랍니다.
데이터 여정을 시작하려는 기업이라면 AWS 서비스를 활용해 빠르고 안정적이며 비용 효율적인 데이터 플랫폼을 구축할 수 있습니다. 지금 저희 데이터 엔지니어링 & 애널리틱스 팀에 문의하세요.
Onica의 서비스에 대해 더 자세히 알아보세요.
피드백 탭을 통해 의견을 남기거나 질문을 보낼 수 있으며, 세일즈 채팅(Sales Chat) 버튼을 클릭해 지금 바로 상담을 시작할 수도 있습니다.