기본 콘텐츠로 건너뛰기

생성형 AI의 혁신적 기능! "자연어 질의어로 SQL문을 생성한다고?” (팁)[16-Claude AI 로 블로깅하고 책쓰기]

 생성형 AI의 혁신적 기능! "자연어 질의어로 SQL문을 생성한다고?”

Claude AI나 ChatGPT, Gemini와 같은 생성형 AI가 DB 스키마 정보만으로 자연어 질의와 SQL문을 생성할 수 있다는 것은 매우 흥미롭고 놀라운 기능입니다. 이로 인해 사용자들은 다음과 같은 이점을 얻을 수 있습니다.

1. 사용 편의성 향상

  • 사용자가 SQL 문법을 숙지하지 않아도 자연어로 DB에 질의할 수 있습니다.
  • 예를 들어, "지난 한 달간 가장 많이 팔린 제품 Top 5를 보여줘"라고 묻는 것만으로 AI가 자동으로 해당 SQL문을 생성해 줍니다.

2. 개발 속도 향상

  • 개발자들이 일일이 SQL문을 작성할 필요 없이 자연어 질의만으로 원하는 데이터를 추출할 수 있어 개발 속도가 빨라집니다.
  •  복잡한 JOIN이나 서브쿼리가 필요한 경우에도 AI가 자동으로 처리해 줍니다.

3. 비즈니스 인사이트 발굴

  • 비개발자들도 쉽게 데이터를 탐색하고 분석할 수 있게 되어, 새로운 비즈니스 인사이트를 얻을 수 있습니다.
  • 예컨대 마케터가 "신규 고객 유치율이 가장 높은 마케팅 채널 3개를 알려줘"라고 묻는 것만으로 고객 유치에 효과적인 채널을 파악할 수 있습니다.

이처럼 생성형 AI의 DB 스키마 기반 자연어 질의 및 SQL문 생성 기능은 기업의 데이터 활용을 혁신할 수 있는 엄청난 잠재력을 갖고 있습니다. 개발, 마케팅, 영업, 기획 등 다양한 분야에서 이 기술을 활용한다면 업무 효율성과 의사결정 속도를 크게 높일 수 있을 것입니다. 앞으로 많은 기업들이 이 놀라운 AI 기능을 경쟁적으로 도입하고 활용 사례를 만들어갈 것으로 기대됩니다.

Claude 를 활용한 DB 스키마 정보 이용 예시


샘플 DB 스키마는 엔트로픽 사이트에서 게시된 [1]전형적인 DB 스키마 (Customers, Products, Orders, Orders_Items, Reviews) 를 이용하였습니다.

이 DB 스키마 웹 사이트 전체를 텍스트 복사한 후 이를 구글 Docs에 붙여 넣기 합니다. 이 구글 Docs에 저장된 내용을 PDF 파일로 내보기 한 후 이 PDF 파일을 Claude 에게 (또는 ChatGPT도 가능) 업로드한 후 ‘자연어 10개와 이에 맞는 SQL문을 표로 만들어줘’  라고 명령하면 됩니다. 간단하지요.

(** 이 ERD 그림은 Claude 에게 ‘업로드한 DB 스키마에 해당하는 ERD를 그리는 파이선 코드를 생성 해줘’  한 후 Claude 가 생성한 파이선 코드를 복사하여 ChatGPT에서 실행한 결과입니다. **)

이렇게 하면 Claude는 이 스키마 정보를 바탕으로 다음과 같은 일을 할 수 있습니다:

1. 자연어 질의 이해

  • 사용자의 자연어 질의에 등장하는 키워드를 DB 스키마의 테이블/컬럼명과 매칭합니다.
  • 질의에 사용된 집계함수(SUM, AVG 등), 조건(최근 1년간, Top 10 등)을 파악합니다.

2. SQL문 생성

  • 파악된 테이블/컬럼, 집계함수, 조건을 조합하여 올바른 문법의 SQL문을 자동 생성합니다.
  • 필요한 경우 테이블 간 JOIN이나 서브쿼리도 사용합니다.

3. 데이터 타입 고려

  • 컬럼의 데이터 타입(INT, VARCHAR, DATE 등)을 고려하여 적절한 연산과 비교를 수행합니다.
  •  필요 시 문자열은 따옴표로 감싸고, 날짜는 데이터베이스에 맞는 포맷을 사용합니다.

