“한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 강의를 협찬받아 작성된 서평입니다.”

 

하네스 엔지니어링 클로드 코드로 내 일을 대신하는 AI 에이전트 만들기 - 책표지
책 표지

 

'클로드 코드'와 같은 AI 에이전트는 S/W개발자의 전유물이 아니라 모든 사람들이 사용할 수 있는 범용성 있는 도구이다.

 

최근 AI 에이전트들은 상당히 똑똑해져서 간단한 프롬프트만으로도 훌륭한 결과를 보여주지만,

내가 원하는대로 내 몸과 같이 다루기 위해서는 `하네스(Harness)`에 대한 공부가 필요하다.

 

 

하네스 엔지니어링 실습 준비

이 책의 실습을 위한 환경은 다음과 같다.

  - AI 코딩 에이전트: Claude Code

  - 추천 구독 요금제: Claude Pro

  - 추천 운영환경: Windows

 

나는 현재 ChatGPT, Gemini를 구독하고 있고,

개인적으로 선호하는 AI 코딩 에이전트는 OpenCode이며 개발환경은 Linux를 사용하고 있기에

책의 내용을 이 환경에서도 실습 가능한지도 같이 알아보면서 공부해봤다.

 

사실 그냥 책에 나오는 대로 편하게 공부하는 방법은

시키는대로 Claude Pro 구독하고 Claude Code를 사용하는 것을 추천한다.

 

 

회의록 작성 에이전트 작성

회의 녹취 텍스트를 입력하면 자동으로 회의록을 정리해주는 에이전트를 만들어보자.

나는 앞서 말한대로 OpenCode에서 실습을 진행했고, 모델은 OpenAI의 GPT-6 Sol을 사용해서 해봤다.

 

회의록 에이전트 프롬프트
회의록 에이전트 프롬프트

 

디렉토리 생성 및 system_prompt.md 파일을 생성했다고 나온다.

 

디렉토리 및 파일 생성
디렉토리 및 파일 생성

 

당연하게도 실제 잘 생성된 결과를 확인할 수 있다.

 

디렉토리 및 파일 확인
디렉토리 및 파일 확인

 

이후 4개 섹션에 적절한 프롬프트들을 채워 넣으면 된다.

 

직접 타이핑이 어렵다면, 저자가 제공해주는 `프롬프트 모음` 파일을 내려 받아서 copy & paste 하면 된다.

  - https://bit.ly/45YTEbH

 

프롬프트 모음
프롬프트 모음

 

시스템 프롬프트를 모두 작성했으면,

그 다음으로 에이전트를 만들어야 하는데 무료 API를 사용하도록 하기 위해서 책에서 제공하는 프롬프트를 살짝 수정했다.

 

specs/system_prompt.md를 읽어서 그 스펙대로 동작하는 회의록 자동화 에이전트를 agents/meeting-notes/ 폴더 아래에 만들어줘. 다음 파일들을 만들어줘:

1. agents/meeting-notes/prompts.py
- SYSTEM_PROMPT 변수에 specs/system_prompt.md의 내용을 읽어서 저장

2. agents/meeting-notes/run.py
- 표준 입력 또는 파일에서 회의 녹취를 받아
- NVIDIA Build에서 제공해주는 deepseek-ai/deepseek-v4.1-flash API를 호출하고
- 결과를 화면에 출력하는 스크립트

모델 API 호출은 OpenAI 라이브러리를 사용해줘. 코드 샘플은 https://build.nvidia.com/deepseek-ai/deepseek-v4.1-flash 참고해줘.
패키지 관리는 uv를 사용해줘.

 

NVIDIA Build 회원 가입 및 무료 API 사용은 다음 포스팅을 참고하기 바란다.

Key 생성까지 진행하여 Key 값을 적어놓자.

  - https://www.whatwant.com/entry/NVIDIA-Build (엔비디아에서 제공해주는 무료 LLM API 사용하기 - NVIDIA Build)

 

회의록 작성 에이전트 실행

테스트를 위한 회의 녹취록은 책에서 제공해주는 프롬프트를 이용해서 tests/sample_meeting.txt 파일로 만들먄 된다.

 

실행을 위해서는 NVIDIA API Key값이 필요하므로, 다음과 같은 프롬프트로 실행하면 된다.

 

agents/meeting-notes/run.py를 실행해서 tests/sample_meeting.txt 회의록을 처리해줘. 처리된 회의록 결과를 화면에 보여줘.
NVIDIA Key 값은 "***"를 사용하면 돼.

 

그러면, 다음과 같이 회의록이 잘 생성된 것을 확인할 수 있다.

 

 

 

실행 결과 확인

실행된 것으로 끝이 아니다.

결과가 잘 나왔는지 확인을 해야한다.

 

- 메타 정보(날짜, 참석자, 안건)가 정확한다

- 결정 사항에 "5월 캠페인은 인스타와 틱톡 집중"이 포함되어 있는가

- 액션 아이템에 이재현(시안 1차, 다음 주 금)과 박민수(예산 배분, 5월 5일)가 표 형식으로 정리되어 있는가

- 다음 회의 일정 (5월 6일 10시)이 포함되어 있는가

- 회의록에 없는 사실 (예. 임의로 생성된 마감일)이 추가되지 않았는가

 

이런 검토를 통해 에이전트가 잘 만들어진 것인지 확인할 수가 있는 것이다.

 

 

결론

이 책은 Claude Code를 가지고 업무에 필요한 다양한 에이전트를 직접 만드는 방법을 알려주는 책이다.

 

