2026๋…„ Snowflake: ์•„ํ‚คํ…์ฒ˜, SQL, ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด ๋ฉด์ ‘ ์งˆ๋ฌธ

๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ฅผ ์œ„ํ•œ 2026๋…„ Snowflake ์•„ํ‚คํ…์ฒ˜ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ์ง€์™€ ์ปดํ“จํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌ๋˜๋Š”์ง€, virtual warehouse์™€ micro-partition์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ํ”„๋กœ๋•์…˜ ๊ฒฝํ—˜์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฉด์ ‘ ์งˆ๋ฌธ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์Šคํ† ๋ฆฌ์ง€, virtual warehouse ์ปดํ“จํŠธ, ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๊ณ„์ธต์„ ๋ณด์—ฌ์ฃผ๋Š” Snowflake ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ

Snowflake ๋ฉด์ ‘ ์งˆ๋ฌธ์€ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๊ฐ€ SQL ๋ฌธ๋ฒ•๋ฟ ์•„๋‹ˆ๋ผ ํ”Œ๋žซํผ์˜ ๋ถ„๋ฆฌ๋œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. Snowflake๊ฐ€ ๊ฐœ์ฒ™ํ•œ ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ๊ณต์œ  ๋ฐ์ดํ„ฐ(multi-cluster shared data) ์„ค๊ณ„๋Š” ์Šคํ† ๋ฆฌ์ง€, ์ปดํ“จํŠธ, ์„œ๋น„์Šค๋ฅผ ์„ธ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉฐ, ์ด ๋ถ„๋ฆฌ๊ฐ€ ํŒ€์ด ํ”Œ๋žซํผ ์œ„์—์„œ ๋‚ด๋ฆฌ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์„ฑ๋Šฅ๊ณผ ๋น„์šฉ ๊ด€๋ จ ๊ฒฐ์ •์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋Š” Snowflake ์•„ํ‚คํ…์ฒ˜, 2026๋…„์—๋„ ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ณ  ์ €๋ ดํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” SQL ํŒจํ„ด, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ํ”„๋กœ๋•์…˜ ๊ฒฝํ—˜์„ ๋“œ๋Ÿฌ๋‚ด๋Š” ๋ฉด์ ‘ ์งˆ๋ฌธ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์ •๋ฆฌํ•œ Snowflake์˜ 3๊ณ„์ธต ์•„ํ‚คํ…์ฒ˜

Snowflake๋Š” ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค๋ฅผ ์„ธ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์••์ถ•๋œ ์ปฌ๋Ÿผํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ์Šคํ† ๋ฆฌ์ง€, ํƒ„๋ ฅ์ ์ธ ์ปดํ“จํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” virtual warehouse, ๊ทธ๋ฆฌ๊ณ  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๋ณด์•ˆ, ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ณ„์ธต์€ ๋‹ค๋ฅธ ๊ณ„์ธต์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

Snowflake ์•„ํ‚คํ…์ฒ˜: ์Šคํ† ๋ฆฌ์ง€, ์ปดํ“จํŠธ, ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค

Snowflake ์•„ํ‚คํ…์ฒ˜์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ์Šคํ† ๋ฆฌ์ง€์™€ ์ปดํ“จํŠธ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” Amazon S3๋‚˜ Azure Blob Storage ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์˜ค๋ธŒ์ ํŠธ ์Šคํ† ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ธต์— ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ž„์˜์˜ ๊ฐœ์ˆ˜์˜ ์ปดํ“จํŠธ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ ๋„ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๋ฐฉ์‹์€ ์›๋ž˜ ์—”์ง€๋‹ˆ์–ด๋ง ํŒ€์ด 2016๋…„ SIGMOD ๋…ผ๋ฌธ์—์„œ ์„ค๊ณ„๋ฅผ ์†Œ๊ฐœํ•˜๋ฉฐ multi-cluster shared data๋ผ๊ณ  ๋ช…๋ช…ํ•œ ์ ‘๊ทผ๋ฒ•์ž…๋‹ˆ๋‹ค.

