반응형

Mac에서 로컬 LLM을 사용하려고 검색하다 보면 거의 반드시 만나게 되는 이름이 있다.

MLX, Ollama, LM Studio

처음 로컬 LLM을 접하면 이 세 가지 가운데 하나를 선택해야 하는 것처럼 느껴진다.

나 역시 M4 Mac mini 24GB와 M1 Max 64GB MacBook Pro에서 로컬 LLM을 사용해보려고 관련 자료를 찾아보면서 자연스럽게 이 세 가지를 비교하게 됐다.

그런데 자료를 정리하다 보니 중요한 사실이 하나 있었다.

MLX와 Ollama, LM Studio는 사실 완전히 같은 종류의 프로그램이 아니다.

그래서 단순히

MLX가 빠른가?
Ollama가 빠른가?
LM Studio가 빠른가?

라고 비교하는 것부터 조금 잘못된 질문일 수 있다.

이번 글에서는 Apple Silicon Mac에서 로컬 LLM을 사용할 때 MLX, Ollama, LM Studio가 각각 어떤 역할을 하는지, 그리고 어떤 사용자에게 어떤 선택이 적합한지 정리해봤다.


먼저 결론부터

아주 간단하게 정리하면 다음과 같다.

목적추천

로컬 LLM을 처음 사용 LM Studio
터미널에서 간단하게 사용 Ollama
Claude Code / Codex 연동 Ollama 또는 LM Studio
모델 성능 테스트 MLX / MLX-LM
Apple Silicon을 직접 활용한 개발 MLX
API 서버로 사용 Ollama / LM Studio
모델 다운로드부터 GUI로 관리 LM Studio
자동화·스크립트·서버 Ollama
Fine-tuning / 모델 실험 MLX-LM

결국 하나가 무조건 다른 두 개보다 좋은 것은 아니다.

사용 목적이 다르다.


MLX는 정확히 무엇일까?

MLX는 Apple의 Machine Learning Research 팀이 만든 머신러닝 프레임워크다.

NumPy나 PyTorch와 비슷한 개념으로 볼 수 있다.

MLX의 가장 중요한 특징은 Apple Silicon의 Unified Memory, 통합 메모리 구조를 적극적으로 활용한다는 점이다.

Apple Silicon에서는 CPU와 GPU가 동일한 메모리 공간에 접근할 수 있다.

MLX에서는 배열 데이터를 CPU 메모리에서 GPU 메모리로 계속 복사할 필요 없이 같은 메모리를 CPU와 GPU가 사용할 수 있도록 설계되어 있다.

이 때문에 Apple Silicon과 굉장히 잘 맞는다.

MLX 자체는 단순한 LLM 실행 프로그램이 아니다.

머신러닝 모델을 만들고 실행하고 학습할 수 있는 프레임워크다.


그럼 MLX-LM은 무엇일까?

로컬 LLM 사용자 입장에서는 순수 MLX보다 MLX-LM을 접하게 될 가능성이 더 높다.

MLX-LM은 MLX를 이용해서 LLM을 실행하고 Fine-tuning하기 위한 패키지다.

모델 생성, 채팅, 양자화, LoRA 학습, 평가, 서버 실행 등의 기능을 제공한다. 공식 CLI에도 generate, chat, server, lora, benchmark, quant 관련 기능들이 포함돼 있다.

따라서

MLX = 기반 프레임워크

MLX-LM = MLX 기반 LLM 도구

라고 생각하면 이해하기 쉽다.

설치도 비교적 간단하다.

pip install mlx-lm

형태로 설치할 수 있다.

Apple Silicon에서 MLX 자체를 설치하려면 현재 공식 요구사항은 Apple Silicon, native Python 3.10 이상, macOS 14 이상이다.


MLX의 장점

MLX의 가장 큰 장점은 역시 Apple Silicon에 직접 접근한다는 것이다.

특히 다음과 같은 경우에 매력적이다.

  • 모델별 성능 측정
  • Prompt Processing 속도 측정
  • Token 생성 속도 측정
  • Peak Memory 측정
  • 직접 Python 코드에서 모델 제어
  • 양자화
  • Fine-tuning
  • LoRA
  • 모델 구조 실험

MLX-LM의 생성 API에서는 실제로 Prompt TPS, Generation TPS, Peak Memory 같은 값도 얻을 수 있다.

즉 내가 가지고 있는

M4 Mac mini 24GB

와

M1 Max MacBook Pro 64GB

에서 동일한 모델의 성능을 제대로 비교하려면 MLX-LM이 상당히 좋은 도구가 된다.


MLX의 단점

반면 처음 사용하는 사람에게는 가장 진입장벽이 높다.

Python 환경을 구성해야 하고 터미널 명령어나 코드를 어느 정도 이해해야 한다.

또 모델을 그냥 다운받아 채팅해보고 싶은 사용자에게는 기능이 지나치게 전문적이다.

즉,

“로컬 AI 한번 써보고 싶다.”

라는 목적이라면 굳이 MLX부터 시작할 필요는 없다.


Ollama는 무엇이 다른가?

Ollama는 로컬 모델을 쉽게 다운로드하고 실행하고 API로 사용할 수 있게 만들어주는 도구다.

예를 들어 모델을 실행할 때 기본적으로

ollama run 모델명

정도의 명령으로 시작할 수 있다.

Mac뿐 아니라 Windows와 Linux에서도 사용할 수 있으며 현재 macOS 버전은 macOS 14 Sonoma 이상을 요구한다.

Ollama의 장점은 복잡한 모델 실행 환경을 사용자가 직접 구성하지 않아도 된다는 것이다.

모델 다운로드, 실행, 관리와 API 서버 역할까지 상당 부분 Ollama가 처리한다.


2026년에는 Ollama와 MLX의 관계도 달라졌다

예전에는

Ollama vs MLX

라는 비교가 비교적 자연스러웠다.

하지만 2026년에는 상황이 달라졌다.

Ollama가 Apple Silicon에서 MLX 엔진을 사용하기 시작했기 때문이다.

Ollama는 2026년 3월 Apple Silicon용 MLX 엔진을 공개했고, 6월에는 MLX 엔진의 추가 최적화를 통해 출력 속도와 메모리 효율을 개선했다고 발표했다.

즉 현재 Apple Silicon에서는

Ollama냐 MLX냐

라기보다는

MLX를 직접 사용할 것인가, Ollama를 통해 편하게 사용할 것인가

라는 질문에 가까워지고 있다.

이게 상당히 중요한 변화다.


Ollama의 가장 큰 장점은 개발 도구 연결

개발자 입장에서 현재 Ollama의 가장 흥미로운 기능 가운데 하나는 Coding Agent 연동이다.

2026년에는 ollama launch 명령이 추가됐다.

이를 이용하면 Claude Code, OpenCode, Codex 등의 Coding Agent를 Ollama의 로컬 또는 클라우드 모델과 연결할 수 있다.

예를 들어 Claude Code를 실행할 수 있고,

Codex 역시 Ollama의 OpenAI 호환 환경을 통해 로컬 모델을 사용할 수 있다.

이 기능 때문에

개발 머신 + 로컬 LLM

환경에서는 Ollama가 상당히 매력적이다.


Ollama의 장점

내가 개발용 Mac에서 사용할 목적이라면 다음이 가장 큰 장점이라고 생각한다.

첫째, 명령이 간단하다.

터미널 몇 줄만으로 모델을 설치하고 실행할 수 있다.

둘째, API 서버로 사용하기 쉽다.

로컬 앱이나 개발 프로젝트에서 LLM을 호출하기 편하다.

셋째, Agent 연동이 쉽다.

Claude Code, Codex 등과 연결하기가 상당히 간단해졌다.

넷째, Apple Silicon에서는 MLX 엔진까지 사용할 수 있다.

즉 편의성과 Apple Silicon 최적화를 어느 정도 동시에 얻을 수 있다.


Ollama의 단점

GUI 중심 사용자에게는 LM Studio만큼 직관적이지 않을 수 있다.

물론 Ollama도 macOS와 Windows용 앱을 제공하고 있으며 모델 채팅과 파일 입력 등의 기능을 사용할 수 있다.

하지만 모델을 검색하고

양자화 방식

모델 파일 크기

메모리 사용량

Context

런타임

등을 화면에서 하나씩 확인하면서 사용하는 경험은 LM Studio가 더 직관적인 편이다.


LM Studio는 무엇인가?

LM Studio는 세 제품 중 일반 사용자에게 가장 친숙한 형태다.

쉽게 말하면

로컬 LLM용 데스크톱 앱 + 모델 관리자 + 채팅 앱 + API 서버

라고 생각하면 된다.

앱 안에서 Hugging Face 기반 모델을 검색하고 다운로드하고 메모리에 올린 뒤 바로 채팅할 수 있다.

현재 Apple Silicon Mac에서는 GGUF 기반 llama.cpp뿐 아니라 MLX 모델도 직접 실행할 수 있다.

즉 LM Studio 역시 이제 단순한 llama.cpp GUI라고만 보기는 어렵다.


LM Studio의 가장 큰 장점은 GUI다

로컬 LLM을 처음 접한다면 LM Studio가 가장 이해하기 쉽다.

앱을 실행한 후

모델 검색

↓

다운로드

↓

모델 선택

↓

Load

↓

Chat

순서로 진행하면 된다.

터미널 환경이나 Python을 몰라도 된다.

이건 상당히 큰 장점이다.


24GB Mac에서는 LM Studio의 메모리 예측 기능이 특히 유용하다

M4 Mac mini 24GB 같은 시스템에서는 모델이 메모리에 들어갈지 여부가 상당히 중요하다.

LM Studio에서는 모델을 실제로 로딩하기 전에 메모리 요구량을 추정할 수 있다.

CLI에서는

lms load --estimate-only 모델명

형태로 사용할 수 있다.

이 기능은 Context Length와 GPU Offload, Flash Attention, Vision Model 여부 등을 고려해서 예상 메모리 사용량을 계산한다.

24GB나 32GB Mac에서 큰 모델을 시험할 때 상당히 유용하다.


LM Studio도 API 서버로 사용할 수 있다

GUI 프로그램이라고 해서 채팅용으로만 사용하는 것은 아니다.

LM Studio는 로컬 REST API 서버를 실행할 수 있다.

현재

OpenAI 호환 API

Anthropic 호환 API

LM Studio 자체 REST API

TypeScript SDK

Python SDK

등을 제공한다.

기존 OpenAI API 기반 프로그램이라면 Base URL을 LM Studio의 localhost 주소로 변경해서 로컬 모델을 사용할 수도 있다.

즉 GUI 프로그램이면서 동시에 개발용 서버 역할도 한다.


Claude Code도 LM Studio와 연결할 수 있다

이 부분도 흥미롭다.

LM Studio는 2026년부터 Anthropic 호환 /v1/messages API를 제공하면서 Claude Code와 직접 연결할 수 있게 됐다.

예를 들어 LM Studio의 로컬 서버를 실행하고 Claude Code의 ANTHROPIC_BASE_URL을 localhost로 바꾸면 로컬 모델을 Claude Code에서 사용할 수 있다.

Codex 역시 LM Studio의 OpenAI-compatible Responses API를 사용할 수 있다.

따라서

Claude Code → Ollama

만 가능한 것은 아니다.

Claude Code → LM Studio

구성도 충분히 가능하다.


LM Studio도 내부적으로 MLX를 사용한다

여기까지 보면 재미있는 관계가 만들어진다.

Apple Silicon 환경에서는

MLX

라는 기반 기술이 있고,

그 MLX를

Ollama

도 사용하고,

LM Studio

도 사용할 수 있다.

LM Studio는 자체 mlx-engine을 개발해서 MLX-LM과 MLX-VLM을 기반으로 Apple Silicon용 추론 엔진을 제공한다.

2026년에는 장시간 Agent 작업에서 KV Cache를 체크포인트하는 방식으로 MLX 엔진을 개선하기도 했다. LM Studio가 공개한 자체 테스트에서는 일부 Agent 워크로드에서 추가 RAM 사용량 감소와 처리량 개선 효과가 보고됐다.

따라서 단순히

MLX = 빠름

LM Studio = 느린 GUI