AI 코딩 에이전트 및 Skill이나 MCP 등 다양한 지식을 이미 갖고 있는 분들은 물론이고

그러한 지식이 없는 초보자들도 하나씩 따라할 수 있도록 너무나 친절하게 잘 설명해주고 있다.

 

직접 책을 보면서 따라해본 위의 내용을 보면 알겠지만,

Claude Code가 아닌 다른 AI 코딩 에이전트로도 충분히 따라할 수 있고

Claude Code Pro 요금제 가입 없이 무료로 제공해주는 NVIDIA Build 서비스를 이용해도 충분히 따라할 수 있다.

 

 

반응형

AI 공부를 할 때 가장 큰 장애물 중 하나는 비싼 구독료이다.

물론 무료로 체험 해볼 수 있도록 제공해주고 있지만, API 연동 등을 하고자 하면 유료 구독을 해야만 하는 것이다.

 

그런데, 최근 엔비디아에서는

NVIDIA Build 플랫폼을 통해 80~100여 개 이상의 최신 오픈소스 AI 모델과 자체 특화 모델을 무료로 제공해주고 있다.

그것도 신용카드 등록 없이 이메일 인증만으로 회원가입 후 API 연동이 가능한 천사같은 혜택을 주고 있다.

 

회원 가입

일단 사이트를 방문하여 회원 가입을 해야 한다.

  - https://build.nvidia.com/ 

 

NVIDIA Build
NVIDIA Build

 

오른쪽 상단의 Login 메뉴를 통해 회원 가입 및 로그인을 할 수 있다.

 

Login
Login

 

간단하게 회원 가입할 수 있다.

 

계정만들기
계정만들기

 

 

API Keys

회원가입 및 로그인을 하게 되면 바로 API Keys 생성이 가능하다.

오른쪽 상단의 계정 메뉴에서 'API Keys' 항목을 선택하면 된다.

 

API Keys
API Keys

 

API Key 생성도 그냥 "Generate API Key"를 선택해서 진행하면 간단하게 만들어진다.

이렇게 만들어진 API Key 값을 잘 기록해놓고 사용하면 된다.

 

Generate API Key
Generate API Key

 

Models

현재 시점에서 보면 105개 Models 목록을 확인할 수 있다.

NVIDIA에서 밀고 있는 nemotron 모델이 가장 상단에 보인다.

 

Models
Models

 

무료로 사용할 수 있는 모델은 45개 정도가 되는데, 눈에 띄는 것들은 다음과 같다.

  - deepseek-v4.1-flash

  - glm-5-3

  - glm-5-3-flash

  - minimax-m3.1-flash

  - muse-glimmer-30b

  - nemotron-3-ultra-550b-a55b

  - gemma-4-31b-it

 

 

 

현재 시점에서 무료로 사용할 수 있는 LLM API 중에서 가장 쓸만한 서비스이지 않을까 싶다.

성능도 썩 빠르지는 않지만 쓸만한 정도는 된다.

반응형

“한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 강의를 협찬받아 작성된 서평입니다.”

 

 

바이브 코딩을 한다고 하면 당연하게 떠오르는 AI 코딩 에이전트가 바로 "클로드 코드(Claude Code)"이다.

 

최근 OpenAI에서 좋은 모델을 만들면서 조금 주춤하기는 하지만,

다른 영역은 몰라도 코딩에 있어서는 'Claude Code'를 공부하는 것이 가장 무난한 아니 최선의 선택일 것이다.

 

"혼공" 시리즈에서 드디어 바이브 코딩 그것도 Claude Code를 기반으로한 바이브 코딩 책이 나왔다.

그리고 "혼공" 시리즈 답게 당연하게도 무료 강의를 유튜브로 제공을 해주고 있다.

 

하지만, 이번에는 조금 더 깊게 공부할 분들을 위해 유료 강의도 제공을 해주고 있다.

  - https://hanb.link/1blS

 

강의 화면은 아래와 같다.

 

 

저자이자 강의를 해주고 계시는 '조태호'님은 무려 미국 대학교, 그것도 의과대학의 조교수님이시다.

그리고, 미국 출간된 책을 번역하여 국내 출판하는 것이 아니라 국내 출판한 책을 영문으로 출판을 하게 되었단다!

 

 

유료 강의답게 강의 자료도 다운로드 받을 수 있도록 제공해주고 있고,

 

 

소스코드도 제공을 해주고 있다.

  - https://github.com/taehojo/vibeclass101

 

 

이 강의(도서)는 강의명에 있는 것처럼 "Claude Code"에 대한 내용이다.

그리고 "바이브 코딩" 즉, "코딩"에 대한 것을 다루고 있다.

 

PPT 만들거나 영상 만들거나 하는 일반적인 클로드 강의와 다르다는 점을 분명히 해야 한다.

 

개발 환경은 Windows 환경에서 설치하여 실행하는 것으로 설명해주고 있기에 학습 환경을 갖추는 것에 어려움은 없을 것이다.

하지만, (개인적으로) 코딩을 하는 환경이라면 Linux(Ubuntu)를 사용해야 한다고 주장해본다.

 

 

유튜브로 제공해주는 무료 강의도 충분히 훌륭하지만,

(여유가 있다면) 좀 더 잘 정리되어 있는 유료 강의를 통해 클로드 코드를 가지고 바이브 코딩을 해보기를 권유해본다.

반응형

"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."

 

밑바닥부터 시작하는 딥러닝 6
밑바닥부터 시작하는 딥러닝 6

 