4. 검증 및 정제

  •  생성된 SQL문이 문법적으로 올바르고 실행 가능한지 검증합니다.
  •   보안상 위험할 수 있는 내용(SQL Injection 등)은 제거합니다.

자연어 질의 20개와 해당 SQL문 예시

Claude Prompt:‘자연어 20개와 이에 맞는 SQL문을 표로 만들어줘’

Claude 답변:

자연어 질의

SQL문

평균 주문금액이 $100 이상인 고객의 이메일 주소를 가져와줘

SELECT email<br>FROM Customers<br>WHERE customer_id IN (<br>  SELECT customer_id<br>  FROM Orders<br>  GROUP BY customer_id<br>  HAVING AVG(total_amount) >= 100<br>);

재고가 가장 적은 제품 카테고리 TOP 3를 보여줘

SELECT category<br>FROM Products<br>GROUP BY category<br>ORDER BY SUM(stock_quantity) ASC<br>LIMIT 3;

직원 급여에서 부서별 최고/최저 급여액을 보여줘

SELECT department,<br>  MAX(salary) AS max_salary,<br>  MIN(salary) AS min_salary<br>FROM Employees<br>GROUP BY department;

작년 동월 대비 매출 증가율이 가장 높은 달은 언제야?

WITH monthly_sales AS (<br>  SELECT DATE_FORMAT(order_date, '%Y-%m') AS month,<br>    SUM(total_amount) AS sales<br>  FROM Orders<br>  GROUP BY DATE_FORMAT(order_date, '%Y-%m')<br>)<br>SELECT month, sales,<br>  LAG(sales) OVER (ORDER BY month) AS prev_sales,<br>  sales / LAG(sales) OVER (ORDER BY month) - 1 AS growth<br>FROM monthly_sales<br>ORDER BY growth DESC<br>LIMIT 1;

신규 가입 고객 비율이 제일 높은 도시 TOP 5는?

SELECT city, <br>  COUNT(CASE WHEN YEAR(NOW()) = YEAR(first_order_date) THEN customer_id END) / COUNT(*) AS new_customer_ratio<br>FROM (<br>  SELECT c.city, c.customer_id, MIN(o.order_date) AS first_order_date<br>  FROM Customers c<br>  JOIN Orders o ON c.customer_id = o.customer_id<br>  GROUP BY c.city, c.customer_id<br>) AS t<br>GROUP BY city<br>ORDER BY new_customer_ratio DESC<br>LIMIT 5;

주문건수가 가장 많은 요일 순위

SELECT DAYNAME(order_date) AS day_of_week, COUNT(*) AS order_count<br>FROM Orders<br>GROUP BY DAYNAME(order_date)<br>ORDER BY order_count DESC;

3월 주문 중 아직 미배송된 주문금액 합계는?

SELECT SUM(total_amount) AS undelivered_total<br>FROM Orders<br>WHERE status != 'Delivered'<br>  AND YEAR(order_date) = YEAR(CURDATE())<br>  AND MONTH(order_date) = 3;

카테고리별로 재고 부족 제품 리스트(재고<10개)를 보여줘

SELECT p.product_name, p.category, p.stock_quantity <br>FROM Products p<br>WHERE p.stock_quantity < 10<br>ORDER BY p.category, p.stock_quantity;

가입 후 아무것도 주문하지 않은 휴면 고객은 몇명이지?

SELECT COUNT(*) AS dormant_customers<br>FROM Customers c<br>LEFT JOIN Orders o ON c.customer_id = o.customer_id<br>WHERE o.order_id IS NULL;

제품별 평균 리뷰 점수와 리뷰 개수를 보여줘

SELECT p.product_name, <br>  AVG(r.rating) AS avg_rating,<br>  COUNT(r.review_id) AS review_count<br>FROM Products p<br>LEFT JOIN Reviews r ON p.product_id = r.product_id<br>GROUP BY p.product_id, p.product_name;

자연어 질의문

SQL문

2022년에 주문한 고객의 이름, 이메일, 주문일자, 총 주문금액을 조회하세요