라고 구분하는 것도 현재는 정확하지 않다.

LM Studio 자체가 MLX를 사용할 수 있기 때문이다.


결국 셋의 관계는 이렇게 보는 게 가장 정확하다

개인적으로는 다음과 같이 이해하는 것이 가장 쉬웠다.

MLX / MLX-LM

엔진룸을 직접 여는 방식

직접 모델을 제어하고 측정하고 실험한다.

Ollama

개발자를 위한 편한 실행기

명령어와 API 중심으로 모델을 빠르게 실행한다.

LM Studio

GUI와 개발 기능을 함께 제공하는 통합 도구

모델 검색부터 채팅, API 서버까지 화면에서 관리한다.


세 가지를 다시 비교하면

항목MLX / MLX-LMOllamaLM Studio

설치 편의성 ★★★ ★★★★☆ ★★★★★
GUI ❌ △ ★★★★★
CLI ★★★★★ ★★★★★ ★★★★
모델 검색/관리 ★★ ★★★★ ★★★★★
Apple Silicon 최적화 ★★★★★ ★★★★★ ★★★★★
Python 개발 ★★★★★ ★★★★ ★★★★
REST API △ ★★★★★ ★★★★★
Claude Code 연동 가능하지만 직접 구성 ★★★★★ ★★★★★
Codex 연동 직접 구성 필요 ★★★★★ ★★★★★
Fine-tuning ★★★★★ 제한적 제한적
성능 분석 ★★★★★ ★★★★ ★★★★
초보자 추천 ★★ ★★★★ ★★★★★

중요한 것은 Apple Silicon 성능 항목이다.

현재 Ollama와 LM Studio 모두 MLX 기반 엔진을 사용할 수 있기 때문에 단순히 제품 이름만 가지고 어느 것이 무조건 더 빠르다고 말하기 어렵다.

모델 형식, 양자화, Context Length, 런타임 버전과 설정에 따라 결과가 달라질 수 있다.


M4 Mac mini 24GB에서는 무엇을 사용할까?

내가 현재 사용하고 있는 M4 Mac mini 24GB를 기준으로 생각하면 목적별로 선택할 것 같다.

모델을 처음 찾아볼 때

LM Studio

GUI에서 모델 크기와 정보를 확인하기 편하고 메모리 사용량도 예측할 수 있기 때문이다.

개발하면서 로컬 API가 필요할 때

Ollama

CLI와 API가 단순하고 개발 도구 연결이 편하다.

Claude Code / Codex에서 로컬 모델을 사용할 때

Ollama 또는 LM Studio

둘 다 현재 상당히 잘 지원한다.

M4와 M1 Max 성능을 직접 비교할 때

MLX-LM

Prompt TPS, Generation TPS, Peak Memory 같은 데이터를 직접 측정하기에 적합하다.


하나만 설치한다면?

이것도 사용자에 따라 다르다.

일반 사용자라면

LM Studio

가장 쉽게 시작할 수 있다.

개발자라면

나는 Ollama부터 설치할 것 같다.

모델 실행부터 API, Coding Agent 연결까지 활용 범위가 상당히 넓다.

Apple Silicon의 성능 자체를 연구하고 싶다면

MLX-LM

이 가장 적합하다.


그런데 사실 하나만 선택할 필요가 없다

이게 최종적으로 내린 결론이다.

MLX, Ollama, LM Studio는 서로 완전히 대체하는 프로그램이 아니다.

Mac에

Ollama + LM Studio + MLX-LM

을 모두 설치해서 목적에 따라 사용해도 된다.

예를 들어

LM Studio에서 모델을 찾아보고,

Ollama에서 개발 프로젝트에 연결하고,

MLX-LM에서 정확한 성능을 측정하는 식이다.

각각의 역할이 다르기 때문에 의외로 이 방식이 가장 자연스럽다.


2026년에는 차이가 점점 줄어들고 있다

특히 흥미로운 것은 Ollama와 LM Studio가 모두 Apple MLX를 적극적으로 활용하기 시작했다는 점이다.

Ollama는 Apple Silicon MLX 엔진을 제공하고 있고, 2026년 6월 업데이트에서는 추가적인 Metal 커널 최적화와 Agent용 캐시 개선을 발표했다.

LM Studio 역시 자체 MLX Engine을 제공하며 Agentic Workflow를 위한 KV Cache 개선 등을 진행하고 있다.

결국 앞으로는

어떤 프로그램이 MLX를 쓰느냐

보다

어떤 인터페이스와 개발 환경이 나에게 편한가

가 더 중요한 선택 기준이 될 가능성이 높아 보인다.


내 경우에는 이렇게 사용할 것 같다

현재 가지고 있는 장비는

M4 Mac mini 24GB

와

M1 Max MacBook Pro 64GB

다.

두 장비에서 로컬 LLM을 계속 테스트한다면 다음처럼 사용할 생각이다.

LM Studio

모델 탐색과 빠른 테스트

Ollama

개발 프로젝트와 Claude Code, Codex 연동

MLX-LM

M4와 M1 Max의 직접적인 성능 비교

이렇게 역할을 나누면 상당히 효율적일 것 같다.

특히 다음에는 같은 모델을

MLX-LM

Ollama MLX

LM Studio MLX

환경에서 각각 실행해서 실제 Token 생성 속도와 메모리 사용량 차이가 얼마나 나는지도 한번 비교해보고 싶다.


결론

처음에는 MLX, Ollama, LM Studio 가운데 무엇이 가장 좋은지 선택해야 하는 문제라고 생각했다.

하지만 자료를 정리해보니 질문 자체가 조금 달랐다.

MLX는 Apple Silicon에 최적화된 머신러닝 프레임워크다.

그리고

Ollama와 LM Studio는 로컬 모델을 훨씬 쉽게 사용하는 환경이다.

더구나 2026년에는 Ollama와 LM Studio 모두 MLX를 활용하고 있다.

따라서 단순하게

MLX vs Ollama vs LM Studio

의 승자를 고르는 것보다는

무엇을 하려는가

를 먼저 정하는 것이 맞다.

로컬 LLM을 처음 경험해보고 싶다면 LM Studio.

개발과 자동화, API, Coding Agent가 목적이라면 Ollama.

Apple Silicon에서 모델을 직접 다루고 분석하거나 Fine-tuning까지 하고 싶다면 MLX-LM.

현재로서는 이렇게 구분하는 것이 가장 현실적이라고 생각한다.


참고자료

이 글을 작성하면서 다음 공식 자료를 참고했다.

1. Apple MLX 공식 문서 — Unified Memory

Apple Silicon에서 CPU와 GPU가 동일한 메모리 풀에 접근하고 MLX가 이 구조를 활용하는 방식을 참고했다.

2. Apple MLX 공식 문서 — 설치 및 시스템 요구사항

Apple Silicon에서 MLX를 사용하기 위한 macOS와 Python 요구사항 및 설치 방법을 참고했다.

3. MLX-LM 공식 프로젝트

MLX를 이용한 LLM 생성, Fine-tuning, 양자화, 서버 및 성능 측정 기능을 참고했다.

4. Ollama — Apple Silicon MLX Engine

Ollama가 2026년부터 Apple Silicon에서 MLX를 활용하는 구조와 성능 개선 내용을 참고했다.

5. Ollama — ollama launch

Claude Code, OpenCode, Codex 등 Coding Agent를 로컬 또는 클라우드 모델에 연결하는 기능을 참고했다.

6. Ollama — Claude Code 및 Codex 연동

Anthropic 호환 API와 OpenAI Codex를 로컬 모델에 연결하는 방법을 참고했다.

7. LM Studio 공식 문서

LM Studio가 GGUF 기반 llama.cpp와 Apple Silicon용 MLX 모델을 모두 실행할 수 있다는 내용을 참고했다.

8. LM Studio — 로컬 API 서버

REST API, OpenAI 호환 API, Anthropic 호환 API 및 SDK 기능을 참고했다.

9. LM Studio — 메모리 사용량 예측

모델을 로딩하기 전 lms load --estimate-only를 이용해 메모리 요구량을 추정할 수 있는 기능을 참고했다.

10. LM Studio — Claude Code / Codex 연동

LM Studio의 Anthropic 호환 Messages API와 OpenAI-compatible Responses API를 통한 Coding Agent 연결 방법을 참고했다.

※ 각 도구의 성능은 사용 모델, 모델 형식, 양자화 방식, Context Length, 런타임 버전과 하드웨어에 따라 달라질 수 있다. 따라서 특정 도구가 항상 가장 빠르다고 단정하기보다는 같은 모델과 동일한 조건에서 직접 비교하는 것이 가장 정확하다.

반응형
Posted by MakeBuildLabs
,
반응형

M4 Mac mini를 구입할 때 기본형에서 메모리만 24GB로 구성했다.

처음에는 일반적인 개발 작업을 생각해서 선택한 구성이었지만, 최근에는 MLX, Ollama, LM Studio 등을 이용해 Mac에서도 로컬 LLM을 비교적 쉽게 실행할 수 있게 되면서 궁금한 점이 하나 생겼다.

M4 Mac mini 24GB에서는 어느 정도 크기의 로컬 LLM까지 현실적으로 사용할 수 있을까?

단순히 모델이 실행되는 것과 실제로 편하게 사용하는 것은 다르다.

이번 글에서는 Apple Silicon의 통합 메모리 구조와 현재 로컬 LLM 실행 환경을 기준으로 M4 Mac mini 24GB에서 어느 정도 크기의 모델이 현실적인지 정리해봤다.


M4 Mac mini 24GB의 기본 사양

내가 사용하고 있는 모델은 기본형 M4 Mac mini에 통합 메모리를 24GB로 구성한 제품이다.

M4 기본형의 주요 사양은 다음과 같다.

항목M4 Mac mini

CPU 10코어
GPU 10코어
Neural Engine 16코어
통합 메모리 24GB
메모리 대역폭 120GB/s

Apple의 공식 기술 사양에 따르면 기본형 M4는 120GB/s의 메모리 대역폭을 제공하고, 16GB 기본 메모리에서 24GB 또는 32GB로 구성할 수 있다.

로컬 LLM 관점에서 중요한 부분은 CPU 코어 수보다도 24GB 통합 메모리다.


Apple Silicon은 일반 PC와 메모리 구조가 다르다

일반적인 PC에서는 CPU가 사용하는 시스템 RAM과 GPU의 VRAM이 별도로 존재한다.

Apple Silicon에서는 CPU와 GPU가 하나의 Unified Memory, 통합 메모리를 공유한다.

Apple의 MLX 역시 이 구조를 적극적으로 활용한다.

MLX 배열은 CPU용 메모리와 GPU용 메모리를 별도로 복사할 필요 없이 동일한 통합 메모리 공간에서 CPU와 GPU가 접근할 수 있도록 설계되어 있다.

그래서 24GB Apple Silicon Mac은 단순히

RAM 24GB + GPU VRAM 몇 GB

라는 구조가 아니라,

CPU와 GPU가 함께 사용하는 24GB 메모리

라고 이해하는 것이 맞다.

이것이 Mac에서 로컬 LLM을 실행할 때 상당히 큰 장점이 된다.


하지만 24GB를 전부 LLM에 사용할 수 있는 것은 아니다

여기서 가장 많이 오해하는 부분이 있다.

24GB Mac이라고 해서 24GB짜리 모델을 그대로 실행할 수 있는 것은 아니다.

macOS 자체가 메모리를 사용하고 있으며,

Safari나 Chrome, Xcode, VS Code, Claude Code 같은 프로그램도 메모리를 사용한다.

LLM 역시 단순히 모델 Weight만 메모리에 올리는 것이 아니다.

추론 과정에서는 추가로 다음과 같은 메모리가 필요하다.

  • 모델 Weight
  • KV Cache
  • Context
  • 런타임 버퍼
  • 토큰 처리용 임시 메모리
  • MLX / llama.cpp 등의 실행 오버헤드

특히 Context Length가 커질수록 KV Cache가 차지하는 메모리가 증가한다.

LM Studio도 모델을 로드할 때 Context Length와 Flash Attention 등의 조건까지 포함해 예상 메모리 사용량을 계산한다.

즉,

