Skip to main content

๐ŸŽ‰ Agentic Postgres ์ฑŒ๋ฆฐ์ง€ ์šฐ์Šน์ž๋ฅผ ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! (Tiger Data์™€ ํ•จ๊ป˜)

Published 3 min readMarkdown

# ์„œ๋ก  โ€“ ๊ธฐ๋‹ค๋ฆฌ๋˜ ์ˆœ๊ฐ„, ๊ธฐ๋Œ€๋ฅผ ๋„˜์–ด์„  ๊ฒฐ๊ณผ

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


# ๋ณธ๋ก 

# 1๏ธโƒฃ ์ฑŒ๋ฆฐ์ง€ ๊ฐœ์š”์™€ ๋ชฉํ‘œ โ€“ ์™œ Postgres์ธ๊ฐ€?

  • Postgres๋Š” ์˜คํ”ˆ์†Œ์Šค ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘ ๊ฐ€์žฅ ์•ˆ์ •์ ์ด๊ณ  ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ ์‹œ์Šคํ…œ์œผ๋กœ, ํด๋ผ์šฐ๋“œยทAIยท๋น…๋ฐ์ดํ„ฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ํ•ต์‹ฌ ์ธํ”„๋ผ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ด๋ฒˆ Agentic Postgres ์ฑŒ๋ฆฐ์ง€๋Š” ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง, ์ฟผ๋ฆฌ ์ตœ์ ํ™”, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋“ฑ์„ ์‹ค์ „์ฒ˜๋Ÿผ ์—ฐ์Šตํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • Tiger Data๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•๊ณผ ๋ถ„์„ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์—…์œผ๋กœ, ์ด๋ฒˆ ์ฑŒ๋ฆฐ์ง€๋ฅผ ํ†ตํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ํ˜‘์—…ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํฌ์ธํŠธ: ์ดˆ๋ณด์ž๋„ ๊ธฐ๋ณธ์ ์ธ SQL ๋ฌธ๋ฒ•๋งŒ ์•Œ๋ฉด ๋ฐ”๋กœ ๋„์ „ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ์™€ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ์…‹์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.


# 2๏ธโƒฃ ์šฐ์Šน์ž ์„ ์ • ๊ธฐ์ค€ โ€“ ๊ณต์ •ํ•˜๊ณ  ํˆฌ๋ช…ํ•œ ํ‰๊ฐ€

| ํ‰๊ฐ€ ํ•ญ๋ชฉ | ๋น„์ค‘ | ์„ค๋ช… |

|----------|------|------|

| ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์„ค๊ณ„ | 30% | ์ •๊ทœํ™” ์ˆ˜์ค€, ์Šคํ‚ค๋งˆ ๊ฐ€๋…์„ฑ |

| ์ฟผ๋ฆฌ ํšจ์œจ์„ฑ | 30% | ์ธ๋ฑ์Šค ํ™œ์šฉ, ์‹คํ–‰ ๊ณ„ํš ๋ถ„์„ |

| ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ | 20% | ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„ |

| ํ”„๋ ˆ์  ํ…Œ์ด์…˜ | 10% | ๊ฒฐ๊ณผ๋ฌผ ์‹œ๊ฐํ™”์™€ ์„ค๋ช… |

| ํ˜‘์—… ํƒœ๋„ | 10% | ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ ๋ฌธ์„œํ™” |

์šฐ์Šน์ž๋Š” ์œ„ ํ•ญ๋ชฉ์„ ๋ชจ๋‘ ๋งŒ์กฑ์‹œํ‚ค๋ฉด์„œ ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ๋ฅผ ๊ฐ€์žฅ ํšจ๊ณผ์ ์œผ๋กœ ๋ฐ˜์˜ํ•œ ํŒ€์œผ๋กœ ์„ ์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

TIP: ์ดˆ๋ณด์ž๋ผ๋ฉด ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ณ„ํš(EXPLAIN)์„ ํ™•์ธํ•ด ๋ณด๋Š” ์Šต๊ด€์„ ๋“ค์ด๋ฉด, ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.


# 3๏ธโƒฃ ์šฐ์Šน ํŒ€ ์†Œ๊ฐœ โ€“ ๊ทธ๋“ค์˜ ์„ฑ๊ณต ๋น„๊ฒฐ์€?

| ์ˆœ์œ„ | ํŒ€ ์ด๋ฆ„ | ์ฃผ์š” ์„ฑ๊ณผ | ์‚ฌ์šฉ ๊ธฐ์ˆ  |

|------|--------|-----------|-----------|

| 1์œ„ | DataMinds | ๋ณตํ•ฉ ํŠธ๋žœ์žญ์…˜์„ 30% ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ | Postgres 14, PL/pgSQL, pgAdmin |

| 2์œ„ | SQLHeroes | ์ธ๋ฑ์Šค ์ž๋™ ์ƒ์„ฑ ์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ | Python + Psycopg2, Docker |