AI 공부를 하던 모든이들의 교과서 "밑바닥부터 시작하는 딥러닝" 시리즈에서 드디어 "LLM"을 주제로 책이 나왔다. 짝!짝!짝!

 

이 책은 2019년 OpenAI가 공개한 오픈소스 모델인 GPT-2를 기반으로 하나 하나 직접 구현해볼 수 있도록 하고 있으며,

사전 학습, SFT(지도 파인튜닝), 강화 학습을 모두 배울 수 있다.

 

"밑바닥부터"라는 말에 어울리게 라이브러리도 기본적인 수준에서만 사용하고 있기에 훨씬 더 실용적이고

LLM 모델 내부를 공부하려는 사람들에게 훨씬 더 도움이 된다.

  - Numpy

  - Matplotlib

  - PyTorch 2.x

  - tqdm

  - regex

  - openai (선택)

  - tiktoken (선택)

 

그리고 너무나 고맙게도 옮긴이가 직접 확인하고 다듬어준 소스코드 저장소도 제공해주고 있다.

  - https://github.com/WegraLee/deep-learning-from-scratch-6

 

 

지치지 않도록 3단계로 나누어 책이 구성되어 있으며,

처음에는 필수 구성요소들을 가볍게 터치해보는 기본편부터 시작해서,

 

목차

 

응용편에 이어 도전편까지 구성되어 있다.

 

목차

 

이 책을 제대로 공부하려면 앞서 말한 GitHub 저장소를 활용할 수 밖에 없을 것이다.

책에서는 소스코드를 끊어서 보여주면서 설명하고 있기에 전체 소스코드를 파악하려면 GitHub 저장소를 참고하는 것이 좋다.

 

https://github.com/WegraLee/deep-learning-from-scratch-6/blob/main/ch01/02_byte_tokenizer.py

 

저장소를 내려 받는 것은 누구나 알다싶이 그냥 git clone을 진행하면 된다.

 

 

패키지 관리를 위해 pip를 사용해도 좋지만, 최근 유행하는 uv도 사용할 수 있도록 지원 해주고 있다.

 

아래와 같이 실행하면 첫 실행 때에는 패키지 설치로 시간이 좀 걸리지만,

그 이후 부터는 상당히 빠르고 깔끔하게 실행해볼 수 있다.

 

 

이 책은 초보, 비기너를 위한 책은 절대 아니다.

LLM에 대해서 한 번 쯤은 공부를 했고, Python에 대해서도 어느 정도 경험이 있는 사람들을 위한 책이다.

 

AI 모델 공부를 하면서 CNN, RNN 등의 기본적인 사항들을 공부한 뒤에

Transformer 공부하고 나서 제대로된 LLM 모델을 만들어 보고 싶은 사람들을 위한 책이라고 보면 좋을 것 같다.

 

최근 Frontier LLM Model들의 경우 온갖 다양한 기법들을 사용하고 있지만

그 기본이 되는 내용들에 대한 충분한 이해가 바탕이 되어야 그 기법들이 왜 필요하며 어떤 효과가 있는지 이해할 수 있을 것이다.

 

그 기본이 되는 바탕을 이해하는데에 있어

직접 손으로 하나씩 만들어보는 것 만큼 훌륭한 선생님은 없을 것이다.

 

가장 훌륭한 선생님으로 추천할 수 있는 책이 바로 이 책이 될 것이라고 말할 수 있다. 강추!

나도 간만에 스터디 모임을 만들어 같이 공부하고픈 욕구가 솓구치고 있다 !!!

반응형

M5Stack 제품

알리 쇼핑을 할 때마다 눈에 보이면 엄청나게 사재기를 하고 있는 개발 보드/키트 중에서

가장 많이 사고 있는 것이 M5Stack 제품들이다.

 

M5Stack
https://m5stack.com/

 

M5Paper 제품군

그렇게 2022년에 사놓고 지금까지 먼지만 쌓여가던 제품 중 하나가 M5Paper이다. (헉! 4년이 넘어서야 개봉을 하다니 😅)

왠지 낡은 느낌까지 보이니 미안한 마음까지 들었다.

 

M5Paper

 

내가 구매한 것은 정말 초기 제품으로 지금은 당연히 판매가 중단 되었고, 구매한 사람조차 많지 않은 모델이다.

 

M5Paper COMM Edition

 

사실 M5Paper 제품으로 유명한 것은 아래와 같은 제품으로 v1.1은 지금도 판매가 되고 있는 제품이다.

 

M5Paper

 

위 3개의 모델은 주로 디스플레이 차이와 일부 부품의 교체가 있고 거의 동일한 구성을 갖고 있다.

개발을 할 때에는 딱히 구분해서 처리할 부분 자체가 거의 없다.

 

M5Paper

 

M5Paper Spec

기본적인 Spec은 다음과 같이 Wi-Fi도 있고 배터리도 있고 터치스크린도 지원한다.

 

M5Paper Spec

 

PlatformIO 설치

개발을 위한 플랫폼은 여러가지 지원을 하고 있는데, 이번에는 PlatformIO 를 이용해보고자 한다.

 

PlatformIO
https://platformio.org/

 

PlatformIO는 임베디드 개발도 기존의 일반적인 S/W개발 경험을 그대로 가져갈 수 있도록 해주는 플랫폼으로

2015/2016 IoT 어워드에서 올해의 최고 소프트웨어 및 도구 부문 후보에 오를 정도로 많은 인기를 얻고 있다.

 

VSCode용 PlatformIO IDE 확장 프로그램은

Microsoft Marketplace 전체에서 2,500개 이상의 별 5개 평점을 받은 가장 인기 있는 확장 프로그램이라고 한다.

 