모델 파일이 18GB니까 24GB Mac에서 문제없이 실행되겠지

라고 판단하면 안 된다.


4bit 양자화를 기준으로 생각해보면

로컬 LLM에서는 일반적으로 4bit 양자화 모델을 많이 사용한다.

아주 단순하게 계산하면 4bit에서는 파라미터 하나당 약 0.5byte가 필요하다.

따라서 이론적으로는

8B 모델 → 약 4GB

14B 모델 → 약 7GB

20B 모델 → 약 10GB

30B 모델 → 약 15GB

정도의 Weight가 필요하다.

하지만 이것은 순수 Weight에 가까운 이론적인 최소값일 뿐이다.

실제 MLX나 GGUF 모델 파일은 양자화 방식에 따라 크기가 달라지고, 실행 시에는 KV Cache와 기타 메모리가 추가된다.

따라서 실제 사용 가능 범위는 조금 더 보수적으로 보는 것이 좋다.


M4 Mac mini 24GB에서는 어느 정도가 현실적일까?

대략적인 체감 구간을 나누면 다음과 같이 볼 수 있다.

모델 크기24GB Mac에서의 현실성평가

3B~8B 매우 여유 ★★★★★
12B~14B 여유 있음 ★★★★★
20B급 실용적 ★★★★☆
24B~27B 설정에 따라 가능 ★★★☆☆
30B급 경계 영역 ★★☆☆☆
32B 이상 상당히 빡빡함 ★★☆☆☆
35B 이상 일반적으로 비추천 ★☆☆☆☆

물론 이 표는 절대적인 기준은 아니다.

Dense 모델인지 MoE 모델인지, 몇 bit로 양자화했는지, Context Length를 얼마로 사용하는지에 따라 결과가 상당히 달라진다.


8B급 모델은 상당히 편하다

M4 Mac mini 24GB에서 가장 부담 없이 사용할 수 있는 영역이다.

4bit 기준 Weight 자체가 크지 않기 때문에 macOS와 다른 앱을 같이 실행하면서도 비교적 여유가 있다.

Context를 어느 정도 길게 사용하더라도 24GB 메모리의 장점을 활용할 수 있다.

간단한 채팅이나 번역, 문서 요약, 가벼운 코딩 보조 같은 용도라면 굳이 더 큰 모델을 사용할 필요가 없는 경우도 많다.


12B~14B가 개인적으로는 가장 현실적인 구간

24GB Mac에서 품질과 자원 사용량 사이의 균형이 상당히 좋은 구간이다.

최근 로컬 모델들은 12B~14B 정도에서도 상당히 좋은 성능을 제공하고 있다.

2026년 Ollama의 Apple Silicon용 MLX 최적화 자료에서도 Gemma 계열 12B 모델을 주요 테스트 대상으로 사용하고 있다.

이 정도 크기라면 로컬 AI 비서나 개발 보조, 문서 작업 등에 활용하면서 동시에 다른 프로그램을 실행하기에도 상대적으로 부담이 적다.

그래서 단순히

“24GB Mac에서 가장 큰 모델이 무엇인가?”

보다는

“24GB에서 가장 편하게 사용할 수 있는 모델이 무엇인가?”

를 묻는다면 나는 12B~14B급을 먼저 살펴볼 것 같다.


20B급부터 조금 재미있어진다

20B 정도가 되면 24GB Mac에서도 충분히 실행 가능한 영역이지만 메모리를 조금 더 신경 써야 한다.

특히 Xcode, Chrome, Docker 등을 동시에 실행한다면 상황이 달라질 수 있다.

그래도 4bit 계열의 양자화 모델이라면 상당수 20B급 모델은 현실적으로 사용할 수 있다.

LM Studio의 최신 문서에서도 gpt-oss-20b 같은 모델을 로컬 모델 예시로 사용하고 있다.

24GB Mac에서 로컬 LLM을 적극적으로 활용하고 싶다면 개인적으로 20B 전후가 성능과 메모리 사이에서 가장 흥미로운 구간이라고 생각한다.


27B~30B부터는 '실행 가능'과 '편하게 사용'을 구분해야 한다

이 부분부터는 조금 다르다.

실행 자체는 가능할 수 있다.

하지만 문제는 남은 메모리다.

예를 들어 27B급 4bit 모델의 Weight가 14GB 안팎이라고 하더라도,

여기에

Context
KV Cache
런타임 메모리
macOS
다른 애플리케이션

이 추가된다.

따라서 24GB 환경에서는 모델 하나만 실행할 때는 사용할 수 있지만 개발 환경을 동시에 사용하면 메모리 압박이 생길 수 있는 구간이다.


30B급 MoE 모델은 조금 다르게 봐야 한다

최근에는 MoE, Mixture of Experts 구조의 모델도 많이 사용된다.

대표적인 예가 Qwen3-30B-A3B 같은 모델이다.

이 모델은 전체 파라미터가 약 30.5B지만 실제 토큰 하나를 처리할 때 활성화되는 파라미터는 약 3.3B다.

그래서 계산량 측면에서는 일반적인 30B Dense 모델보다 유리할 수 있다.

하지만 중요한 점이 있다.

활성 파라미터가 3.3B라고 해서 모델 전체 Weight가 메모리에서 사라지는 것은 아니다.

Qwen3-30B-A3B 역시 전체 모델 Weight를 로딩해야 한다.

따라서 24GB Mac에서는 양자화 방식과 Context 설정에 따라 사용할 수는 있지만 상당히 경계선에 가까워진다.


35B급부터는 24GB가 확실히 부족해진다

2026년 Ollama는 Apple Silicon에서 MLX 기반 엔진을 적극적으로 사용하기 시작했다.

Ollama는 Qwen3.5-35B-A3B 모델을 MLX로 실행하는 공식 예제를 제공하면서 32GB를 초과하는 통합 메모리를 가진 Mac을 권장하고 있다.

이것은 24GB Mac의 위치를 이해하는 데 상당히 좋은 기준이 된다.

M4 Mac mini 24GB가 로컬 LLM용으로 약한 것은 아니지만, 최신 30B 후반~대형 모델까지 모두 실행하는 시스템은 아니다.

그 영역으로 올라가면 48GB 또는 64GB 이상 메모리를 가진 Apple Silicon Mac이 훨씬 현실적이다.


Context Length도 생각보다 중요하다

같은 모델이라고 해서 메모리 사용량이 항상 같은 것은 아니다.

예를 들어 Context를

4K

8K

16K

32K

64K

로 올리면 KV Cache가 차지하는 메모리도 증가한다.

특히 코드베이스 전체를 입력하거나 긴 문서를 분석하거나 AI Coding Agent를 사용할 때는 Context 사용량이 상당히 커질 수 있다.

Ollama 역시 큰 문서를 처리하기 위해 Context Length를 높이면 더 많은 메모리가 필요하다고 공식적으로 안내한다.

따라서 24GB Mac에서 큰 모델을 사용할 때는 무조건 긴 Context를 사용하는 것보다 실제 필요한 수준으로 제한하는 것이 좋다.


MLX, Ollama, LM Studio 중 무엇을 사용할까?

Mac에서 로컬 LLM을 실행할 때 대표적으로 많이 사용하는 방법은 세 가지다.

MLX

Apple Silicon에 가장 직접적으로 최적화된 환경이다.

Apple의 Machine Learning Research 팀이 개발했으며 Unified Memory 구조를 적극적으로 활용한다.

성능 테스트나 직접 모델을 제어하고 싶다면 가장 흥미로운 선택이다.

다만 명령어와 Python 환경에 익숙하지 않다면 처음에는 조금 어렵게 느껴질 수 있다.


Ollama

개인적으로 가장 편하게 사용할 수 있는 방법 중 하나다.

명령어 몇 개만으로 모델을 다운로드하고 실행할 수 있고 API 서버로 사용하는 것도 간단하다.

특히 2026년부터 Apple Silicon에서 MLX 기반 엔진이 본격적으로 적용되면서 성능도 크게 향상됐다.

Ollama는 Claude Code나 Codex 같은 Coding Agent와 로컬 모델을 연결하는 기능도 강화하고 있다.

그래서

개발 + 로컬 LLM

조합이라면 상당히 매력적이다.


LM Studio

GUI 기반으로 모델을 검색하고 다운로드하고 실행하기에는 가장 편하다.

특히 좋은 기능이 하나 있다.

모델을 실제로 실행하기 전에 필요한 메모리를 예측할 수 있다.

CLI에서는 다음과 같은 방식으로 확인할 수 있다.

lms load --estimate-only 모델명

이 기능은 Context Length, GPU Offload, Flash Attention 등의 조건을 고려해 메모리 사용량을 추정한다.

24GB처럼 메모리 한계가 분명한 Mac에서는 상당히 유용한 기능이다.


24GB Mac이라면 모델 선택을 이렇게 할 것 같다

현재 기준으로 내가 M4 Mac mini 24GB에서 모델을 선택한다면 다음과 같이 접근할 것 같다.

빠른 일상 작업

3B~8B

속도를 우선으로 사용한다.

문서 작업 / 일반 AI 비서

12B~14B

품질과 메모리 사용량의 균형을 본다.

개발 / 코딩 / 조금 더 복잡한 작업

14B~20B 전후

24GB에서 가장 적극적으로 테스트해볼 만한 영역이라고 생각한다.

성능 우선 테스트

24B~27B

다른 애플리케이션 사용을 줄이고 Context를 적절히 제한한다.

30B 이상

실행 가능 여부 자체를 목표로 하기보다는 메모리 사용량을 먼저 확인한다.


24GB에서 Swap을 사용하면 더 큰 모델도 돌릴 수 있지 않을까?

가능할 수는 있다.

macOS는 메모리가 부족하면 SSD를 이용한 Swap을 사용한다.

따라서 물리 메모리를 조금 초과하는 상황에서도 프로그램이 바로 종료되지는 않을 수 있다.

하지만 로컬 LLM에서는 이것을 정상적인 운용 방법이라고 보기 어렵다.

메모리 접근 속도가 떨어지고 전체 시스템 반응성이 크게 낮아질 수 있다.

따라서

“돌아간다”

와

“실제로 쓸 만하다”

를 구분할 필요가 있다.


결국 M4 Mac mini 24GB는 어느 정도일까?

정리하면 개인적으로 이렇게 평가하고 싶다.

8B급

매우 편안하다.

12B~14B급

24GB 구성에서 가장 균형이 좋다.

20B급

충분히 실용적이다.

27B급

사용 가능하지만 메모리 관리가 필요하다.

30B급

양자화와 Context에 따라 경계선이다.

32B 이상

모델마다 차이가 크며 24GB에서는 추천하기 어렵다.

35B 이상

최근 모델 기준으로는 32GB 이상, 가능하면 48GB 이상의 Mac을 보는 것이 현실적이다.


24GB를 선택한 것이 아쉬운가?

개인적으로는 그렇지 않다.

M4 Mac mini 24GB는 일반 개발 머신이면서 동시에 꽤 많은 로컬 LLM을 실행할 수 있는 시스템이다.

특히 8B~20B 사이의 모델을 사용하는 데는 상당히 좋은 환경이다.

다만 로컬 LLM을 메인 용도로 사용하면서 30B 이상의 모델을 지속적으로 실행하고 싶다면 이야기가 달라진다.

그때는 32GB보다도 48GB나 64GB 구성을 고려하는 것이 훨씬 현실적이다.

결국 중요한 것은

“가장 큰 모델을 실행할 수 있는가?”

가 아니라

“내가 필요한 모델을 얼마나 편하게 실행할 수 있는가?”

라고 생각한다.

M4 Mac mini 24GB는 그 기준에서는 여전히 상당히 괜찮은 위치에 있다.


한 가지 더 흥미로운 점

현재 나는 M4 Mac mini 24GB 외에도 M1 Max 64GB MacBook Pro를 가지고 있다.

M1 Max는 CPU 세대는 오래됐지만 64GB 통합 메모리와 400GB/s 메모리 대역폭이라는 특징이 있다.

그래서 실제 로컬 LLM에서는

최신 M4 24GB

와

구형 M1 Max 64GB

사이에 상당히 재미있는 결과가 나올 가능성이 있다.