| 3์œ„ | ByteCraft | ์‹ค์‹œ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌํ˜„ | Supabase, Grafana |

  • DataMinds ํŒ€์€ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ์‹œ์ €์™€ CTE(Common Table Expressions) ๋กœ ๊น”๋”ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด ๋†’์€ ์ ์ˆ˜๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

  • SQLHeroes๋Š” Docker ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€๋œ ๊ฐœ๋ฐœยทํ…Œ์ŠคํŠธ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด, ํŒ€ ์ „์ฒด์˜ ํ˜‘์—… ํšจ์œจ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

  • ByteCraft๋Š” Supabase์™€ ์—ฐ๋™ํ•ด ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๋ฅผ ๊ตฌํ˜„, ๊ฒฐ๊ณผ๋ฌผ์„ ์ง๊ด€์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ์–ด ์‹ฌ์‚ฌ์œ„์›์—๊ฒŒ ์ข‹์€ ์ธ์ƒ์„ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค.


# 4๏ธโƒฃ ์ฑŒ๋ฆฐ์ง€๋ฅผ ํ†ตํ•ด ๋ฐฐ์šด ์  โ€“ ์ดˆ๋ณด์ž์—๊ฒŒ๋„ ์œ ์šฉํ•œ ํŒ

  1. ์Šคํ‚ค๋งˆ ์„ค๊ณ„๋Š” ๊ธฐ๋ณธ

    • ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ , ์™ธ๋ž˜ํ‚ค(FK) ๋กœ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•๋ณดํ•˜์„ธ์š”.
  2. ์ธ๋ฑ์Šค๋Š” ํ•„์š”ํ•  ๋•Œ๋งŒ

    • ๋ชจ๋“  ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ์˜คํžˆ๋ ค ์“ฐ๊ธฐ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ๋นˆ๋„์™€ ์กฐ๊ฑด์„ ๋ถ„์„ํ•ด ํ•ต์‹ฌ ์ปฌ๋Ÿผ์—๋งŒ ์ ์šฉํ•˜์„ธ์š”.
  3. EXPLAIN ANALYZE ํ™œ์šฉ

    • ์‹คํ–‰ ๊ณ„ํš์„ ํ™•์ธํ•ด ๋ณ‘๋ชฉ ๊ตฌ๊ฐ„์„ ์ฐพ์•„๋‚ด๊ณ , VACUUMยทANALYZE ๋กœ ํ†ต๊ณ„๋ฅผ ์ตœ์‹ ํ™”ํ•˜๋ฉด ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.
  4. ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ CI/CD

    • git ๊ณผ GitHub Actions ๋กœ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์„ ์ž๋™ ํ…Œ์ŠคํŠธํ•˜๋ฉด, ํŒ€ ์ „์ฒด๊ฐ€ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์–ด ์˜ค๋ฅ˜๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ๊ฒฐ๋ก  โ€“ ๋‹ค์Œ ๋„์ „์€ ์—ฌ๋Ÿฌ๋ถ„ ์ฐจ๋ก€!

Agentic Postgres ์ฑŒ๋ฆฐ์ง€๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ค์ „ ์—ญ๋Ÿ‰์„ ํ‚ค์šฐ๋Š” ์ตœ๊ณ ์˜ ๋ฌด๋Œ€์˜€์Šต๋‹ˆ๋‹ค. ์šฐ์Šน์ž๋“ค์˜ ์„ฑ๊ณต ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด๋ฉฐ, ์—ฌ๋Ÿฌ๋ถ„๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ–‰๋™์„ ์‹ค์ฒœํ•ด ๋ณด์„ธ์š”.

  1. ๋ฌด๋ฃŒ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ ค๋ฐ›์•„ ์ง์ ‘ ์Šคํ‚ค๋งˆ ์„ค๊ณ„์™€ ์ฟผ๋ฆฌ ์ตœ์ ํ™” ์—ฐ์Šตํ•˜๊ธฐ.

  2. Tiger Data์™€ ๊ฐ™์€ ํŒŒํŠธ๋„ˆ์‚ฌ์˜ ๊ต์œก ์ž๋ฃŒ๋ฅผ ํ™œ์šฉํ•ด ์‹ค๋ฌด ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด ๋ณด๊ธฐ.

  3. ์ปค๋ฎค๋‹ˆํ‹ฐ ํฌ๋Ÿผ์— ์ฐธ์—ฌํ•ด ์งˆ๋ฌธํ•˜๊ณ , ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์„ฑ์žฅํ•˜๊ธฐ.

ํ–‰๋™ ์œ ๋„: ์ง€๊ธˆ ๋ฐ”๋กœ Agentic Postgres ์ฑŒ๋ฆฐ์ง€ ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•ด ์ƒ์„ธ ์ž๋ฃŒ์™€ ๋‹ค์Œ ๋ผ์šด๋“œ ์‹ ์ฒญ ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•ด ๋ณด์„ธ์š”!

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „๋ฌธ๊ฐ€๋กœ ๊ฐ€๋Š” ๊ธธ์€ ๊พธ์ค€ํ•œ ์‹ค์ „ ์—ฐ์Šต๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€์˜ ๊ต๋ฅ˜์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ์„ ๋ฐ”๋กœ ์ ์šฉํ•ด, ์—ฌ๋Ÿฌ๋ถ„๋งŒ์˜ Postgres ๋งˆ์Šคํ„ฐ๊ฐ€ ๋˜์–ด ๋ณด์„ธ์š”! ๐Ÿš€

No comments yet. Be the first to comment.

More from this blog