PlatformIO 설치는 다음과 같이 Marketplace에서 검색해서 Install 하면 된다.

 

PlatformIO Extension

 

PlatformIO 신규 프로젝트

신규 프로젝트를 진행하기 위해서는 PIO(PlatformIO) Home에서 'New Project'를 실행하면 된다.

 

PlatformIO New Project

 

프로젝트 이름은 임의로 지어주면 되고,

Board 부분에 M5Paper가 없으므로 호환되는 'M5Stack FIRE'로 설정하고

Framework는 'Arduino'로 설정해주면 된다.

Localtion 부분은 기본으로 하던지 아니면 원하는 곳을 지정해주자.

 

PlatformIO New Project

 

M5Paper 사용을 위한 INI 파일 설정

보드 개발을 할 때 가장 중요한 것은 'platformio.ini' 파일이다.

M5Paper 개발을 위해 필요한 설정값은 아래 내용을 참고하면 된다.

 

M5Paper platformio.ini

 

그 다음 필요한 것은 기기 연결 상태를 확인해야 하는데,

PlatformIO 에서 제공해주는 CLI 도구를 이용하면 편하다.

 

platformio device

 

'> pio device list' 명령어를 실행하면 연결된 기기를 확인할 수 있다.

 

M5Paper 샘플 프로젝트

간단하게 작성해본 main.cpp 코드는 아래와 같다.

 

#include <M5Unified.h>

// 메모리 버퍼 역할을 하는 스프라이트(Canvas) 객체 생성
M5Canvas canvas(&M5.Display);

void setup() {
    // 1. M5Unified 환경 설정 및 초기화
    auto cfg = M5.config();
    cfg.serial_baudrate = 115200;
    M5.begin(cfg);

    // E-Ink 고속 갱신 모드 설정 (터치 반응 속도 최적화)
    M5.Display.setEpdMode(epd_mode_t::epd_fastest);

    // 2. 화면 방향 설정 (가로 모드 960 x 540)
    M5.Display.setRotation(1); 
    M5.Display.clear(TFT_WHITE);

    // 3. 스프라이트(Canvas) 생성
    canvas.setColorDepth(4); // 4비트 (16단계 그레이스케일)
    canvas.createSprite(M5.Display.width(), M5.Display.height());
    canvas.fillSprite(TFT_WHITE);

    // 4. 텍스트 및 UI 요소 그리기
    canvas.setTextColor(TFT_BLACK, TFT_WHITE);
    canvas.setTextSize(3);
    canvas.drawString("M5Paper + M5Unified", 40, 40);

    canvas.drawFastHLine(40, 80, M5.Display.width() - 80, TFT_BLACK);

    canvas.setTextSize(2);
    canvas.drawString("Framework: Arduino (PlatformIO)", 40, 110);
    canvas.drawString("Graphics: M5GFX Pipeline", 40, 145);

    int batteryLevel = M5.Power.getBatteryLevel();
    int batteryVoltage = M5.Power.getBatteryVoltage();
    canvas.drawString("Battery: " + String(batteryLevel) + "% (" + String(batteryVoltage) + " mV)", 40, 190);

    uint32_t freePsram = ESP.getFreePsram() / 1024;
    canvas.drawString("Free PSRAM: " + String(freePsram) + " KB", 40, 225);

    canvas.drawString("Touch the screen or click wheel button.", 40, 300);

    // 5. 초기 화면 출력
    canvas.pushSprite(0, 0);
}


void loop() {
    // 입력 상태 업데이트 (필수)
    M5.update();

    bool needRefresh = false;

    // 1. 터치 입력 감지 및 화면 갱신
    auto detail = M5.Touch.getDetail();
    if (detail.isPressed()) {
        Serial.printf("Touch detected at: X=%d, Y=%d\n", detail.x, detail.y);

        // 터치한 위치에 작은 점 그리기
        canvas.fillCircle(detail.x, detail.y, 4, TFT_BLACK);

        // 좌표 정보 표시 영역 갱신
        canvas.fillRect(40, 350, 400, 40, TFT_WHITE);
        canvas.drawString("Touch: (" + String(detail.x) + ", " + String(detail.y) + ")", 40, 350);

        needRefresh = true;
    }

    // 2. 휠 버튼 입력 감지 (M5Paper 휠 매핑: BtnA:위, BtnB:누름, BtnC:아래)
    if (M5.BtnA.wasPressed() || M5.BtnB.wasPressed() || M5.BtnC.wasPressed()) {
        String action = "";
        if (M5.BtnA.wasPressed()) action = "Wheel UP (BtnA)";
        if (M5.BtnB.wasPressed()) action = "Wheel PUSH (BtnB)";
        if (M5.BtnC.wasPressed()) action = "Wheel DOWN (BtnC)";

        Serial.println(action + " Pressed!");

        canvas.fillRect(40, 400, 500, 40, TFT_WHITE);
        canvas.drawString("Last Action: " + action, 40, 400);

        needRefresh = true;
    }

    // 3. 입력이 발생했을 때만 E-Ink 화면으로 버퍼 전송
    if (needRefresh) {
        canvas.pushSprite(0, 0);
    }

    delay(20);
}

 

빌드는 VSCode 화면에서 하단에 있는 V 부분을 클릭하면 된다.

 

PlatformIO Build

 

디바이스에 업로드 하는 것은 하단에 있는 → 부분을 클릭해주면 된다.

 

PlatformIO Upload

 

Ubuntu 환경에서 실행할 때 Upload Error가 나올 수가 있다.

 

PlatformIO Error

 

