AWS 기술 블로그

Amazon Bedrock을 활용한 Aurora MySQL 운영하기-1부

불과 몇년만에 생성형 AI 서비스가 모든 사람의 화두가 되고 모든 비즈니의 중심과 투자는 생성형AI 서비스로 몰리고 있습니다. ChatGPT를 시작으로 많은 생성형 AI모델들이 쏟아져 나오고, 새로 나오는 모델들은 기존보다 훨씬 뛰어난 성능과 기능을 자랑합니다. 이러한 생성형AI서비스 모델을 LLM(Large Language Model)이라고도 합니다. 많은 기업들이 챗봇형태의 서비스를 시작으로 다양한 실험을 통해, 에이전트 형태의 서비스를 개발하고 있습니다. 이전에는 LLM 에게 질문에 대한 답변이나 코드와 이미지 생성에 초점을 맞췄다면, 이제는 여러가지 다양한 실제 문제 해결을 처리하는 복잡한 형태의 업무를 능숙하게 처리하는 AI Assistant 형태로 진화하고 있습니다.

데이터베이스 운영에 LLM 적용하기

데이터베이스는 수십만 수백만의 유저들이 각각의 세션정보를 가지고, 그 읽는 시점의 데이터를 읽고 저장하는 매우 복잡하고 정교한 메커니즘을 가진 데이터베이스 관리시스템이라고 정의할 수 있습니다. 그렇기때문에, 데이터베이스 운영은 전문성을 가진 데이터베이스 관리자(DBA)가 업무를 맡습니다. 그러나 데이터는 계속 늘어나고 마이크로 서비스및 분산 아키텍쳐로 고도화됨에 따라, 관리해야할 데이터베이스의 숫자도 크게 늘어났습니다. 한 명의 DBA가 100대 이상의 데이터베이스를 운영하는 경우도 많습니다. 그에 따라 단순한 DB운영업무도 큰 부담이 될 수 밖에 없습니다. 이러한 DB 운영업무를 LLM을 이용하여 효율화 할수 없을까요? 다음과 같이 몇가지 DBA의 업무를 하는데 있어, LLM 서비스를 활용할수 있습니다. 챗봇과의 대화 형식으로 간단한 명령어로 업무를 수행하게 하는 에이전트를 만드는 것을 생각해볼 수 있습니다.

  • 데이터베이스에 테이블 생성,추가, 인덱스 생성, 테이블 데이터 업데이트와 같은 작업을 일괄로 수행합니다.
  • 특정 기간동안, 가장 CPU 부하가 높은 데이터베이스의 CPU,Memory 현황을 리스트로 보여줍니다.
  • 특정 데이터베이스의 장애로 특정시점의 Error log에서 문제가 되는 항목을 정리된 포맷형태로 확인합니다.
  • 테이블 및 인덱스 생성 또는 변경 작업을 여러대의 데이터베이스에 일괄로 적용하고 결과값도 확인합니다.
  • 각 데이터베이스의 Top SQL을 n개씩 뽑아서 가장 부하가 큰 순으로 정렬하여 보여줍니다.

위와 같은 예시 말고도, 다양한 DBA 업무에도 LLM 서비스를 적용해 볼수 있을 것입니다. 과연 어떻게 그러한 기능을 구현할수 있을까요?

LLM 서비스와 대화를 잘 하는 방법 : Prompt Engineering

위에서 말씀드린 시나리오들을 구현하는 방법을 설명하기 전에, 먼저 짚고 넘어가야 할 내용들이 있습니다. 우리가 다른 사람과 대화를 할때, 효과적인 대화를 하기 위해 여러가지 방법과 팁이 있듯이, 마찬가지로, LLM 서비스로 부터 원하는 답을 얻거나 명령을 실행하는데 적합한 대화방식이 존재합니다. 우리가 요청하는 질문, 명령등을 Prompt 라는 전문용어로 정의합니다. 또한 Prompt를 가지고 LLM 서비스와 대화를 통해 원하는 답을 얻어내는 방법을 Prompt Engineering이라고 합니다. 그럼 Prompt Engineering은 어떻게 해야하는 걸까요? 다음과 같이 기본적인 구조를 생각해볼수 있습니다.