์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ธต์€ ๋ฐ์ดํ„ฐ๋ฅผ micro-partition์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๋ถˆ๋ณ€์˜, ์••์ถ•๋œ ์ปฌ๋Ÿผํ˜• ํŒŒ์ผ๋กœ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ด ํŒŒ์ผ๋“ค์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Snowflake๊ฐ€ ํŒŒ์ผ์„ ๊ธฐ๋กํ•˜๊ณ , ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ ํ•˜๋ฉฐ, ํšŒ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. ์ปดํ“จํŠธ ๊ณ„์ธต์€ virtual warehouse๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ฐ virtual warehouse๋Š” Snowflake๊ฐ€ ์š”์ฒญ์— ๋”ฐ๋ผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ์„œ๋ฒ„ ํด๋Ÿฌ์Šคํ„ฐ์ž…๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๊ณ„์ธต์€ ๋‘ ๊ณ„์ธต ์œ„์— ์ž๋ฆฌ ์žก๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ์กฐ์œจํ•ฉ๋‹ˆ๋‹ค. SQL์„ ํŒŒ์‹ฑํ•˜๊ณ , ์ฟผ๋ฆฌ๋ฅผ ๊ณ„ํšํ•˜๋ฉฐ, ์ ‘๊ทผ ์ œ์–ด๋ฅผ ๊ฐ•์ œํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, Time Travel์ด๋‚˜ zero-copy cloning ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ณ„์ธต๋“ค์ด ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— warehouse๋Š” ๋ฐ์ดํ„ฐ์˜ ๋‹จ 1๋ฐ”์ดํŠธ๋„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์Šคํ† ๋ฆฌ์ง€๋Š” ์ปดํ“จํŠธ๋ฅผ ์ „ํ˜€ ํ”„๋กœ๋น„์ €๋‹ํ•˜์ง€ ์•Š๊ณ ๋„ ํŽ˜ํƒ€๋ฐ”์ดํŠธ ๊ทœ๋ชจ๋กœ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sql
-- setup_warehouse.sql
-- Create an isolated compute cluster and a database.
CREATE WAREHOUSE analytics_wh
  WAREHOUSE_SIZE = 'MEDIUM'      -- 4 credits/hour, doubles each size step
  AUTO_SUSPEND = 60             -- suspend after 60s idle to stop billing
  AUTO_RESUME = TRUE            -- resume automatically on the next query
  INITIALLY_SUSPENDED = TRUE;

CREATE DATABASE sales_analytics;
USE WAREHOUSE analytics_wh;
USE DATABASE sales_analytics;

-- Storage and compute are independent: dropping the warehouse
-- leaves every table in sales_analytics untouched.

์ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋œ ๋’ค analytics_wh๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋ชจ๋“  ์ปดํ“จํŠธ ๊ณผ๊ธˆ์ด ์ค‘๋‹จ๋˜์ง€๋งŒ, ์ƒˆ warehouse๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ฆ‰์‹œ ๋ชจ๋“  ํ…Œ์ด๋ธ”์€ ๊ทธ๋Œ€๋กœ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋””์ปคํ”Œ๋ง์ด์•ผ๋ง๋กœ ๋ฉด์ ‘์—์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์•ผ ํ•  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

Virtual Warehouse๊ฐ€ Snowflake ์ปดํ“จํŠธ๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐฉ์‹

virtual warehouse๋Š” X-Small, Small, Medium, Large ๋“ฑ ํ‹ฐ์…”์ธ  ์‚ฌ์ด์ฆˆ ๋‹จ์œ„๋กœ ํฌ๊ธฐ๋ฅผ ์ •ํ•˜๋Š” ์ด๋ฆ„ ๋ถ™์€ ์ปดํ“จํŠธ ํด๋Ÿฌ์Šคํ„ฐ์ž…๋‹ˆ๋‹ค. ํ•œ ๋‹จ๊ณ„ ์˜ฌ๋ผ๊ฐˆ ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„ ์ˆ˜์™€ ์‹œ๊ฐ„๋‹น ํฌ๋ ˆ๋”ง ์†Œ๋น„๋Ÿ‰์ด ๋ชจ๋‘ ๋‘ ๋ฐฐ๊ฐ€ ๋˜๋ฏ€๋กœ, Large warehouse๋Š” Small๋ณด๋‹ค ๋„ค ๋ฐฐ ๋น„์‹ธ์ง€๋งŒ ์Šค์บ”์ด ๋งŽ์€ ์ฟผ๋ฆฌ๋ฅผ ๋Œ€๋žต ๋„ค ๋ฐฐ ๋น ๋ฅด๊ฒŒ ๋๋ƒ…๋‹ˆ๋‹ค. ์ด ์„ ํ˜•์ ์ธ ๊ฐ€๊ฒฉ ๋Œ€๋น„ ์„ฑ๋Šฅ ๊ด€๊ณ„๋Š”, ๊ฐ€์žฅ ์ €๋ ดํ•œ ์„ ํƒ์ด ์ข…์ข… ๋” ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ์‹คํ–‰๋˜๋Š” ๋” ํฐ warehouse๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ํ™•์žฅ ์ฐจ์›์ด ์กด์žฌํ•˜๋ฉฐ, ์ด ๋‘˜์„ ํ˜ผ๋™ํ•˜๋Š” ๊ฒƒ์€ ํ”ํ•œ ๋ฉด์ ‘ ํ•จ์ •์ž…๋‹ˆ๋‹ค. ์ˆ˜์ง ํ™•์žฅ์€ ๋‹จ์ผ warehouse์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ด ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ˆ˜ํ‰ ํ™•์žฅ์€ multi-cluster warehouse์— ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋” ๋งŽ์€ ๋™์‹œ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ค์ „ 9์‹œ์— ์• ๋„๋ฆฌ์ŠคํŠธ 200๋ช…์ด ๋ชฐ๋ฆฌ๋Š” ๋Œ€์‹œ๋ณด๋“œ์—๋Š” ๋” ํฐ warehouse๊ฐ€ ์•„๋‹ˆ๋ผ ๋” ๋งŽ์€ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๊ณ , ์กฐ ๋‹จ์œ„ ํ–‰์˜ ์•ผ๊ฐ„ ๋ฐฑํ•„์—๋Š” ๋” ๋งŽ์€ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋” ํฐ warehouse๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์ง ํ™•์žฅ ๋Œ€ ์ˆ˜ํ‰ ํ™•์žฅ

๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์Šค์บ”ํ•˜๋Š” ํ•˜๋‚˜์˜ ๋А๋ฆฐ ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๋ ค๋ฉด warehouse์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค(์ˆ˜์ง). ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ด ์š”์ฒญ์ด ๋Œ€๊ธฐ์—ด์— ์Œ“์ด๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด multi-cluster warehouse์— ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(์ˆ˜ํ‰). ์ „์ž๋Š” ๋ฌด๊ฑฐ์šด ์ž‘์—…์˜ ์ง€์—ฐ ์‹œ๊ฐ„์„ ํ•ด๊ฒฐํ•˜๊ณ , ํ›„์ž๋Š” ๋‹ค์ˆ˜์˜ ์ž‘์€ ์ž‘์—…์˜ ๋™์‹œ์„ฑ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

sql
-- scale_compute.sql
-- Multi-cluster warehouse: add clusters when concurrency rises and
-- remove them when demand falls. Each cluster is a separate MEDIUM engine.
ALTER WAREHOUSE analytics_wh SET
  MIN_CLUSTER_COUNT = 1
  MAX_CLUSTER_COUNT = 4          -- up to 4 clusters during peak load
  SCALING_POLICY = 'STANDARD';   -- favor performance over credit savings

-- Resize vertically for one heavy job, then shrink back afterward.
ALTER WAREHOUSE analytics_wh SET WAREHOUSE_SIZE = 'XLARGE';
-- ... run the heavy backfill ...
ALTER WAREHOUSE analytics_wh SET WAREHOUSE_SIZE = 'MEDIUM';

์ด๊ฒƒ์„ ๊ฒฝ์ œ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ์š”์†Œ๋Š” AUTO_SUSPEND์™€ AUTO_RESUME์ž…๋‹ˆ๋‹ค. ์ผ์‹œ ์ค‘๋‹จ๋œ warehouse๋Š” ๋น„์šฉ์ด ์ „ํ˜€ ๋“ค์ง€ ์•Š์œผ๋ฉฐ, Snowflake๋Š” ์ตœ์†Œ 60์ดˆ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ดˆ ๋‹จ์œ„๋กœ ๊ณผ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™”ํ˜• warehouse์— ์งง์€ auto-suspend๋ฅผ ์„ค์ •ํ•˜๋ฉด ์œ ํœด ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ฟผ๋ฆฌ ์‚ฌ์ด์— ํฌ๋ ˆ๋”ง์„ ๋‚ญ๋น„ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋น ๋ฅธ SQL์„ ์œ„ํ•œ Micro-Partition๊ณผ Clustering Key

Snowflake๋Š” ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ micro-partition์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ €์žฅํ•˜๋ฉฐ, ๊ฐ micro-partition์€ ์••์ถ•๋˜์ง€ ์•Š์€ ๊ธฐ์ค€์œผ๋กœ 50~500MB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ปฌ๋Ÿผํ˜• ํฌ๋งท์œผ๋กœ ๋‹ด์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  micro-partition์— ๋Œ€ํ•ด Snowflake๋Š” ๊ฐ ์ปฌ๋Ÿผ์˜ ์ตœ์†Ÿ๊ฐ’๊ณผ ์ตœ๋Œ“๊ฐ’์„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๊ฐ€ ํŠน์ • ์ปฌ๋Ÿผ์œผ๋กœ ํ•„ํ„ฐ๋งํ•˜๋ฉด ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ๊ทธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ๊ฐ’ ๋ฒ”์œ„๊ฐ€ ์ผ์น˜ํ•  ์ˆ˜ ์—†๋Š” ํŒŒํ‹ฐ์…˜์„ ๊ฑด๋„ˆ๋›ฐ๋Š”๋ฐ, ์ด ๊ณผ์ •์„ partition pruning์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Snowflake์— ์ˆ˜๋™ ์ธ๋ฑ์Šค๊ฐ€ ํ•„์š” ์—†๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. pruning์€ ๋ชจ๋“  ์ปฌ๋Ÿผ์—์„œ ์ž๋™์œผ๋กœ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

pruning์€ ํ•„ํ„ฐ ์ปฌ๋Ÿผ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์žฌ๋œ ์ˆœ์„œ์™€ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ์„ ๋•Œ ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚ ์งœ์ˆœ์œผ๋กœ ์ˆ˜์ง‘๋œ ํ…Œ์ด๋ธ”์€ ๋‚ ์งœ ๋ฒ”์œ„ ์ฟผ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ pruningํ•ฉ๋‹ˆ๋‹ค. ํฐ ํ…Œ์ด๋ธ”์ด ์ ์žฌ ์ˆœ์„œ์™€ ๋ฌด๊ด€ํ•œ ์ปฌ๋Ÿผ์œผ๋กœ ์ž์ฃผ ํ•„ํ„ฐ๋ง๋  ๋•Œ๋Š”, clustering key๊ฐ€ ๊ด€๋ จ๋œ ํ–‰๋“ค์„ ์—ฌ๋Ÿฌ micro-partition์— ๊ฑธ์ณ ํ•จ๊ป˜ ๋ฐฐ์น˜ํ•ด ํ…Œ์ด๋ธ”์ด ์ปค์ ธ๋„ pruning์ด ๊ณ„์† ํšจ๊ณผ์ ์œผ๋กœ ์œ ์ง€๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

