๐บ๐ธ Glancer โ ๋ ์ผ์ฆ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ง๋ฌธ์ ์ฌ์ด ๋ง๋ก ๋ฌผ์ด๋ณด์ธ์
Source: Dev.to
Overview
Glancer๋ Ruby on Rails ์์ง์ผ๋ก, ์์ฐ์ด๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ํ ์ ์๊ฒ ํด์ค๋๋ค. ๊ด๋ จ ์คํค๋ง ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ์ SELECT ์ฟผ๋ฆฌ(๋๋ ActiveRecord ํํ์)๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ์์ ํ๊ฒ ๊ฒ์ฆยท์คํํ ๋ค, ๊ฒฐ๊ณผ์ ์ฌ๋์๊ฒ ์ฝํ๊ธฐ ์ฌ์ด ์ค๋ช
์ ๋ฐํํฉ๋๋ค.
Example
โ์ง๋ 30์ผ ๋์ ์ฃผ๋ฌธ์ด ๋ช ๊ฑด ์์๊ณ , ์ํ๋ณ๋ก ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ๋?โ
โSELECT๊ฐ ์คํ๋๊ณ , ๊ฒฐ๊ณผ๊ฐ ํ์๋๋ฉฐ, ๋ต๋ณ์ด ์์ฐ์ด๋ก ์์ฑ๋ฉ๋๋ค.
Blazer์์ ์๊ฐ์ ๋ฐ์ Glancer๋ ์๋ SQL ์์ฑ์ ์์ฐ์ด ์ง๋ฌธ์ผ๋ก ๋์ฒดํฉ๋๋ค.
Installation
# Add to your Gemfile
gem "glancer"
์ ๋๋ ์ดํฐ๋ฅผ ์คํํ๊ณ ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค:
rails generate glancer:install
rails db:migrate
rails glancer:index:all
์ฑ์์ /glancer ๊ฒฝ๋ก์ ์ ์ํ๋ฉด ์ง๋ฌธ์ ์์ํ ์ ์์ต๋๋ค.
Configuration
์ ๋๋ ์ดํฐ๊ฐ ์ด๊ธฐํ ํ์ผ์ ์์ฑํฉ๋๋ค. ์ฌ๊ธฐ์ LLM ์ ๊ณต์๋ฅผ ์ค์ ํฉ๋๋ค. ์ต์ํ์ Gemini ์ค์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
# config/initializers/glancer.rb
Glancer.configure do |config|
config.llm_provider = :gemini
config.llm_model = "gemini-2.0-flash"
config.gemini_api_key = ENV["GEMINI_API_KEY"]
config.schema_permission = true
end
์ง์๋๋ ์ ๊ณต์์๋ OpenAI, OpenRouter, ๊ทธ๋ฆฌ๊ณ RubyLLM์ด ์ง์ํ๋ ๋ชจ๋ ๋ชจ๋ธ์ด ํฌํจ๋ฉ๋๋ค. ์ญํ ๋ณ๋ก ๋ค๋ฅธ ๋ชจ๋ธ์ ์ง์ ํ ์ ์์ต๋๋ค(์: ์ฟผ๋ฆฌ ์์ฑ์๋ ๋ ๋๋ํ ๋ชจ๋ธ, ์๋ต ์์ฑ์๋ ๋ ์ ๋ ดํ ๋ชจ๋ธ).
Usage
- ๋ธ๋ผ์ฐ์ ์์
/glancer๋ฅผ ์ฝ๋๋ค. - ์์ฐ์ด๋ก ์ง๋ฌธ์ ์ ๋ ฅํฉ๋๋ค.
- Glancer๊ฐ ์คํค๋ง ์ปจํ ์คํธ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ฟผ๋ฆฌ๋ฅผ ์์ฑยท๊ฒ์ฆํ ๋ค ํธ๋์ญ์ ์์์ ์คํํ๊ณ , ๊ฒฐ๊ณผ์ ์ค๋ช ์ ํ์ํฉ๋๋ค.
Safety
- ๋ชจ๋ ์ฟผ๋ฆฌ๋ ํญ์ ๋กค๋ฐฑ๋๋ ํธ๋์ญ์ ์์์ ์คํ๋ฉ๋๋ค.
- ํค์๋ ์ฐจ๋จ ๋ฆฌ์คํธ๊ฐ
DELETE,UPDATE,INSERT,DROP๋ฑ๊ณผ ๊ฐ์ ๋ฌธ์ฅ์ ์คํ๊ธฐ๊น์ง ๋๋ฌํ๊ธฐ ์ ์ ์ฐจ๋จํฉ๋๋ค. - ์ถ๊ฐ ๋ณดํธ๋ฅผ ์ํด Glancer๋ฅผ ์ฝ๊ธฐ ์ ์ฉ ๋ ํ๋ฆฌ์นด์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
No Extra Infrastructure
์๋ฒ ๋ฉ์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ JSON ์ปฌ๋ผ์ ์ ์ฅ๋ฉ๋๋คโ์ธ๋ถ ๋ฒกํฐ ์คํ ์ด(Pinecone, Weaviate ๋ฑ)๋ ํ์ํ์ง ์์ต๋๋ค.
Custom Context
config/glancer/llm_context.glancer.md์ ๋งํฌ๋ค์ด ํ์ผ์ ์ถ๊ฐํด ๋น์ฆ๋์ค ๊ท์น, ์ํ๊ฐ, ๋งค์ถ ๊ณ์ฐ์, ๋ฌด์ํ ์ปฌ๋ผ ๋ฑ์ Glancer์๊ฒ ์๋ ค์ค ์ ์์ต๋๋ค.
- `orders.status` ๊ฐ: "pending" | "paid" | "shipped" | "refunded"
- ์ ๋งค์ถ = SUM(orders.total) WHERE status = "paid"
- "churn"์ ๋ํ ์ง๋ฌธ์ด ๋ค์ด์ค๋ฉด `subscriptions` ํ
์ด๋ธ์ `churned_at` ์ปฌ๋ผ์ ์ฌ์ฉ
UI Features
- ๊ฒฐ๊ณผ๊ฐ ํ ์ด๋ธ ํํ๋ก ํ์๋๋ฉฐ ์ํด๋ฆญ CSV ๋ด๋ณด๋ด๊ธฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ์ ์ ํ ๊ฒฝ์ฐ ์ฐจํธ๊ฐ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
- ์ฟผ๋ฆฌ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์คํ๋ผ ๋ฉ์ธ ์ฑ ์ค๋ ๋๊ฐ ์์ ๋กญ๊ฒ ์ ์ง๋ฉ๋๋ค.
@table_name์ ์ ๋ ฅํ๋ฉด ํน์ ํ ์ด๋ธ์ ์ง๋ฌธ์ ๊ณ ์ ํ ์ ์์ต๋๋ค.- ์์ฑ๋ SQL์ ์ธ๋ผ์ธ์ผ๋ก ํธ์งํ๊ณ ๋ค์ ์คํํ ์ ์์ต๋๋ค.
- ๋ง์ดํฌ๋ก ์ง๋ฌธ์ ๋ฐ์ ์ ์ ์ ์์ต๋๋ค.
- ์คํค๋ง ๋ทฐ์ด๋
/glancer/db-schema์์ ํ์ธํ ์ ์์ต๋๋ค.
Blazer Integration
์ด๋ฏธ Blazer๊ฐ ์ค์น๋ผ ์๋ค๋ฉด, Glancer๋ ์์ฑ๋ SQL์ ๋ฐ๋ก Blazer์์ ์ด ์ ์๋ ๋ฒํผ์ ํ์ํฉ๋๋ค.
Contribution & Feedback
Glancer๋ ์คํฐ๋ ํ๋ก์ ํธ๋ก ์์ํ์ผ๋ฉฐ ํ์ฌ ๋ฒ์ 1.0.0์ ๋๋ค. ์ด์์ ํ ๋ฆฌํ์คํธ๋ฅผ ํ์ํฉ๋๋ค. ์ ์ฉํ๋ค๊ณ ์๊ฐ๋๋ฉด ๋ ํฌ์งํ ๋ฆฌ์ โญ๋ฅผ ๋ฌ์ ์ฃผ์ธ์.
- GitHub:
- RubyGems:**