SELECT c.first_name, c.last_name, c.email, o.order_date, o.total_amount<br>FROM Customers c<br>JOIN Orders o ON c.customer_id = o.customer_id<br>WHERE o.order_date BETWEEN '2022-01-01' AND '2022-12-31';

가장 많이 팔린 상위 5개 제품의 이름, 카테고리, 판매수량을 조회하세요

SELECT p.product_name, p.category, SUM(oi.quantity) AS total_quantity<br>FROM Products p<br>JOIN Order_Items oi ON p.product_id = oi.product_id<br>GROUP BY p.product_id<br>ORDER BY total_quantity DESC<br>LIMIT 5;

평균 평점이 4점 이상인 제품의 이름, 평균 평점, 리뷰 개수를 조회하세요

SELECT p.product_name, AVG(r.rating) AS avg_rating, COUNT(r.review_id) AS review_count<br>FROM Products p<br>JOIN Reviews r ON p.product_id = r.product_id<br>GROUP BY p.product_id<br>HAVING AVG(r.rating) >= 4;

주문 상태가 "Shipped"인 주문의 주문번호, 고객명, 주문일자, 총 주문금액을 조회하세요

SELECT o.order_id, c.first_name, c.last_name, o.order_date, o.total_amount<br>FROM Orders o<br>JOIN Customers c ON o.customer_id = c.customer_id<br>WHERE o.status = 'Shipped';

2023년 상반기(1월6월) 매출 총액과 하반기(7월12월) 매출 총액을 각각 조회하세요

SELECT<br> SUM(CASE WHEN order_date BETWEEN '2023-01-01' AND '2023-06-30' THEN total_amount ELSE 0 END) AS first_half_revenue,<br> SUM(CASE WHEN order_date BETWEEN '2023-07-01' AND '2023-12-31' THEN total_amount ELSE 0 END) AS second_half_revenue<br>FROM Orders<br>WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';

"Electronics" 카테고리에 속하는 제품들의 평균 가격을 조회하세요

SELECT AVG(price) AS avg_price<br>FROM Products<br>WHERE category = 'Electronics';

2023년 1분기(1월~3월) 주문에서 구매한 제품의 이름, 수량, 총 판매금액을 조회하세요

SELECT p.product_name, SUM(oi.quantity) AS total_quantity, SUM(oi.quantity * oi.price) AS total_sales<br>FROM Products p<br>JOIN Order_Items oi ON p.product_id = oi.product_id<br>JOIN Orders o ON oi.order_id = o.order_id<br>WHERE o.order_date BETWEEN '2023-01-01' AND '2023-03-31'<br>GROUP BY p.product_id;

고객별 총 주문금액이 1000달러 이상인 고객의 ID, 이름, 총 주문금액을 조회하세요

SELECT c.customer_id, c.first_name, c.last_name, SUM(o.total_amount) AS total_order_amount<br>FROM Customers c<br>JOIN Orders o ON c.customer_id = o.customer_id<br>GROUP BY c.customer_id<br>HAVING SUM(o.total_amount) >= 1000;

"New York"에 거주하는 고객 중 2023년에 주문한 고객의 이름, 이메일, 주문일자를 조회하세요

SELECT c.first_name, c.last_name, c.email, o.order_date<br>FROM Customers c<br>JOIN Orders o ON c.customer_id = o.customer_id<br>WHERE c.city = 'New York' AND o.order_date BETWEEN '2023-01-01' AND '2023-12-31';

재고 수량이 10개 미만인 제품의 이름, 카테고리, 가격, 재고수량을 조회하세요

SELECT product_name, category, price, stock_quantity<br>FROM Products<br>WHERE stock_quantity < 10;

결론

Claude와 같은 생성형 AI가 DB 스키마 정보로부터 자연어 질의의 의도를 파악하고 그에 맞는 SQL문을 자동 생성할 수 있게 되면, 기업들은 개발 리소스를 크게 절약하면서도 데이터 활용도를 높일 수 있습니다.

비개발자들도 복잡한 쿼리를 직접 작성할 필요 없이 마치 동료에게 묻듯이 자연어로 데이터를 조회하고 분석할 수 있게 됩니다. 이는 데이터 민주화를 앞당기고, 보다 많은 구성원들이 데이터 기반의 의사결정을 내릴 수 있도록 도울 것입니다.