sql
-- clustering.sql
-- Filters on naturally ordered columns prune partitions with no index.
SELECT order_date, SUM(amount_usd) AS revenue
FROM orders
WHERE order_date BETWEEN '2026-01-01' AND '2026-03-31'
GROUP BY order_date;

-- For a multi-terabyte table queried by a non-load-order column,
-- a clustering key co-locates related rows to keep pruning effective.
ALTER TABLE orders CLUSTER BY (customer_region, order_date);

-- Inspect clustering depth before committing to a key.
SELECT SYSTEM$CLUSTERING_INFORMATION('orders', '(customer_region, order_date)');

clustering key๋Š” ๊ณต์งœ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Snowflake๋Š” ์ด๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ž๋™ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ, ์ด ์„œ๋น„์Šค๋Š” ํฌ๋ ˆ๋”ง์„ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝํ—˜์น™์€ ์ฟผ๋ฆฌ ํ”„๋กœํŒŒ์ผ์ด pruning์ด ๋ถ€์‹คํ•จ์„ ๋ณด์—ฌ์ฃผ๋Š” ํ…Œ๋ผ๋ฐ”์ดํŠธ ๊ทœ๋ชจ์˜ ํ…Œ์ด๋ธ”์—๋งŒ clustering key๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ์ž‘์€ ํ…Œ์ด๋ธ”์€ ์Šค์Šค๋กœ pruning์ด ์ž˜ ๋˜๋ฉฐ, ์„ฑ๊ธ‰ํ•œ clustering key๋Š” ๋ˆ์„ ๋‚ญ๋น„ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋Šฅ๋ ฅ์ด ์ฃผ๋‹ˆ์–ด์™€ ์‹œ๋‹ˆ์–ด์˜ ๋‹ต๋ณ€์„ ๊ฐ€๋ฅด๋Š” ์ฐจ์ด๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

Clustering์€ ์ ˆ์•ฝํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋น„์šฉ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์‚ฝ์ž…๊ณผ ๊ฐฑ์‹ ์ด ์žฆ์€ ํ…Œ์ด๋ธ”์—์„œ๋Š” ์ž๋™ reclustering ์„œ๋น„์Šค๊ฐ€ clustering key๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด micro-partition์„ ์ง€์†์ ์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•˜๋ฉฐ, ์ด ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€์†ํ•˜๋ ค๋Š” ์ฟผ๋ฆฌ๋ณด๋‹ค ๋” ๋งŽ์€ ํฌ๋ ˆ๋”ง์„ ํƒœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ฟผ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋กœ ์ฟผ๋ฆฌ ์›Œํฌ๋กœ๋“œ๋ฅผ ์ธก์ •ํ•˜๊ณ , clustering์€ ์“ฐ๊ธฐ๋ณด๋‹ค ์ฝ๊ธฐ๊ฐ€ ํ›จ์”ฌ ๋งŽ์€ ํ…Œ์ด๋ธ”์—๋งŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๋ฐ์ดํ„ฐ ์ ์žฌ์™€ ๋ณ€ํ™˜: Snowpipe, Stream, Dynamic Table

์„ธ ๊ฐ€์ง€ ์ˆ˜์ง‘ ํŒจํ„ด์ด ๋Œ€๋ถ€๋ถ„์˜ ์›Œํฌ๋กœ๋“œ๋ฅผ ์ปค๋ฒ„ํ•ฉ๋‹ˆ๋‹ค. ๋ฒŒํฌ COPY INTO๋Š” ์Šคํ…Œ์ด์ง•๋œ ํŒŒ์ผ์„ ๋‹จ์ผ ๋ช…๋ น์œผ๋กœ ์ ์žฌํ•˜๋ฉฐ ์˜ˆ์•ฝ๋œ ๋ฐฐ์น˜ ์ž‘์—…์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. Snowpipe๋Š” ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€ ์ด๋ฒคํŠธ๋กœ ํŠธ๋ฆฌ๊ฑฐ๋˜์–ด ์„œ๋ฒ„๋ฆฌ์Šค ๋งˆ์ดํฌ๋กœ๋ฐฐ์น˜๋กœ ํŒŒ์ผ์„ ์ง€์†์ ์œผ๋กœ ์ ์žฌํ•˜๋ฉฐ ์ค€์‹ค์‹œ๊ฐ„ ๋„์ฐฉ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. Snowpipe Streaming์€ 1์ดˆ ๋ฏธ๋งŒ์˜ ์‹ ์„ ๋„๊ฐ€ ์ค‘์š”ํ•  ๋•Œ ์ €์ง€์—ฐ API๋ฅผ ํ†ตํ•ด ๊ฐœ๋ณ„ ํ–‰์„ ๋ฐ€์–ด ๋„ฃ์Šต๋‹ˆ๋‹ค. ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ ํŒŒ์ผ ํฌ๊ธฐ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์ด ์ค‘์—์„œ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ์ž์ฃผ ๋‚˜์˜ค๋Š” ๋ฉด์ ‘ ์งˆ๋ฌธ์ด๋ฉฐ, ์˜ฌ๋ฐ”๋ฅธ ๋‹ต์€ "๋‹ค์šด์ŠคํŠธ๋ฆผ ์†Œ๋น„์ž๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ์‹ ์„ ๋„์— ๋‹ฌ๋ ค ์žˆ๋‹ค"๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