권한 문제로 인해서 발생한 것이기에 이 부분을 해결해주면 된다.

 

> sudo usermod -aG dialout $USER

> curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules

> sudo udevadm control --reload-rules

> sudo udevadm trigger

 

안정적인 권한 적용을 위해 재부팅 후 이어서 진행하면 된다.

 

업로드가 잘 되면 아래와 같이 잘 동작할 것이다.

 

M5Paper Sample

 

나만의 프로젝트

지금은 이것으로 매일 아침 6시에 날씨, 일정, 뉴스, 운세를 보여주는 것을 만들어서 잘 사용하고 있다.

 

전자 잉크의 특성을 살려서 아침에 정보를 읽어오고

deep sleep을 하도록 해서 전력 소모를 줄였더니 배터리가 의외로 상당히 오래가서 깜짝 놀라고 있다.

 

M5Paper Sample

 

이렇게 한 번 가지고 놀았더니 요즘 다시 재미를 붙이게 되어서

이것 저것 다른 기기들도 가지고 놀기 시작했다.

 

여러분들도 한 번 ESP32 개발의 세계로 빠져보시기를 ... 😍

반응형

"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."

 

 

수 많은 AI 홍수 속에서 지금 시점에 가장 똑똑하다고 말해도 딱히 반박하기 어려운 "클로드"를 공부하기 위한 입문서이다.

 

여기에서 꼭 알아야할 것은

최근 가장 활발한 AI 활용을 보이는 S/W 개발 분야에서 언급되는 도구는 "클로드 코드(Claude Code)"이다.

TUI(Terminal User Interface), CLI(Command Line Interface) 환경에서 실행되는 도구이다.

 

하지만, '클로드'는 코드 개발에만 사용되는 도구가 아니다!

질문에 답도 잘하고, 문서도 잘 만들고, 디자인도 잘하고 다방면으로 똑똑한 아이다.

그런 "클로드"를 잘 쓰기 위해서는 좀 배워야 하고, 그 배움의 길에 이 책이 많은 도움이 될 것이다.

 

이 책은 "클로드" 자체에 대해서 공부하기 때문에 무조건 "클로드"에 가입해서 "클로드"를 사용해야한다.

요금제에 부담이 있다면 일단 'Free' 등급으로 해봐도 괜찮다.

다만, 모델 선택이나 사용할 수 있는 양 자체가 작을 수 밖에 없다는 것은 감안해야한다.

 

 

더불어 그냥 웹으로 사용하는 것보다

"클로드"의 기능을 엄청 끌어올릴 수 있는 "데스크탑 앱"을 사용하는 것을 강추하고

책 내용도 데스크탑 중심으로 서술되어 있다.

 

 

이제 준비는 끝났다.

책을 보면서 하나 하나 따라해보며 공부하면 된다.

 

 

따라하면서 나오는 화면에 대해 너무나 친절하게 하나 하나 꼼꼼하게 설명해주는 정말 충실한 입문서이다.

책에서 제안한 프롬프트를 살짝 바꿔서 블로그 홍보 포스터를 만들어보았는데, 상당히 재미있었고 유용했다.

(유료 결제를 해서 더 좋은 모델을 써보고 싶다는 욕구가 불끈 솓구쳤다 !!!)

 

 

 

그리고, 클로드를 개발 용도로 사용한다고 했을 때,

어떤 도구를 선택하면 좋을지 책에서 너무나 깔끔하게 정리를 해주고 있다.

 

 

그동안 막연하게나마 인지하고 있던 것을 이렇게 표로 정리해주니 너무나 깔끔하다.

개발을 하고 싶을 때 전문적으로 하는 것이 아니라고 하면 아티팩트 메뉴를 활용해보는 것도 충분하다.

 

 

웹 사이트 개발에 최적화된 환경이라고 생각 된다.

간단한 앱 하나 만들어봤는데, 너무나 잘 되었다.

 

 

 

이 책은 "클로드"를 사용해보고자 시작하는 사람들에게

"클로드"로 무엇을 할 수 있는지 하나 하나 꼼꼼하게 설명해주는 너무나 친절한 입문서이다.

 

"클로드"에서 제공해주는 기능들에 대해서 제대로 공부해보지 않은 사람들에게는

'이런 것도 이렇게 할 수 있었어?'라는 경험을 줄 수도 있다.

반응형

한컴으로부터 제품 이용 및 원고료를 지원받아 작성했습니다.

 

이제는 까마득한 옛날 추억으로 남은 "아래아한글 1.5"

MS-DOS 공부보다 아래아한글의 단축키를 먼저 외웠었는데,

그런 추억을 안겨준 한컴(한글과컴퓨터)에서 새로운 솔루션을 사용해보라고 연락이 왔다.

 

 

1. 한컴 데이터 로더(Hancom Data Loader)

'한컴 데이터 로더'는 한컴이 개발한 문서 구조 분석(Document Parsing) 솔루션으로,

HWP/HWPX/PDF 등의 문서를 구조화 데이터로 변환하는 용도로 사용한다.

 

https://sdk.hancom.com/

 

 

2. 온프레미스

홈페이지를 살펴보면 SaaS 형태로만 제공해주는 것 같지만, 좀 더 살펴보면 온프레미스 형태로도 제공해준다고 한다.

다만, 미리 사용해볼 수 있는 것은 API를 이용한 SaaS 방식만 있는 것으로 보인다.

 

https://blog.hancom.com/rag-document-parsing-solution-criteria/

 

 

3. 테스트 시나리오