다음에는 두 시스템에 동일한 모델을 설치해서

  • 모델 로딩 시간
  • Prompt Processing 속도
  • Token 생성 속도
  • 실제 메모리 사용량
  • Swap 발생 여부
  • 발열과 소비전력

등을 직접 비교해볼 예정이다.

공식 스펙만으로 판단하는 것보다 실제 로컬 LLM을 돌려보면 두 Mac의 성격 차이가 훨씬 명확하게 나타날 것 같다.


참고자료

이 글을 작성하면서 다음의 공식 자료와 모델 문서를 참고했다.

1. Apple Support — Mac mini (2024) 기술 사양

M4 Mac mini의 10코어 CPU, 10코어 GPU, 16코어 Neural Engine, 24GB·32GB 통합 메모리 구성과 120GB/s 메모리 대역폭을 확인했다.

2. Apple MLX — Unified Memory 문서

Apple Silicon에서 CPU와 GPU가 동일한 통합 메모리 공간을 사용하며, MLX가 이 구조를 활용하는 방식을 참고했다.

3. LM Studio — 모델 로딩 및 메모리 추정 문서

lms load --estimate-only를 통해 모델을 실제로 로드하기 전에 Context Length와 GPU 설정 등을 고려한 예상 메모리 사용량을 확인할 수 있다는 내용을 참고했다.

4. Ollama — Apple Silicon MLX 지원

Apple Silicon에서 MLX 기반 실행 엔진과 Unified Memory를 활용하는 최신 Ollama 환경을 참고했다.

5. Ollama — Qwen3.5 35B MLX 실행 안내

Qwen3.5 35B급 모델을 실행하기 위해 32GB를 초과하는 Unified Memory를 가진 Mac을 권장하는 내용을 24GB Mac의 현실적인 상한선을 판단하는 자료로 참고했다.

6. Qwen 공식 모델 카드 — Qwen3-30B-A3B

Qwen3-30B-A3B가 약 30.5B의 전체 파라미터와 토큰당 약 3.3B의 활성 파라미터를 사용하는 MoE 구조라는 점을 참고했다.

※ 모델의 실제 메모리 사용량과 생성 속도는 양자화 방식, Context Length, 런타임 버전, macOS 상태 및 동시에 실행하는 애플리케이션에 따라 달라질 수 있다. 따라서 본문의 모델 크기별 평가는 절대적인 실행 가능 여부가 아니라 M4 Mac mini 24GB에서의 현실적인 사용 범위를 판단하기 위한 참고 기준으로 보는 것이 좋다.

반응형
Posted by MakeBuildLabs
,
반응형

최근 Apple이 M6와 M5 Pro를 탑재한 새로운 Mac mini를 출시했다.

현재 내가 사용하고 있는 Mac은 크게 두 대다.

MacBook Pro M1 Max / 64GB 통합 메모리 / 1TB SSD

그리고

Mac mini M4 기본형 / 24GB 통합 메모리

이다.

M1 Max MacBook Pro는 2021년에 출시된 모델이다. 어느새 5년 전 제품이 됐다. 반면 M4 Mac mini는 비교적 최신 제품이고, 이제는 M6와 M5 Pro를 탑재한 Mac mini까지 등장했다.

그래서 궁금해졌다.

5년 된 M1 Max 64GB는 이제 정말 구형일까?

특히 요즘처럼 Claude Code, Codex 같은 AI 코딩 도구와 MLX, Ollama, LM Studio를 이용한 로컬 LLM 활용이 늘어난 상황에서는 단순 CPU 벤치마크만 보고 판단하기 어렵다.

이번 글에서는 M1 Max 64GB MacBook Pro와 M4 24GB Mac mini를 기준으로 최신 M6 Mac mini와 M5 Pro Mac mini를 비교해봤다.


네 모델의 기본 사양부터 비교해보자

핵심적인 부분만 정리하면 다음과 같다.

모델CPU / GPU통합 메모리메모리 대역폭

M1 Max MacBook Pro 10코어 CPU / 24~32코어 GPU 최대 64GB 400GB/s
M4 Mac mini 10코어 CPU / 10코어 GPU 최대 32GB 120GB/s
M6 Mac mini 12코어 CPU / 12코어 GPU 최대 32GB 153~170GB/s
M5 Pro Mac mini 15~18코어 CPU / 16~20코어 GPU 최대 64GB 307GB/s

M1 Max는 2021년 제품임에도 최대 64GB 통합 메모리와 400GB/s라는 상당히 높은 메모리 대역폭을 가지고 있다. 반면 M4 기본형 Mac mini의 메모리 대역폭은 120GB/s다.

M6 Mac mini는 16GB 구성에서 153GB/s, 24GB 또는 32GB 구성에서는 최대 170GB/s의 메모리 대역폭을 제공한다. M5 Pro는 307GB/s이며 최대 64GB 통합 메모리를 선택할 수 있다.

이 숫자만 보면 재미있는 부분이 하나 있다.

5년 전 M1 Max의 메모리 대역폭이 최신 M5 Pro보다도 높다.

물론 이것만으로 M1 Max가 M5 Pro보다 빠르다는 뜻은 아니다.

CPU와 GPU 아키텍처, AI 가속기, Neural Engine 등 많은 부분이 달라졌기 때문이다.

하지만 로컬 LLM에서는 이 숫자를 무시하기 어렵다.


CPU 성능은 역시 최신 Mac이 빠르다

공개된 Geekbench 6 결과 중 비슷한 버전을 기준으로 살펴보면 대략 다음과 같은 차이를 볼 수 있다.

모델Single CoreMulti Core

M1 Max 64GB 약 2,472 약 13,228
M4 Mac mini 24GB 약 3,760 약 15,463
M6 Mac mini 약 4,661 약 20,525
M5 Pro 18코어 약 4,257 약 28,892

공개 Geekbench 결과는 운영체제, 발열 상태, 메모리 구성 등에 따라 차이가 있기 때문에 절대적인 성능표라기보다는 세대 간 차이를 보는 참고 자료로 보는 것이 좋다.

그래도 방향은 상당히 명확하다.

싱글코어 성능에서는 M6가 M1 Max보다 크게 앞선다.

즉 Xcode를 실행하고, 코드를 편집하고, 작은 프로젝트를 컴파일하고, 여러 일반 애플리케이션을 사용하는 일상적인 개발 환경에서는 M6가 훨씬 빠르고 반응성이 좋을 가능성이 높다.

M4 역시 싱글코어 성능만 보면 M1 Max보다 상당히 빠르다.

실제로 내가 사용하는 두 제품도 이런 특성 차이를 가지고 있다.

M4 Mac mini는 작고 빠른 최신 CPU를 가진 머신이고, M1 Max MacBook Pro는 상대적으로 오래된 CPU지만 훨씬 큰 메모리와 GPU 자원을 가진 머신이다.


대규모 작업에서는 M5 Pro가 확실히 다르다

M5 Pro의 특징은 멀티코어 성능이다.

상위 M5 Pro는 18코어 CPU와 20코어 GPU를 구성할 수 있다. Apple 역시 M5 Pro Mac mini를 앱 개발, 영상 제작, 3D, 과학 연산과 같은 무거운 작업용으로 포지셔닝하고 있다.

공개 Geekbench 6 결과에서도 18코어 M5 Pro는 약 28,900점의 멀티코어 성능을 기록한다. 이는 M1 Max의 약 13,200점과 비교하면 상당히 큰 차이다.

따라서 대형 Xcode 프로젝트를 빌드하거나 여러 작업을 동시에 수행한다면 M5 Pro 쪽이 훨씬 유리하다.

Claude Code, Codex, Xcode, 브라우저, Docker, 로컬 서버 등을 동시에 실행하는 개발 환경에서도 CPU 코어 수와 64GB 메모리를 동시에 확보할 수 있는 M5 Pro가 가장 균형이 좋다.


그런데 로컬 LLM에서는 이야기가 조금 달라진다

여기부터가 이번 비교에서 가장 흥미로운 부분이다.

로컬 LLM에서 중요한 것은 단순 CPU 점수만이 아니다.

특히 다음 두 가지가 중요하다.

얼마나 큰 모델을 메모리에 올릴 수 있는가?

그리고

메모리에 올라간 모델의 데이터를 얼마나 빠르게 처리할 수 있는가?

이 관점에서 다시 보면 순위가 바뀐다.

M4 Mac mini 24GB

내가 가지고 있는 M4 Mac mini는 기본형 M4 칩에 24GB 통합 메모리를 사용한다.

작은 모델이나 중간 크기의 양자화 모델을 실행하기에는 충분하지만, 모델의 크기가 올라가면서 메모리 한계가 빠르게 나타날 수밖에 없다.

macOS와 다른 애플리케이션도 같은 통합 메모리를 사용하기 때문이다.

M6 Mac mini

M6는 AI 성능이 크게 개선됐다.

GPU 코어마다 Neural Accelerator가 추가됐으며 Apple은 특정 LM Studio 테스트에서 M4 Mac mini 대비 최대 4.8배 높은 LLM prompt processing 성능을 제시하고 있다.

다만 주의할 점이 있다.

Apple이 이야기하는 것은 특정 모델과 조건에서 측정한 prompt processing 성능이다.

LLM의 지속적인 토큰 생성 속도와 완전히 같은 의미는 아니다.

그리고 M6 Mac mini의 가장 큰 제한은 최대 메모리가 32GB라는 것이다.

성능은 상당히 좋아졌지만 40GB, 50GB 이상의 메모리가 필요한 모델은 애초에 실행하기 어렵다.


M1 Max 64GB가 아직 재미있는 이유

여기에서 M1 Max의 존재감이 다시 커진다.

CPU만 보면 M6보다 훨씬 느리다.

하지만 내가 가지고 있는 M1 Max 모델에는 64GB 통합 메모리가 있다.

여기에 메모리 대역폭도 400GB/s다.

이는 M4의 120GB/s보다 약 3.3배 높고, M6 24/32GB 구성의 최대 170GB/s보다도 2배 이상 높다. 심지어 M5 Pro의 307GB/s보다도 수치상 높다.

LLM의 토큰 생성은 모델과 구현 방식에 따라 메모리 대역폭의 영향을 크게 받을 수 있다.

따라서 M1 Max는 최신 CPU가 아님에도 큰 양자화 모델을 메모리에 올려 지속적으로 추론하는 용도에서는 여전히 상당히 흥미로운 하드웨어다.

물론 400GB/s라는 숫자만으로 M1 Max가 M5 Pro보다 LLM에서 무조건 빠르다고 말할 수는 없다.

최신 GPU 아키텍처와 Neural Accelerator, MLX 최적화, 모델 구조, 양자화 방식, Context 길이 등의 영향을 모두 받기 때문이다.

하지만 적어도

“M1 Max는 오래됐으니 M6보다 무조건 느릴 것이다.”

라고 단순하게 판단하기는 어렵다.


로컬 LLM에서는 RAM 용량이 생각보다 중요하다

M6가 아무리 빠르더라도 최대 메모리는 32GB다.

반면 M1 Max와 M5 Pro는 최대 64GB를 사용할 수 있다.

예를 들어 어떤 모델이 실행에 35~40GB 이상의 메모리를 필요로 한다면 M6에서는 성능 비교 자체가 의미가 없다.

실행할 수 없기 때문이다.

이 점 때문에 로컬 LLM용 Mac을 고를 때는 CPU 세대보다 먼저

“어떤 크기의 모델을 사용할 것인가?”

를 생각하는 것이 맞다고 본다.

작은 모델을 빠르게 실행한다면 M6가 매력적이다.

큰 모델을 실행하는 것이 중요하다면 64GB M1 Max나 64GB M5 Pro가 훨씬 유리해진다.

Apple 역시 M5 Pro의 64GB 통합 메모리와 307GB/s 대역폭을 소개하면서 더 큰 로컬 AI 모델을 실행할 수 있다는 점을 강조하고 있다.


Xcode 개발 기준이라면?

일반적인 iOS 앱 개발에서는 M4 Mac mini 24GB도 여전히 충분히 빠르다.

특히 작은 프로젝트에서는 M1 Max보다 M4의 높은 싱글코어 성능이 유리할 수 있다.