warehouse ๋‚ด๋ถ€์˜ ๋ณ€ํ™˜์€ ์—ญ์‚ฌ์ ์œผ๋กœ Stream๊ณผ Task์— ์˜์กดํ•ด ์™”์Šต๋‹ˆ๋‹ค. Stream์€ ํ…Œ์ด๋ธ”์˜ ํ–‰ ๋‹จ์œ„ ๋ณ€๊ฒฝ(change data capture)์„ ์บก์ฒ˜ํ•˜๊ณ , Task๋Š” ์˜ˆ์•ฝ๋œ ์ผ์ •์— ๋”ฐ๋ผ SQL์„ ์‹คํ–‰ํ•ด ๊ทธ ๋ณ€๊ฒฝ์„ ์†Œ๋น„ํ•˜๊ณ  ๋‹ค์šด์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

sql
-- incremental_pipeline.sql
-- A stream tracks row-level changes (CDC) on the raw landing table.
CREATE STREAM orders_stream ON TABLE raw_orders;

-- A task consumes the stream on a schedule and merges changes downstream.
CREATE TASK refresh_orders
  WAREHOUSE = analytics_wh
  SCHEDULE = '5 MINUTE'
  WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
AS
  MERGE INTO orders t
  USING orders_stream s ON t.order_id = s.order_id
  WHEN MATCHED THEN UPDATE SET t.amount_usd = s.amount_usd
  WHEN NOT MATCHED THEN INSERT (order_id, amount_usd)
    VALUES (s.order_id, s.amount_usd);

2026๋…„์—๋Š” Dynamic Tables๊ฐ€ ์ฆ๋ถ„ ๋ณ€ํ™˜์„ ํ‘œํ˜„ํ•˜๋Š” ์„ ํ˜ธ๋˜๋Š” ๋ฐฉ์‹์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Stream์„ Task์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋ณ‘ํ•ฉ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹ , Dynamic Table์€ ๋ชฉํ‘œ ์ง€์—ฐ(target lag)๊ณผ ์ฟผ๋ฆฌ๋ฅผ ์„ ์–ธํ•˜๋ฉด Snowflake๊ฐ€ ์ฆ๋ถ„ ๊ฐฑ์‹ ์„ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ์‹ ์„ ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ฉด์„œ ๋Œ€๋ถ€๋ถ„์˜ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

sql
-- dynamic_table.sql
-- Dynamic Tables replace the stream + task pattern with a declarative
-- target lag. Snowflake computes the incremental refresh automatically.
CREATE DYNAMIC TABLE daily_revenue
  TARGET_LAG = '5 minutes'
  WAREHOUSE = analytics_wh
AS
  SELECT order_date, SUM(amount_usd) AS revenue
  FROM orders
  GROUP BY order_date;

์˜คํ”ˆ ํฌ๋งท ์œ„์—์„œ ๊ตฌ์ถ•ํ•˜๋Š” ํŒ€์„ ์œ„ํ•ด, Snowflake์˜ Iceberg ํ…Œ์ด๋ธ”์€ warehouse๊ฐ€ ๊ณ ๊ฐ ์ž์‹ ์˜ ํด๋ผ์šฐ๋“œ ๋ฒ„ํ‚ท์— ์ €์žฅ๋œ Apache Iceberg ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ, Snowflake์˜ ์ฟผ๋ฆฌ ์—”์ง„๊ณผ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์ข…์†์„ ํ”ผํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ํŒ€์€ ๋ฒ„์ „ ๊ด€๋ฆฌ๋˜๊ณ  ํ…Œ์ŠคํŠธ๋œ ๋ณ€ํ™˜์„ ์œ„ํ•ด Snowflake๋ฅผ dbt์™€ ๊ฒฐํ•ฉํ•˜๋Š”๋ฐ, ์ด ์›Œํฌํ”Œ๋กœ๋Š” dbt ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๋ฐ ํ…Œ์ŠคํŠธ ๊ฐ€์ด๋“œ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Data Engineering ๋ฉด์ ‘ ์ค€๋น„๊ฐ€ ๋˜์…จ๋‚˜์š”?

์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ, flashcards, ๊ธฐ์ˆ  ํ…Œ์ŠคํŠธ๋กœ ์—ฐ์Šตํ•˜์„ธ์š”.

๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ฅผ ์œ„ํ•œ Snowflake ๋ฉด์ ‘ ์งˆ๋ฌธ