위 그림에서 오른쪽의 사람이 원하는 명령 또는 질문을 하면, 왼쪽의 파운데이션 모델인 LLM 서비스가 질문에 대한 답이나 결과를 전달합니다.이때, 사람의 명령에는 단순한 질문 또는 명령만 들어가는 것이 아닙니다. 분석하기 원하는 데이터 또는 질문에 참고하여 답의 품질을 높일수 있는 컨텍스트를 전달하기도 합니다.이와 관련된 내용은 검색증강생성 RAG(Retrieval Augmented Generation)라고 하는 잘 알려진 아키텍처가 있습니다. 자세한 내용은 링크(클릭)을 참조하세요. 프롬프트 엔지니어링은 여러가지 기법들이 있습니다. 간단한 예시들을 살펴 보겠습니다.

예제를 활용하는 방식
아래 왼쪽 그림은 10+10이 얼마인지 단순하게 질문을 했지만, 오른쪽 그림은 여러가지 답변 예시를 주었습니다. 어떤 답변을 해주고 있나요? 왼쪽은 10+10을 계산하는 문제로 이해하고 20이라는 단순한 답을 내놓지만, 오른쪽은 예시를 통해 사용자의 의도를 정확히 파악했습니다. 오른쪽은 10+10이라는 문제의 유형이 무엇인지에 대한 정확한 답을 보여주고 있습니다.

쿼리를 생성할때도 마찬가지입니다. 최근 LLM 모델들은 예시가 없어도, SQL을 대부분 잘 생성해 줍니다.그러나 환각현상으로 인해, 잘못된 쿼리를 생성하고 오류가 종종 발생하기도 합니다. LLM 모델에게 예제쿼리를 참조하게 하면, 정확한 SQL을 생성하도록 유도할수 있습니다.아래 코드에서는 <example> 이라는 XML 태그에 예제 쿼리를 넣어 LLM 모델이 참조하도록 하고 있습니다. 원하는 쿼리를 생성하기 위해서는 테이블 컬럼, 코멘트 정보, 샘플데이터등이 들어가면 정확한 쿼리를 생성하는데 도움을 줍니다.

<example>
   --여러개의 컬럼들을 한개로 합치는 쿼리 및 sum 함수로 주문내역을 보여주고 가장 최근 주문한 내역 10건을 가져오는 쿼리  
    SELECT CONCAT(c.FirstName, ' ', c.LastName) AS customer_name,
       o.OrderDate,
       p.ProductName,
       SUM(o.Quantity * p.Price) AS total_order_amt
    FROM orders o
    JOIN customers c ON o.CustomerID = c.CustomerID
    JOIN products p ON o.ProductID = p.ProductID
    GROUP BY customer_name, o.OrderDate, p.ProductName
    ORDER BY o.OrderDate DESC
    limit 10;
</example>
XML

명확하고 구체적으로 표현하기
Prompt는 사람에게 말하는 것과 마찬가지로, 명확하고 구체적으로 표현해야 합니다.필요한 답변만 얻을수 있도록 최대한 자세하게 요구사항을 전달해야 합니다. 그래야 우리가 원하는 정확한 답을 얻을수 있습니다. 왼쪽은 오른쪽의 차이를 비교해보세요.

쿼리를 생성할때도 마찬가지입니다. 특정 컬럼 이나 쿼리 방법을 자세히 명시하는 경우에 더 정확한 쿼리를 만들어냅니다. Example 쿼리도 중요하지만, 올바른 쿼리를 생성하고, 원하는 값들을 가져오기 위해서 명시적으로 어떤 정보가 필요한지 알려줘야 합니다. 아래와 같이 명확한 지시 없는 요청은 주문금액이 나오지 않는 경우가 종종 발생합니다.

따라서, 애매모호한 명령보다 최대한 구체적으로, 정확한 지시를 내리도록 하는 것이 좋습니다. 이번에는 주문아이디,주문자와 구매금액등 필요한 정보를 구체적으로 명시하였습니다. 그러면 아래와 같이 원하는 컬럼들이 정확하게 나옵니다.