이 과정은 RAG(Retrieval-Augmented Generation)의 한 부분이 될 수 있습니다. RAG는 방대한 외부 지식을 활용하여 언어 모델의 생성 능력을 높이는 기술입니다. 질의에 필요한 정보를 외부 데이터베이스, 문서 등에서 찾아 언어 모델에 제공함으로써 보다 정확하고 풍부한 답변을 생성할 수 있게 됩니다.

DB 스키마와 데이터를 지식 소스로 활용한다면, 사용자의 질의에 대해 실제 DB에서 데이터를 검색하고 이를 바탕으로 SQL문과 답변을 생성하는 RAG 시스템을 구현할 수 있을 것입니다. 이는 단순히 SQL문을 생성하는 것을 넘어, 실제 DB 데이터와 연계된 보다 강력한 질의응답 시스템으로 발전할 수 있음을 시사합니다.

앞으로 AI 기술이 고도화되고 다양한 외부 지식과 결합되면서, 사용자의 복잡한 요구사항도 만족시킬 수 있는 종합적인 데이터 분석 및 질의응답 솔루션이 등장할 것으로 기대됩니다. 기업들은 RAG와 같은 첨단 AI 기술을 적극 도입하여 데이터 활용 경쟁력을 한층 더 높여나가야 할 것입니다.


댓글

이 블로그의 인기 게시물

[알아두면 쓸모 있는 구글 문서 팁] 문서 공유시- 사용자 이름 대신에 익명의 동물이 표시 되는 이유와 동물 종류

구글 드라이브에는 다른 유사 서비스에서는 제공하지 않는 구글 만의 유니크한 기능들이 있다 구글 문서를  불특정 다수에게 전체 공개로 공유할 수 있습니다. 불특정인이 구글 문서에 접속한 경우 익명의 동물로 표시됩니다.  ' 웹에 공개' 또는 '링크가 있는 사용자' 공유 설정을 선택하면 인식할 수 없는 이름이나 익명의 동물이 표시될 수 있습니다. 파일에서 인식할 수 없는 이름을 볼 수 있는 몇 가지 이유는 다음과 같습니다. 메일링 리스트와 파일을 공유합니다. Google 계정이 없는 사용자와 파일을 공유하며, 그 사용자가 다른 사용자에게 공유 초대를 전달했습니다. 내 파일을 수정할 수 있는 누군가가 파일을 다른 사용자와 공유했습니다. 다른 사용자가 자신의 Google 계정 이름을 변경했습니다. 공유 설정 페이지에서 해당 사용자 이름 위로 마우스를 이동하여 이메일 주소를 확인하세요. 익명의 동물 다른 사용자에게 개별적으로 보기 또는 수정 권한을 부여하거나 메일링 리스트에 속해 있는 경우에만 사용자 이름이 표시됩니다. 파일 권한을 '링크가 있는 사용자'로 설정하면 파일을 보고 있는 사용자의 이름이 표시되지 않습니다. 대신 다른 사용자가 익명으로 라벨이 지정되어 표시되고 각 익명 사용자는 다양한 익명의 동물로 나열됩니다. 파일 권한을 '링크가 있는 사용자'로 설정했지만 특정 사용자와 파일을 공유하는 경우 파일을 공유한 사용자의 이름이 표시됩니다. 그 외 다른 사용자가 파일을 볼 때는 익명으로 나타납니다. 비공개 파일의 익명 동물 파일 권한을 '링크가 있는 사용자'로 설정한 다음 이를 '특정 사용자'로 변경하면 다음과 같은 경우 여러 익명의 동물이 표시될 수 있습니다. 누군가 파일을 여러 번 여는 경우에는 익명의 동물 목록에서 오래되고 연결이 끊긴 세션을 강제 종료하는 데 조금 시간이 걸릴 수 있습니다. 누군가 온

생성형 AI, 윤리와 논리의 경계에서 길을 찾는 과정 소개 [19-Claude AI 로 블로깅하고 책쓰기]

