↓ 본문으로 건너뛰기
  1. Local AI Models on a Mac/

[1주차] Mac에서 로컬 AI 시작하기: 터미널, Homebrew, Ollama

·

AI 서비스를 사용하는 데서 한 걸음 더 나아가, 내 Mac에서 모델을 직접 실행해 보기로 했다. 이번 스터디에서는 『Build Applications with Local AI Models on a Mac』을 따라 로컬 AI 애플리케이션을 만들어 간다.

1주차의 범위는 1~3장이다. 왜 로컬 AI를 쓰는지 이해하고, 터미널과 Homebrew에 익숙해진 뒤 Ollama를 준비한다. 스터디 자료에 포함된 4장 미리 실습에서는 gemma3:4b 모델을 내려받아 대화하는 흐름도 살펴본다.

1. 왜 AI를 내 컴퓨터에서 실행할까?
#

클라우드 AI는 설치 부담이 작고 강력한 모델을 바로 사용할 수 있다는 장점이 있다. 그렇다면 로컬 AI는 어떤 경우에 의미가 있을까?

스터디에서 다룬 내용을 내 기준으로 정리하면 데이터의 이동, 실행 환경의 통제, 작동 원리에 대한 이해로 나눌 수 있다.

비교 기준클라우드 AI로컬 AI
추론이 실행되는 곳서비스 제공자의 서버내 컴퓨터
입력 데이터사용하는 서비스로 전송로컬 추론 경로 안에서 처리 가능
준비 과정서비스 가입·접속 중심실행 도구와 모델 준비 필요
실행 제약서비스 정책과 사용 한도내 기기의 메모리·연산 성능

로컬이라는 이유만으로 애플리케이션 전체가 자동으로 오프라인이 되는 것은 아니다. 모델 다운로드에는 인터넷이 필요하고, 검색이나 외부 API를 연결했다면 그 부분에서는 통신이 발생한다. 어떤 모델을 어디서 실행하고, 어떤 데이터가 밖으로 나가는지를 구분해서 보는 것이 중요하다.

이번 스터디에서는 가장 큰 모델을 쓰는 것보다, 모델을 실행하고 애플리케이션과 연결하는 과정을 이해하는 데 초점을 맞추려 한다.

2. 미팅에서 짚은 개념: 모델, 가중치, 통합 메모리
#

설치 과정뿐 아니라 LLM이 작동하는 방식과 Mac 하드웨어의 특징도 함께 다뤘다. 미팅 녹화에서 설명한 내용을 다음처럼 정리했다.

학습과 추론은 다르다
#

학습은 데이터를 바탕으로 모델의 가중치를 조정하는 과정이고, 추론은 준비된 가중치를 이용해 입력에 대한 출력을 계산하는 과정이다. 이번 주의 ollama pull과 ollama run은 이미 학습된 모델을 내려받아 추론하는 흐름이다. 모델을 다운로드한다고 해서 내가 직접 모델을 학습시키는 것은 아니다.

LLM은 다음 토큰을 이어 만든다
#

미팅에서는 Transformer Explainer로 GPT-2 Small의 동작을 살펴봤다. 입력 문장은 토큰과 벡터 표현으로 바뀌고, 여러 Transformer 블록을 거쳐 다음 토큰의 확률을 계산한다. 생성된 토큰을 문맥에 붙여 같은 과정을 이어 가며 응답을 만든다.

여기서 토큰은 항상 단어 하나와 일치하지 않는다. 또 여러 Transformer 블록을 통과하는 것과 학습 데이터를 반복해서 읽는 에포크(epoch)는 다른 개념이다. 이 둘을 구분해서 기억해 두려 한다.

Mac에서는 메모리 구조도 함께 봐야 한다
#

GPU는 행렬곱처럼 병렬화하기 좋은 계산을 처리하는 데 유리하다. 다만 CPU에서도 모델을 실행할 수 있으므로, GPU가 없으면 추론 자체가 불가능하다는 뜻은 아니다.

Apple Silicon의 통합 메모리는 CPU와 GPU가 같은 메모리 풀을 활용하는 구조다. 모델 크기를 고를 때는 메모리 총량뿐 아니라 운영체제와 다른 앱이 사용하는 공간, 실행 중 필요한 추가 메모리도 고려해야 한다. Apple의 MLX 설명도 이 구조와 CPU·GPU 연산을 함께 소개한다.

따라서 다음 실습에서는 칩 이름만 적기보다 메모리 용량과 실제 사용한 모델 태그를 함께 남기려고 한다.

3. 이번 스터디가 만들려는 애플리케이션
#

최종 목표는 Mac 안에서 음성 입력을 받아 답하는 로컬 채팅 애플리케이션이다. 미팅 초반에 설명한 구성은 다음과 같다.

마이크 음성
  → MLX Whisper: 음성을 텍스트로 변환
  → Ollama + 로컬 LLM: 응답 생성
  → Streamlit 웹 화면: 사용자에게 표시

Ollama는 모델 자체가 아니라 모델을 실행하는 런타임이다. 실행 도구와 그 안에서 사용하는 모델을 나눠 이해하면, 이후 Python 코드와 연결하는 과정도 더 명확해진다.

4. 터미널: 현재 위치부터 확인하기
#

Ollama를 실행하기 전에 터미널의 기본 동작부터 익힌다. 처음부터 많은 명령어를 외우기보다, 지금 어디에 있고 어떤 파일이 있는지 확인하는 흐름부터 잡는다.

명령어역할
pwd현재 작업 중인 디렉터리 확인
ls현재 디렉터리의 파일과 폴더 목록 확인
cd다른 디렉터리로 이동
mkdir새 디렉터리 생성

스터디용 폴더를 만드는 예시는 다음과 같다.