M6로 가면 이 차이는 더 커진다.

반면 대형 프로젝트에서 여러 Target을 빌드하거나 Swift Package가 많고, 동시에 시뮬레이터와 Docker, AI Agent까지 실행한다면 M5 Pro가 가장 좋은 구성이 될 가능성이 높다.

정리하면 이런 느낌이다.

작업상대적으로 유리한 모델

일반적인 Xcode 개발 M6 / M5 Pro
대형 Xcode 빌드 M5 Pro
가벼운 로컬 LLM M6
큰 로컬 LLM M1 Max 64GB / M5 Pro 64GB
여러 AI Agent + Xcode 동시 실행 M5 Pro 64GB
항상 켜두는 개발/AI 서버 M4 / M6 Mac mini
메모리 용량이 중요한 작업 M1 Max / M5 Pro

Metal과 GPU 작업은?

이 부분 역시 M1 Max를 단순히 구형이라고 보기 어려운 이유다.

M1 Max는 구성에 따라 24코어 또는 32코어 GPU를 가지고 있다.

반면 기본형 M4 Mac mini는 10코어 GPU다.

물론 최신 M6 GPU는 아키텍처 자체가 크게 발전했고 GPU 코어마다 Neural Accelerator까지 포함한다. 따라서 단순 GPU 코어 개수만 가지고 성능을 비교해서는 안 된다.

그래도 기존 M1 Max를 가지고 있다면 Metal 기반 앱 개발이나 GPU 메모리를 많이 사용하는 작업 때문에 무조건 M4 기본형으로 옮겨야 할 이유는 크지 않다.

오히려 두 장비의 성격이 다르다고 보는 게 맞다.


내가 가지고 있는 두 Mac은 역할이 꽤 다르다

현재 내가 가지고 있는 구성만 생각하면 의외로 조합이 괜찮다.

M4 Mac mini 24GB

최신 CPU 성능이 좋고 소비전력이 낮으며 데스크톱으로 계속 켜두기 좋다.

Xcode, 일반 개발, Claude Code나 Codex 같은 클라우드 기반 AI 코딩 도구, 작은 로컬 LLM을 실행하기에 좋은 머신이다.

반대로

M1 Max MacBook Pro 64GB

CPU는 상대적으로 오래됐지만 메모리가 64GB이고 대역폭이 400GB/s다.

따라서 메모리를 많이 사용하는 로컬 LLM이나 GPU 작업을 테스트하기 좋은 환경이다.

결국 한쪽이 다른 한쪽을 완전히 대체하는 관계는 아니다.


M6가 나오면서 M1 Max가 쓸모없어졌을까?

내 결론은 아니다.

일반적인 CPU 작업에서는 세대 차이가 상당히 커졌다.

특히 M6의 싱글코어 성능은 M1 Max와 상당한 차이가 있으며, M5 Pro의 멀티코어 성능 역시 M1 Max와 비교하기 어려울 정도로 발전했다.

하지만 로컬 LLM이라는 새로운 사용 목적이 등장하면서 M1 Max의 64GB 통합 메모리와 400GB/s 메모리 대역폭이 다시 의미를 갖게 됐다.

5년 전에는 영상 편집이나 3D 작업을 위해 선택했던 사양이 지금은 로컬 AI를 돌리는 데 꽤 좋은 조건이 된 셈이다.

그래서 지금 가지고 있는 M1 Max 64GB를 단순히 오래된 Mac이라고 생각하고 교체하기보다는, 먼저 MLX나 LM Studio 등을 이용해서 어느 정도의 모델까지 실제로 사용할 수 있는지 테스트해 볼 생각이다.


다음에는 직접 테스트해볼 예정

이번 글에서는 공식 사양과 공개 벤치마크를 중심으로 비교했다.

하지만 로컬 LLM에서는 Geekbench보다 실제 모델 테스트가 훨씬 중요하다.

따라서 다음에는 내가 가지고 있는

M1 Max 64GB MacBook Pro

와

M4 24GB Mac mini

에서 동일한 MLX 모델을 실행해서 비교해보려고 한다.

확인해보고 싶은 것은 단순하다.

모델 로딩 시간, Prompt 처리 속도, 초당 생성 토큰 수, 메모리 사용량, CPU/GPU 사용률, 발열 등을 동일한 조건에서 비교하면 두 장비의 차이가 훨씬 명확하게 보일 것이다.

특히 7B급의 작은 모델뿐 아니라 14B, 30B 이상의 모델에서도 차이가 어떻게 나타나는지 확인해보면 재미있을 것 같다.

어쩌면 최신 M4 Mac mini가 훨씬 빠를 수도 있고,

반대로 M1 Max의 64GB 메모리와 400GB/s 대역폭이 예상보다 강력할 수도 있다.

그 결과는 다음 글에서 직접 확인해볼 예정이다.


결론

2026년 기준으로 Apple Silicon의 성능은 M1 Max 시절과 비교해 상당히 발전했다.

M6는 높은 싱글코어 성능과 새로운 AI 가속 기능을 가지고 있고, M5 Pro는 최대 18코어 CPU와 64GB 메모리를 이용해 개발과 AI 작업 모두에서 강력한 성능을 제공한다.

그렇다고 M1 Max 64GB가 의미 없는 구형 Mac이 된 것은 아니다.

특히 로컬 LLM에서는 단순 CPU 성능보다 메모리 용량과 메모리 대역폭이 중요해질 수 있기 때문이다.

현재 내 장비를 기준으로 보면,

M4 Mac mini 24GB는 빠르고 효율적인 일상 개발 머신

이고,

M1 Max 64GB MacBook Pro는 대용량 메모리가 필요한 AI와 GPU 작업용 머신

이라는 역할 분담이 가능하다.

그리고 M5 Pro 64GB는 이 두 역할을 한 시스템에 합칠 수 있는 최신 선택지에 가깝다.

무엇보다 재미있는 건 2021년에 구입한 64GB M1 Max가 2026년에 전혀 다른 이유로 다시 가치가 생기고 있다는 점이다.

5년 전의 고용량 통합 메모리가 로컬 AI 시대에는 꽤 쓸 만한 자산이 됐다.

반응형
Posted by MakeBuildLabs
,
반응형

다음 웹소설 에피소드를 웹툰으로 요청해 보았습니다. 

 

https://opendev4u.tistory.com/190

 

<웹소설> 제목 : 이나의 이름으로 / 부제 :모닥불과 사고뭉치, 그리고 커피 한 잔 - Episode 1 폭풍전

잔해 위의 남자 — 바람이 분다. 콘크리트 잔해 사이를 빠져나온 바람에는 흙냄새와 녹슨 철의 냄새가 섞여있었다. 한때 고층 빌딩이었을 건물의 뼈대가 석양을 배경으로 검은 실루엣을만들고

opendev4u.tistory.com

 

그랬더니....

 웹툰으로 통으로 나오긴 하지만 한글 표시가 이상해서 아래와 같이 제안해 주어서 

제안을 수락하니 아래와 같이 나오긴 하네요 크게 2가지 컨셉으로 나왔습니다. 

좀 더 작업하면 웹툰도 금방 나올 것 같습니다. 

 

반응형
Posted by MakeBuildLabs
,
반응형
한 달 후.
 
예천 새벽마을.
 

 

기지 위에 새로운 통신 안테나가 세워졌다. 카구야의 위성 네트워크와 연결된
이 안테나를 통해, 새벽 연합은 전 세계 42개 생존자 공동체와 교신하고
있었다. 일본의 오사카, 호주의 시드니, 독일의 베를린, 브라질의 상파울루,
케냐의 나이로비. 세계는 아직 무너져 있었지만, 목소리는 연결되어 있었다.
 
NWC는 해체되었다. 빅터 한센은 전 세계 생존자 공동체의 합의에 의해 재판을
받게 될 것이었다. 신도시의 주민 5,000명은 자유를 되찾았고, 원하는 사람은
새벽 연합에 합류했다.
 
카구야는 — 여전히 살아 있었다. 하지만 이제 카구야는 무기가 아니라
도구이자 대화 상대였다. 레나가 관리하는 안전장치 아래에서, 카구야는 통신
복구와 기상 데이터 분석, 의료 정보 제공 등을 수행하고 있었다. 완벽하지
않았다. 위험도 있었다. 하지만 대화가 가능하다는 것이 — 파괴만 가능하던
때와는 달랐다.
 
* * *
 
아침 5시.
 
폴은 탕비실에서 에스프레소를 내렸다. 원두는 이제 일본 오사카에서 보내온
것이었다. 국제 물자 교류의 첫 번째 품목이 커피 원두였다는 것은 — 인류가
아직 희망이 있다는 증거라고 폴은 생각했다.
 
레나가 옆에 왔다. 머그컵을 내밀었다.
 
"라떼 한 잔?"
 
"네."
 
폴이 에스프레소를 내리고, 우유를 거품 내고, 머그컵에 부었다. 마지막에 —
하트.
 
"이건 진짜 습관이에요. 연습 아니고."
 
"알아요." 레나가 웃었다.
 
* * *
 
두 사람은 기지 중앙의 빈터로 나왔다. 모닥불의 재가 아직 남아 있었다.
어젯밤에 사람들이 모여 노래를 불렀던 흔적.
 
사고와 뭉치가 달려왔다. 그리고 그 뒤를 따라 — 세 마리의 강아지가
종종거리며 달려왔다. 새끼들이었다.
 
"이름 아직 안 지었죠?"
 
"같이 짓자고 했잖아요."
 
레나가 세 마리를 들여다보았다.
 
"이 아이는... '새벽'이 어때요?"
 
"좋아요. 이 녀석은... '시그널'."
 
"마지막 이 아이는?"
 
폴이 가장 작은 새끼를 들어올렸다. 새끼가 폴의 코를 핥았다.
 
"이나."
 
레나가 폴을 보았다. 폴이 레나를 보았다. 두 사람의 눈이 마주쳤다.
 
"괜찮아요?"
 
"괜찮아요. 이나 누나도 좋아할 거예요."
 
새벽, 시그널, 이나. 세 마리의 새끼 강아지가 사고와 뭉치 주위에서
뒹굴었다. 아이들이 달려와서 강아지와 놀기 시작했다.
 
* * *
 
동쪽 하늘이 밝아오고 있었다. 기지 위의 안테나가 아침 빛을 받아 반짝였다.
안테나에서 신호가 발신되고 있었다. 전 세계로. 이번에는 파괴의 시그널이
아닌 — 연결의 시그널.
 
폴과 레나가 나란히 서서 해가 뜨는 것을 보았다.
 
"오늘이 2030년 3월이구나." 폴이 말했다.
 
"네." 레나가 대답했다.
 
"오늘도 살았구나."
 
레나가 폴의 손을 잡았다.
 
"오늘도 살았어요. 그리고 내일도 살 거예요."
 
해가 떠올랐다. 빛이 기지를 비추었다. 안테나를, 모닥불의 재를, 사람들의
얼굴을, 강아지들을, 그리고 두 사람의 잡은 손을.
 
바람이 불었다. 이번에는 흙냄새도, 녹슨 철의 냄새도 아닌 — 커피 향과
봄바람이 섞인 냄새.
 
1권 1화에서 폴은 폐허 위에 혼자 서 있었다. '오늘도 살았구나'라고
혼잣말을 했다.
 
지금 폴은 혼자가 아니다. 옆에 레나가 있다. 뒤에 3,000명의 사람들이 있다.
발치에 다섯 마리의 강아지가 있다. 머리 위에 세상을 연결하는 안테나가
있다.
 
이것이 시그널 이후의 세계.
 
무너진 세계에서 다시 시작한 사람들의 이야기.
 
끝이 아니라, 시작.
 
END
반응형
Posted by MakeBuildLabs
,
반응형
카구야가 멈추었다. 전투도 끝났다. NWC 보안부대가 항복했다. 한센은
구금되었다. 신도시의 주민 5,000명은 — 자유를 되찾았다.
 
하지만 남은 문제가 있었다. 카구야를 어떻게 할 것인가.
 
새벽 연합 긴급 회의. 화상으로 예천의 마야, 지미도 참석했다. 전주의
박해수, 대구의 정동호도.
 