HWPX 파일을 '한컴 데이터 로더'로 파싱하고 임베딩 해서 RAG 데이터베이스에 넣어놓고,

사용자 질문에 대해 'LLM + RAG'를 통해 답변을 하는 것을 구현해보겠다.

 

 

 

4. 문서 파일 (HWP)

고용노동부의 정책자료실에 있는 '표준 취업규칙' 파일을 가지고 실습을 진행해보겠다.

 

https://www.moel.go.kr/policy/policydata/view.do?bbs_seq=20250300356

 

파일 내용은 다음과 같이 되어있으며, 총 163쪽 272KB 크기를 갖고 있다.

 

 

 

5. 한컴 데이터 로더 - API Key

'한컴 SDK'에서 '데이터 로더'를 찾아볼 수 있다.

앞서 말한대로 일단은 SaaS 형태로 제공되고 있기에 API 사용을 위한 계정 등록이 필요하다.

 

https://sdk.hancom.com/services/1

 

상단에 있는 'Get API'를 클릭하면 로그인 페이지를 확인할 수 있다.

 

 

회원가입 후 로그인을 한 다음, '크레딧 관리' 메뉴를 선택하면 아래와 같이 무료 크레딧을 받을 수 있다.

 

 

문서 1장당 10 Credit, 그러면 1만 크레딧이면 문서 1천장을 처리할 수 있다.

 

 

'API 관리' 메뉴를 선택하면 'OCR API' / '데이터 로더' 2가지 서비스를 사용할 수 있다는 것을 확인할 수 있다.

 

 

'데이터 로더' 서비스의 'API Key 관리' 버튼을 클릭하자.

 

 

'API Key 생성' 버튼을 누르고, 이름을 지어준 다음에 '생성하기'를 누르면 된다.

 

 

생성한 Key 값을 언제든 복사해서 사용할 수 있다.

최근에는 보안을 위해 처음에만 복사할 수 있고, 다음에 다시 재사용하지 못하는 것이 트렌드인 것 같던데...

사용하는 입장에서 이렇게 언제든 복사할 수 있는 것이 편하긴 하다! ^^

 

 

 

6. OpenRouter - API Key

임베딩, LLM 모델을 사용하기 위해서 Provider 중 하나인 OpenRouter를 활용해보도록 하겠다.

 

ChatGPT, Gemini, Claude 등을 사용해도 좋지만

가난한(?) 개발자들에게 많은 사랑을 받는 OpenRouter를 선택해보았다.

 

https://openrouter.ai/

 

회원가입/로그인 후 'Get API Key' 버튼을 클릭하면 된다.

 

 

임의로 이름 지어주고(유효기간 등은 선택사항) 'Create'하면 된다.

 

 

Create 하면 나오는 Key 값을 잘 복사해 놓아야 한다.

지금 복사해놓지 않으면 확인할 수 있는 방법이 없기에 다시 새로운 API Key를 생성해야 한다.

 

 

 

7. LLM / Embedding Model

개인적으로 최근에 사용했던 무료 모델 중에서 빠르고 괜찮은 품질을 보였던 것을 사용해보려고 한다.

 

 

 

8. Vetcor DB - Chroma (ChromaDB)

RAG를 위한 Vector Database로는 Chroma를 선택했다.

별다른 설치 없이 Local에 저장이 되는 사용하기 편한 아이라서 (개인적인 취향으로) 선택했다.

 

https://www.trychroma.com/

 

 

9. 개발환경 - Ubuntu / Python

개인적인 취향이기도 하지만,

사실 가장 호환성 좋고 가장 권장할만한 개발환경은 Ubuntu라고 믿고 있다!!!

 

 

프로그래밍 언어는 파이썬을 사용할 것이고, 파이썬 가상환경 및 패키지 관리는 uv를 사용할 것이다.

 

 

 

10. 라이브러리 설치

본격적인 코딩을 하기 전에 필요한 라이브러리들을 설치하자.

 

 

> uv add chromadb requests python-dotenv

 

앞서 살펴본대로 RAG를 위한 chromadb, API 통신을 위한 requests, 환경변수를 위한 python-dotenv 라이브러리들이다.

 

 

11. 환경 변수

앞에서 생성한 Key 값 및 사용할 모델 정보를 환경 변수로 설정하자.

 

 

> nano .env

 

HANCOM_API_KEY=...
HANCOM_WEBHOOK_URL=...

OPENROUTER_API_KEY=...
EMBED_MODEL=nvidia/nemotron-3-embed-1b:free
LLM_MODEL=nvidia/nemotron-3-ultra-550b-a55b:free

 

'한컴 데이터 로더'를 이용하여 문서를 변환할 때 약간의 시간을 필요로 한다.

그래서 변환 요청한 뒤, 변환이 완료되면 알림(webhook)을 보내줄 URL을 알려주도록 하고 있다.

 

하지만, 이번에는 webhook을 받아서 처리하는 서버 부분을 따로 구현하지 않고

그냥 완료 여부를 체크해서 결과를 받아오도록 처리할 예정이다.

 

그래서, HANCOM_WEBHOOK_URL 값은 아무것이나 넣어줘도 괜찮다.

 

 

12. 한컴 데이터 로더를 이용한 HWP(X) 변환 - convert.py

준비는 끝났다. 이제 하나씩 구현해보자.

HWP(X) 파일을 '한컴 데이터 로더'를 이용해 변환한 뒤에 JSON 형태의 파일로 다운로드를 받는 부분이다.

 

 

'한컴 데이터 로더'를 사용하기 위한 Key값과 Webhook URL 정보들을 확보하고