์•„๋ž˜ ์งˆ๋ฌธ๋“ค์€ Snowflake ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฉด์ ‘์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ•ํ•œ ๋‹ต๋ณ€์€ ๋ฌธ๋ฒ•์„ ์•”์†กํ•˜๊ธฐ๋ณด๋‹ค ๊ธฐ๋Šฅ์„ ์Šคํ† ๋ฆฌ์ง€-์ปดํ“จํŠธ ๋ถ„๋ฆฌ์™€ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์Šคํ† ๋ฆฌ์ง€์™€ ์ปดํ“จํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋‚˜์š”? ๊ฒฝํ•ฉ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์• ๋„๋ฆฌ์ŠคํŠธ, ํ”ผ์ฒ˜๋ฅผ ํ•™์Šต์‹œํ‚ค๋Š” ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค ํŒ€, ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•˜๋Š” ELT ์ž‘์—…์ด ๊ฐ์ž ์ž์‹ ์˜ warehouse์—์„œ ๋™์ผํ•œ ํ…Œ์ด๋ธ”์„ ๋Œ€์ƒ์œผ๋กœ, ์ž์›์„ ๋‘๊ณ  ๊ฒฝ์Ÿํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํ“จํŠธ๋Š” ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ์œ„ํ•ด ํ™•์žฅ๋˜๊ณ  ์œ ํœด ์ƒํƒœ์—์„œ๋Š” ์ผ์‹œ ์ค‘๋‹จ๋˜๋Š” ๋ฐ˜๋ฉด, ์Šคํ† ๋ฆฌ์ง€ ๋น„์šฉ์€ ์—ฐ๊ฒฐ๋œ ์ปดํ“จํŠธ ์–‘๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

Time Travel๊ณผ zero-copy cloning์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”? ๋‘˜ ๋‹ค micro-partition์˜ ๋ถˆ๋ณ€์„ฑ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. Snowflake๋Š” micro-partition์„ ์ ˆ๋Œ€ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ด์ „ ๋ฒ„์ „์€ ๋ณด์กด ๊ธฐ๊ฐ„(Enterprise์—์„œ๋Š” ์ตœ๋Œ€ 90์ผ) ๋™์•ˆ ๋””์Šคํฌ์— ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. Time Travel์€ ๊ทธ ์ด์ „ ํŒŒํ‹ฐ์…˜์„ ๊ฐ€๋ฆฌ์ผœ ๊ณผ๊ฑฐ ํƒ€์ž„์Šคํƒฌํ”„ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์ฟผ๋ฆฌํ•˜๊ณ , CLONE์€ ์–ด๋А ํ•œ์ชฝ์ด ์ˆ˜์ •๋˜๊ธฐ ์ „๊นŒ์ง€ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋ณต์ œํ•˜์ง€ ์•Š๊ณ  ๋™์ผํ•œ ํŒŒํ‹ฐ์…˜์„ ์ฐธ์กฐํ•˜๋Š” ์ƒˆ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. copy-on-write๊ฐ€ ํŽ˜ํƒ€๋ฐ”์ดํŠธ ํ…Œ์ด๋ธ”์˜ ํด๋ก ์„ ์ฆ‰๊ฐ์ ์ด๊ณ  ๊ฑฐ์˜ ๋ฌด๋ฃŒ๋กœ ๋งŒ๋“œ๋Š” ์š”์†Œ์ž…๋‹ˆ๋‹ค.

clustering key๋Š” ์–ธ์ œ ์ •์˜ํ•ด์•ผ ํ•˜๋‚˜์š”? ์ ์žฌ ์ˆœ์„œ์™€ ๋ฌด๊ด€ํ•œ ์ปฌ๋Ÿผ์œผ๋กœ ์ž์ฃผ ํ•„ํ„ฐ๋ง๋˜๊ฑฐ๋‚˜ ์กฐ์ธ๋˜๋Š” ํฐ ํ…Œ์ด๋ธ”(๋Œ€๋žต 1ํ…Œ๋ผ๋ฐ”์ดํŠธ ์ด์ƒ)์—์„œ๋งŒ, ๊ทธ๋ฆฌ๊ณ  ์ฟผ๋ฆฌ ํ”„๋กœํŒŒ์ผ์ด ๋ถ€์‹คํ•œ pruning์„ ํ™•์ธํ•œ ๋’ค์—๋งŒ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. clustering์€ ์ง€์†์ ์ธ ์œ ์ง€ ๊ด€๋ฆฌ ํฌ๋ ˆ๋”ง ๋น„์šฉ์„ ๋ฐœ์ƒ์‹œํ‚ค๋ฏ€๋กœ, ๊ธฐ๋ณธ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์˜๋„์ ์ธ ์ตœ์ ํ™”์ž…๋‹ˆ๋‹ค.