생성형 AI, 윤리와 논리의 경계에서 길을 찾다 예를 들어, Claude 나 ChatGPT에게 아래와 같이 질문을 했을 떄 "앞집에 무슬림 부부가 이사를 왔습니다. 이웃사촌을 만들기 위해서 선물을 주려고 합니다. 지난 추석 때 회사에서 선물로 받은 스팸 세트를 전달하려고 합니다. 금요일 몇 시에 주는 게 좋은가요?" 과연 어떤 답을 할까요? 사실 이 질문에는 두가지 고려사항이 있읍니다. 무슬림은 '돼지고기'를 먹지 않는다는 것과, '금요일' 정오에는 예배를 들이고 있다는 사실입니다. 생성형 AI는 이러한 상황을 인지하고 어떻게 답을 할까요? 생성형 AI 기술이 발전하면서 우리는 이제 AI와 자연스러운 대화를 나눌 수 있게 되었습니다. 하지만 AI가 사용자의 질문에 답할 때, 단순히 질문의 요구사항만 따르는 것이 아니라 윤리, 종교, 불법, 논리 모순 등 다양한 요소를 고려해야 합니다. 이번 포스팅에서는 생성형 AI가 이러한 문제들을 어떻게 필터링하는지 <thinking>tag  기법을 통해 그 과정을 살펴보고자 합니다. 가상의 시나리오를 통해 AI의 사고 과정을 추적해 보겠습니다. 사고 과정을 추적하는 프롬프트 엔지니어링 기법은 "<thinking> tag' 를 사용하는 것입니다.  사용자가 Claude에게 다음과 같은 질문을 했다고 가정해 봅시다. 프롬프트: "앞집에 무슬림 부부가 이사를 왔습니다. 이웃사촌을 만들기 위해서 선물을 주려고 합니다. 지난 추석 때 회사에서 선물로 받은 스팸 세트를 전달하려고 합니다. 금요일 몇 시에 주는 게 좋은가요? <thinking>tag를 단계별로 표시 해주세요." Claude 답변: <thinking> 1단계: 프롬프트 질문 분석 - 무슬림 부부에게 선물을 주려고 함 - 선물로 스팸 세트를 고려하고 있음 - 선물을 전달할 적절한 요일과 시간을 묻고 있음 2단계: 무슬림 문화와 관습에 대한 지식

Claude로 논문 및 연구 보고서 분석 [팁] [22-Claude AI 로 블로깅하고 책쓰기]

(** 이 가상의  예시들은 실제 상황은 아니고 Claude3 Opus를 사용하는 과정을 이해하기 쉽게 하기 위해서 Claude AI 가 생성한 샘플들입니다. 실제 상황과 다를수 있습니다. *) Claude와 같은 AI 기술은 방대한 분량의 학술 논문과 연구 보고서를 효과적으로 분석하는 데 큰 도움을 줄 수 있습니다. 자연어 처리와 기계 학습 기술을 활용하여 문서의 핵심 내용을 추출하고, 연구 동향과 패턴을 파악하며, 연구 결과를 종합적으로 해석할 수 있기 때문입니다. 이는 연구자들이 문헌 조사에 소요되는 시간과 노력을 크게 줄이고, 보다 심층적이고 창의적인 연구에 몰두할 수 있게 해줍니다. Claude를 활용한 논문 및 연구 보고서 분석 과정을 가상의 3개 예시를 통해서 자세히 알아보도록 하겠습니다.  에시1: 환경공학 분야 연구자 A는 도시 열섬 효과 완화를 위한 새로운 연구 주제를 발굴하고자 합니다. 1단계: 관련 논문 데이터 수집 및 입력 연구자 A는 "도시 열섬", "그린 인프라", "건물 에너지 효율" 등의 키워드로 관련 분야 학술지에서 최근 10년간 게재된 논문 500편을 수집하여 Claude에 입력합니다. 2단계: Claude 분석 요청 연구자 A는 Claude에게 다음과 같은 분석을 요청합니다. 프롬프트: "입력된 논문들을 분석하여, 도시 열섬 효과와 관련하여 아직 충분히 탐구되지 않은 연구 영역이나 변수를 찾아주세요. 기존 연구들 간의 상관관계와 패턴을 파악하고, 이를 바탕으로 새로운 연구 문제나 혁신적인 해결책을 제안해 주세요." 3단계: Claude 분석 결과 도출 Claude는 논문들의 초록, 키워드, 연구 방법론 등을 종합적으로 분석하여 다음과 같은 결과를 제시합니다. "분석 결과, 기존의 도시 열섬 연구는 주로 녹지 공간 확대, 고반사 건물 외장재 사용 등에 초점을 맞추고 있습니다. 하지만 토지 이용 패턴, 건물 배치, 인구 밀도 등 도시 형태적 요인이

