Gemini 2.5 Pro: 이미지 속 DB 스키마, ERD와 SQL로 변환하는 마법! ✨
데이터베이스 설계, 이제 이미지 하나로 시작하세요!
개발자, 데이터 분석가, 혹은 데이터베이스를 다루는 모든 분들께 놀라운 소식을 전합니다! 복잡한 데이터베이스 스키마 구조를 문서화하고 이해하는 과정, 때로는 번거롭고 시간이 많이 소요되셨죠? 이제 Google의 최첨단 AI 모델, Gemini 2.5 Pro와 함께라면 이 모든 과정이 혁신적으로 바뀔 수 있습니다.
최근 저는 Gemini 2.5 Pro를 사용하여 데이터베이스 스키마가 담긴 이미지 파일 하나만으로 해당 스키마를 분석하고, 시각적인 ERD(개체-관계 다이어그램) 코드와 활용 가능한 SQL 쿼리 예시까지 생성하는 놀라운 경험을 했습니다. 오늘은 그 과정을 여러분께 공유하고 Gemini 2.5 Pro의 강력한 능력을 소개하고자 합니다.
어떻게 가능할까요? 과정 살펴보기 🚀
1단계: DB 스키마 이미지 업로드 및 분석 요청모든 것은 간단한 이미지 파일 업로드와 명확한 요청으로 시작됩니다. 직접 그리거나, 캡처하거나, 혹은 문서에 포함된 데이터베이스 스키마 이미지를 Gemini 2.5 Pro에게 제공합니다. 저는 아래와 같은 스키마 이미지를 사용했습니다.
Gemini 프롬프트 예시 (스키마 분석 및 SQL 생성 동시 요청):
"업로드한 이미지의 스키마를 분석한 후 이에 맞는 가능한 SQL 문과 자연어 10개를 표로 만들어줘"
Gemini 2.5 Pro는 업로드된 이미지를 분석하여 텍스트(테이블명, 컬럼명, 데이터 타입 등)와 구조(테이블 간의 관계 등)를 놀라운 정확도로 인식하고 이해합니다. 단순히 텍스트를 읽는 것을 넘어, 이미지 속 정보의 의미와 관계를 파악하는 것이죠. 이것이 바로 Gemini 2.5 Pro의 멀티모달 능력입니다!
3단계: ERD 코드 생성 및 시각화 요청 (Mermaid 활용)
스키마 분석 후, ERD 생성을 요청할 수 있습니다. Gemini는 데이터베이스 구조를 시각적으로 표현하는 ERD 코드를 생성합니다. 특히 텍스트 기반 다이어그램 도구인
Mermaid
문법으로 코드를 생성해주어, 다양한 환경에서 쉽게 시각화할 수 있습니다.Gemini 프롬프트 예시 (ERD 코드 생성):
"업로드한 DB 스키마를 ERD 를 생성해줘"
erDiagram
CUSTOMERS ||--o{ ORDERS : "places"
CUSTOMERS ||--o{ REVIEWS : "writes"
ORDERS ||--|{ ORDER_ITEMS : "contains"
PRODUCTS ||--|{ ORDER_ITEMS : "included in"
PRODUCTS ||--o{ REVIEWS : "has"
CUSTOMERS {
INT customer_id PK "고객 ID (기본 키)"
VARCHAR first_name "이름"
VARCHAR last_name "성"
VARCHAR email "이메일"
VARCHAR phone "전화번호"
VARCHAR address "주소"
VARCHAR city "도시"
VARCHAR state "주/도"
}
PRODUCTS {
INT product_id PK "제품 ID (기본 키)"
VARCHAR product_name "제품명"
TEXT description "설명"
VARCHAR category "카테고리"
DECIMAL price "가격"
INT stock_quantity "재고 수량"
}
ORDERS {
INT order_id PK "주문 ID (기본 키)"
INT customer_id FK "고객 ID (외래 키)"
DATE order_date "주문 날짜"
DECIMAL total_amount "총 금액"
VARCHAR status "상태"
}
ORDER_ITEMS {
INT order_item_id PK "주문 항목 ID (기본 키)"
INT order_id FK "주문 ID (외래 키)"
INT product_id FK "제품 ID (외래 키)"
INT quantity "수량"
DECIMAL price "가격 (항목별)"
}
REVIEWS {
INT review_id PK "리뷰 ID (기본 키)"
INT product_id FK "제품 ID (외래 키)"
INT customer_id FK "고객 ID (외래 키)"
INT rating "평점"
TEXT comment "코멘트"
DATE review_date "리뷰 날짜"
}
EMPLOYEES {
INT employee_id PK "직원 ID (기본 키)"
VARCHAR first_name "이름"
VARCHAR last_name "성"
VARCHAR email "이메일"
VARCHAR phone "전화번호"
DATE hire_date "고용 날짜"
VARCHAR job_title "직함"
VARCHAR department "부서"
}
Gemini 프롬프트 예시 (ERD 시각화 요청):
"이 ERD 를 그려줘"
*참고: Gemini 환경이나 Mermaid 뷰어에서 시각화됩니다.
- Gemini는 분석된 스키마를 기반으로 실제 데이터 조회에 사용할 수 있는 다양한 SQL 쿼리 예시와 각 쿼리가 어떤 작업을 수행하는지에 대한 자연어 설명을 함께 생성해줍니다. (이 부분은 첫 번째 요청에서 함께 처리될 수 있습니다.)
Gemini 프롬프트 예시 (SQL 및 자연어 생성):
"업로드한 이미지의 스키마를 분석한 후 이에 맞는 가능한 SQL 문과 자연어 10개를 표로 만들어줘"
이는 데이터베이스를 처음 접하는 사람이나, 특정 작업에 필요한 쿼리를 빠르게 작성해야 할 때 매우 유용합니다. 아래는 Gemini가 생성한 10가지 예시입니다.# SQL 쿼리 (SQL Query) 자연어 설명 (Natural Language Description) 1 SELECT first_name, last_name, email FROM Customers WHERE city = 'Seoul';
'Seoul'에 거주하는 모든 고객의 이름과 이메일 주소를 조회합니다. 2 SELECT product_name, price FROM Products WHERE category = 'Electronics' ORDER BY price DESC;
'Electronics' 카테고리의 모든 제품명과 가격을 가격 내림차순으로 정렬하여 조회합니다. 3 SELECT o.order_id, o.order_date, c.first_name, c.last_name FROM Orders o JOIN Customers c ON o.customer_id = c.customer_id WHERE o.status = 'Shipped';
'Shipped' 상태인 모든 주문의 ID, 주문 날짜 및 해당 주문을 한 고객의 이름을 조회합니다. 4 SELECT p.product_name, SUM(oi.quantity) AS total_quantity_sold FROM Order_Items oi JOIN Products p ON oi.product_id = p.product_id GROUP BY p.product_name ORDER BY total_quantity_sold DESC;
각 제품별로 판매된 총 수량을 계산하고, 판매량이 많은 순서대로 제품명과 총 판매 수량을 조회합니다. 5 SELECT AVG(rating) AS average_rating FROM Reviews WHERE product_id = 123;
제품 ID가 123인 상품의 평균 평점을 계산합니다. 6 SELECT e.first_name, e.last_name, e.job_title FROM Employees e WHERE e.hire_date >= '2023-01-01';
2023년 1월 1일 이후에 고용된 모든 직원의 이름과 직함을 조회합니다. 7 SELECT c.first_name, c.last_name, COUNT(o.order_id) AS total_orders FROM Customers c LEFT JOIN Orders o ON c.customer_id = o.customer_id GROUP BY c.customer_id ORDER BY total_orders DESC;
각 고객별 총 주문 횟수를 계산하고, 주문 횟수가 많은 순서대로 고객 이름과 총 주문 횟수를 조회합니다. (주문이 없는 고객도 포함) 8 SELECT p.product_name, p.price, p.stock_quantity FROM Products p WHERE p.stock_quantity < 10;
재고 수량이 10개 미만인 모든 제품의 이름, 가격, 현재 재고 수량을 조회합니다. 9 SELECT o.order_id, o.order_date, o.total_amount FROM Orders o WHERE o.order_date BETWEEN '2024-01-01' AND '2024-03-31' ORDER BY o.order_date ASC;
2024년 1분기(1월 1일부터 3월 31일까지)에 발생한 모든 주문의 ID, 날짜, 총 금액을 날짜 오름차순으로 조회합니다. 10 SELECT r.review_id, r.rating, r.comment, c.first_name AS customer_name, p.product_name FROM Reviews r JOIN Customers c ON r.customer_id = c.customer_id JOIN Products p ON r.product_id = p.product_id WHERE r.rating <= 2;
평점이 2점 이하인 모든 리뷰의 ID, 평점, 코멘트 내용과 해당 리뷰를 작성한 고객의 이름 및 관련 제품명을 조회합니다.
Gemini 프롬프트 예시 (SQL 및 자연어 생성):
"업로드한 이미지의 스키마를 분석한 후 이에 맞는 가능한 SQL 문과 자연어 10개를 표로 만들어줘"
# | SQL 쿼리 (SQL Query) | 자연어 설명 (Natural Language Description) |
---|---|---|
1 | SELECT first_name, last_name, email FROM Customers WHERE city = 'Seoul'; | 'Seoul'에 거주하는 모든 고객의 이름과 이메일 주소를 조회합니다. |
2 | SELECT product_name, price FROM Products WHERE category = 'Electronics' ORDER BY price DESC; | 'Electronics' 카테고리의 모든 제품명과 가격을 가격 내림차순으로 정렬하여 조회합니다. |
3 | SELECT o.order_id, o.order_date, c.first_name, c.last_name FROM Orders o JOIN Customers c ON o.customer_id = c.customer_id WHERE o.status = 'Shipped'; | 'Shipped' 상태인 모든 주문의 ID, 주문 날짜 및 해당 주문을 한 고객의 이름을 조회합니다. |
4 | SELECT p.product_name, SUM(oi.quantity) AS total_quantity_sold FROM Order_Items oi JOIN Products p ON oi.product_id = p.product_id GROUP BY p.product_name ORDER BY total_quantity_sold DESC; | 각 제품별로 판매된 총 수량을 계산하고, 판매량이 많은 순서대로 제품명과 총 판매 수량을 조회합니다. |
5 | SELECT AVG(rating) AS average_rating FROM Reviews WHERE product_id = 123; | 제품 ID가 123인 상품의 평균 평점을 계산합니다. |
6 | SELECT e.first_name, e.last_name, e.job_title FROM Employees e WHERE e.hire_date >= '2023-01-01'; | 2023년 1월 1일 이후에 고용된 모든 직원의 이름과 직함을 조회합니다. |
7 | SELECT c.first_name, c.last_name, COUNT(o.order_id) AS total_orders FROM Customers c LEFT JOIN Orders o ON c.customer_id = o.customer_id GROUP BY c.customer_id ORDER BY total_orders DESC; | 각 고객별 총 주문 횟수를 계산하고, 주문 횟수가 많은 순서대로 고객 이름과 총 주문 횟수를 조회합니다. (주문이 없는 고객도 포함) |
8 | SELECT p.product_name, p.price, p.stock_quantity FROM Products p WHERE p.stock_quantity < 10; | 재고 수량이 10개 미만인 모든 제품의 이름, 가격, 현재 재고 수량을 조회합니다. |
9 | SELECT o.order_id, o.order_date, o.total_amount FROM Orders o WHERE o.order_date BETWEEN '2024-01-01' AND '2024-03-31' ORDER BY o.order_date ASC; | 2024년 1분기(1월 1일부터 3월 31일까지)에 발생한 모든 주문의 ID, 날짜, 총 금액을 날짜 오름차순으로 조회합니다. |
10 | SELECT r.review_id, r.rating, r.comment, c.first_name AS customer_name, p.product_name FROM Reviews r JOIN Customers c ON r.customer_id = c.customer_id JOIN Products p ON r.product_id = p.product_id WHERE r.rating <= 2; | 평점이 2점 이하인 모든 리뷰의 ID, 평점, 코멘트 내용과 해당 리뷰를 작성한 고객의 이름 및 관련 제품명을 조회합니다. |
Gemini 2.5 Pro, 왜 대단할까요? 🤔
- 압도적인 멀티모달 능력: 텍스트뿐만 아니라 이미지 속의 복잡한 구조와 정보를 이해하고 처리하는 능력은 Gemini 2.5 Pro의 핵심 강점입니다.
- 시간 절약 및 생산성 향상: 스키마 분석, ERD 작성, 기본 SQL 쿼리 생성 등 반복적이고 시간이 많이 걸리는 작업을 자동화하여 개발자와 분석가가 더 중요한 문제에 집중할 수 있도록 돕습니다.
- 정확성 및 일관성: 복잡한 스키마도 정확하게 분석하고 일관된 형식의 결과물을 제공하여 오류 발생 가능성을 줄여줍니다.
- 뛰어난 코드 생성 능력: 단순히 정보를 나열하는 것을 넘어, Mermaid나 SQL과 같이 특정 목적을 가진 코드를 생성하는 능력은 매우 실용적입니다.
- 자연스러운 대화형 인터페이스: 복잡한 명령어 대신 자연어 프롬프트를 통해 원하는 결과물을 얻을 수 있습니다.
마무리하며 ✍️
Gemini 2.5 Pro는 단순한 AI 챗봇을 넘어, 개발 및 데이터 분석 워크플로우를 혁신할 수 있는 강력한 도구입니다. 데이터베이스 스키마 이미지로부터 ERD와 SQL 쿼리를 생성하는 이 기능은 그 가능성의 일부일 뿐입니다.
여러분도 Gemini 2.5 Pro를 활용하여 반복적인 작업을 자동화하고, 창의적인 문제 해결에 더 많은 시간을 투자해보시는 것은 어떨까요? 앞으로 Gemini가 또 어떤 놀라운 능력으로 우리를 도울지 기대됩니다!
---------
도서:
댓글
댓글 쓰기