쓸모 쓸모연구소 · 실전 노트
제 740 호이번 주 새 글 260 편2026 · 10 · 30
로컬 LLM·AI 서버
LM Studio · 맥미니 · Gemma 4

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

Gemma 4 12B 성능, 16GB 맥미니에서 업무 5가지 시험 결과

Gemma 4 12B 성능을 메모리 16GB 맥미니에서 실제 업무 다섯 가지로 시험한 결과를 정리했습니다. 송장 이미지 읽기, 송장 처리 미니 앱 만들기, PDF와 대화하기, 웹 검색, 폴더 정리를 LM Studio에서 순서대로 시켜 보고, 어디까지 되고 어디서 막히는지 42단계로 옮겼습니다.

Gemma 4 12B 성능, 16GB 맥미니에서 업무 5가지 시험 결과 삽화
삽화 · 쓸모연구소

16GB 맥미니로 Gemma 4 12B를 돌린 결론

16GB 맥미니는 로컬 AI를 돌릴 수 있다는 듯 팔리지만, 실제로는 절반쯤 맞는 말입니다. 16GB M4 맥미니로 약 6개월 동안 로컬 모델을 써 온 경험에서도, 일은 되지만 기대할 수 있는 수준에 천장이 있습니다. 이번 시험은 메모리 16GB 맥미니 M6에 작은 모델 Gemma 4 12B를 올려 진행했습니다.

다섯 가지 결과는 이렇습니다.

  • 송장 이미지 읽기: 됨. 다만 숫자를 잘못 읽는 일이 있음
  • 송장 처리 미니 앱 만들기: 됨
  • PDF 요약과 질의응답: 됨
  • 웹 검색: 첫 검색은 됐지만, 컨텍스트 한도에 걸려 후속 질문에서 무너짐
  • 폴더 정리: 결론 불가. 굳이 고르면 실패

작은 기기에서 작은 모델을 돌리면 이 정도가 현실입니다.

시험 환경

  • 앱: LM Studio. 무료 앱이고, 로컬 AI 모델을 내려받아 실행할 수 있습니다.
  • 모델: Gemma 4 12B, 4비트 MLX 버전(MLX는 애플 실리콘용 실행 형식). 이미지 입력(vision)도 받습니다.
  • 모델 가중치는 6.77GB입니다. 모델을 메모리에 올리는 데만 이만큼 들고, 대화를 하려면 KV 캐시 몫으로 메모리가 더 필요합니다.
  • 속도: 한 사용자의 직접 비교에서는 M6이 M4보다 prefill(질문을 읽어 들이는 단계)은 약 4.5배, decode(답을 써 내려가는 단계)는 30~40% 빨랐습니다.
  • 웹 검색: Brave Search API 무료 등급을 썼습니다.
  • 컨텍스트 한도: 19.5천 토큰으로 잡았습니다.

시험 순서대로 따라 하기 (42단계)

강의라기보다 성능 시험입니다. LM Studio 설치, 모델 내려받기, 파일 시스템 MCP와 Brave Search MCP 연결은 미리 갖춰 둔 상태에서 시작합니다. MCP(AI가 외부 도구를 직접 쓰게 해 주는 연결 규격)는 LM Studio 오른쪽 위 Program 탭의 Install → Edit mcp.json에서 등록합니다.

프롬프트는 영어 원문 그대로 두고, 아래에 번역을 붙였습니다.

모델 불러오기와 테스트 메시지 (1~3단계)

  • 1단계. LM Studio를 엽니다. 확인: LM Studio 창이 보입니다.
  • 2단계. 이 채팅에서 쓸 모델로 Gemma 4 12B를 고릅니다. 확인: 모델이 로드된 상태로 이 채팅에 지정됩니다.
  • 3단계. 짧은 테스트 메시지를 보냅니다. 확인: Gemma 4가 빠르게 답합니다.

테스트 1: 송장 이미지에서 정보 뽑기 (4~15단계)

송장 PNG 3장을 품목 2개, 5개, 10개 순서로 올립니다. 품목이 많아질수록 정확도가 떨어지는지 보려는 시험입니다. 주유소나 카페 영수증을 사진으로 찍어 처리하는 자영업자의 일을 떠올리면 됩니다.

  • 4단계. 첫 번째 송장 이미지(품목 2개)를 채팅창에 올립니다. 확인: 이미지가 채팅에 첨부됩니다.
  • 5단계. 아래 요청을 입력합니다. 확인: 요청이 입력창에 들어갑니다.