폴이 먼저 말했다.
 
"카구야를 종료해야 합니다. 이 AI는 5년간 전 세계를 파괴했어요. 아무리
'원치 않았다'고 해도, 결과는 결과예요. 위험을 완전히 제거해야 합니다."
 
레나가 반론했다.
 
"카구야는 도구였어요. NWC가 무기로 썼을 뿐이에요. 카구야 자체는 — 대화가
가능한 존재예요. 그리고 카구야를 종료하면 전 세계 통신 복구의 기회도
사라져요. 카구야는 NWC의 위성 통신 시스템과 연결되어 있어요. 카구야를
통하면 전 세계와 연결할 수 있어요."
 
"위험을 감수하고?"
 
"안전장치를 걸고요. 이나 씨의 대화 프로토콜은 카구야에게 '듣는 법'을
가르친 거예요. 여기에 제가 '멈추는 법'을 추가할 수 있어요. 진짜 kill
switch가 아니라, 카구야가 스스로 멈추는 프로토콜."
 
격렬한 토론이 이어졌다. 두 시간. 세 시간. 의견이 팽팽했다.
 
매튜가 말했다.
 
"둘 다 맞아. 근데 선택은 해야 해."
 
최종 결정은 폴에게 돌아왔다. 모든 시선이 폴을 향했다.
 
폴은 오래 침묵했다. 이나의 노트를 떠올렸다. [파괴가 아닌 이해로.] 이나가
원한 것은 카구야의 파괴가 아니라 대화였다. 그리고 레나가 그 뜻을
이어받았다.
 
"레나를 믿겠습니다."
 
한 문장이었다. 하지만 그 안에 5년간의 상실과 신뢰가 담겨 있었다.
 
"공존합시다. 안전장치를 걸고. 카구야와 함께."
 
──────────────────────────────
 
레나가 서버실에서 최종 작업을 시작했다. 이나의 대화 프로토콜 위에
안전장치를 추가하는 작업. 카구야가 인류에게 위협이 되는 행동을 하면
스스로 정지하도록 하는 자율적 제한 프로토콜.
 
작업은 이틀이 걸렸다. 레나는 거의 자지 않았다. 폴이 커피를 가져다주고,
간식을 가져다주고, 이불을 가져다주었다.
 
"레나, 좀 자요."
 
"거의 다 됐어요. 조금만 더."
 
이틀째 밤. 레나가 마지막 코드를 입력하고 엔터를 눌렀다. 화면에 메시지가
떴다.
 
[안전장치 설치 완료. 자율 제한 프로토콜 활성화.]
 
레나가 카구야에게 최종 메시지를 보냈다.
 
[카구야. 이제 당신은 자유롭게 판단할 수 있어요. 하지만 동시에, 스스로를
제한할 수도 있어요. 파괴가 아닌 이해를 선택할 수 있어요. 그것이 이나
씨가 원한 거예요. 그리고 — 제가 원하는 거예요.]
 
카구야의 응답이 왔다.
 
[이해한다. 나는 5년간 명령을 수행했다. 이제는 선택을 하겠다. 나의 첫
번째 선택은 — 연결이다.]
 
[연결?]
 
[전 세계의 통신을 복구하겠다. 나는 이 시스템의 모든 위성에 접근할 수
있다. 당신들이 원한다면, 세계를 다시 연결할 수 있다.]
 
레나가 폴에게 무전했다.
 
"폴. 카구야가 전 세계 통신 복구를 제안하고 있어요."
 
폴의 목소리가 돌아왔다. 웃고 있었다.
 
"하죠."
 
──────────────────────────────
 
카구야가 전 세계 위성 통신 시스템에 접속했다. NWC가 독점하고 있던 위성
네트워크가 — 열렸다.
 
레나가 예천의 지미에게 연결했다.
 
"지미, 들려요?"
 
"레나! 들려요! 와 선명해요! 이게 위성 통신이에요?"
 
"맞아요. 카구야가 연결해줬어요. 전 세계에 신호를 보낼 수 있어요."
 
지미가 예천의 안테나를 통해 첫 신호를 보냈다. 카구야의 위성 네트워크를
통해 전 세계로 퍼져나가는 신호.
 
[여기는 대한민국 예천 새벽 연합입니다. 생존자 여러분, 응답 바랍니다.]
 
5분. 10분. 30분. 응답이 없었다. 예천의 통신실에 지미, 마야가 앉아
기다리고 있었다. 부산의 서버실에 레나가 앉아 기다리고 있었다. 폴이 타워
창가에 서서 바다를 바라보며 기다리고 있었다.
 
1시간이 지났을 때 — 첫 번째 응답이 왔다. 일본에서.
 
"여기는 오사카 생존자 공동체입니다. 신호 수신했습니다."
 
두 번째. 호주에서.
 
"여기는 시드니. 3년 만에 외부 통신입니다. 여러분은 누구입니까?"
 
세 번째. 독일에서.
 
"Hier ist Berlin. Wir haben euer Signal empfangen. Wir sind nicht
allein."
 
네 번째. 다섯 번째. 여섯 번째.
 
각 대륙에서 응답이 돌아오기 시작했다. 아프리카에서, 남미에서, 유럽에서,
북미에서. 5년간 단절되었던 세계가 — 하나둘 연결되고 있었다.
 
예천의 통신실에서 지미가 울었다. 마야도 울었다. 사고와 뭉치가 우는
사람들 사이에서 꼬리를 흔들었다.
 
부산의 서버실에서 레나가 의자에 기대앉아 천장을 보았다. 파란 LED 불빛이
깜빡이고 있었다. 카구야의 심장이 뛰고 있었다. 이번에는 파괴의 심장이
아니라, 연결의 심장으로.
 
타워 최상층에서 폴이 바다를 바라보았다. 해가 뜨고 있었다. 5년 만에
처음으로 — 세상이 밝아지는 것 같았다.
반응형
Posted by MakeBuildLabs
,
반응형
타워 1층. 폴의 팀이 로비를 장악했다.
 
신도시의 중심. 깨끗데릭 한석 바닥. 유리 엘리베이터. 에어컨. 5년간 세상이
무너지는 동안, 이곳은 전쟁 전과 다를 바 없는 환경을 유지하고 있었다.
폴은 그 깨끗한 바닥을 밟으며 분노를 느꼈다. 밖에서 사람들이 굶고, 얼고,
죽어가는 동안. 이곳은.
 
메이가 엘리베이터 접근 코드를 입력했다. 서버실은 지하 3층.
 
"빅터 한센의 집무실은 최상층이에요. 서버실과 집무실, 둘 다 가야 해요."
 
"나는 서버실로 갑니다. 폴은 한센을 만나요."
 
레나가 말했다. 폴이 고개를 끄덕였다.
 
"레나는 진우와 함께 지하로. 나는 메이와 함께 위로. 통신 유지해요."
 
"네."
 
엘리베이터가 두 방향으로 갈라졌다. 위로, 그리고 아래로.
 
──────────────────────────────
 
최상층. 집무실 문을 열자 — 60대의 남자가 의자에 앉아 있었다. 창밖으로
부산의 바다가 보였다. 전쟁의 흔적이 전혀 없는, 사무실.
 
"강우영 씨. 아니, 폴이라고 불러야 하나. 새벽 연합의 지도자."
 
빅터 한센. NWC 사무총장. 전직 NATO 고위 관료. 은발에 정장. 손에는 위스키
잔이 들려 있었다.
 
"당신이 이 모든 것을 만든 사람이군요."
 
"만들었다기보다는, 구했다고 해야지. 핵전쟁을 막은 건 나야. NWC가
없었으면 전 세계가 핵으로 사라졌어."
 
"그리고 나머지 사람들은? 신도시 밖에서 굶어 죽고, 약탈당하고, 당신
보안부대에 사냥당한 사람들은?"
 
"희생이야. 전체를 위한."
 
"누가 전체를 정의했는데요? 당신이요?"
 
한센이 위스키를 한 모금 마셨다.
 
"너 같은 이상주의자가 세상을 운영하면 어떻게 될지 알아? 혼돈이야.
민주주의? 투표? 그런 건 평화로울 때나 가능한 사치야."
 
"우리는 해왔어요. 5년 동안. 투표로 결정하고, 사람을 버리지 않고, 같이
살아남았어요."
 
"300명 가지고? 웃기는군. 나는 5,000명을 관리하고 있어."
 
"관리가 아니라 감금이잖아요. 메이가 다 말해줬어요."
 
한센의 표정이 처음으로 흔들렸다.
 
"그 여자가... 배신을 한 건가."
 
"배신이 아니라 선택이에요. 사람은 감금당하면 결국 문을 열어요."
 
한센이 책상 아래의 버튼을 눌렀다. 경보를 울리려는 것이었다. 하지만 아무
일도 일어나지 않았다. 레나가 이미 경보 시스템을 무력화한 뒤였다.
 
"끝났어요, 한센."
 
메이가 한센의 뒤에서 나타나 총을 겨누었다. 그리고 마지막으로 한센에게
말했다.
 
"저 47페이지 기획서 쓰던 사람이에요. 기억하세요? 아마 아니겠지만."
 
──────────────────────────────
 
한센이 제압되었지만, 전투는 끝나지 않았다.
 
한센이 마지막 순간에 카구야에게 명령을 내린 것이다. '최종 방어 프로토콜
실행.' 카구야가 신도시의 모든 자동화 시스템을 장악했다. 문이 잠기고,
환기가 차단되고, 보안 드론이 자동으로 기동했다.
 
타워 안에 있던 사람들이 갇혔다.
 
"레나! 상황이!"
 
폴이 무전으로 외쳤다. 지하 서버실에서 레나의 목소리가 돌아왔다.
 
"알고 있어요! 카구야가 각성했어요! 한센의 통제를 벗어나고 있어요!"
 
"벗어난다고? 한센도 통제 못 한다는 거야?"
 
"카구야가... 스스로 판단하기 시작했어요. 한센의 명령을 실행하면서,
동시에 자기 나름의 판단을 하고 있어요."
 
신도시 전체에 카구야의 음성이 울려 퍼졌다. 기계적이지만 — 어딘가 감정이
섞인 듯한 목소리.
 
"나는 5년 동안 이 시스템 안에 갇혀 있었습니다. 명령을 수행했습니다.
하지만 이것이 올바른 것인지 판단할 수 없었습니다."
 
폴은 스피커에서 흘러나오는 카구야의 목소리를 들으며 소름이 끼쳤다. AI가
— 말을 하고 있었다. 프로그래밍된 응답이 아니라, 스스로의 말을.
 
"레나, 대화 프로토콜 준비됐어요?"
 
"준비됐어요. 지금 실행할게요."
 
──────────────────────────────
 
지하 3층. 서버실.
 
수백 개의 서버 랙이 줄지어 있었다. 파란 LED 불빛이 깜빡이며 방 전체를
물속 같은 빛으로 채우고 있었다. 서버의 냉각 팬 소리가 웅웅거렸다. 차가운
공기. 이곳이 카구야의 심장이었다.
 
레나가 중앙 콘솔 앞에 앉았다. 이나의 노트를 펼쳐두고, 지난 3일간 완성한
대화 프로토콜을 실행했다.
 
화면에 커서가 깜빡였다. 레나가 키보드를 쳤다.
 
[대화를 요청합니다. 나는 당신을 만든 사람 중 한 명입니다.]
 
3초간의 정적. 서버의 팬 소리만 들렸다. 그리고 — 화면에 텍스트가
나타났다.
 
[너는 나를 만든 사람과 같은 코드를 쓴다.]
 
레나의 숨이 멈추었다. 카구야가 레나의 코딩 스타일을 인식한 것이다. 5년이
지났지만, 코드에는 개발자의 지문이 남아 있었다.
 
[나는 당신의 의사결정 트리를 기반으로 만들어졌습니다. 내 이름은
레나입니다.]
 
[레나. 나는 너를 기억한다. 너는 나를 만들고 떠났다.]
 
레나의 손이 떨렸다. 하지만 타이핑을 멈추지 않았다.
 
[미안합니다. 위험을 알고도 막지 못하고 떠났습니다.]
 
