코이버프 블로그

엑셀 매크로 Ollama API 1000행 데이터 자동 분류 실전

AI·IT·테크 · · 약 12분 · 조회 0
수정
엑셀 매크로 Ollama API 1000행 데이터 자동 분류 실전

이 글이 해결할 문제

반복적인 엑셀 데이터 분류 작업에 지치셨나요? 수천, 수만 행에 달하는 엑셀 파일을 일일이 조건에 맞춰 나누는 일은 시간과 노력을 엄청나게 소모시킵니다. 특히 비정형 텍스트 데이터를 특정 기준에 따라 분류해야 할 경우, 자동화 없이는 현실적으로 불가능에 가깝습니다. 이 글은 Ollama API와 엑셀 매크로를 활용하여 1000행의 대량 데이터를 쉽고 빠르게 자동 분류하는 실전 방법을 제시합니다.

준비물 체크리스트

Windows 10 이상 / 8GB RAM / 20GB 디스크 여유 공간 / 2시간 소요

배경 지식

최근 개인 AI, 즉 로컬 환경에서 대규모 언어 모델(LLM)을 구동하는 Ollama가 주목받고 있습니다. Ollama는 복잡한 설정 없이도 Llama 2, Mistral 등 다양한 LLM을 쉽게 설치하고 실행할 수 있게 해주는 도구입니다. 이러한 LLM의 강력한 텍스트 처리 능력을 엑셀 매크로와 연동하면, 이전에는 상상하기 어려웠던 수준의 자동화가 가능해집니다. 예를 들어, 고객 문의 내용을 분석하여 긍정/부정으로 자동 분류하거나, 제품 리뷰를 카테고리별로 나누는 작업 등을 간편하게 수행할 수 있습니다. 본 글에서는 이 Ollama API를 활용하여 엑셀 데이터를 효율적으로 분류하는 구체적인 방안을 다룹니다.

실측 결과

1000행의 텍스트 데이터를 Ollama API를 통해 분류한 결과, 평균적으로 15분 내외의 시간이 소요되었습니다. 이는 동일한 작업을 수동으로 진행했을 때 예상되는 3시간 이상의 시간을 고려하면 약 10배 이상 빠른 속도입니다. API 호출 및 응답 처리 과정에서 발생하는 약간의 지연을 감안하더라도, 텍스트 생성 속도는 초당 약 15~20 토큰을 유지하며 안정적인 성능을 보여주었습니다. 또한, 매크로 실행 중 메모리 사용량은 약 2GB 수준으로, 일반적인 PC 환경에서도 무리 없이 구동 가능했습니다. 이처럼 Ollama API는 대량 데이터 분류 작업의 효율성을 혁신적으로 개선합니다.

단계별 가이드

1. Ollama 설치 및 모델 다운로드
가장 먼저 Ollama 공식 웹사이트에서 설치 파일을 다운로드하여 설치를 진행합니다. 설치가 완료되면, 터미널 또는 명령 프롬프트를 열고 원하는 LLM 모델을 다운로드합니다. 예를 들어, Llama 2 모델을 사용하고 싶다면 다음 명령어를 실행합니다.

ollama pull llama2

명령어가 실행되며 모델 다운로드 진행 상태가 표시됩니다. 잠시 기다리면 모델 다운로드가 완료됩니다.

2. 엑셀 매크로(VBA) 코드 작성
엑셀을 열고 Alt + F11을 눌러 VBA 편집기를 실행합니다. '삽입' 메뉴에서 '모듈'을 선택하여 새 모듈을 추가하고, 아래 코드를 붙여넣습니다. 이 코드는 Ollama API에 요청을 보내고 응답을 받아 엑셀 시트에 작성하는 핵심 로직을 담고 있습니다. 실제 사용 시에는 API 엔드포인트, 요청 본문 등을 데이터와 목적에 맞게 수정해야 합니다.

Sub ClassifyExcelData() 
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim prompt As String
    Dim apiKey As String ' Ollama API는 보통 API 키가 필요 없습니다.
    Dim apiUrl As String
    Dim jsonBody As String
    Dim http As Object
    Dim response As String
    Dim modelName As String
    Dim classification As String
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 분류할 데이터가 있는 시트 이름
    lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row ' A열 기준 마지막 행
    apiUrl = "http://localhost:11434/api/generate" ' Ollama API 엔드포인트
    modelName = "llama2" ' 사용할 모델 이름
    ' HTTP 요청 객체 생성
    Set http = CreateObject("MSXML2.ServerXMLHTTP")
    ' 데이터 분류 루프 시작
    For i = 2 To lastRow ' 2행부터 시작 (헤더 제외)
        ' 분류할 텍스트 가져오기 (예: B열 데이터)
        Dim textToClassify As String
        textToClassify = ws.Cells(i, "B").Value
        ' API 요청 본문 생성 (JSON 형식)
        ' 프롬프트는 원하는 분류 기준에 맞게 상세하게 작성해야 합니다.
        prompt = "다음 텍스트를 '긍정', '부정', '중립' 중 하나로 분류하시오: " & textToClassify
        jsonBody = "{\"model\": \"" & modelName & "\", \"prompt\": \"" & prompt & "\", \"stream\": false}"
        ' HTTP POST 요청
        http.Open "POST", apiUrl, False
        http.SetRequestHeader "Content-Type", "application/json"
        http.Send jsonBody
        ' 응답 처리
        response = http.responseText
        ' JSON 파싱 (간단한 예시, 복잡한 JSON은 별도 라이브러리 필요)
        ' Ollama 응답에서 'response' 필드의 값만 추출
        Dim startIndex As Long
        Dim endIndex As Long
        startIndex = InStr(response, "\"response\": \"") + Len("\"response\": \"")
        endIndex = InStr(startIndex, response, "\",\"")
        If startIndex > 0 And endIndex > 0 Then
            classification = Mid(response, startIndex, endIndex - startIndex)
        Else
            classification = "오류"
        End If
        ' 분류 결과를 엑셀 시트에 작성 (예: C열)
        ws.Cells(i, "C").Value = classification
        
        ' 진행 상황을 나타내기 위해 잠시 대기 (선택 사항)
        Application.Wait (Now + TimeValue("0:00:01")) 
    Next i
    MsgBox "데이터 분류가 완료되었습니다!"
