포스트

LLM 로컬 구축 일기 #2 — PG 도메인 챗봇, 설계부터 시작합니다

LLM 로컬 구축 일기 #2 — PG 도메인 챗봇, 설계부터 시작합니다

오늘의 출발점

지난 일기에서 로컬 LLM 구축을 시작하겠다고 다짐했다.

그런데 “그냥 LLM을 돌려보자”는 막연한 목표로는 오래가지 못한다는 걸 안다. 방향이 필요했다.

그래서 오늘은 구체적으로 무엇을 만들 것인가를 정했다.


PG 도메인 챗봇을 만들기로 했다

나는 PG(결제대행사) 회사에 다닌다. 매일 가맹점에서 같은 질문이 반복해서 들어온다.

  • “오류코드 F100이 뭔가요?”
  • “KSNET 취소 API 어떻게 호출해요?”
  • “승인 실패가 계속 나는데 왜 그런가요?”

이 질문들을 사람이 매번 답하는 건 비효율적이다. 그리고 이건 LLM이 가장 잘할 수 있는 일이기도 하다.

그래서 목표를 이렇게 잡았다.

PG 도메인에 특화된 챗봇을 2개 만든다.


봇 2개로 나눈 이유

처음엔 하나로 합치려고 했다. 그런데 생각해보니 역할이 명확히 달랐다.

BOT 1 — 오류코드 분류 챗봇

  • 승인/취소 오류코드를 입력하면 원인과 대응 방법을 안내
  • 데이터 양이 많지 않아도 됨 (오류코드 종류 자체가 한정적)
  • 빠르게 먼저 만들 수 있는 봇

BOT 2 — PG 연동 개발 가이드 Q&A 봇

  • 가맹점 개발자가 연동 과정에서 막히는 질문에 답변
  • 헥토, KSNET, 갤럭시아, 다날 등 PG사별 연동 명세 기반
  • 데이터 구성이 BOT 1보다 조금 더 많이 필요

2개를 순차적으로 만들고, 각각 서버에 배포하는 방식으로 진행하기로 했다.


내 PC 사양이 이걸 감당할 수 있을까?

솔직히 처음엔 걱정이 있었다.

내 로컬 PC 사양은 이렇다.

  • CPU: AMD Ryzen 7800X3D
  • GPU: NVIDIA RTX 5070 Ti (VRAM 16GB)
  • RAM: 32GB DDR5
  • SSD: M.2 2TB

결론부터 말하면, 걱정할 필요가 없었다.

QLoRA 방식으로 7B 모델을 학습시키는 데 VRAM 16GB면 여유롭게 돌아간다. 13B 모델도 빠듯하지 않게 가능하다. RAM 32GB는 데이터 로딩에 넉넉하고, 7800X3D는 전처리 속도에서 힘을 발휘한다.

추가로 필요한 건 소프트웨어뿐이다.

  • CUDA Toolkit 12.4 이상
  • Python 3.10 or 3.11
  • transformers, peft, bitsandbytes, trl, datasets, accelerate

RTX 5070 Ti가 Blackwell 아키텍처라 bitsandbytes 버전 호환을 잘 챙겨야 한다는 것도 배웠다. bitsandbytes 0.43.0 이상이면 문제없다고 한다.


Python을 왜 써야 하는지 처음으로 납득했다

나는 Java 개발자다. 자연스럽게 “Java로 LLM 학습도 할 수 있지 않나?” 라는 생각이 들었다.

결론은 간단했다.

AI 생태계 자체가 Python 전용으로 만들어져 있다.

PyTorch, transformers, peft, trl — LLM 학습에 필요한 프레임워크가 전부 Python 기반이다. Java로는 GPU를 제어할 수 있는 수단 자체가 없다.

처음엔 좀 억울했는데, 생각해보니 역할이 명확히 나뉜다.

1
2
Python = 요리사 (AI 두뇌를 만드는 쪽)
Java   = 서빙 직원 (만들어진 두뇌를 가맹점에게 연결하는 쪽)

AI 학습과 추론은 Python, 백엔드 API와 비즈니스 로직은 Spring Boot. 이 구조로 가면 내가 잘 아는 Java를 충분히 쓸 수 있다.

실제로 실무에서도 AI팀은 Python, 백엔드팀은 Java나 Node.js로 나눠서 협업한다고 한다. 나 혼자 둘 다 하는 거지만 구조는 같다.


서버는 이미 있다 — N150 미니PC

학습은 로컬 PC에서 하고, 배포는 별도 서버에 올리기로 했다.

마침 집에 Intel N150 미니PC가 있다. 전력 소모가 6W밖에 안 돼서 24시간 켜둬도 전기세 부담이 없다.

7B 모델을 4bit 양자화(Q4_K_M)하면 이 미니PC에서도 추론이 가능하다. 응답 속도는 조금 느리지만 포트폴리오 용도로는 충분하다.

Ollama를 설치하면 배포가 생각보다 간단하다는 것도 알았다. 모델 파일을 등록하고 ollama serve 하나면 끝이다.


저작권 문제도 미리 정리했다

헥토파이낸셜 개발 가이드 사이트를 데이터 출처로 활용하려고 했다. 공개된 사이트지만 하단에 Copyright ⓒ Hecto Financial Co., Ltd. All Rights Reserved. 가 명시되어 있다.

고민 끝에 방향을 정했다.

  • 원문을 그대로 학습 데이터로 쓰지 않는다
  • 가이드 내용을 읽고 내 말로 Q&A 형태로 재작성한다
  • 학습 데이터 파일 자체는 GitHub에 올리지 않는다
  • README에 포트폴리오/학습 목적임을 명시한다

상업적 배포 계획이 없고, 데이터를 원문 그대로 공개하지 않는다면 현실적으로 문제가 될 가능성은 낮다는 판단이다. 실제 서비스로 전환할 시점이 오면 그때 정식으로 문의하면 된다.


매일 학습시킬 필요는 없다

처음에 “LLM은 매일 돌려야 하나?” 라는 질문을 했다.

답은 간단했다.

학습은 1번, 배포는 1번. 이후엔 요청이 올 때만 모델이 응답하면 된다. 오류코드나 가이드 내용이 바뀌었을 때만 재학습하면 되고, 그것도 분기에 한 번 수준이다.

AI를 처음 접할 때 “엄청난 자원이 계속 필요한 것”이라는 막연한 인식이 있었는데, 도메인 특화 챗봇 수준에서는 생각보다 훨씬 현실적이었다.


다음 일기 예고

다음 글에서는 본격적으로 환경 세팅을 시작한다.

Windows 환경에서 CUDA를 설치하고, Python 가상환경을 구성하고, 베이스 모델을 내려받는 과정을 기록할 예정이다.

아마 삽질이 있을 것 같다. 그것도 전부 남길 생각이다.

방향이 정해지면 절반은 된 거다. 나머지 절반은 그냥 걷는 것뿐이다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.