역할 지정하기
역할을 지정하는 것도 중요합니다. LLM 모델에게 역할을 부여하거나, 반대로 안하고 얻는 답의 품질 또한 큰 차이가 있습니다. 아래 그림처럼 퍼즐을 잘 푸는 논리봇, 수학문제를 잘 푸는 수학 전문가와 같이 특정 분야에 대한 롤을 부여하면,정확한 답을 얻어낼 확률이 높아집니다.

마찬가지로 LLM모델에게 “당신은 Aurora MySQL 전문가 DBA 입니다”와 같이 Role을 부여하면 문제해결에 더욱 도움이 됩니다. 아래 코드에서는 Aurora MySQL DBA로서의 역할과 구체적인 지시사항을 내리고 있습니다.

prompt_data = 
  f"""Human: 당신은 Aurora MySQL 전문 DBA이며 Aurora MySQL에 관한 모든 질문에 답변할 수 있습니다.
  제공된 맥락에서 정보가 없는 경우 '모르겠습니다'라고 응답해 주세요.
  <context></context> 태그 안에는 테이블, 컬럼, 인덱스와 같은 스키마 정보가 있습니다.
  <context>에 기반하여 정확한 테이블과 컬럼에서 정확한 컬럼명과 테이블명만 작성하세요.
  또한 SQL 작성할때, <example></example> 태그에 있는 쿼리들을 참조해주세요.
  다른 테이블과 조인할때, 동일한 컬럼명을 가져오면 다른 별칭을 추가하세요."                      
Python

원하는 결과를 얻도록 결과 포맷을 정해주기
LLM이 원하는 답을 전달해줄때에도, 내용이 복잡하거나 불필요한 말들과 답변이 섞여있어, 읽기 힘든 경우도 있습니다.또는 원하는 답변을 정해진 형식에 맞춰서 여러 곳에서 사용해야할 때도 있습니다. 아래 그림에서는 XML 태그를 사용하여 섹션을 구분하여, 원하는 형식에 맞춰서 답을 전달하도록 하였습니다.


데이터베이스의 모니터링 또는 장애보고서를 작성하는 것도 귀찮은 업무입니다. 우리가 원하는 정해진 양식의 장애보고서, 모니터링 보고서 형식으로 답을 전달할수 있다면 이러한 업무를 줄이는데 도움을 받을 수 있습니다. 아래코드에서는 innodb status정보를 원하는 포맷에 맞춰서 정리해주도록 요청하고 있습니다. 각 클러스터별로 중요한 지표들만 뽑아서 보여주되, 일정한 포맷형태로 깔끔하게 정리하도록 지시를 내리고 있습니다.

prompt = '''평가한 내용에서 트랜잭션, 락, 버퍼풀등의 정보를 보고 현재 디비의 상태를 분석해주세요. 가능하면 의미있는 데드락,버퍼풀 히트율도 계산해주세요!:
           그외에도 Aurora mysql의 의미있는 정보들을 분석해서 알려주세요. 마지막에는 각 디비별로 간략하게 요약해서 분석의 가장 중요한 결과를 알려주세요! 
           다음과 같은 형식으로 분석하고 정리해주세요.
           <format>
             1.Gamedb cluster 1 \n
               Transactions 
               LATEST DETECTED DEADLOCK 
               BUFFER POOL AND MEMORY                 
               Row operations
               Disk I/O workloads 
               INSERT BUFFER AND ADAPTIVE HASH INDEX usage
              (참조) 이와 같이 여러개의 디비가 있으면 위와 같은 형식으로 보여주세요.
             ... 
             결론 : 
           </format>   
           '''
Python

프롬프트에 포맷을 지정해주면 아래의 대화 예시처럼, 포맷에 맞춘 답변을 얻을수 있습니다.


Prompt Engineering 에서 기억해야할 중요한 원칙
Prompt Engineering의 기법은 상당히 많고 내용도 방대합니다. 그러나 한가지 기억해야할 중요한 사실이 있습니다. 사람이 못 알아듣는다면, LLM도 마찬가지 입니다. “사람이 이해할수 있는 Prompt를 작성하면 LLM도 그것을 이해합니다.“ 이것을 Prompt Engineering의 황금률이라고 합니다. 이와 같이 Prompt Engineering을 사용하면, 답변의 품질을 높일 수 있습니다. 위에서 보여드린 예시는 Amazon Bedrock의 Claude 3 Sonnet 버전을 사용하였습니다. Claude의 Prompt Engineering 가이드는 여기(클릭) 를 보시면 자세한 내용을 볼 수 있습니다. ChatGPT, Llama등 각 모델마다 프롬프트 엔지니어링 방식은 조금씩 다른 점도 참고해 주시면 좋겠습니다.

Prompt의 기본 구조
Prompt 를 잘 사용하기 위해서는 Prompt의 구조에 대해서도 아는 것이 중요합니다.아래와 같이 몇가지 간단한 구조로 생각해볼수 있습니다.
이와 같은 구조로 Prompt를 전달하면 LLM 모델이 내용을 정확하고 빠르게 이해하는데 도움이 됩니다.

Prompt 구조 Prompt 구조의 역할
지시사항 역할을 부여하거나, 전반적인 룰을 정의할때 사용합니다. System Prompt에 이런 내용을 넣기도 합니다.
컨텍스트 원하는 대답을 얻는데 도움이 될만한 배경지식입니다. 데이터베이스의 Schema정보등이 여기에 들어갈 수 있습니다.
사용자요청 자연어로 문의하는 질문이나 요청사항으로, 특정 디비에서 쿼리를 실행하는 등의 실질적인 문의/요청을 전달하는 부분입니다.
출력포맷 원하는 대답에 대한 출력 양식을 말합니다. 장애보고서 양식이나, 원하는 지표들만으로 내용을 정리해달라고 할때 유용합니다.

Prompt를 위와 같은 구조에 맞춰서 데이터베이스 쿼리를 생성하는데 사용하면 아래와 같습니다.


지시사항에는 Aurora MySQL DBA전문가라는 롤을 부여하고, 임의로 대답하지 말도록 지시하였습니다. 컨텍스트에는 스키마 정보를 전달합니다. 예시에서는 Customer, Order테이블의 컬럼 정보를 넣어주었습니다. 이렇게 스키마 정보를 전달하면 보다 정확한 SQL을 뽑아내도록 할수 있습니다. 출력포맷에서는 <begin sql> 과 <end sql> 사이에 생성한 쿼리가 나오도록 지정하여 정확한 위치에 쿼리를 출력하도록 합니다. 이렇게 자연어 문장으로 SQL을 만들어내는 것을 Text-To-SQL라는 용어로 표현하기도 합니다. Text-To-SQL을 실행하다 보면, 환각현상이 발생하여 오류가 발생하는 경우들이 종종 있습니다. 비슷한 컬럼정보를 가진 테이블들이 여러개 있다면, 원하는 쿼리로 실행되지 않는 경우도 있습니다. 또는 이전 버전의 스키마를 전달하여 오류가 발생하는 경우도 있습니다. 이러한 오류를 방지하기 위해, 아래 그림처럼, 필요할 때마다 특정 범위의 최신 스키마정보만 추출하여 전달하는 것이 도움이 될것입니다.

특정 업무나 기능에 필요한 스키마 정보만 전달하면 그만큼 Prompt의 크기를 줄일수 있기때문에, 답변의 속도와 비용을 그만큼 최적화할 수 있습니다. 아래와 같은 간단한 아키텍쳐를 구현해서 테스트 해보시면 많은 도움이 될것입니다.

위 아키텍쳐의 내용을 단계별로 설명하면 다음과 같습니다.

  1. 자연어로 요청
    챗봇 애플리케이션 에서 사용자의 자연어 요청을 받습니다. 애플리케이션은 EC2내에서 Streamlit으로 실행된 파이썬 프로그램입니다.
  2. 스키마 정보 추출
    챗봇 프로그램은 Aurora MySQL에서 스키마 정보를 조회하여, Prompt에 추가합니다.
  3. Claude에게 전달
    Prompt(사용자요청+스키마정보+예제쿼리)를 Claude3에게 전달합니다
  4. SQL쿼리문 전달
    Claude가 생성한 쿼리를 챗봇 애플리케이션이 전달받습니다.
  5. 데이터베이스에 질의
    데이터베이스에 접속하여 Claude가 만든 쿼리를 실행합니다.
  6. 데이터 전달
    애플리케이션은 데이터베이스로부터 결과를 받아 사용자에게 최종 답변을 전달합니다.

이와 같은 형태로 간단한 Text-To-SQL 프로그램을 만들고, 데이터베이스 모니터링 쿼리들을 실행하여 모니터링하는데 도움을 받을수 있습니다. 자연어로 쿼리를 실행하여 다양한 쿼리를 실행하는 데모를 여기(클릭)서 보실수 있습니다. 컨텍스트에, 테이블의 컬럼정보외에도, 테이블과 컬럼의 코멘트, 통계, 인덱스 정보까지 적절히 제공한다면, 정확한 쿼리 생성뿐 아니라,쿼리의 성능을 향상시키고 적절한 쿼리를 제안하는 기능을 추가로 개발할수 있습니다. Text-To-SQL에 대한 더 자세한 내용들은 추후 다른 블로그에서 깊이 다뤄보도록 하겠습니다. 지금까지는 생성형 AI와의 대화법인 Prompt Engineering에 대한 내용을 살펴보았고, 이제부터는 데이터베이스 운영업무에 어떻게 LLM을 적용하는지 몇가지 간단한 사례를 살펴보겠습니다.

Function calling의 활용

특정 데이터베이스의 CPU 사용율을 보고 싶다고 생성형 AI 모델인 클로드에게 질문을 하면, 원하는 시점의 특정 데이터베이스의 CPU 정보를 가져올까요? 잘 모르겠다고 하거나, 잘못된 정보를 가져올 가능성이 매우 높습니다. 그렇다면, 실제 데이터베이스의 CPU 모니터링 정보를 보려면 어떻게 해야할까요? 직접 콘솔에 들어가서 Aurora MySQL의 Cloudwatch metric을 보거나 API를 호출해야 합니다. LLM 모델인 클로드가 직접 이런 API를 직접 호출하여 Cloudwatch metric을 가져올수는 없습니다. 대신 클로드 모델은 Function calling이라는 기능을 통해서 간접적으로 API를 호출하도록 할수 있습니다. 아마존 베드락 클로드에서는 3.0 Sonnet버전부터 Function calling기능을 지원합니다. 자세한 내용은 링크(클릭) 를 참조하세요. Function calling은 사용자의 요청을 이해하고, 어떤 함수가 사용자 요청에 맞는지 판단하고 찾아서 함수명을 전달하는 매개자 역할을 합니다. 다른 말로 Tool Use라고도 합니다. 실제 수행은 API를 호출하는 애플리케이션이 합니다.

예를 들어 Aurora mysql 특정 클러스터의 한시간전 CPU사용율을 보고 싶다고 클로드에게 요청하면, 클로드의 Tools 명세에서 해당되는 기능(예:함수)이 있는지 찾아보고, 특정 기능이 원하는 정보를 호출한다고 전달해줍니다. 그러면, 이 기능(함수)를 실행하는 것은 애플리케이션이 담당합니다. 구체적으로 어떻게 특정 기능을 실행하게 되는지를 살펴보겠습니다. Function Calling기능을 구현하는 부분을 좀 더 세분화 하면 아래 그림과 같습니다.

첫번째로 실제 실행할 함수를 아래 그림처럼 작성합니다. 아래에서는 주어진 키워드를 받으면 Secret정보에서 해당 키워드로 검색되는 모든 Aurora mysql DB에 접속하여 Innodb Status 정보를 가져와서 저장하는 함수의 일부입니다. 이미 함수나 API가 존재하면 다음 단계인 Tool 명세서 등록 단계로 넘어갑니다.

def analyze_innodb_status(keyword): 
    results = '';
    secret_lists = get_secrets_by_keyword(keyword)
    for secret_name in secret_lists:
        st.write("On the cluster ", secret_name, ", these workloads will be executed: ")
       
        sql_command = 'SHOW ENGINE INNODB STATUS;'
        try:
            connection = connect_to_db(secret_name)
            cursor = connection.cursor()
            cursor.execute(sql_command)
            result = cursor.fetchall()
            columns = cursor.column_names
           
            results += secret_name + str(result)

        except Exception as e:
             print(f"Error executing SQL command: {e}")
Python

두번째로 Tool configuration에 아래 그림과 같이 함수 명세서를 작성합니다.아래 함수 명세서는 파이썬 코드로 작성하였습니다. Tool configuration에 대한 자세한 내용과 간단한 예제는 링크를 참조하세요.

{
    "toolSpec": {
        "name": "analyze_innodb_status",
        "description": "innodb status를 확인하고 분석할때 사용합니다. 보통 각 디비의 상태를 분석해줘. 또는 이노디비상태를 분석해줘 할때 이 함수",
        "inputSchema": {
            "json": {
                "type": "object",
                "properties": {
                    "keyword": {
                        "type": "string",
                        "description": "Aurora cluster의 이름이면서 Secret 정보에도 등록된 이름입니다. ",
                    }
                },
                "required": ["keyword"],
            }
        },
    }
},
JSON
Component Description
name 함수의 이름으로, 실제 코드내에서 존재하는 함수명을 말합니다.
description 함수의 용도, 사용목적을 기술하며, 클로드 모델은 이 내용을 참조하여 사용자의 요청에 가장 적합한 함수명을 반환합니다.
properties 함수에 전달할 파라미터 값들을 기술합니다. 오로라 클러스터의 명칭이나, 특정시간의 범위, 특정 메트릭정보(CPU,Memory)등 다양한 값들이 파라미터가 될수 있습니다.

위 그림에서 보는것 처럼 name에는 실행할 함수(실제로 실행할수 있는 상태로 존재해야 합니다)명을 입력하고 description에는 이 함수가 어떤 용도로 사용되는지를 자세히 설명합니다. 그리고 전달할 파라미터는 Input_schema안의 properties에 입력합니다. 위 그림에서는 Aurora mysql에서 show innodb status 로 실행한 값을 분석하는 함수와, 데이터베이스의 각 이벤트별 메모리 사용량을 보여주는 쿼리를 실행하는 함수가 등록되어있는 것을 확인할 수 있습니다. 함수 명세서를 작성할때, 위 내용은 반드시 입력할 필수항목들이며, 이 정보를 Prompt에 같이 넣어서 아마존 베드락 클로드에게 전달하면, 클로드 모델은 어떤 함수를 사용하는 것이 좋은지 판단하고, 적절하다고 생각되는 함수명을 리턴합니다.

세번째로 아래 그림과 같이 아마존 베드락 클로드가 리턴해주는 함수명을 받아서 실제 함수를 호출하도록 코딩합니다. 위에서 정의한 함수 명세서를 tool config 변수에 넣어 아래와 같이 베드락 클로드에 전달하면 사용자 요청에 가장 적합한 함수명을 반환해 줍니다. 그러나 실제 함수를 실행해주진 않습니다.

response = client.converse(
        modelId=model_Id, messages=messages, toolConfig=tool_config
    )

output_message = response["output"]["message"]
messages.append(output_message)
stop_reason = response["stopReason"]

if stop_reason == "tool_use":
    tool_requests = output_message["content"]
    for tool_request in tool_requests:
        if "toolUse" in tool_request:
            output_message = call_tool(tool_request["toolUse"], messages)
    return output_message["content"][0]["text"]
Python

따라서 클로드가 반환한 함수명을 실제 함수를 실행하도록 하기 위해서는 받은 함수를 실행하도록 연결해주는 코드도 필요합니다.

네번째로 아래코드에서는 반환받은 함수명을 실제 실행하도록 연결해주는 코드를 보여주고 있습니다. 정의된 함수는 tool_functions에 있으며, call_tool 함수 부분이 실제 함수를 실행하는 역할을 수행합니다.

tool_functions = {
        "get_database_info": get_database_info,
        "execute_sql": execute_sql,
        "execute_sql_multiDatabase": execute_sql_multiDatabase,
        "analyze_innodb_status": analyze_innodb_status,
        }

def call_tool(tool, messages):
    tool_name = tool["name"]
    tool_input = tool["input"]
    
    if tool_name in ["analyze_innodb_status"]:
        result = tool_functions[tool_name](tool_input["keyword"])
    elif tool_name in ["execute_sql"]:
        result = tool_functions[tool_name](tool_input["secret_name"], tool_input["user_query"])
    elif tool_name in ["execute_sql_multiDatabase"]:
        result = tool_functions[tool_name](tool_input["keyword"], tool_input["user_query"])
    else:
        raise ValueError(f"Unknown tool: {tool_name}")
    
content = {"result": result}
tool_result = {
    "toolUseId": tool["toolUseId"],
    "content": [{"json": content}],
}
tool_result_message = {
    "role": "user",
    "content": [{"toolResult": tool_result}],
}

messages.append(tool_result_message)

response = client.converse(
    modelId=model_Id, messages=messages, toolConfig=tool_config
)
return response["output"]["message"]
Python

Function Calling을 적용하여 Aurora MySQL의 DB운영 업무에 활용해보기

위에서 설명한 Function Calling을 적용해서 Aurora MySQL 를 운영하는 업무에 활용한 데모를 확인해보겠습니다. 간단한 DB 운영업무에 Function Calling을 적용한 데모입니다.

  • Text2SQL : 자연어로 다양한 쿼리를 실행합니다. 데모보기
  • Database Schema 비교 : 여러대의 데이터베이스 클러스터의 스키마를 비교하여 차이점을 찾아냅니다. 데모보기
  • Table Column 추가 : 여러대의 데이터베이스 클러스터의 테이블에 컬럼을 일괄 추가합니다. 데모보기
  • Index 생성 : 여러대의 데이터베이스 클러스터의 특정 테이블에 인덱스를 생성합니다. 데모보기

위 데모들 외 추가적인 고급 기능들은 깃허브(링크)를 통해서 확인하실 수 있습니다.

마무리

생성형 AI는 이제 보편화된 개념과 서비스로 자리를 잡아가고 있습니다. 그러나 그러한 기대와 달리, 실제 업무에 적용하는데는 여전히 어려움이 있습니다. 이것은 비단 환각현상의 문제뿐만 아니라, 실제 서비스에 어떻게 적용해야하는지 충분한 경험이나 레퍼런스가 부족하기 때문이기도 합니다. 생성형 AI서비스 모델이 처음 나온 후로는 그 전과 전혀 다른 세상이 펼쳐지고 있습니다. 아무도 무엇이 어떻게 될지 쉽게 예측하기는 어렵습니다. 그렇기 때문에 여러가지 시도와 시행착오를 통해서, 생성형 AI를 적용한 서비스를 만들어가면서 노하우를 쌓아 나가야 합니다. 이 블로그에서는 데이터베이스 관리 업무에 생성형 AI 서비스를 적용하는 간단한 예시를 보여드렸습니다. 아마존 베드락을 이용하여 여러가지 서비스를 혁신하고 효율화하는데 조금이라도 도움이 되셨으면 좋겠습니다. 감사합니다.

Heungsu Ha

Heungsu Ha

하흥수 솔루션즈 아키텍트는 미디어 및 게임사 고객들의 AWS 클라우드에서 사용하시는 여러 서비스들의 효율적인 운영 및 개선을 돕고 있습니다.

Dalyoung Jung

Dalyoung Jung

정달영 데이베이스 스페셜리스트 솔루션즈 아키텍트는 AWS에서 제공되는 데이터베이스 서비스들을 활용하여 고객들에게 최적화되고 효율적인 데이터베이스 구성을 컨설팅하고 지원하는 역할을 수행하고 있습니다.

Jeongho Han

Jeongho Han

한정호 솔루션즈 아키텍트는 현재 게임 고객들이 AWS상에서의 최적의 아키텍처를 구축하고 시스템 개발과 운영에 필요한 도움을 드리고 있습니다. 다양한 규모의 프로젝트에 참여했던 경험을 기반으로 고객에게 최적의 가이드를 제공함으로써 고객 비즈니스가 성장할 수 있도록 지원하고 있습니다.