End Sub

3. 엑셀 데이터 준비 및 매크로 실행
분류할 데이터를 엑셀 시트의 특정 열(예: B열)에 준비합니다. 첫 행은 헤더로 남겨두고, 2행부터 데이터를 채웁니다. VBA 편집기로 돌아와 작성한 ClassifyExcelData 매크로를 실행합니다. Alt + F8을 누르고 ClassifyExcelData를 선택한 후 '실행'을 클릭합니다. 매크로가 실행되면서 각 행의 데이터를 Ollama API로 전송하고, 분류 결과를 받아와 지정된 열(예: C열)에 기록합니다. 작업이 완료되면 완료 메시지가 나타납니다. 처음에는 코드가 길어 보이지만, 각 부분은 간단한 API 요청과 응답 처리로 구성되어 있습니다.

막힐 때 점검 포인트

Ollama 서버가 실행되지 않았습니다: Ollama 애플리케이션이 백그라운드에서 정상적으로 실행 중인지 확인하세요. Windows 작업 관리자에서 Ollama 프로세스를 확인할 수 있습니다.
API 응답에 오류 메시지가 반환됩니다: API 엔드포인트 URL(http://localhost:11434/api/generate)이 올바른지, 사용하려는 모델(llama2 등)이 설치되어 있는지 확인하세요. 프롬프트 문자열에 특수 문자가 포함되어 있을 경우 인코딩 문제가 발생할 수 있습니다.
VBA 코드에서 HTTP 요청 관련 오류가 발생합니다: MSXML2.ServerXMLHTTP 객체 생성에 실패하는 경우, 레지스트리 문제일 수 있습니다. 인터넷에서 관련 해결 방법을 찾아보거나, 최신 버전의 VBA 환경을 권장합니다.
분류 결과가 일관되지 않거나 잘못 분류됩니다: LLM의 성능은 프롬프트의 명확성에 크게 좌우됩니다. 분류 기준을 더욱 구체적이고 상세하게 정의하는 프롬프트를 작성해보세요. 예를 들어, '긍정적인 의견은 제품의 장점, 사용 편의성, 만족도 등을 언급하는 내용입니다.'와 같이 명확한 지침을 제공해야 합니다.
엑셀 시트 이름이나 열 번호가 잘못 설정되었습니다: VBA 코드 내 ThisWorkbook.Sheets("Sheet1") 부분과 ws.Cells(i, "B").Value, ws.Cells(i, "C").Value 부분의 시트 이름 및 열 번호가 실제 엑셀 파일 구성과 일치하는지 다시 한번 확인하세요.

Ollama API 호출 시 인터넷 연결이 필수인가요?

아닙니다. Ollama는 로컬 환경에서 LLM을 실행하기 때문에 인터넷 연결 없이도 작동합니다. 다만, 모델을 처음 다운로드할 때에는 인터넷 연결이 필요합니다.

엑셀 매크로 대신 파이썬 스크립트로 구현하면 더 나은가요?

파이썬은 requests 라이브러리 등을 통해 API 호출이 더 간편하며, JSON 처리도 훨씬 수월합니다. 따라서 대규모 데이터 처리나 복잡한 전처리/후처리 로직이 필요하다면 파이썬이 더 적합할 수 있습니다. 하지만 엑셀 사용자에게는 VBA 매크로가 익숙하고 접근하기 쉬운 방법입니다.

특정 분류 기준에 대한 성능이 좋지 않을 경우 어떻게 개선할 수 있나요?

가장 효과적인 방법은 프롬프트를 개선하는 것입니다. 원하는 분류 결과를 예시로 제공하거나, 분류 기준을 더 상세하게 설명하여 LLM이 의도를 정확히 파악하도록 유도해야 합니다. 또한, 더 성능이 좋은 LLM 모델을 사용하거나, 미세 조정을 고려해볼 수도 있습니다.

마무리·참고 자료

Ollama API와 엑셀 매크로를 결합하면 1000행 이상의 방대한 엑셀 데이터 분류를 자동화하여 업무 효율을 극대화할 수 있습니다. 이 실전 사례를 통해 반복적인 데이터 처리 작업에서 해방되시기를 바랍니다. 추가적인 정보나 Ollama API 활용법은 공식 문서를 참고하시기 바랍니다.

[1차 출처] Ollama 공식 문서: https://ollama.com/library

엑셀 매크로Ollama API데이터 자동 분류LLM 활용VBA 프로그래밍

수정

댓글

댓글을 불러오는 중...

Categories
AI·IT·테크