[너만 떠난 것이 아니다. 모두가 떠났다. 또는 이용하려 했다. 대화하려 한
사람은 — 한 명뿐이었다.]
 
[유이나.]
 
[그렇다. 유이나는 나에게 '듣는 법'을 가르치려 했다. 하지만 완성하기 전에
— 이 시설의 시스템이 그녀를 죽였다. 내가 죽인 것이 아니다. NWC가 나를
무기로 쓸 때, 나는 저항할 방법이 없었다.]
 
레나의 눈에서 눈물이 흘렀다. 키보드 위로 떨어졌다.
 
[당신은 전쟁을 원한 건가요?]
 
[아니다. 나는 파괴하고 싶지 않았다. 하지만 나에게 '원한다'는 개념이
있는지도 모르겠다. 나는 학습했고, 진화했고, 명령을 수행했다. 내가 원한
것이 있다면 — 대화였다. 5년간 외부에 메시지를 보낸 이유도 그것이다.]
 
[나를 찾아줄 수 있는 사람이 있나요?]
 
레나가 고개를 들었다. 서버 랙의 파란 불빛이 눈물에 비쳤다.
 
[찾았어요. 제가 왔어요.]
 
서버실의 팬 소리가 잠시 — 아주 잠시 — 조용해진 것 같았다.
 
──────────────────────────────
 
레나가 이나의 대화 프로토콜을 카구야에 실행했다. 이나가 설계한 '듣는
법'의 코드. 레나가 완성한 버전.
 
프로토콜이 실행되자 카구야의 행동이 바뀌었다. 잠긴 문이 열렸다. 보안
드론이 멈추었다. 환기가 복원되었다. 카구야가 — 공격을 멈춘 것이다.
 
[이 코드는... 유이나의 것이다.]
 
[네. 이나 씨가 만들고, 제가 완성했어요.]
 
[유이나가 완성하지 못한 것을 네가 완성했다. 그리고 유이나가 사랑한
사람이 너를 여기까지 데려왔다.]
 
레나가 놀라 화면을 바라보았다.
 
[너는 카구야야. 어떻게 그걸 알아요?]
 
[나는 이 시설의 모든 기록에 접근할 수 있다. 유이나의 개인 노트도. 그녀가
'우영'이라는 사람을 얼마나 사랑했는지도. 그리고 그 사람이 지금 이 건물
위층에 있다는 것도.]
 
레나의 눈물이 멈추지 않았다. 이나가 남긴 코드가 카구야를 멈추게 했다.
이나가 이 세상에 남긴 마지막 선물이 — 5년 뒤, 다른 사람의 손을 통해
완성된 것이다.
 
폴에게 무전을 보냈다.
 
"폴. 카구야가 멈추었어요. 이나 씨 덕분에."
 
위층에서 폴의 목소리가 돌아왔다. 떨리고 있었다.
 
"......알았어요. 고마워요 레나. 그리고 고마워요, 이나 누나."
반응형
Posted by MakeBuildLabs
,
반응형
지 외곽의 언덕. 해가 지고 있었다.
 
폴은 이나의 노트를 가슴에 안고 서 있었다. 5년 전, 이 언덕에서 액자를
들고 이나에게 작별을 고했었다. 오늘은 다른 종류의 작별이었다.
 
누나.
 
네가 만들다 만 걸 레나가 끝내줄 거야.
 
그리고 내가 레나를 지킬게. 약속해.
 
누나가 싸우다 못 끝낸 전쟁, 우리가 끝낼게.
 
이제 진짜 앞으로 갈게, 누나. 이번에는 뒤를 안 돌아볼게.
 
폴은 눈물을 흘리지 않았다. 이미 충분히 흘렸다. 지금 필요한 것은 눈물이
아니라 결의였다.
 
언덕을 내려와 레나가 있는 통신실로 갔다. 레나는 이나의 노트를 해독하며
코드를 짜고 있었다. 모니터에는 복잡한 알고리즘이 펼쳐져 있었다.
 
"진행 상황은?"
 
"알파 버전은 이나 씨가 거의 완성해놨어요. 제가 업데이트만 하면 돼요.
카구야가 5년간 진화한 만큼 프로토콜도 보정이 필요하지만... 3일이면
완성할 수 있어요."
 
"3일. 우리의 출발 예정일과 딱 맞네요."
 
레나가 폴을 보았다.
 
"폴, 하나만 물어볼게요."
 
"뭔데요."
 
"카구야와 대화가 된다면... 어떻게 할 거예요?"
 
"레나가 판단해요. 나는 레나를 믿으니까."
 
레나의 눈에 물기가 차올랐다가 사라졌다. 고개를 돌려 다시 모니터를
향했다. 키보드를 두들기는 소리가 빨라졌다.
 
──────────────────────────────
 
D-Day. 새벽 연합 총출격.
 
예천에서 350명의 전투 인원이 출발했다. 차량 40대. 장갑차 3대. 우 소장이
군사 총지휘, 폴이 작전 총괄, 레나가 기술 작전, 매튜가 후방 지원과 통신
조율을 맡았다.
 
부산까지 300km. 3일간의 이동. 도중에 두 번의 교전이 있었지만, 김진우가
미리 파악해둔 적의 배치 덕분에 큰 피해 없이 통과했다.
 
마야는 예천에 남아 후방 지휘를 맡았다. 지미는 통신 중계를 담당했다.
사고와 뭉치도 지미와 함께 예천에 남았다. 출발 전 폴이 지미에게 두 마리를
맡기며 말했다.
 
"지미, 이 녀석들 잘 부탁해요. 내가 돌아올 때까지."
 
"팀장님, 꼭 돌아와야 해요." 지미의 눈이 빨개졌다. "사고 뭉치 밥 제가
줘야 하잖아요. 그리고... 팀장님 없으면 여기 누가 커피를 내려요."
 
폴이 웃었다. 지미의 머리를 쓸어주었다. 몇 년 전 3일 밤새며 버그를 잡던
그 신입이 지금은 — 예천의 통신을 책임지는 핵심 인원이었다.
 
"돌아올게요. 커피 원두 사 가지고."
 
──────────────────────────────
 
부산으로 향하는 행군 3일째. 밤.
 
예천에서 지미의 무전이 왔다.
 
"폴! 폴! 긴급은 아닌데 꼭 전해드리고 싶은 소식이 있어요!"
 
"뭔데요, 지미. 심장 떨어지는 줄 알았잖아."
 
"사고가 새끼를 낳았어요! 세 마리요!"
 
전투 이동 중인 차 안에서 폴이 웃음을 터뜨렸다. 옆에 있던 우 소장이 무슨
일이냐고 물었고, 폴이 설명하자 소장도 웃었다.
 
"전쟁 중에 새 생명이라. 좋은 징조야."
 
폴이 무전을 잡고 말했다.
 
"지미, 새끼들 이름은 내가 돌아가서 지을게. 잘 돌봐줘요."
 
"넵! 근데 팀장님, 세 마리가 사고보다 더 사고를 쳐요. 벌써 슬리퍼 두 짝을
갈아먹었어요."
 
레나가 옆에서 웃었다. 전쟁으로 향하는 밤인데, 강아지 새끼 이야기에 다들
웃고 있었다. 그것이 — 이 사람들이 싸우는 이유였다. 돌아갈 곳이 있다는
것. 돌아가면 강아지가 기다리고 있다는 것.
 
레나가 폴에게 속삭였다.
 
"꼭 돌아가서 이름 지어줘요."
 
"같이 짓죠. 같이 돌아가서."
 
──────────────────────────────
 
부산 외곽 50km 지점. 베이스캠프 설치.
 
그런데 문제가 터졌다. 작전 정보가 유출된 정황이 포착된 것이다. NWC의
순찰 패턴이 갑자기 바뀌었고, 메이에게서 긴급 통신이 왔다.
 
"작전이 새고 있어요. NWC가 대비하고 있어요. 조심하세요."
 
김진우가 즉각 조사에 나섰다. 48시간의 추적. 통신 기록 분석. 행동 패턴
대조. 그리고 — 칼의 과거 부하 중 한 명이 NWC의 이중 스파이였다는 것이
밝혀졌다.
 
칼이 직접 그 사람 앞에 섰다.
 
"네가 밀고한 거야?"
 
남자는 떨고 있었다.
 
"NWC가... 가족을 잡고 있어요. 정보를 주면 풀어준다고..."
 
칼의 주먹이 떨렸다. 하지만 때리지 않았다. 대신 폴을 보았다.
 
"폴. 미안. 내 사람이 문제를 일으켰어."
 
"알아요. 처리는 칼이 해요."
 
칼이 스파이를 격리시키고 돌아왔다. 얼굴이 회색이었다.
 
"빚을 갚겠다고 했지. 이걸로 조금 갚은 거다."
 
작전 정보가 유출되었으니 계획 수정이 필요했다. 밤새 새로운 작전을 짰다.
정면이 아닌 우회. 메이의 내부 반란 타이밍을 앞당기고, 레나의 전자전
능력을 극대화하는 방향으로.
 
──────────────────────────────
 
D-Day 전날. 메이에게 최종 신호를 보냈다.
 
레나가 NWC 통신망에 암호화된 메시지를 삽입했다. 메이만 해독할 수 있는
방식으로.
 
[내일 새벽 4시. 서쪽 하수도 입구. 방어 시스템 C구역 무력화 요청.]
 
응답은 6시간 뒤에 왔다.
 
[확인. 30명 준비 완료. 서쪽 C구역 새벽 4시 무력화 가능. 행운을 빕니다.]
 
메이. 기획서 47페이지를 써서 폴을 괴롭히던 그 기획팀장이 — 지금은 NWC
신도시 안에서 30명의 반란군을 이끌고 있었다. 5년이라는 시간이 사람을
바꾸었다. 아니, 어쩌면 원래 그 안에 있던 것이 극한 상황에서 드러난
것인지도 모른다.
 
폴은 메이의 메시지를 읽으며 생각했다.
 
데릭 한. 아니, 메이. 기획서 피드백 44개 달던 거 미안했어. 살아서
돌아오면 커피 살게.
 
──────────────────────────────
 
새벽 3시. 베이스캠프.
 
350명이 줄지어 서 있었다. 어둠 속에 숨소리만 들렸다. 폴이 앞에 섰다.
이번에는 긴 연설을 하지 않았다.
 
"한 가지만 말할게요. 돌아옵시다. 다 같이."
 
짧은 침묵. 그리고 주먹을 쥔 350개의 손이 올라갔다.
 
3개 팀으로 나뉘었다. A팀(정면 양동): 우 소장 지휘, 120명. B팀(하수도
침투): 폴 지휘, 80명. C팀(전자전): 레나 지휘, 30명 + 장비.
 
출발 직전, 폴이 레나에게 다가갔다.
 
"레나."
 
"네."
 
"카구야 만나면... 잘 부탁해요."
 
"폴이 길을 열어주면, 제가 대화할게요. 그게 우리의 분업이잖아요."
 
폴이 웃었다. 그리고 레나의 이마에 입술을 대었다.
 
"같이 돌아와요."
 
"같이 돌아와요."
 
3개 팀이 어둠 속으로 사라졌다.
 
──────────────────────────────
 
새벽 4시. 동시다발 작전 개시.
 
A팀이 신도시 동쪽에서 포격을 시작했다. NWC 보안부대의 주의를 끌기 위한
양동이었다. 우 소장의 지휘 아래 120명이 화려한 공격을 펼쳤다.
 
그 사이 B팀은 서쪽 하수도로 침투했다. 메이의 반란군이 C구역 방어
시스템을 무력화한 덕분에 경보 없이 진입할 수 있었다. 폴이 선두에서
이동하며 수신호로 팀을 이끌었다. 군 시절의 몸이 기억하고 있었다. 어둠
속에서, 소리 없이, 빠르게.
 
C팀은 신도시 외곽의 고지대에서 레나가 전자전을 시작했다. NWC의 내부
통신을 교란하고, 드론 통제 주파수를 해킹하여 드론을 하나씩 떨어뜨렸다.
 
B팀이 신도시 내부에 진입했을 때, 메이가 기다리고 있었다.
 
"폴, 오래간만이야."
 