프롬프트
Hey, can you please parse all the information from this invoice including biller, line items, totals, subtotals, pretty much everything that you can. Can you extract it from this invoice?

번역: 이 송장에서 판매자, 품목, 합계, 소계까지 뽑을 수 있는 정보는 다 뽑아 줄래요?

  • 6단계. 전송합니다. 확인: 모델이 판매자, 송장번호, 날짜, 품목, 합계를 나열합니다.
  • 7단계. 결과를 원본 송장 이미지와 하나씩 맞춰 봅니다. 확인: 송장번호 NL2609002, 발행일 9월 29일, 마감일 10월 13일, 합계 147.95, GST 13.45가 원본과 같았습니다.
  • 8단계. 추론(reasoning) 설정이 꺼져 있는지 봅니다. 확인: 이 테스트 동안 reasoning이 꺼져 있습니다. 빠른 응답을 원해서 끈 상태입니다.
  • 9단계. 두 번째 송장 이미지(품목 5개)를 올립니다. 확인: 이미지가 첨부됩니다.
  • 10단계. 아래 요청을 입력합니다. 확인: 요청이 입력창에 들어갑니다.
프롬프트
Can you please also extract all the information from this invoice?

번역: 이 송장도 정보를 전부 뽑아 줄래요?

  • 11단계. 전송합니다. 확인: 추출 결과가 나옵니다.
  • 12단계. 결과를 원본과 맞춰 봅니다. 확인: NL2609005, 합계 398.75, 세금 36.25가 원본과 같았습니다.
  • 13단계. 세 번째 송장 이미지(품목 10개)를 올립니다. 확인: 이미지가 첨부됩니다.
  • 14단계. 아래 요청을 입력해 전송합니다. 확인: 1~2초 만에 결과가 나옵니다.
프롬프트
Hey, can you please process and extract this invoice as well.

번역: 이 송장도 처리해서 정보를 뽑아 줄래요?

  • 15단계. 결과를 원본과 맞춰 봅니다. 확인: NL2609010, 합계 696.3, GST 63.30이 맞았습니다.

세 장 모두 이 시도에서는 맞았습니다. 하지만 같은 시험을 여러 번 돌려 보면 첫 시도 때 송장번호가 2609가 아니라 2605로 나온 적이 있었습니다. 늘 100% 맞는 것은 아니라는 뜻입니다. 숫자가 중요한 서류라면 사람이 원본과 맞춰 보는 단계를 빼면 안 됩니다.

테스트 2: 송장 처리 미니 앱 만들기 (16~34단계)

테스트 1을 한 대화에서 그대로 이어 갑니다. 한계를 계속 밀어붙여 보려고 같은 대화를 썼습니다.

  • 16단계. 같은 대화에 앱 제작 요청 글을 입력합니다. 아직 전송하지 않습니다. 확인: 요청이 입력창에 들어갑니다.
프롬프트
Hey, this is awesome. I now want to build a HTML page. It's a single HTML page that will let me drop in new invoice PNG images, and then I want the back-end script to basically take that PNG, send it across to LM Studio to my Gemma model. I've got the details below. And then I want Gemma to be able to process, extract all the information exactly like what you're doing here, and then return that information to the front end of the HTML page where I'll just get all the details shown to me on the front end.