HWP 파일을 보낸 뒤 변환이 끝날 때까지 기다렸다가

변환이 끝나면 다운로드를 받는 과정이다.

 

 

'한컴 데이터 로더'에 업로드하는 과정은 다음과 같다.

 

 

앞서 말했지만 변환 과정에는 시간이 걸리기에

'한컴 데이터 로더'에서 권하는 방식은 변환이 끝난 뒤 정해진 URL로 Webhook을 받아서

그 때 다운로드를 받는 것이다.

 

하지만, 여기에서는 그냥 주기적으로 완료 여부를 확인하는 방식으로 구현했다.

 

 

변환 결과를 다운로드 받는 부분이다.

 

 

다운로드를 받은 파일이 제대로 되어있는지 여부와 얼만큼의 양인지 확인까지 해봤다.

 

그런데, '한컴 데이터 로더'에서 내려받는 파일의 확장자가 일반적이지 않은 ".aijson"이다.

표준 포맷은 아니고, '한컴 데이터 로더'에서 사용하는 JSON 형태의결과 파일이다.

 

그런데, 공식 문서에서 '.aijson' 파일의 구조를 아래와 같이 가이드 하고 있는데

 

https://documents.sdk.hancom.com/dataloader-api/intro

 

 

 

실제 파일을 보면 구성과 내용이 다르다.

가이드 문서의 업데이트가 필요하지 싶다.

 

 

이렇게 구현한 것을 실제 실행한 화면은 다음과 같다.

 

 

 

13. 문서 자르기 - chunk.py

앞에서 HWP 파일을 다룰 수 있는 데이터 형태로 변환을 했다면,

이제는 그 데이터를 연산하기 위한 유닛으로 조각을 내서 그룹핑을 해야 한다.

 

 

앞 단계에서 만들어진 ".aijson" 파일을 입력으로 받아서

텍스트 부분만 추출한 뒤에

정해진 CHUNK_SIZE와 CHUNK_OVERLAP 값을 참고하여 청크 목록을 만든다.

 

 

".aijson" 파일도 근간은 json 파일이기 때문에, 그냥 json.load()로 읽어들이면 된다.

우리가 필요로 하는 부분은 'body' 배열이기에 존재 여부를 확인해보았다.

 

 

우리가 사용할 것은 text 이기에 그것만 추출했다.

 

 

text 묶음을 가지고 CHUNK_SIZE 만큼씩 잘라냈다.

검색 결과에서 앞/뒤로 잘릴 수가 있으므로 CHUNK_OVERLAP 크기만큼 겹치도록 한다.

 

 

실제 실행 화면은 아래와 같다.

 

 

이렇게 만들어진 JSON 파일 본문은 아래와 같이 생겼다.

 

 

 

14. 임베딩 및 데이터 저장 - embed.py

이제 Vector Database에 입력을 하면 된다.

그런데, 그냥 넣으면 안되고 embedding을 해서 넣어줘야 한다.

 

 

Chunking된 JSON 파일을 입력으로 받아서

embedding 모델을 통해 변환 후 chromadb에 저장을 하도록 했다.

 

 

id, text 필드가 잘 있는지 확인해서 읽어들인다.

 

 

embedding 모델을 통해 변환한 값들을 embeddings에 저장을 한다.

 

 

그렇게 한 뒤에 chromadb에 저장을 하도록 했고,

이를 실행한 화면은 다음과 같다.

 

 

이렇게 입력한 내용이 제대로 되었는지가 궁금해서 점검하는 코드도 추가 작성해보았다.

 

 

 

15. 사용자 인터페이스 - ask.py

이제 사용자의 질문에 답하는 부분을 구현하면 된다.

저장된 Vector DB에 query를 보내기 위해서는 embedding 과정을 거쳐야 된다.

 

 

사용자의 질문을 받으면 embedding을 한 뒤에

그 값을 가지고 Vector DB 검색을 하고

검색 결과를 가지고 답변을 작성한 뒤에 출력하는 흐름이다.

 

 

앞서 사용한 동일한 embedding model을 사용한다.

 

 

chromadb에 query를 날려 유사한 청크를 찾는다.

 

 

검색 결과를 근거로 해서 답변을 작성한다.

 

 

실제 실행한 결과는 아래와 같다.

 

 

검색 결과가 없으면 없다고 답변을 잘하고 있다.

 

 

 

16. 결론 - '한컴 데이터 로더'를 사용해본 경험

RAG를 이용해서 사용자 질문에 답변을 하는 가장 기본적인 workflow를 구현해보았다.

 

"한컴 데이터 로더"를 사용하는 것의 의미를 찾자면

HWP(X) 문서로 작성된 데이터를 다룰 수 있다는 점일 것이다.

 

변환된 내용을 보면 상당히 깔끔하게 잘 변환된 것을 확인할 수 있었다.

그리고, 단순히 텍스트만 추출되는 것이 아니라 편집 정보들을 포함해서 알려준다.

이러한 정보들을 활용하면 더 재미있는 결과도 뽑아낼 수 있을 것이다.

 

안타깝게도(?) 내가 일하는 곳에서는 HWP(X) 문서를 사용하지 않지만,

정부에서 발표하거나 배포하는 문서들을 데이터화 해야한다고 하면

문서 자동화를 위한 사내 업무용으로 도입을 할 수도 있을 것 같다.

 

내부망을 사용하고 있기에 지금과 같은 SaaS 형태로는 사용할 수 없을 것이고,

온프레미스 문서 처리 방식으로 사용한다고 하면 보안적인 측면에서도 상당한 메리트가 있을 것으로 보인다.

 