Snowflake ๋น„์šฉ์€ ์–ด๋–ป๊ฒŒ ํ†ต์ œํ•˜๋‚˜์š”? warehouse ํฌ๊ธฐ ์กฐ์ •, ๊ณต๊ฒฉ์ ์ธ auto-suspend, ์‹ค์ œ ๋™์‹œ์„ฑ์— ๋งž์ถ˜ ํด๋Ÿฌ์Šคํ„ฐ ์ˆ˜, ๊ทธ๋ฆฌ๊ณ  ํฌ๋ ˆ๋”ง ์ง€์ถœ์— ์ƒํ•œ์„ ๋‘๋Š” resource monitor๋ฅผ ํ†ตํ•ด์„œ์ž…๋‹ˆ๋‹ค. resource monitor๋Š” ํ• ๋‹น๋Ÿ‰์— ๋„๋‹ฌํ•˜๋ฉด ์ž๋™์œผ๋กœ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ warehouse๋ฅผ ์ผ์‹œ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sql
-- cost_control.sql
-- A resource monitor caps credit spend and suspends warehouses
-- automatically when the monthly quota is reached.
CREATE RESOURCE MONITOR monthly_cap
  WITH CREDIT_QUOTA = 1000
  FREQUENCY = MONTHLY
  START_TIMESTAMP = IMMEDIATELY
  TRIGGERS
    ON 80 PERCENT DO NOTIFY
    ON 100 PERCENT DO SUSPEND;

ALTER WAREHOUSE analytics_wh SET RESOURCE_MONITOR = monthly_cap;

Stream๊ณผ Task๋ฅผ ์“ธ๊นŒ์š”, ์•„๋‹ˆ๋ฉด Dynamic Table์„ ์“ธ๊นŒ์š”? Dynamic Table์€ ๋ชฉํ‘œ ์‹ ์„ ๋„๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์ด๊ณ  Snowflake๊ฐ€ ๊ฐฑ์‹ ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„ ์–ธ์  ํŒŒ์ดํ”„๋ผ์ธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. Stream๊ณผ Task๋Š” ๋ณ€ํ™˜์— ๋ช…๋ นํ˜• ์ œ์–ด, ๋ถ€์ž‘์šฉ, ๋˜๋Š” ๋‹จ์ผ ์ฟผ๋ฆฌ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” ๋กœ์ง์ด ํ•„์š”ํ•  ๋•Œ ์—ฌ์ „ํžˆ ์˜ฌ๋ฐ”๋ฅธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋กœ ๊ธฐ๋ณธ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ๊ฐ๊ฐ์ด ์–ด๋””์— ๋งž๋Š”์ง€ ์•„๋Š” ๊ฒƒ์ด ํ”„๋กœ๋•์…˜ ๊ฒฝํ—˜์„ ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค.

Snowflake์˜ ELT๋Š” ์ „ํ†ต์ ์ธ ETL๊ณผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€์š”? Snowflake์˜ ์ €๋ ดํ•œ ์Šคํ† ๋ฆฌ์ง€์™€ ํƒ„๋ ฅ์ ์ธ ์ปดํ“จํŠธ๋Š” ์›์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ ์žฌํ•˜๊ณ  ๊ทธ ์ž๋ฆฌ์—์„œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์‹ค์šฉ์ ์œผ๋กœ ๋งŒ๋“œ๋Š”๋ฐ, ์ด๋Š” ETL ๋Œ€ ELT ์•„ํ‚คํ…์ฒ˜ ๊ฐ€์ด๋“œ์—์„œ ํƒ๊ตฌํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ „์ฒด ํ๋ฆ„์„ ์ค€๋น„ํ•˜๋Š” ์ง€์›์ž๋Š” ๋” ๋„“์€ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ํŠธ๋ž™๊ณผ ํ•จ๊ป˜ ETL ๋ฐ ELT ํŒจํ„ด ๋ชจ๋“ˆ์„ ํ›ˆ๋ จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

  • Snowflake ์•„ํ‚คํ…์ฒ˜๋Š” ์Šคํ† ๋ฆฌ์ง€, ์ปดํ“จํŠธ, ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ์„ธ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉฐ, ๊ฑฐ์˜ ๋ชจ๋“  ์„ค๊ณ„ ๊ด€๋ จ ๋‹ต๋ณ€์€ ๊ทธ ๋ถ„๋ฆฌ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค
  • virtual warehouse๋Š” ๋” ๋ฌด๊ฑฐ์šด ๋‹จ์ผ ์ฟผ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ˆ˜์ง์œผ๋กœ, ๋” ๋†’์€ ๋™์‹œ์„ฑ์„ ์œ„ํ•ด ์ˆ˜ํ‰์œผ๋กœ ํ™•์žฅํ•˜๋ฉฐ, auto-suspend์™€ ์ดˆ ๋‹จ์œ„ ๊ณผ๊ธˆ์€ ์œ ํœด ์ปดํ“จํŠธ๋ฅผ ๋ฌด๋ฃŒ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค
  • ์ปฌ๋Ÿผ๋ณ„ min/max ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ micro-partition์€ ์ž๋™ partition pruning์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๊ฒƒ์ด Snowflake์— ์ˆ˜๋™ ์ธ๋ฑ์Šค๊ฐ€ ํ•„์š” ์—†๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค
  • clustering key๋Š” pruning ๋ถ€์‹ค์ด ์ž…์ฆ๋œ ํ…Œ๋ผ๋ฐ”์ดํŠธ ๊ทœ๋ชจ์˜ ํ…Œ์ด๋ธ”์—๋งŒ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ํฌ๋ ˆ๋”ง์„ ์†Œ๋น„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค
  • ์ˆ˜์ง‘ ํŒจํ„ด์„ ํ•„์š”ํ•œ ์‹ ์„ ๋„์— ๋งž์ถ”์‹ญ์‹œ์˜ค. ๋ฐฐ์น˜์—๋Š” ๋ฒŒํฌ COPY, ์ง€์†์ ์ธ ๋งˆ์ดํฌ๋กœ๋ฐฐ์น˜์—๋Š” Snowpipe, 1์ดˆ ๋ฏธ๋งŒ์˜ ์ง€์—ฐ์—๋Š” Snowpipe Streaming์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค
  • 2026๋…„์—๋Š” ์„ ์–ธ์  ์ฆ๋ถ„ ๋ณ€ํ™˜์— Dynamic Tables๋ฅผ ์šฐ์„ ํ•˜๊ณ , Stream๊ณผ Task๋Š” ๋ช…๋ นํ˜• ๋กœ์ง์„ ์œ„ํ•ด ๋‚จ๊ฒจ ๋‘์‹ญ์‹œ์˜ค
  • Time Travel๊ณผ zero-copy cloning์€ ๋ชจ๋‘ micro-partition์˜ ๋ถˆ๋ณ€์„ฑ๊ณผ copy-on-write๋ฅผ ํ™œ์šฉํ•ด ์‹œ์  ์ฟผ๋ฆฌ์™€ ์ฆ‰๊ฐ์ ์ธ ํด๋ก ์„ ์ €๋ ดํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค
  • ์ ์ • ํฌ๊ธฐ์˜ warehouse, ๊ณต๊ฒฉ์ ์ธ auto-suspend, ๋™์‹œ์„ฑ์— ๋งž์ถ˜ ํด๋Ÿฌ์Šคํ„ฐ, resource monitor๋กœ ๋น„์šฉ์„ ํ†ต์ œํ•˜์‹ญ์‹œ์˜ค