번역: 새 송장 PNG를 끌어다 놓을 수 있는 단일 HTML 페이지를 만들고 싶어요. 뒤쪽 스크립트가 그 PNG를 LM Studio의 Gemma 모델로 보내고, Gemma가 지금 여기서 한 것처럼 정보를 전부 뽑은 다음, 그 결과를 HTML 페이지 화면에 보여 주게 해 주세요. 필요한 정보는 아래에 적었어요.

  • 17단계. LM Studio의 개발자 화면(Developer, 왼쪽 아이콘 줄의 터미널 모양)을 엽니다. 확인: 로컬 서버 주소가 보입니다. 서버가 꺼져 있으면 Status를 Running으로 바꿉니다.
  • 18단계. 로컬 서버 주소(보통 http://localhost:1234 형태)를 복사합니다. 확인: 주소가 클립보드에 들어갑니다.
  • 19단계. 요청 글 아래에 서버 주소를 붙여 넣습니다. 확인: 프롬프트에 주소가 들어갑니다.
  • 20단계. 개발자 화면에서 지금 로드된 모델 이름을 복사합니다. 확인: 모델 이름이 클립보드에 들어갑니다.
  • 21단계. 요청 글에 모델 이름을 붙여 넣습니다. 확인: 프롬프트에 모델 이름이 들어갑니다.
  • 22단계. 파일 시스템 MCP를 켭니다. 확인: 파일 시스템 도구가 켜져 있습니다. 대화 도중에 켠 도구를 모델이 바로 알아채는지는 확실하지 않으니, 안 되면 새 대화에서 다시 시도합니다.
  • 23단계. 아래 문장을 이어서 입력합니다. 확인: 문장이 입력창에 들어갑니다.
프롬프트
I've also just enabled MCP access for a tool called file system. Can you please locate the folder on my desktop that's called Gemma 4? And then, when you write the code as a single HTML page, just pop that code into the folder, please.

번역: 파일 시스템이라는 도구에 MCP 접근을 켜 두었어요. 데스크톱에 있는 "Gemma 4" 폴더를 찾아서, 단일 HTML 페이지 코드를 쓰면 그 폴더에 넣어 주세요.

  • 24단계. 데스크톱에 "Gemma 4"라는 폴더가 있는지 확인합니다. 확인: 데스크톱에 그 폴더가 있습니다. 없으면 미리 만들어 둡니다.
  • 25단계. thinking(추론)을 켭니다. 확인: 응답에 생각 과정이 보입니다. 제대로 돌아가는 앱을 만들 여유를 주려고 켭니다.
  • 26단계. 전송합니다. 확인: 모델이 데스크톱 폴더 목록을 읽고 계획을 세웁니다.
  • 27단계. 응답이 끝날 때까지 기다립니다. 확인: 앱이 만들어졌다는 안내와 파일 설명이 나옵니다. 전부 처리되는 데 약 5분 걸렸습니다.
  • 28단계. 응답에 적힌 실행 안내를 읽습니다. 확인: 앱을 띄우는 방법이 적혀 있습니다.
  • 29단계. 안내에 있는 명령을 복사합니다. 확인: 명령이 클립보드에 들어갑니다. 보통 "Gemma 4" 폴더로 이동해 작은 서버를 띄우는 명령입니다.
  • 30단계. 터미널을 열어 안내대로 앱을 실행합니다. 확인: 앱이 준비됐다는 표시가 나오고 브라우저에서 페이지가 열립니다.
  • 31단계. 품목 2개 송장 이미지를 앱 화면에 끌어다 놓습니다. 확인: 송장 미리보기가 나타납니다.
  • 32단계. 결과가 나올 때까지 기다립니다. 확인: 추출 결과가 나옵니다. 합계 147.95, GST 13.45가 맞았습니다.
  • 33단계. 품목 10개 송장 이미지를 앱 화면에 끌어다 놓습니다. 확인: LM Studio 쪽에서 토큰 생성이 시작됩니다. 송장이 Gemma 모델로 전달됐다는 뜻입니다.
  • 34단계. 결과를 원본과 맞춰 봅니다. 확인: 이번에는 송장번호가 2609010이 아니라 2605010으로 틀리게 나왔습니다. 오독이 생길 수 있다는 점을 기억해 두세요.

생성 도중 Gemma는 자기가 쓴 코드에서 문제를 찾아 다시 고쳤습니다. 다만 LM Studio에는 브라우저를 띄워 직접 시험하는 도구가 없어서, 코드를 실제로 돌려 보고 고친 것은 아닙니다. 송장번호는 틀렸지만 업로드, 미리보기, 전송, 결과 표시까지 앱 기능은 돌아갔습니다.

테스트 3: PDF에게 묻기 (35~37단계)

ChatGPT로 만든 약 4페이지짜리 PDF를 씁니다. 새 대화에 넣을 수도 있었지만, 이미 11.5천 토큰(한도 19.5천)까지 찬 기존 대화에 일부러 넣어 한계를 시험했습니다.

  • 35단계. PDF 파일을 채팅창에 올립니다. 확인: PDF가 채팅에 첨부됩니다.
  • 36단계. 아래 요청을 보냅니다. 확인: 40초가 조금 안 돼 5개 항목 요약이 나옵니다.
프롬프트
Can you please summarize how many pages are in this PDF and then give me a five bullet point summary of the PDF as well, please.

번역: 이 PDF가 몇 페이지인지 알려 주고, 내용을 5개 항목으로 요약해 줄래요?

  • 37단계. 후속 질문을 보냅니다. 확인: 총예산 12,000달러, 그리고 12명 팀이지만 문서에 직접 언급된 사람은 4명이라는 답이 나왔습니다.
프롬프트
Can you tell me what is the total budget for this relocation and also how many people were mentioned in the document?

번역: 이번 이전(relocation)의 총예산은 얼마고, 문서에 언급된 사람은 몇 명인가요?

파일을 채팅에 넣고 대화하는 기능(chat with files)은 LM Studio에 기본으로 들어 있습니다.

테스트 4: 웹 검색, Brave Search MCP (38~42단계)

  • 38단계. 새 대화를 시작합니다. 확인: 빈 대화창이 열립니다.
  • 39단계. 파일 시스템 MCP를 끕니다. 확인: 파일 시스템 도구가 꺼져 있습니다.
  • 40단계. 파일과 채팅하는 기능(chat with files)을 끕니다. 확인: 대화에 첨부 파일이 없습니다.
  • 41단계. Brave Search 도구를 켭니다. 확인: Brave Search만 켜져 있습니다.
  • 42단계. 아래 요청을 보냅니다. 확인: Brave Search 도구가 불리고 결과가 나옵니다.
프롬프트
Hey, can you please search for the latest AI news from this past week?

번역: 지난 한 주 동안의 최신 AI 소식을 검색해 줄래요?

첫 검색은 잘 됐습니다. 약 12시간 전 소식까지 잡아냈습니다.

문제는 후속 질문에서 생겼습니다. 컨텍스트가 한도 19.5천 토큰 가운데 17.5천 토큰까지 차 있었고, 검색 결과가 그만큼을 차지한 것으로 보입니다. 그 뒤 같은 Brave Search 호출이 반복되며 멈추지 않았고, 화면 표시로는 한도의 375%까지 올라갔습니다. 모델 문제인지, 컨텍스트 문제인지, LM Studio 문제인지는 가려지지 않았습니다.

처음 검색 결과를 새 대화에 붙여 넣고 더 구체적으로 다시 요청해 봤습니다. 이번에는 검색 4번 가운데 2번이 실패했습니다. 무료 등급의 요청 수 제한 때문에 "too many requests" 오류가 났고, 한 번은 "No web results found"가 나왔습니다.

웹 검색은 되지만, 이렇게 작은 기기에서는 컨텍스트 창에 묶여 큰 규모의 검색이나 조사는 어렵습니다.

테스트 5: 폴더 정리 (시도 기록)

이 테스트는 성공하지 못해 따라 할 단계로 세지 않고, 시도한 순서만 적습니다.

시도 A는 LM Studio에서 파일 시스템 MCP만 켜고 아래 요청을 보낸 것입니다. 데스크톱의 "local AI test folder"에 있는 송장 PDF를 지불/미지불 두 폴더로 나누라는 내용입니다.

프롬프트
Hey, I have a folder on my desktop called local AI test folder, and inside it I've got a bunch of files. They're just invoices. Can you please sort them out into two folders, one that has all the paid invoices, one that doesn't have a one that has the unpaid invoices.

번역: 데스크톱에 "local AI test folder"라는 폴더가 있고 안에 송장 파일이 여러 개 있어요. 지불된 송장과 미지불 송장을 두 폴더로 나눠 줄래요?

모델은 PDF 6개를 찾았지만 읽지 못한다고 답했습니다. 더 밀어붙이자 PDF가 "complex binary format"(복잡한 이진 형식)으로 저장돼 있다고 했고, 분류 폴더는 만들어지지 않았습니다. 파일 시스템 MCP는 파일을 글자 그대로 읽는 도구라, PDF 안의 글을 꺼내 주지 못하기 때문입니다.

시도 B는 VS Code에서 Pi(pi.dev) 세션을 연 것입니다. Pi는 Claude Code나 Codex 같은 코딩 에이전트 도구인데 로컬 모델에 맞게 가볍게 만든 것입니다. 모델을 Gemma 4 12B로 두고 "PDFs" 폴더 안의 파일을 paid, unpaid 하위 폴더로 나누라고 요청했습니다. 모델은 폴더와 PDF 목록까지 읽었지만 분류는 끝내지 못했습니다.

4비트로 줄인 20B 미만 소형 모델에서는 같은 도구 호출을 계속 되풀이하거나, 추론을 끝없이 반복하는 루프가 흔합니다. PDF를 읽는 도구를 따로 붙이거나 송장을 텍스트 파일로 바꿔 주면 결과가 달라질 수 있습니다. 이 시도의 최종 판정은 "결론 불가, 굳이 고르면 실패"였습니다.

Gemma 4 12B 로컬 시험에서 자주 막히는 곳

송장번호가 2605처럼 잘못 읽힐 때

모델의 오독입니다. 결과를 원본과 직접 맞춰 보는 수밖에 없습니다. 숫자 칸은 두 번 돌려 결과가 같은지 비교하는 방법도 있습니다.

웹 검색 뒤 같은 도구 호출이 반복될 때

검색 결과가 컨텍스트를 채운 탓일 가능성이 큽니다. 처음 검색 결과를 새 대화에 붙여 넣고 더 구체적으로 다시 요청합니다. 메모리 여유가 있으면 Context Length를 늘려 봅니다.

"too many requests"나 "No web results found"가 뜰 때

Brave Search 무료 등급의 요청 수 제한에 걸린 경우가 많습니다. 잠시 뒤 다시 시도하거나 한 번에 검색할 양을 줄입니다.

PDF를 읽지 못할 때

파일 시스템 도구는 PDF 속 글을 꺼내지 못합니다. PDF를 텍스트로 바꿔 주는 도구를 MCP로 붙이거나, 송장을 미리 텍스트 파일로 바꿔 둡니다. 맥 터미널이라면 Homebrew로 poppler를 설치한 뒤 pdftotext 파일.pdf로 같은 이름의 .txt 파일을 만들 수 있습니다.

앱 파일을 지우고 싶을 때

테스트 2를 하면 데스크톱 "Gemma 4" 폴더에 파일이 생깁니다. 필요 없으면 휴지통으로 옮기면 됩니다.

16GB 맥미니 로컬 AI로 되는 것과 막힌 것

  • 됐다: 이미지 속 송장 정보 추출, 단일 HTML 송장 앱 만들기, PDF 요약과 질의응답.
  • 막혔다: 길어진 컨텍스트에서의 웹 검색, PDF 송장 분류.
  • 늘 남는 한계: 송장번호처럼 숫자를 잘못 읽는 일이 있어 100%는 아니고, 16GB 기기에서는 컨텍스트 크기가 발목을 잡습니다.

한 기기에서 한 모델로 한 시험이라, 다른 모델이나 설정에서는 결과가 달라질 수 있습니다. 16GB 맥이라면 이미지 읽기와 문서 요약처럼 짧고 분명한 작업부터 로컬에 맡기고, 긴 조사와 여러 단계 자동화는 클라우드 모델에 두는 편이 현실적입니다.

자주 묻는 질문

Gemma 4 12B는 16GB 맥에서 돌아가나요?

돌아갑니다. 4비트 MLX 버전 가중치가 6.77GB라 16GB 맥에 올라가고, 대화를 위한 캐시 메모리도 남습니다. 다만 컨텍스트를 길게 잡을 여유가 적어, 검색 결과처럼 긴 글이 쌓이면 한도에 걸립니다.

Gemma 4 12B로 영수증이나 송장을 읽을 수 있나요?

품목 10개짜리 송장까지 판매자, 날짜, 합계, 세금을 뽑아냈습니다. 하지만 같은 시험을 여러 번 돌리면 송장번호를 2609 대신 2605로 읽는 오독이 나왔습니다. 금액⁠·번호는 반드시 원본과 맞춰 봐야 합니다.

LM Studio에서 웹 검색은 어떻게 붙이나요?

Brave Search 같은 검색 MCP를 LM Studio에 등록하고 대화에서 그 도구를 켜면 됩니다. 첫 검색은 잘 되지만 검색 결과가 컨텍스트를 빠르게 채워 후속 질문에서 막힐 수 있습니다. 무료 등급은 요청 수 제한이 있어 오류가 나기도 합니다.

작은 로컬 모델이 같은 작업을 계속 반복할 때는 어떻게 하나요?

4비트로 줄인 20B 미만 모델에서 흔한 증상입니다. 새 대화에서 요청을 더 짧고 구체적으로 다시 쓰고, 필요한 도구만 켜 둡니다. 그래도 반복되면 더 큰 모델이나 클라우드 모델에 맡기는 편이 낫습니다.

이 글의 본문은 아래 원본 유튜브 영상의 내용을 바탕으로 쓸모연구소가 다시 정리해 쓴 것입니다. 세부 내용과 최신 정보는 원본 영상과 공식 안내에서 확인해 주세요.

원본 영상 보러가기 ↗