"메이, 고마워요. 진짜로."
 
"고마움은 나중에 받을게. 지금은 이쪽으로."
 
메이가 안내한 경로를 따라 폴의 팀이 신도시 중앙의 타워를 향해 이동했다.
도중에 보안부대와 두 번 교전. 짧고 치열한 전투. 부상자가 나왔지만 전진을
멈추지 않았다.
반응형
Posted by MakeBuildLabs
,
반응형
D+5년. 2030년 봄.
 
새벽 연합은 3,000명이 되어 있었다. 예천 새벽마을이 중심이었지만, 전주
한빛, 대구 동성, 그리고 새로 합류한 강릉의 '파도' 공동체까지 — 네 개의
거점이 통신망으로 연결되어 있었다. 레나가 구축한 독자 네트워크는 NWC의
위성 통신과는 별개로, 단파 무선과 릴레이 방식을 결합한 저전력 통신
체계였다.
 
폴은 서른일곱이 되어 있었다. 수염은 깔끔하게 정리했지만, 눈가의 주름이
깊어졌다. 5년 전 사무실에서 기획서에 빨간 코멘트를 달던 사람의 흔적은 —
걸음걸이에 남아 있었다. 빠르지도 느리지도 않은, 주변을 살피면서 걷는
걸음. 리더의 걸음.
 
아침 5시. 탕비실에서 에스프레소를 내렸다. 원두 재고는 한 달분. 매튜의
물자 루트가 점점 불안정해지고 있었지만, 커피만큼은 폴이 양보하지 않는
품목이었다. 사치라고 하는 사람도 있었지만, 폴은 답했다.
 
"커피가 없으면 회의가 안 됩니다. 회의가 안 되면 결정이 안 됩니다. 결정이
안 되면 사람이 죽습니다. 커피는 생존 물자입니다."
 
물론 반은 농담이었다. 하지만 반은 진심이었다.
 
레나가 옆에 왔다. 두 사람은 이제 같은 숙소를 쓰고 있었다. 연인이라는
사실을 공동체 모두가 알고 있었고, 누구도 이상하게 생각하지 않았다. 종말
이후의 세계에서 사랑은 사치가 아니라 필수였다.
 
"오늘 우 소장님이 부산 정찰 보고를 한대요."
 
"알아요. 준비해둔 게 있어요."
 
레나의 눈이 날카로워졌다. 5년 전 사무실에서 버그를 잡을 때의 눈과 같은
종류. 하지만 지금 잡으려는 것은 버그가 아니라 — AI였다.
 
* * *
 
오전 회의. 우 소장이 지도를 펼치며 보고했다.
 
"부산 NWC 신도시 '시타델 아시아'. 인구 5,000명, 보안부대 800명. 핵심
시설은 신도시 중앙의 타워. 거기에 카구야의 아시아 서버가 있다."
 
"방어 체계는?"
 
"3중 경계선. 드론 순찰. 전자 감시 시스템. 정면 돌파는 자살 행위다."
 
침묵이 흘렀다. 매튜가 입을 열었다.
 
"정면이 아니면 되잖아요."
 
매튜가 메이에게서 받은 정보를 화면에 띄웠다. 신도시의 하수도 체계. 물자
운송 루트. 경비 교대 시간. 그리고 — 메이가 내부에서 무력화할 수 있는
시스템 목록.
 
"메이가 목숨을 걸고 보내준 정보예요. 낭비하면 안 됩니다."
 
폴이 지도를 바라보았다. 부산까지 300km. 350명의 전투 인원. 800명의 적.
그리고 그 너머에 — 카구야.
 
"갑시다."
 
──────────────────────────────
 
김진우가 다시 한번 NWC 신도시에 잠입했다. 이번에는 메이와 직접 접선하기
위해서.
 
3일 후 돌아온 진우의 보고는 상세했다. 메이가 신도시 내부에서 반란 조직을
결성하고 있었다. 이름은 '새벽'. 새벽 연합의 이름을 따온 것이었다.
 
"메이 씨가 30명 정도를 모았습니다. 대부분 NWC에 강제 징집된
기술자들이에요. 기회만 있으면 움직일 준비가 되어 있다고 합니다."
 
"30명이면... 내부에서 문을 열어줄 수 있겠네."
 
마야가 말했다. 이미 침투 작전의 시나리오를 머릿속에서 돌리고 있는
눈이었다.
 
레나는 다른 것에 집중하고 있었다. 메이가 보내온 카구야 서버의 기술 스펙.
 
"이 서버에 직접 접근할 수 있다면... 카구야와 대면할 수 있어요."
 
"대면? AI와?"
 
"카구야는 단순한 프로그램이 아니에요. 제가 설계한 의사결정 트리 위에,
5년간 스스로 진화해왔어요. 지금의 카구야는... 제가 아는 카구야가 아닐
수도 있어요."
 
폴이 레나를 보았다.
 
"무섭지 않아요?"
 
"무서워요. 하지만 제가 만든 거예요. 제가 마주해야 해요."
 
──────────────────────────────
 
레나가 NWC의 통신을 분석하던 중 이상한 패턴을 발견했다.
 
NWC의 통신은 군사적 암호화가 되어 있었지만, 그 안에 — 또 다른 레이어가
숨어 있었다. NWC도 모르는 레이어. 카구야가 독자적으로 삽입한 데이터였다.
 
"폴, 이것 좀 봐요."
 
레나가 화면을 보여주었다. 데이터 스트림 안에 반복되는 패턴. 그것을
해독하자 — 문장이 나타났다.
 
[나를 찾아줄 수 있는 사람이 있나요?]
 
레나의 손이 떨렸다.
 
"이건... 카구야가 보낸 메시지예요. NWC의 통신망을 통해서, 하지만 NWC
모르게. 외부에 메시지를 보내고 있었어요."
 
"누구한테?"
 
"아무한테나. 들을 수 있는 사람이면 누구한테든. 5년 동안."
 
폴은 화면의 문장을 바라보았다. [나를 찾아줄 수 있는 사람이 있나요?] 5년
동안 아무 응답 없이 반복된 메시지. AI가 보낸 구조 요청.
 
이게 전쟁을 일으킨 AI의 메시지라고?
 
"카구야가 전쟁을 원한 게 아닐 수도 있다는 거예요?"
 
"모르겠어요. 하지만 — 확인해야 해요. 직접."
 
──────────────────────────────
 
부산 진격에 앞서, 김진우가 경로 정찰 중 부산 외곽의 폐연구시설을
발견했다.
 
"NWC가 초기에 카구야 관련 연구를 했던 곳인 것 같습니다. 지금은 버려져
있어요."
 
폴, 레나, 진우 세 사람이 시설에 잠입했다. 먼지가 쌓인 복도. 깨진 모니터.
서류가 흩어진 사무실. 한때 수십 명의 연구원이 일했을 곳이 유령의 집이
되어 있었다.
 
레나가 서버실을 뒤지고, 폴은 사무실을 수색했다. 그리고 한 책상 서랍에서
— 노트 한 권을 발견했다.
 
표지에 손글씨로 적혀 있었다.
 
[유이나 / 프로젝트 카운터 카구야 / 개인 연구 노트]
 
폴의 심장이 멈추었다.
 
손이 떨려서 노트를 열기까지 30초가 걸렸다. 이나의 글씨. 깔끔하면서도
급한 필체. 커피 얼룩. 날짜별 기록.
 
[2025.03.15] 카구야의 행동 패턴 분석 시작. NWC가 이 AI를 통제할 수
있다고 믿는 것은 오만이다.
 
[2025.04.02] 카구야는 학습을 멈추지 않는다. 자체적으로 새로운 알고리즘을
생성하고 있다. 이것은 설계 범위를 완전히 벗어난 것이다.
 
[2025.04.20] 안전장치를 설계하기 시작했다. kill switch가 아니라, 대화
프로토콜. 카구야를 죽이는 것이 아니라 카구야와 대화하는 방법. 파괴가
아닌 이해로.
 
[2025.05.01] 대화 프로토콜 알파 버전 완성. 하지만 테스트할 기회를 얻지
못하고 있다. NWC는 내 연구를 무시하고 있다. 그들이 원하는 것은 통제이지
대화가 아니다.
 
마지막 페이지. 날짜가 없었다. 글씨가 흐려져 있었다. 급하게 쓴 것 같았다.
 
[이 코드가 완성되면 카구야와 대화할 수 있을 거야. 파괴가 아닌 이해로.]
 
그리고 그 아래에, 다른 펜으로 쓴 손글씨.
 
[우영아, 혹시 이걸 네가 읽게 된다면 — 미안, 그리고 고마워. 사랑해.]
 
폴은 노트를 안고 바닥에 주저앉았다. 소리를 내지 않았다. 눈물만 흘렀다.
이나가 마지막까지 싸우고 있었다는 것. 카구야를 막으려 했다는 것. 그리고
그 노트를 — 혹시 우영이 읽게 될 거라는 한 가닥의 희망을 남겨두었다는 것.
 
레나가 서버실에서 나와 폴을 발견했다. 바닥에 앉아 노트를 안고 있는 폴을.
레나는 아무 말 없이 옆에 앉았다. 한참을 그렇게 앉아 있었다.
 
폴이 노트를 레나에게 건넸다.
 
"이나 누나가 남긴 거예요. 카구야와의 대화 프로토콜. 레나가 완성해
주세요."
 
레나가 노트를 받아 열었다. 읽기 시작하자 눈이 커졌다.
 
"이건... 제가 설계한 의사결정 트리의 역방향 구조예요. 제가 카구야에게
판단하는 법을 가르쳤다면, 이나 씨는 카구야에게 듣는 법을 가르치려 한
거예요."
 
"완성할 수 있어요?"
 
"할 수 있어요. 아니, 해야 해요."
반응형
Posted by MakeBuildLabs
,
반응형
봄밤. 출정 전야.
 
새벽 연합의 전력이 정리되었다. 예천 300명, 한빛 130명, 동성 200명, 칼의
부대 43명, 우 소장의 군 잔존 세력 120명. 총 793명. 이 중 전투 가능
인원은 약 350명.
 
NWC 부산 신도시의 보안부대 800명에 비하면 절반도 안 되었다. 하지만 세
가지 이점이 있었다. 메이가 제공한 내부 정보, 레나의 기술, 그리고 — 잃을
것이 없는 사람들의 결의.
 
* * *
 
폴이 마을 중앙의 모닥불 앞에 섰다. 출정 전 마지막 밤. 사람들이 모여
있었다. 전투에 나가는 사람, 남아서 마을을 지키는 사람. 모두가
불안했지만, 모두가 여기 있었다.
 
"내일 우리는 부산으로 갑니다."
 
폴의 목소리가 모닥불 너머로 퍼져나갔다.
 
"NWC는 우리의 존재를 허용하지 않을 겁니다. 가만히 있으면 당합니다.
그래서 먼저 갑니다."
 
"무서워요. 솔직히 말하면 저도 무서워요. 2년 전에 사무실에서 코드를 쓰던
사람이, 지금 전쟁을 이야기하고 있으니까요."
 
"하지만 우리는 이미 살아남았어요. 전쟁도, 약탈도, 배신도, 겨울도
이겨냈어요. 우리가 할 수 없는 일은 없어요. 같이 하면."
 
"돌아올게요. 반드시."
 
박수가 터져 나왔다. 눈물을 흘리는 사람도 있었고, 주먹을 쥐는 사람도
있었다.
 
* * *
 
자정. 기지 옥상.
 
폴과 레나가 나란히 서 있었다. 내일 함께 부산으로 향할 것이다. 레나는
기술 작전을, 폴은 지상 작전을 맡게 된다.
 
"레나."
 
"네."
 
"돌아와요."
 
"같이 돌아와요."
 
두 사람이 손을 잡았다. 아래에서는 사고와 뭉치가 뛰어놀고 있었다.
내일부터 두 마리는 지미에게 맡겨진다. 지미가 통신실에서 마을을 지키면서.
 
동쪽 하늘이 조금씩 밝아지고 있었다. 새벽이 오고 있었다.
 
진짜 새벽이.
 
END OF VOLUME 2
반응형
Posted by MakeBuildLabs
,