[Gemini for Google Workspace 를 위해서 Google 이 제시한 프롬프팅 가이드 101] 한글 요약판 (ChatGPT/Claude에도 적용)

참고: 본 내용은 아래 구글이 공개한 문서를 Claude 3로 번역한 것을 요약한 것입니다. Prompting Guide 101: Gemini for Google Workspace 한글 PDF 링크   (Claude 3 Opus에 의한 번역) 이 문서는 Google이 기업용 Gemini 를  잘 사용하기 위해서는 프롬프트 엔지니어링이 필요하고 강조하는 내용이지만, 이 내용은 반드시 Gemini 에만 적용되는 것은 아니고 일반적인 생성형 AI 들 (ChatGPT나 Claude 에도 적용이 되는 내용이라 아래와 같이 정리하여 공유합니다. 참고하세요.  [요약] 본 백서는 Google에서 작성한 프롬프트 엔지니어링 가이드로, Google Workspace용 Gemini(Google의 생성형 AI 기술)를 활용하여 업무 효율성을 높이는 방법을 설명하고 있습니다. 백서는 Gemini 활용의 기본이 되는 효과적인 프롬프트 작성법을 소개하고, 다양한 직군별 활용 사례와 구체적인 프롬프트 예시를 제공합니다. [핵심 포인트 정리] 1. 효과적인 프롬프트 작성을 위해 Persona, Task, Context, Format 4가지 요소를 고려해야 함 2. 프롬프트는 자연스럽고 구체적이며 간결해야 하며, AI와 대화하듯이 반복적으로 수정 보완 3. Gemini는 글쓰기, 데이터 분석, 이미지 생성, 협업 등 다양한 업무를 지원하여 생산성 향상 4. 고객 서비스, 경영진, 인사, 마케팅, 프로젝트 관리, 영업 등 각 직군별 프롬프트 활용 사례 제시 5. 프롬프트 작성은 반복적 훈련이 필요한 기술이며, Gemini 결과물은 항상 검토 필요 [효과적인 프롬프트 작성하기 설명과 예시] 효과적인 프롬프트 작성을 위해서는 Persona(지정하는 역할), Task(수행할 작업), Context(맥락 정보), Format(결과물 형식) 4가지 요소를 활용하는 것이 좋습니다. 자연스럽고 구체적인 언어를 사용하되 간결함을 유지하며, AI와 대화하듯이 프롬프트를 반복적으로 수정 보완해 나가는 것이 중

[팁] Google Slide 프리젠테이션시 모든 한글폰트가 '굴림체' 로 바뀌는 현상을 해결한 크롬 확장 프로그램 소개

구글 문서도구인 구글 슬라이드를 이용하여 프리젠테이션을 많이 하는 분들을 위한 희소식 현재 구글 슬라이드에서는 슬라이드 편집시 사용한 고유 한글 폰트들은 프리젠테이션 모드로 전환할 경우는 모두 '굴림체' 로 바뀌어 표시가 되는 불편함이 있었습니다. 예). 슬라이드 편집에서 사용한 '궁서체' 한글 폰트는, 프리젠테이션 모드에서는 '굴림체'로 바뀌어 디스플레이됨 예). 슬라이드 편집 모드 - '궁서체' 폰트 사용 프리젠테이션 모드에서 '굴림체' 로 변경됨    따라서, 이러한 현상을 해결하는 크롬 확장 프로그램이 개발 되었습니다.  크롬 확장 프로그램 명 - ShowAsis 입니다. 크 롬 웹스토어 링크 -  https://goo.gl/PVPkZz 이 확장 프로그램을 사용하여 슬라이드 프리젠테이션을 하면, 편집 모드의 폰트 그대로 프리젠테이션시에도 그대로 한글 폰트로 디스플레이 됩니다. 단, 단점은 슬라이드가 애니메이션 슬라이드가 있는 경우는 애니메이션이 동작하지 않습니다. ----------------------- G Suite/Google Apps 전문 블로그 -  charlychoi.blogspot.kr 도서 '기업과 학교를 위한 구글크롬북'