pwd
mkdir -p ~/local-ai-study/week-01
cd ~/local-ai-study/week-01
pwd
ls -la

~는 내 홈 디렉터리를 뜻한다. 폴더 이름에 공백이 있다면 cd "My Folder"처럼 경로를 따옴표로 묶는다.

명령어를 복사할 때는 설명에 붙은 $나 % 같은 프롬프트 기호까지 입력하지 않도록 구분한다. 명령어와 실행 결과도 따로 기록해 두면 나중에 같은 환경을 다시 준비할 때 도움이 된다.

5. Homebrew: 설치와 경로 설정은 별개다
#

Homebrew는 필요한 개발 도구를 명령줄에서 설치하고 관리하는 패키지 매니저다. 설치 명령어는 바뀔 수 있으므로 Homebrew 공식 사이트에서 확인한다.

설치 후에는 안내문에 표시된 Next steps도 확인해야 한다. 프로그램이 설치되어 있어도 셸이 실행 파일의 위치를 찾지 못하면 명령어를 사용할 수 없기 때문이다. 이때 관련되는 설정이 PATH다.

Apple Silicon Mac의 일반적인 Homebrew 설치 경로는 /opt/homebrew다. 다만 경로를 외워서 적용하기보다 설치 프로그램이 내 환경에 맞춰 출력한 안내를 따르는 편이 정확하다. Homebrew 공식 설명

설치 확인에는 다음 명령어를 사용한다.

brew --version
brew doctor

첫 번째는 버전을, 두 번째는 환경의 잠재적인 문제를 확인한다. brew doctor의 경고가 곧 설치 실패를 뜻하는 것은 아니므로 내용을 읽고 판단한다.

1주차 자료에서는 wget으로 패키지 설치를 연습한다.

brew install wget
wget --version

설치와 업데이트도 구분해 둔다. brew update는 Homebrew와 패키지 정보를 갱신하고, brew upgrade는 설치된 패키지를 업그레이드한다. Homebrew 명령어 문서

6. Ollama: 서버 창과 명령어 창을 나누기
#

Ollama는 모델을 내려받고 실행하는 도구다. 이번 실습은 Homebrew로 설치한 CLI를 기준으로 정리한다.

brew install ollama
ollama --version

가장 헷갈리기 쉬운 부분은 Ollama 서버를 실행한 터미널은 계속 요청을 기다리고 있다는 점이다. 명령어가 멈춘 것처럼 보여도 서버가 실행 중인 상태일 수 있다.

터미널 A: 서버 실행
#

ollama serve

이 창은 서버 실행용으로 둔다. 이미 Ollama 앱이나 다른 서비스로 서버가 실행 중이라면, 같은 서버를 중복으로 시작할 필요는 없다. Ollama 설치 정보 · CLI 문서

터미널 B: 모델 준비와 대화
#

새 터미널 창을 열어 모델을 내려받고 목록을 확인한다.

ollama pull gemma3:4b
ollama list

그다음 대화형 실행을 시작한다.

ollama run gemma3:4b

실행 후 프롬프트에 다음처럼 입력해 본다.

Hello! Who are you?

스터디에서 사용한 모델 태그는 gemma3:4b다. 다른 모델과 비교할 때도 태그를 함께 남겨야 같은 조건인지 확인할 수 있다. 모델의 실제 내려받기 용량은 사용하는 태그와 배포 파일에 따라 확인한다. Gemma 3 모델 페이지

대화에서 나갈 때는 /bye를 입력한다. 이것은 대화형 클라이언트 종료이며, 별도 창에서 실행한 서버까지 종료하는 것은 아니다. 직접 ollama serve로 띄운 서버를 중지하려면 해당 창에서 Ctrl+C를 누른다.

7. 설치 성공과 모델 실행 성공을 따로 확인하기
#

서버 시작 로그와 추가 터미널에서의 요청 확인을 함께 보여 준다. 특히 Listening on 127.0.0.1:11434는 로컬 주소와 포트에서 요청을 기다린다는 의미다.

실습 기록에서는 다음 상태를 구분해 두려 한다.

  1. Homebrew 명령어를 찾을 수 있는가?
  2. Ollama가 설치되어 있는가?
  3. Ollama 서버가 실행 중인가?
  4. 모델이 내려받아졌는가?
  5. 선택한 모델로 응답을 생성할 수 있는가?

예를 들어 ollama --version이 보인다고 해서 모델까지 준비된 것은 아니다. 서버 연결 오류와 모델 다운로드 문제도 서로 다른 단계에서 발생한다. 문제가 생겼을 때는 실패한 명령어와 오류 메시지를 그대로 남기고, 어느 단계까지 성공했는지 함께 적어 두는 편이 좋다.

8. 내 실습 기록
#

항목내 기록
Mac 모델 / 칩spec_mac
메모리 / macOS 버전spec_mac_memory
Homebrew 버전brew version
Ollama 버전ollama version
실행한 모델 태그ollama model
첫 질문과 모델의 응답ollama 응답
Ollama GPU 점유 확인ollama gpu

이번 주 정리
#

이번 주의 출발점은 모델의 성능 비교보다 실행 환경의 구조를 이해하는 것이다. 터미널로 작업 위치를 확인하고, Homebrew로 도구를 설치하고, Ollama 서버와 모델을 구분해서 실행한다. 다음 실습에서는 같은 모델에 한국어 질문도 던져 보고, 어떤 응답이 나오는지 내 환경과 함께 남겨보려 한다. 이후 Python과 연결할 때도 서버와 클라이언트를 나눠 이해한 경험이 도움이 될 것 같다. 본 스터디 외 시간에 내 Macbook에 맞는 더 좋은 모델을 사용해서 성능을 측정해보면, Codex Token 의존도를 조금은 낮출 수 있을 것 같다.

참고 자료
#