본문 바로가기

SW기업 스노우플레이크 파헤치기

스노우플레이크에서 SQL은 어떻게 다를까? 실무자가 느끼는 3가지 차이

SQL은 오랫동안 데이터베이스 세계의 공용어로 통했습니다. 대부분의 개발자, 데이터 분석가, 심지어 마케터까지도 SELECT와 WHERE 문 정도는 한두 번쯤은 다뤄봤을 것입니다. 그런데 스노우플레이크에 처음 접속한 사람이라면 익숙한 SQL을 입력하면서도 "뭔가 다른데?"라는 느낌을 받게 됩니다.

 

그도 그럴 것이 스노우플레이크는 단순한 관계형 데이터베이스가 아니라, 클라우드에 최적화된 데이터 플랫폼입니다. SQL은 여전히 이 플랫폼의 중심 언어이지만, 동작 방식, 최적화 전략, 확장성에서 기존 시스템과는 다른 면모를 드러냅니다.

 

이번 글에서는 '스노우플레이크에서 SQL은 어떻게 다를까?'라는 질문을 중심으로, 기존 RDBMS와 무엇이 다른지, 실무에서 주의할 점은 무엇인지, 그리고 스노우플레이크 SQL만의 특징은 어떤 것인지 3가지 관점에서 정리해보았습니다.

스노우플레이크에서 SQL은 어떻게 다를까
스노우플레이크에서 SQL은 어떻게 다를까?

 

스노우플레이크에서 SQL은 어떻게 다를까? 계산 리소스 개념이 다릅니다

스노우플레이크에서 SQL을 실행한다고 해서 바로 결과가 나오지는 않습니다. 그 사이에 반드시 '창고(Warehouse)'라는 컴퓨팅 리소스가 작동해야 합니다. 이게 바로 스노우플레이크 SQL의 첫 번째 차별점입니다.

 

기존의 SQL은 DB 서버에 연결만 되어 있으면 바로 실행됐지만, 스노우플레이크에서는 컴퓨팅 자원이 열려 있어야 쿼리가 수행됩니다. 이 Warehouse는 S, M, L 등급으로 나뉘며, 사이즈에 따라 속도와 비용이 달라집니다.

 

예를 들어, 가장 기본적인 SELECT 쿼리를 실행하더라도, 컴퓨팅 자원이 켜져 있지 않으면 수행되지 않는다. Auto Resume 기능이 켜져 있다면 자동으로 켜지긴 하지만, 이 구조는 SQL이 단순히 '질문'이 아니라, 클라우드 리소스를 소비하는 명령이라는 점에서 인식이 다릅니다.

 

또한, 같은 SQL을 실행해도 창고 크기에 따라 처리 속도가 달라지고, 쿼리 병렬 실행도 개별 창고 단위로 구분됩니다. 즉, 스노우플레이크에서는 SQL을 작성할 때 "이건 어느 리소스를 통해 실행될까?"를 항상 고려해야 합니다.


스노우플레이크에서 SQL은 어떻게 다를까? 저장 방식과 데이터 접근이 다릅니다

SQL의 문법은 비슷해 보여도, 스노우플레이크에서는 데이터가 저장되는 방식부터가 다릅니다. 스노우플레이크는 기본적으로 컬럼 기반 저장 구조를 채택하고 있고, 압축과 인덱싱 방식이 전통 RDBMS와는 전혀 다릅니다.

 

예를 들어, 기존 SQL에서는 WHERE 조건이 인덱스를 활용해 빠른 필터링을 가능하게 만들었지만, 스노우플레이크는 Micro-partition과 Zone Map이라는 기술을 통해 필터링 대상 파티션 자체를 줄이는 방식으로 속도를 확보합니다.

 

따라서 "인덱스를 깔아야 속도가 나겠지"라는 기존 습관은 스노우플레이크에서는 의미가 달라집니다. 대신 WHERE 절에 정확하고 구체적인 조건을 주는 것이 중요합니다.

 

또한, 스노우플레이크는 Time Travel 기능을 통해 과거 데이터를 되살리는 쿼리도 작성할 수 있고, UNDROP TABLE이나, AT / BEFORE 문을 써서 SQL을 시간 기반으로 작동시킬 수도 있습니다. 이는 전통 SQL 사용자에게는 다소 생소하지만, 데이터 복구나 감사 로그 분석에는 매우 강력한 기능입니다.


스노우플레이크에서 SQL은 어떻게 다를까? 반정형 데이터 처리가 기본입니다

마지막으로 큰 차이점은, 스노우플레이크에서는 JSON, AVRO, PARQUET 같은 반정형 데이터도 SQL로 처리할 수 있다는 점입니다. 기존 시스템에서는 이런 데이터를 처리하려면 별도의 파싱 과정이나 ETL 도구가 필요했습니다. 하지만 스노우플레이크에서는 VARIANT 타입을 활용하면, JSON 내부 필드도 SQL 문으로 조회할 수 있습니다. 

 

예를 들어, 아래와 같은 SQL도 문제없이 작동합니다:

SELECT raw:customer.name, raw:customer.age
FROM order_data
WHERE raw:customer.active = true;

 

이런 쿼리는 기존 SQL 사용자에게는 낯설 수 있지만, 익숙해지면 복잡한 스키마 없이 유연한 데이터 분석이 가능합니다. 특히 로그 데이터, 이벤트 기록, 사용자 행동 데이터처럼 형태가 일정치 않은 데이터도 SQL 한 줄로 바로 접근할 수 있다는 점에서 스노우플레이크 SQL은 기존 SQL보다 훨씬 유연하고 실용적입니다.

 

또한, FLATTEN, LATERAL, ARRAY 같은 함수와 조합하면 JSON 배열도 테이블처럼 다루는 게 가능합니다. 이건 실무에서 스노우플레이크를 써본 사람만 느끼는 강점이자, "SQL이 여기까지 확장될 수 있구나"라는 인상을 주는 부분입니다.

 


스노우플레이크에서 SQL은 '문법이 아닌 철학'이 다릅니다

겉으로 보기엔 비슷하지만, 스노우플레이크에서 SQL은 단순한 SELECT/INSERT 수준을 넘어서 있습니다. SQL을 통해 창고를 켜고, 데이터를 과거로 되돌리고, JSON을 자유롭게 탐색하는 경험은 기존 관계형 DB를 다뤄온 사람들에게도 새로운 사고를 요구합니다.

 

결국 '스노우플레이크에서 SQL은 어떻게 다를까?'라는 질문은 문법보다 더 근본적인 데이터 접근 방식의 차이를 보여줍니다. 기술은 익히면 되지만, 사고방식은 바꿔야 합니다. 그리고 바로 그 차이가 스노우플레이크를 배우는 가장 흥미로운 지점이기도 합니다.