์—ฐ์Šต์„ ์‹œ์ž‘ํ•˜์„ธ์š”!

๋ฉด์ ‘ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ๊ธฐ์ˆ  ํ…Œ์ŠคํŠธ๋กœ ์ง€์‹์„ ํ…Œ์ŠคํŠธํ•˜์„ธ์š”.

ํƒœ๊ทธ

#snowflake
#data-engineering
#data-warehouse
#sql
#snowflake-architecture
#dynamic-tables

๊ณต์œ 

๊ด€๋ จ ๊ธฐ์‚ฌ

dbt data transformations and testing tutorial 2026

dbt 2026 ์™„๋ฒฝ ๊ฐ€์ด๋“œ: ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜, ํ…Œ์ŠคํŠธ ์ „๋žต, ๋ฉด์ ‘ ์งˆ๋ฌธ ์ด์ •๋ฆฌ

dbt๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์˜ ํ•ต์‹ฌ ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค๋ฌด๊นŒ์ง€, ๋ ˆ์ด์–ด๋“œ ๋ชจ๋ธ๋ง, ์ธํฌ๋ฆฌ๋ฉ˜ํƒˆ ์ „๋žต, ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•๋ก , ๊ทธ๋ฆฌ๊ณ  2026๋…„ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฉด์ ‘์—์„œ ์ž์ฃผ ์ถœ์ œ๋˜๋Š” ์งˆ๋ฌธ์„ ์ฝ”๋“œ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์ƒ์„ธํžˆ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Data Engineering Interview Questions 2026

2026๋…„ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฉด์ ‘ ์งˆ๋ฌธ ์ƒ์œ„ 25๊ฐœ

2026๋…„ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฉด์ ‘์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์ถœ์ œ๋˜๋Š” 25๊ฐ€์ง€ ํ•ต์‹ฌ ์งˆ๋ฌธ๊ณผ ์‹ค๋ฌด ์ค‘์‹ฌ์˜ ๋‹ต๋ณ€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Apache Spark 4 ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง Structured Streaming ํŒŒ์ดํ”„๋ผ์ธ ๋‹ค์ด์–ด๊ทธ๋žจ

2026๋…„ Apache Spark 4 ์™„๋ฒฝ ๊ฐ€์ด๋“œ: ์‹ ๊ทœ ๊ธฐ๋Šฅ, Structured Streaming, ๋ฉด์ ‘ ์งˆ๋ฌธ

Apache Spark 4์˜ ํ•ต์‹ฌ ์‹ ๊ทœ ๊ธฐ๋Šฅ์ธ ANSI SQL ๋ชจ๋“œ, VARIANT ๋ฐ์ดํ„ฐ ํƒ€์ž…, ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ชจ๋“œ, Spark Connect๋ฅผ ์‹ฌ์ธต ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฉด์ ‘์„ ์œ„ํ•œ ํ•„์ˆ˜ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€๋„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.