[ RAG 전처리 도구로서 '한컴 데이터 로더' 특징 ]

이번에 직접 사용해보면서 파악하게 된 '한컴 데이터 로더'의 특징을 정리해봤는데,

RAG 전처리 도구를 고를 때 이런 부분을 비교해보면서 살펴보면 좋을 것 같다.

지원 파일 유형 HWP, HWPX, PDF  
서비스 형태 SaaS(API), 온프레미스 온프레미스를 직접 테스트해보지는 못했다,
문서 변환 소요 시간 상당히 빠름 (약 0.3초/page) 163페이지 변환에 약 50초 소요
비용 10 크레딧/페이지 내용 무관하게 페이지 단위 비용 청구
변환 대상 텍스트, 이미지, 문서서식 JSON 형태로 데이터화

 

기존에 사용해봤던 Docling 같은 도구와 비교해보면 변환 속도라던지, HWP(X) 지원 측면에서 확실한 강점이 있는 것 같다.

일반적으로 텍스트 추출에 특화되어 있는데, 문서 서식을 포함한 정보를 분석해주는 부분에 있어서도

'한컴 데이터 로더'가 강점이 있다.

 

 

17. 뒷 이야기

테스트를 위해 사용한 문서가 163 페이지이다 보니, 한 번 실행할 때마다 1630원씩 소모가 되었다.

보통은 사용하는 토큰에 따른 비용이 발생하는데, '한컴 데이터 로더'는 문서 페이지 단위로 10원씩 크레딧이 소모된다.

 

 

그러다보니 입력하는 문서에 제목만 덜렁 있는 페이지가 있거나 하는 경우, 상당히 억울할 수 있을 것 같다 😅

비용 절감을 위해서는 공백이나 빈칸 없이 페이지를 빽빽하게 만든 다음에 업로드를 해야하겠다.

 

 

지금까지 "한컴 데이터 로더"를 살펴보았고,

사용해 본 경험은 '꽤 괜찮았'고, HWP(X) 파일을 다룰 일이 있을 때 도입 검토할 가치는 충분할 것 같다.

 

다만, 가이드 페이지를 조금 더 보완하면 더 좋은 사용자 경험이 될 것이다.

 

Webhook URL이 마땅치 않을 때 어떻게 해야하는지,

AIJSON 파일에 대한 포맷 정합성 및 각 필드에 대한 설명이라던지 그다지 친절한 가이드는 아니었다.

 

 

18. Live Demo

'한컴 데이터 로더'를 그냥 일단 한 번 체험해보고 싶은 분들을 위한 Live Demo 페이지도 있다.

 

https://livedemo.sdk.hancom.com/dataloader

 

데모 페이지는 5 페이지까지만 변환을 해준다.

그런데, 화면을 어떻게 분석해 주는지 눈으로 확인할 수 있어서 너무 좋다 !!!

 

 

RAG에 관심이 있다면, 특히 HWP(X) 문서 데이터 추출에 관심이 있다면 꼭 한 번 사용해보기 바란다.

반응형

"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."

 

이 책의 정체성은 로드맵에 쓰여져 있는 아래 문구에 모든 것이 담겨있다.

 

책의 구성은 아래와 같다.

 

성질 급한 사람이라면 3장 살펴보고,

필요한 사례만 4~6장에서 찾아보는 방식으로 책을 봐도 될 것 같다.

 

 

1장 잘 쓰인 글의 가치를 설명하는 부분을 보면서 정말 많이 반성을 하게 되었다.

 

서비스에서 종종 "권한이 없습니다"와 같은 시스템 메시지를 전달하곤 했는데,

이렇게 문제만 알려주는 것에서 그치지 말고 아래와 같은 메시지를 전달했어야 했다!

 

"이 기능은 편집 권한이 있는 사용자만 이용할 수 있습니다.

 권한이 필요한 경우 [설정] > [권한] > [권한 신청]을 눌러 요청해 주세요"

 

이런 식으로 메시지를 전달했다면 사용자로부터의 그 수많은 Q&A 게시글, 메일, 메신저를

최소한 7-80%는 줄일 수 있었을텐데 ...

 

월요일 출근하면 제일 먼저 사용자 notification 부분을 전체 확인하고 변경하도록 해야겠다!!!

 

 

그리고, 평소에 회의록 또는 메일을 작성할 때

영어로 작성하는 것이 왠지 더 clear하다고 느껴졌었는데 그 이유를 명확하게 알게 되었다.

 

우리나라는 고맥락 문화에 속하고, 미국은 저맥락 문화권에 속하기에 그렇게 느꼈던 것이다.

 

어떤 것이 더 좋고 나쁘다의 문제는 아니지만,

업무 관련해서는 저맥락 표현이 확실한 소통 방법이고 그래야 보다 더 빠른 실행이 될 수 있다.

 

 

이 외에도 내가 하고 싶은 말이 아니라 독자 중심의 글을 써야 한다는 것 외에

잘 구조화 해야한다는 등 너무나 주옥 같은 이야기를 해주어 정말 많은 도움이 되었다.

 

 

뒤의 3장을 계속 이어서 읽으면 읽을수록 계속 드는 생각은 ...

아! 우리 부서원들에게 한 권씩 사줘야 하나!? 꼭 읽게 하고 싶다 !!!

(헉! 나 꼰대인가?! ^^)

 

 

사회 생활을 시작하는 사람들에게 필독서로 강하게 권장하고 싶은 책이다.

특히 개발자들에게 정말 강추하고 싶다!

반응형

+ Recent posts