💡 Apple Silicon의 경우 공식 홈페이지에서 "Apple Silicon" 버전을 명시적으로 선택해야 합니다.
3-3. 설치 및 초기 설정
다운로드한 .dmg 파일을 실행합니다.
설치 마법사를 따라 진행하면 BlueStacks가 설치됩니다.
최초 실행 시 Google 계정 로그인을 요구합니다. 봇 전용 Google 계정을 사용하거나 기존 계정으로 로그인합니다.
로그인 후 Play Store가 정상적으로 활성화되는지 확인합니다.
3-4. 권장 에뮬레이터 설정
BlueStacks 우측 사이드바의 설정(⚙️) → 환경 설정에서 아래와 같이 설정합니다.
설정 항목
권장값
CPU 코어 수
2 이상
RAM
2048MB 이상
해상도
1280 x 720
Android 버전
Android 9 이상
4. 카카오톡 설치 및 계정 설정
4-1. 카카오톡 설치
BlueStacks 내부의 Google Play Store를 실행합니다.
검색창에 카카오톡을 입력하고 설치합니다.
설치가 완료되면 카카오톡을 실행합니다.
⚠️ 일부 버전에서는 에뮬레이터 환경을 감지해 실행을 거부할 수 있습니다. 이 경우 BlueStacks 설정에서 루트 권한 비활성화를 확인하고, Android 버전을 변경해 재시도해보세요.
4-2. 봇 전용 계정으로 로그인
카카오톡 실행 후 새 계정 만들기 또는 기존 봇 계정으로 로그인합니다.
전화번호 인증 단계에서 준비해둔 여분 회선의 번호를 입력합니다.
해당 번호로 수신된 SMS 인증번호를 입력해 인증을 완료합니다.
로그인 완료 후 봇이 활동할 오픈채팅방에 참여합니다.
4-3. 알림 설정 확인
메신저봇R이 메시지를 감지하려면 카카오톡 알림이 반드시 활성화되어 있어야 합니다.
카카오톡 앱 내 설정 → 알림 → 모든 알림 켜기
BlueStacks 설정 → 알림 → 알림 표시 활성화
5. 메신저봇R 설치 및 권한 설정
5-1. 메신저봇R 설치
메신저봇R은 Play Store에서 검색되지 않는 경우가 있습니다. 이 경우 APK 파일을 직접 설치합니다.
방법 1: Play Store에서 "메신저봇R" 검색 후 설치
방법 2: 공식 오픈채팅방이나 신뢰할 수 있는 출처에서 APK 다운로드 후 설치
APK를 직접 설치하려면 BlueStacks의 사이드바에서 APK 설치 버튼을 클릭하거나, APK 파일을 BlueStacks 화면으로 드래그 앤 드롭합니다.
5-2. 알림 접근 권한 허용 (가장 중요!)
메신저봇R이 정상 동작하려면 알림 읽기 권한이 반드시 필요합니다.
메신저봇R 앱을 처음 실행하면 권한 요청 팝업이 뜹니다.
"알림 접근 허용" 버튼을 눌러 Android 시스템 설정으로 이동합니다.
메신저봇R 항목을 찾아 알림 접근 허용을 활성화합니다.
경로: Android 설정 → 앱 → 메신저봇R → 알림 접근
이 권한이 없으면 메시지를 아예 감지하지 못합니다. 권한 설정 후 앱을 재시작하세요.
5-3. 봇 활성화
메신저봇R 메인 화면에서 전원 버튼(▶)을 눌러 봇을 활성화합니다.
상단에 초록색 ON 상태가 표시되면 봇이 동작 중입니다.
이 상태에서 카카오톡으로 메시지를 받으면 스크립트가 실행됩니다.
6. 봇 스크립트 작성
메신저봇R은 JavaScript로 봇 로직을 작성합니다. 메인 함수는 response입니다.
6-1. response 함수 파라미터
function response(room, msg, sender, isGroupChat, replier, imageDB, packageName) {
// room : 채팅방 이름 (String)
// msg : 수신된 메시지 내용 (String)
// sender : 보낸 사람 닉네임 (String)
// isGroupChat: 단체 채팅방 여부 (Boolean)
// replier : 답장 객체 (replier.reply()로 답장)
// imageDB : 이미지 관련 객체
// packageName: 메시지를 보낸 앱의 패키지명 (String)
}
6-2. 기본 예제 - 특정 채팅방에서만 응답
function response(room, msg, sender, isGroupChat, replier, imageDB, packageName) {
// 카카오톡 메시지만 처리
if (packageName !== "com.kakao.talk") return;
// 특정 오픈채팅방에서만 동작
if (room !== "내 오픈채팅방 이름") return;
// 인사 응답
if (msg === "안녕" || msg === "안녕하세요") {
replier.reply("안녕하세요! 무엇을 도와드릴까요? 😊");
return;
}
// 도움말 명령어
if (msg === "!도움말") {
replier.reply(
"📋 사용 가능한 명령어\n" +
"!도움말 - 명령어 목록\n" +
"!정보 - 봇 정보\n" +
"!시간 - 현재 시간"
);
return;
}
// 현재 시간 출력
if (msg === "!시간") {
var now = new Date();
replier.reply("현재 시간: " + now.toLocaleString("ko-KR"));
return;
}
// 봇 정보
if (msg === "!정보") {
replier.reply("🤖 카카오톡 자동응답 봇 v1.0\nBlueStacks + 메신저봇R로 동작 중입니다.");
return;
}
}
6-3. 심화 예제 - 키워드 감지 및 조건 분기
function response(room, msg, sender, isGroupChat, replier, imageDB, packageName) {
if (packageName !== "com.kakao.talk") return;
if (room !== "내 오픈채팅방 이름") return;
var lowerMsg = msg.toLowerCase();
// 욕설 감지 및 경고 (예시)
var badWords = ["욕설1", "욕설2"];
for (var i = 0; i < badWords.length; i++) {
if (msg.indexOf(badWords[i]) !== -1) {
replier.reply("⚠️ " + sender + "님, 채팅 규칙을 지켜주세요!");
return;
}
}
// 특정 사람에게만 반응
if (sender === "관리자닉네임" && msg.startsWith("!공지")) {
var notice = msg.replace("!공지 ", "");
replier.reply("📢 [공지사항]\n" + notice);
return;
}
// 주사위 기능
if (msg === "!주사위") {
var result = Math.floor(Math.random() * 6) + 1;
replier.reply(sender + "님의 주사위 결과: 🎲 " + result);
return;
}
// 반복 메시지 에코 (테스트용)
if (msg.startsWith("!에코 ")) {
replier.reply(msg.replace("!에코 ", ""));
return;
}
}
6-4. 스크립트 적용 방법
메신저봇R 앱 하단의 스크립트 편집기 탭으로 이동합니다.
기존 코드를 모두 삭제하고 작성한 스크립트를 붙여넣습니다.
우측 상단의 저장(💾) 버튼을 누릅니다.
컴파일(▶) 버튼을 눌러 문법 오류가 없는지 확인합니다.
봇이 ON 상태인지 다시 확인합니다.
7. 테스트 및 디버깅
7-1. 기본 동작 테스트
다른 기기(혹은 다른 카카오톡 계정)에서 봇이 참여한 오픈채팅방에 메시지를 보냅니다.
봇 계정이 자동으로 답장하는지 확인합니다.
!도움말 등 미리 정의한 명령어를 입력해 정상 동작 여부를 체크합니다.
7-2. 로그 확인
메신저봇R의 로그 탭에서 메시지 수신 및 응답 내역을 확인할 수 있습니다.
[INFO] room: 내 오픈채팅방, sender: 테스터, msg: !도움말
[INFO] reply sent: 📋 사용 가능한 명령어...
7-3. 자주 발생하는 문제
문제
원인
해결 방법
봇이 응답하지 않음
알림 접근 권한 미허용
설정에서 권한 재확인
봇이 응답하지 않음
카카오톡 알림 비활성화
카카오톡 알림 설정 켜기
일부 메시지만 감지됨
room 이름 불일치
로그에서 실제 room 이름 확인 후 수정
스크립트 오류
JavaScript 문법 오류
편집기에서 컴파일 후 오류 메시지 확인
카카오톡 설치 불가
에뮬레이터 감지
BlueStacks 버전 변경 또는 루트 비활성화
8. 운영 시 주의사항
8-1. Mac 절전 모드 해제
BlueStacks가 실행 중이더라도 Mac이 잠자기 모드에 들어가면 봇이 중단됩니다. 아래 설정으로 절전을 막아주세요.
방법 1: 시스템 설정에서 변경
시스템 설정 → 배터리(또는 에너지 절약) → 디스플레이 끄기 시간을 늘리거나 "절대 끄지 않음"으로 설정
방법 2: 터미널 명령어 (일시적)
# 카페인 앱처럼 절전 방지 (터미널 열어두는 동안 유지)
caffeinate -d
8-2. 카카오톡 계정 정책
자동응답 봇은 카카오톡 이용약관상 회색 지대에 해당합니다.
과도한 자동 메시지 발송 시 계정이 제한될 수 있습니다.
봇 전용 계정을 사용해 메인 계정이 영향을 받지 않도록 합니다.
8-3. 리소스 관리
BlueStacks는 상당한 CPU와 메모리를 소모합니다. 장시간 운영 시:
불필요한 BlueStacks 앱은 종료해 리소스를 확보하세요.
주기적으로 BlueStacks를 재시작해 메모리 누수를 방지하세요.
Mac의 온도와 팬 소음을 주기적으로 확인하세요.
9. 마무리
이번 포스트에서는 Mac 환경에서 BlueStacks와 메신저봇R을 활용해 카카오톡 오픈채팅방 자동응답 봇을 구축하는 방법을 알아보았습니다.
요약
BlueStacks 설치 (Mac 아키텍처에 맞는 버전 선택)
카카오톡 설치 → 봇 전용 계정으로 인증 및 로그인
메신저봇R 설치 → 알림 접근 권한 허용
JavaScript 스크립트 작성 및 적용
봇 활성화 후 테스트
실제 기기 없이도 충분히 구축 가능하지만, 24시간 안정적인 운영이 필요하다면 중고 저가 안드로이드 폰을 별도 기기로 사용하는 것이 장기적으로 더 안정적입니다.
웹 브라우저에서 3D 그래픽을 구현하는 것은 한때 Flash나 별도 플러그인의 영역이었습니다. 하지만 WebGL의 등장과 함께 브라우저 네이티브 3D 렌더링이 가능해졌고, Three.js는 이 WebGL을 가장 쉽고 강력하게 다룰 수 있는 JavaScript 라이브러리로 자리잡았습니다. 이 글에서는 Three.js의 핵심 아키텍처, 주요 개념, 그리고 실전 활용 패턴까지 정리합니다.
요약
Three.js란: WebGL을 추상화한 JavaScript 3D 라이브러리로, 복잡한 셰이더·행렬 연산 없이 선언적으로 3D 장면을 구성할 수 있음.
핵심 구성요소: Scene, Camera, Renderer, Mesh(Geometry + Material), Light.
활용 분야: 인터랙티브 웹사이트, 데이터 시각화, 게임, 제품 뷰어, AR/VR 등.
1. Three.js가 필요한 이유
WebGL의 한계
WebGL은 GPU 가속 2D/3D 렌더링을 위한 저수준 API입니다. 삼각형 하나를 그리기 위해서도 다음이 필요합니다:
버텍스/프래그먼트 셰이더 작성 (GLSL)
버퍼 생성 및 데이터 바인딩
행렬 변환 (모델, 뷰, 프로젝션)
렌더 루프 관리
// 순수 WebGL로 삼각형 하나 그리기 — 약 100줄 이상의 보일러플레이트
const gl = canvas.getContext('webgl');
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, `
attribute vec4 aPosition;
void main() { gl_Position = aPosition; }
`);
// ... 셰이더 컴파일, 링킹, 버퍼 설정 등 수십 줄 ...
Three.js의 추상화
Three.js는 이 모든 저수준 작업을 감추고, 직관적인 객체 모델을 제공합니다:
// Three.js로 동일한 결과를 얻기
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
2. 핵심 아키텍처 — Scene Graph
Three.js의 근간은 Scene Graph(장면 그래프) 패턴입니다. 이는 3D 객체들을 트리 구조로 관리하는 디자인 패턴으로, 부모-자식 관계를 통해 변환(위치, 회전, 스케일)이 상속됩니다.
// 환경광 — 장면 전체를 균일하게 밝힘
const ambient = new THREE.AmbientLight(0x404040, 0.5);
// 방향광 — 태양처럼 평행한 빛 (그림자 지원)
const directional = new THREE.DirectionalLight(0xffffff, 1);
directional.position.set(5, 10, 5);
directional.castShadow = true;
// 점광원 — 전구처럼 한 점에서 퍼지는 빛
const point = new THREE.PointLight(0xff6600, 1, 50);
point.position.set(0, 5, 0);
6. 지오메트리와 커스텀 메시
내장 지오메트리
Three.js는 다양한 기본 도형을 제공합니다:
new THREE.BoxGeometry(1, 1, 1); // 정육면체
new THREE.SphereGeometry(1, 32, 32); // 구
new THREE.CylinderGeometry(0.5, 0.5, 2); // 원기둥
new THREE.PlaneGeometry(10, 10); // 평면
new THREE.TorusKnotGeometry(1, 0.3, 100, 16); // 토러스 매듭
BufferGeometry로 커스텀 형상 만들기
성능을 위해 BufferGeometry와 Float32Array를 직접 사용할 수 있습니다:
const geometry = new THREE.BufferGeometry();
const vertices = new Float32Array([
-1, -1, 0,
1, -1, 0,
0, 1, 0,
]);
geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));
외부 3D 모델 로드
실무에서는 Blender 등에서 제작한 모델을 불러오는 경우가 대부분입니다:
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
const loader = new GLTFLoader();
loader.load('/models/robot.glb', (gltf) => {
const model = gltf.scene;
model.scale.set(0.5, 0.5, 0.5);
scene.add(model);
});
glTF(.glb/.gltf)는 웹 3D의 사실상 표준 포맷으로, 메시·재질·애니메이션·스켈레톤을 하나의 파일에 담을 수 있습니다.
7. 성능 최적화 전략
3D 웹 애플리케이션에서 성능은 핵심 과제입니다. 주요 최적화 기법을 정리합니다.
Draw Call 최소화
GPU 성능 병목의 대부분은 Draw Call 수에서 발생합니다.
// 같은 지오메트리를 여러 개 배치할 때 — InstancedMesh 사용
const mesh = new THREE.InstancedMesh(geometry, material, 1000);
const dummy = new THREE.Object3D();
for (let i = 0; i < 1000; i++) {
dummy.position.set(Math.random() * 100, 0, Math.random() * 100);
dummy.updateMatrix();
mesh.setMatrixAt(i, dummy.matrix);
}
scene.add(mesh); // 1000개 객체를 단 1회 Draw Call로 렌더링
LOD (Level of Detail)
카메라와의 거리에 따라 디테일 수준을 조절합니다:
const lod = new THREE.LOD();
lod.addLevel(highDetailMesh, 0); // 가까울 때
lod.addLevel(mediumDetailMesh, 50); // 중간 거리
lod.addLevel(lowDetailMesh, 100); // 멀 때
scene.add(lod);
기타 최적화 체크리스트
텍스처: 2의 거듭제곱 크기 사용 (512×512, 1024×1024), 필요시 압축 텍스처(Basis/KTX2) 적용.
React 생태계 호환: 상태 관리(Zustand, Jotai), 라우팅 등과 자연스럽게 통합.
자동 리사이즈/dispose: Canvas 크기 변경 및 메모리 정리를 자동 처리.
drei 라이브러리: OrbitControls, Environment, Text3D 등 자주 쓰이는 유틸리티 컴포넌트 모음.
9. 실전 활용 사례
분야
사례
핵심 기술
제품 뷰어
Nike, Apple 등 제품 3D 미리보기
GLTFLoader, OrbitControls, PBR Material
데이터 시각화
3D 차트, 지구본 기반 데이터 맵
BufferGeometry, PointsMaterial, 셰이더
인터랙티브 웹
포트폴리오, 브랜드 사이트
ScrollControls, 애니메이션, 포스트프로세싱
게임
웹 기반 캐주얼 게임
물리 엔진(Cannon.js/Rapier), InstancedMesh
AR/VR
WebXR 기반 몰입형 경험
WebXRManager, XR Controllers
10. 프로젝트 시작 가이드
설치 및 기본 세팅
# npm으로 설치
npm install three
# Vite + Three.js 프로젝트 생성
npm create vite@latest my-3d-app -- --template vanilla
cd my-3d-app
npm install three
npm run dev
최소 실행 코드
import * as THREE from 'three';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// 기본 설정
const scene = new THREE.Scene();
scene.background = new THREE.Color(0x1a1a2e);
const camera = new THREE.PerspectiveCamera(
75, window.innerWidth / window.innerHeight, 0.1, 1000
);
camera.position.set(3, 3, 3);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
renderer.shadowMap.enabled = true;
document.body.appendChild(renderer.domElement);
// 조명
const ambientLight = new THREE.AmbientLight(0xffffff, 0.4);
scene.add(ambientLight);
const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);
directionalLight.position.set(5, 10, 5);
directionalLight.castShadow = true;
scene.add(directionalLight);
// 오브젝트
const cube = new THREE.Mesh(
new THREE.BoxGeometry(1, 1, 1),
new THREE.MeshStandardMaterial({ color: 0x6c5ce7, metalness: 0.3, roughness: 0.4 })
);
cube.castShadow = true;
cube.position.y = 0.5;
scene.add(cube);
const floor = new THREE.Mesh(
new THREE.PlaneGeometry(10, 10),
new THREE.MeshStandardMaterial({ color: 0x2d3436 })
);
floor.rotation.x = -Math.PI / 2;
floor.receiveShadow = true;
scene.add(floor);
// 컨트롤
const controls = new OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;
// 렌더 루프
function animate() {
requestAnimationFrame(animate);
cube.rotation.y += 0.01;
controls.update();
renderer.render(scene, camera);
}
animate();
// 리사이즈 대응
window.addEventListener('resize', () => {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
});
마무리
Three.js는 WebGL의 복잡성을 감추면서도 강력한 3D 그래픽 기능을 제공하는 라이브러리입니다. Scene Graph 기반의 직관적인 객체 모델, PBR 렌더링, 다양한 로더와 유틸리티를 통해 웹에서 고품질 3D 경험을 구현할 수 있습니다.
프론트엔드 개발자라면 React Three Fiber를 통해 기존 워크플로우에 자연스럽게 3D를 통합할 수 있고, 성능 최적화 기법(InstancedMesh, LOD, 텍스처 압축 등)을 적용하면 모바일 환경에서도 안정적인 렌더링이 가능합니다.
# 레포지토리 클론
git clone https://github.com/Chenjae-kr/LLM-RAG-Study.git
cd LLM-RAG-Study/01-basic-rag
# 가상환경 생성 (Python 3.8+)
python -m venv .venv
# 활성화 (macOS/Linux)
source .venv/bin/activate
# 활성화 (Windows)
.venv\Scripts\activate
# 의존성 설치
pip install -r requirements.txt
최소 요구사항
Python: 3.8 이상
메모리: 최소 4GB (임베딩 모델 로딩)
디스크: 최소 2GB (모델 캐시)
GPU: 선택사항 (CPU도 가능하지만 느림)
30초 데모
# 1. 샘플 문서 임베딩 (벡터 저장소 생성)
python ingest.py
# 출력 예시:
# Processing documents...
# Embedding 50 chunks...
# Vector store saved to ./vector_store
# 2. 질의 실행
python query_rag.py "인공지능이란 무엇인가요?"
# 출력:
# [Retrieved Context]
# - Document 1: "인공지능(AI)은 컴퓨터 시스템이 인간의 지능을 모방..."
#
# [Generated Answer]
# 인공지능은 기계가 인간처럼 학습하고 추론하는 기술입니다...
Basic RAG 파이프라인
1. 문서 수집 및 전처리 (Ingestion)
ingest.py 핵심 로직:
from pathlib import Path
from sentence_transformers import SentenceTransformer
import numpy as np
from utils import embed_texts, save_vector_store
# 1. 문서 로드
def load_documents(data_dir: str) -> list[str]:
"""텍스트 파일 읽기"""
documents = []
for file_path in Path(data_dir).glob("*.txt"):
with open(file_path, 'r', encoding='utf-8') as f:
documents.append(f.read())
return documents
# 2. 청킹 (Chunking)
def chunk_text(text: str, chunk_size: int = 512, overlap: int = 50) -> list[str]:
"""텍스트를 겹치는 청크로 분할"""
words = text.split()
chunks = []
for i in range(0, len(words), chunk_size - overlap):
chunk = ' '.join(words[i:i + chunk_size])
chunks.append(chunk)
return chunks
# 3. 임베딩 생성
def main():
documents = load_documents("./data")
# 모든 문서를 청크로 분할
all_chunks = []
for doc in documents:
all_chunks.extend(chunk_text(doc))
print(f"Total chunks: {len(all_chunks)}")
# 임베딩 모델 로드 (384차원)
embeddings = embed_texts(all_chunks, model_name="all-MiniLM-L6-v2")
# 벡터 저장소에 저장
save_vector_store(embeddings, all_chunks, "./vector_store")
print("✓ Vector store created successfully")
if __name__ == "__main__":
main()
청킹 전략 비교:
방법
장점
단점
권장 사용처
고정 크기
구현 간단, 빠름
문맥 경계 무시
구조화된 문서
문장 단위
문맥 보존
크기 불균일
자연어 텍스트
의미 기반
의미적 일관성 높음
느림, 복잡
고품질 요구 시
권장 설정:
chunk_size = 512 # 토큰 수 (약 300-400단어)
overlap = 50 # 10% 중첩으로 문맥 연결
2. 벡터 검색 (Retrieval)
utils.py의 검색 함수:
import numpy as np
from sentence_transformers import SentenceTransformer
def search(query: str, vector_store_path: str, top_k: int = 3):
"""코사인 유사도 기반 검색"""
# 1. 벡터 저장소 로드
embeddings, chunks = load_vector_store(vector_store_path)
# 2. 질의 임베딩
model = SentenceTransformer("all-MiniLM-L6-v2")
query_embedding = model.encode([query])[0]
# 3. 코사인 유사도 계산
similarities = np.dot(embeddings, query_embedding) / (
np.linalg.norm(embeddings, axis=1) * np.linalg.norm(query_embedding)
)
# 4. 상위 K개 반환
top_indices = np.argsort(similarities)[-top_k:][::-1]
results = [(chunks[i], similarities[i]) for i in top_indices]
return results
검색 품질 개선 팁:
top_k 조정: 3-5개 권장 (너무 많으면 노이즈 증가)
유사도 임계값: 0.5 이하 결과는 필터링 고려
재랭킹: Cross-Encoder로 2차 정렬 (후술)
3. 프롬프트 구성 및 생성 (Generation)
query_rag.py:
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from utils import search
def generate_answer(query: str, context: list[str], model_name: str = "google/flan-t5-small"):
"""컨텍스트 기반 답변 생성"""
# 1. 검색 결과를 프롬프트로 구성
context_text = "\n\n".join([f"[{i+1}] {text}" for i, text in enumerate(context)])
prompt = f"""다음 문서를 참고하여 질문에 답하세요.
문서:
{context_text}
질문: {query}
답변:"""
# 2. 모델 로드 및 생성
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
inputs = tokenizer(prompt, return_tensors="pt", max_length=1024, truncation=True)
outputs = model.generate(**inputs, max_new_tokens=256)
answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
return answer
# 메인 실행
if __name__ == "__main__":
query = "인공지능의 주요 응용 분야는?"
# 검색
results = search(query, "./vector_store", top_k=3)
contexts = [text for text, score in results]
# 출력: 검색된 문서
print("=== Retrieved Documents ===")
for i, (text, score) in enumerate(results):
print(f"\n[{i+1}] (Score: {score:.3f})")
print(text[:200] + "...")
# 생성
answer = generate_answer(query, contexts)
print("\n=== Generated Answer ===")
print(answer)
프롬프트 엔지니어링 팁:
# ❌ 나쁜 프롬프트
prompt = f"{context}\n\n{query}"
# ✅ 좋은 프롬프트
prompt = f"""당신은 정확한 답변을 제공하는 전문가입니다.
주어진 문서에만 기반하여 답변하세요. 확실하지 않으면 "문서에 정보가 없습니다"라고 답하세요.
문서:
{context}
질문: {query}
답변 (문서 기반):"""
AionUi는 무료, 로컬, 오픈소스 24/7 AI 협업 플랫폼입니다. Gemini CLI, Claude Code, Codex, Qwen Code, Goose CLI, Auggie 등 다양한 커맨드라인 AI 도구들을 통합하여 사용할 수 있는 그래픽 인터페이스를 제공합니다.
🎯 핵심 가치
AionUi는 단순히 CLI 도구의 GUI 래퍼가 아닙니다. 마치 Claude Cowork가 Claude Code를 더 쉽게 사용할 수 있게 만든 것처럼, AionUi는 모든 커맨드라인 AI 도구를 위한 통합 Cowork 플랫폼입니다.
AionUi는 Gemini CLI를 내장하고 있어 설치 후 바로 사용할 수 있습니다. 이미 Gemini CLI, Claude Code, CodeX, Qwen Code, Goose AI, Augment Code 등을 설치한 경우 자동으로 감지하여 통합 인터페이스를 제공합니다.
주요 특징:
✅ 자동 감지 + 통합 인터페이스
✅ 로컬 저장 + 다중 세션 지원
✅ 각 세션은 독립적인 컨텍스트 유지
🌐 2. 어디서나 접속 가능
24/7 AI 어비스턴트 - 어떤 기기에서든 접속!
출장 중, 집, 사무실 어디서나 WebUI 또는 다양한 채팅 플랫폼을 통해 AI 도구를 사용할 수 있습니다.
지원 접속 방법:
🌐 WebUI 모드
브라우저를 통해 어떤 기기에서든 접속 (폰, 태블릿, 컴퓨터)
LAN, 크로스 네트워크, 서버 배포 지원
QR 코드 스캔 또는 계정/비밀번호로 로그인
📱 채팅 플랫폼 통합
Telegram - 텔레그램에서 AI 어시스턴트와 직접 대화
Lark (Feishu) - 페이슈 봇을 통한 엔터프라이즈 협업
Slack 및 기타 플랫폼 곧 지원 예정 🚧
💡 설정 방법: AionUi 설정 → WebUI 설정 → 채널에서 Bot Token 설정!
⏰ 3. 예약 작업
AI가 자동으로 작업을 실행하도록 설정
예약 작업을 설정하면 AI 어시스턴트가 설정한 시간에 자동으로 작업을 실행합니다.
특징:
자연어 대화 - AI에게 일상적인 언어로 작업 지시
유연한 시간 설정 - 매일, 매주, 매월 모두 가능
간단한 관리 - 생성, 수정, 활성화/비활성화, 삭제, 조회 자유롭게
활용 사례:
예약된 데이터 수집
정기 보고서 생성
자동 파일 정리
예약 알림
📁 4. 스마트 파일 관리
배치 이름 변경, 자동 정리, 스마트 분류, 파일 병합
자동 정리: 콘텐츠를 지능적으로 식별하고 자동 분류
효율적인 배치 작업: 원클릭으로 이름 변경, 파일 병합
📄 5. 미리보기 패널
AI 생성 결과를 즉시 확인
9가지 이상 포맷의 시각적 미리보기 지원 (PDF, Word, Excel, PPT, 코드, Markdown, 이미지, HTML, Diff 등)
특징:
✅ 즉시 결과 확인 - AI가 파일 생성 후 앱 전환 없이 바로 미리보기
✅ 실시간 추적 + 편집 가능 - 파일 변경 자동 추적, Markdown/코드/HTML 실시간 편집 지원
최근 GPT나 제미니 같은 AI 모델의 성능에 대한 의구심과 더불어, AI 발전 속도가 둔화된 것이 아니냐는 시선도 있습니다. 그러나 이는 벤치마크의 포화 상태 때문인 착시 현상입니다.
AI가 이미 100점짜리 시험에서 만점을 받고 있기 때문에, 더 발전하더라도 점수로는 표현되지 않는 것입니다. 실제 AI는 더 복잡하고 어려운 현실 문제를 해결하며 끊임없이 성장하고 있습니다.
놀라운 성장 지표
특히 미터(MITRE) 조직의 연구에 따르면, AI가 독립적으로 해결할 수 있는 유효 작업 시간은 매 7개월마다 두 배로 길어지고 있습니다. 이는 반도체 발전 속도를 훨씬 뛰어넘는 놀라운 성장세입니다.
더욱 충격적인 것은 코딩 분야입니다. AI의 코딩 실력이 두 배로 향상되는 '더블링 타임'은 고작 70일에 불과합니다. 이는 인간 개발자가 수년 동안 쌓는 숙련도를 AI는 단 두 달 남짓 만에 달성할 수 있음을 의미합니다.
💡 핵심 인사이트: AI는 깃털처럼 가벼운 과제를 넘어 거대한 바위를 옮기는 것처럼 무거운 현실 문제를 지탱할 수 있는 기초 체력을 갖추고 있습니다.
새로운 무기: 지능형 빌딩 블록
레고처럼 조립하는 시대
우리는 지금 과거에 본 적 없던 두 개의 거대한 무기를 손에 쥐었습니다:
더 강력해진 지능
더 빨라진 속도
이제 누구나 AI 빌딩 블록 덕분에 압도적인 소프트웨어를 손쉽게 만들 수 있게 되었습니다. 복잡한 코드를 한 줄 한 줄 짜는 대신, 이미 완성된 지능형 레고 블록을 조립하는 시대가 온 것입니다.
주요 AI 빌딩 블록
거대 언어 모델 (LLM)
검색 증강 생성 (RAG)
에이전틱 워크플로
음성 AI
딥러닝
흥미로운 점은 LLM들이 딥러닝에 대해 이미 박사급 연구원 수준의 깊은 이해도와 구현 능력을 갖추고 있다는 사실입니다.
개인이 가능해진 일들
이제 여러분은 거대 기업이나 엘리트 개발팀조차 1년 전에는 엄두도 못 냈던 일들을 혼자서 해낼 수 있게 됐습니다. 과거 수백 명의 박사급 엔지니어가 필요했던 나사 프로젝트 같은 거대 과업도 이제는 방구석에서 랩탑 하나로 지휘하고 완성할 수 있습니다.
도구의 최전선을 놓치지 마라
미친 속도의 진화
AI 코딩 도구들은 자고 일어나면 세상이 바뀔 정도로 미친 듯이 발전하고 있습니다. 예를 들어:
앤트로픽의 클로드 코드
OpenAI의 GPT-5 O3 모델
구글의 제미나이 3
이들은 단순히 업데이트가 아닌 명백한 종의 진화에 가까운 거대 도약을 이루어냈습니다.
3개월의 법칙
최고의 도구는 3개월, 길어도 6개월마다 바뀔 것입니다. 이 무자비한 도구의 세계에서 단 반 세대, 즉 3개월만 뒤처져도 생산성은 회복 불가능할 정도로 치명적으로 떨어질 것입니다.
⚠️ 경고: 익숙함에 속아 뒤처진 도구를 고집하지 말고 항상 최신 도구를 갈아타는 유연함만이 대체 불가능한 존재가 될 유일한 생존 열쇠입니다.
새로운 병목: 기술이 아닌 결정
제품 관리의 시대
지금 우리 손에는 더 강력한 소프트웨어를 훨씬 더 빨리 만들 수 있는 힘이 주어졌습니다. 하지만 이 엄청난 속도 뒤에는 기묘한 역설이 숨어 있습니다.
실리콘 밸리의 현장 고수들은 이미 뼈저리게 느끼고 있지만 대중에게는 잘 알려지지 않은 불편한 진실은 바로 기술이 아니라 '결정'이 발목을 잡는 제품 관리의 병목 현상입니다.
진짜 문제는 무엇을 만들 것인가
이제 잘된 기획안을 던져주면 AI가 실제 코드로 바꾸는 것은 식은 죽 먹기보다 쉬워졌습니다. 진짜 문제는:
'도대체 무엇을 만들 것인가'라는 근본적인 질문
그 아이디어를 AI가 오해 없이 실행할 수 있도록 명확한 의도로 번역해내는 능력
현장 소장이 되어라
이제 여러분은 벽돌을 나르는 인부가 아니라 건축 결과를 평가하는 현장 소장이 된 것입니다. AI가 순식간에 지어 올린 결과물을 보고 사용자 피드백을 반영하여 설계도를 수정하고 재건축을 반복하며, 결국 사용자들이 살고 싶어 하는 완벽한 꿈의 집을 완성해 나가는 일, 이것이 바로 AI 시대의 창작입니다.
PM과 엔지니어의 비율 역전
무너지는 황금 비율
최근 실리콘 밸리 테크 기업에서 목격한 기이한 현상은 엔지니어와 제품 관리자(PM)의 인력 비율이 급격히 무너지고 있다는 점입니다.
전통적 비율
현재 추세
PM 1명 : 엔지니어 6-8명
PM 1명 : 엔지니어 1명
(황금 비율)
심지어 PM 2명 : 엔지니어 1명
속도의 불균형
AI 코딩 덕분에 엔지니어링 속도가 우주선처럼 날아가는데, 무엇을 만들지 결정하는 인간의 제품 관리 속도는 여전히 자전거를 타고 있습니다.
프로덕트 엔지니어가 되어라
공감하는 엔지니어의 부상
저는 현장에서 사용자와 대화하는 법을 익히고 피드백을 빨아들이며 깊이 공감할 줄 아는 엔지니어들이 무섭게 치고 올라오는 모습을 보고 있습니다.
이들은:
더 이상 기획서가 내려오길 기다리지 않음
사용자의 마음을 읽어 스스로 무엇을 만들지 결정
최고의 코딩 실력보다 공감 능력으로 승부
두 능력의 통합
🎯 핵심 조언: 직접 코드를 짜는 구현 능력과 사용자와 대화하며 제품을 비전하는 기획 능력, 이 두 능력을 하나로 통합한 '프로덕트 엔지니어'만이 AI 시대에 살아남을 수 있습니다.
누군가 완성된 기획서를 가져다주길 기다리지 말고, 여러분이 직접 코드를 짜고 다음에 무엇을 할지에 대한 직관을 믿고 결과물을 다듬어 나간다면 상상이 즉시 현실이 되는 압도적인 창조의 희열을 맛보게 될 것입니다.
동료가 모든 것을 결정한다
가장 강력한 예측 변수
여러분이 앞으로 얼마나 빠르게 배우고 성공을 거둘지 알 수 있는 가장 강력한 예측 변수는:
❌ 지능
❌ 노력
✅ 지금 여러분 곁에 어떤 사람들을 두고 있느냐
환경의 힘
흥미로운 사회학 연구 결과처럼, 가장 가까운 친구 다섯 명이 흡연자라면 여러분도 흡연자가 될 확률이 높습니다. 이는 환경의 영향력이 생각보다 훨씬 더 강력하다는 것을 보여줍니다.
가까운 친구 여럿이 치열하게 일하고 단호하게 결정하며 빛의 속도로 학습하고 AI로 세상을 바꾸려는 사람들이라면, 여러분 또한 그렇게 될 확률이 높습니다.
연결 조직의 힘
스탠포드의 비밀
전 세계가 주목하는 프런티어 랩의 내부를 들여다보면 마치 스탠포드 동문회와 같습니다:
GPT의 주역들
테슬라 자율주행의 아버지
앤트로픽을 이끄는 다리오 아모데이
그들의 커리어를 거슬러 올라가면 스탠포드 강의실이나 구글 브레인 연구실과 연결됩니다.
정보의 속도
세상을 뒤흔들 핵심 정보는 결코 여러분의 모니터 위나 구글 검색창에 먼저 나타나지 않습니다.
아침 뉴스나 X에서 접하는 정보들은 실리콘 밸리의 거물들이 새벽 2시에 주고받은 비밀스러운 텔레그램이나 통화를 통해 이미 단물이 빠진 지식의 부스러기일 뿐입니다.
📞 승패는 논문이 인쇄되기도 전 작동 여부를 묻는 짧은 전화 한 통에서 결정됩니다.
회사가 아닌 동료를 선택하라
화려한 브랜드의 함정
이제 여러분의 커리어 다음 행보를 결정하거나 회사 이직을 고민할 때, 성공을 결정짓는 것은 회사 이름표가 아닙니다.
그보다 훨씬 더 본질적인 매일 아침 눈을 떠서 밤늦게까지 살을 맞대며 일하게 될 '동료들'이 누구냐는 것입니다.
실제 사례
몇 년 전 스탠포드의 한 학생이 유명 빅테크 기업에 입사 제안을 받았지만, 회사는 그가 어떤 팀에서 일하게 될지 끝까지 말해주지 않았습니다.
그는 화려한 이름표를 믿고 계약했지만, AI 연구실이 아니라 지하 3층 레거시 자바 결제 처리 시스템 팀에 배정되었습니다. 이는 AI 최전선을 꿈꾸던 천재적인 머신러닝 전공자에게는 커리어 사형 선고나 다름없었습니다.
실용적 조언
만약 어떤 회사가 여러분이 배정될 팀과 매니저를 끝까지 숨긴다면 도망치십시오.
정말 좋은 팀과 프로젝트라면 왜 숨기겠습니까?
가장 핫한 브랜드라는 이름의 파티에 참석하는 대신, 때로는 회사의 로고가 그리 매력적이지 않더라도 진짜 실력자들이 모여 세상을 바꿀 일을 고민하는 '진짜배기 팀'을 찾아내십시오.
책임감과 허락받지 않는 혁신
책임감이라는 안전벨트
지금은 그 어느 때보다 강력한 소프트웨어를 쉽고 빠르게 만들 수 있는 시대이므로, 여러분에게 반드시 '책임감'을 가져야 한다는 의무가 생겼습니다.
사람을 해치는 소프트웨어는 만들지 마십시오.
엄청난 기회
동시에 여러분 각자가 세상에 내놓을 수 있는 결과물은 무궁무진합니다. 세상에는 해결을 기다리는 수많은 아이디어가 넘쳐나지만, 그것을 실제로 구현해 낼 엔지니어는 여전히 턱없이 부족합니다.
지금 세상에는 여러분이 직접 에이전트가 되어서 만들지 않으면 영영 세상에 나오지 못할 가치 있는 프로젝트들이 도처에 널려 있습니다.
허락받지 않는 혁신
팀장 승인, 교수의 허락, 투자 결정 같은 것은 필요 없습니다. '허락받지 않는 혁신', 그것이 바로 코딩이 우리에게 준 특권입니다.
지금은 실패 비용이 역사상 가장 저렴한 시대입니다. 설령 거창하게 시도했다가 망하더라도 잃는 것은 넷플릭스를 볼 수 있었던 주말 이틀뿐입니다.
지독한 노력의 가치
논란이 될 수 있는 조언
열심히 일하라고 독려하는 일이 마치 PC주의에 어긋난 일처럼 여겨지는 시대입니다. 하지만 저는 여러분께 감히 말씀드리고 싶습니다.
제발 지독할 정도로 열심히 일하십시오.
이해와 존중
물론 건강이나 환경 등의 이유로 지독하게 열심히 일하고 싶어도 그럴 수 없는 처지에 놓이는 때가 있습니다. 그분들이 지금 당장 전력 질주하지 못한다고 해서 그 가치가 훼손되지는 않으며, 우리는 그들을 마땅히 존중하고 지지하며 보살펴야 합니다.
변치 않는 진실
그럼에도 불구하고 제가 지켜본 수많은 성공한 제자들 중 단 한 명의 예외도 없이 믿을 수 없을 만큼 지독하게 일했다는 사실은 변치 않습니다.
모두가 잠든 새벽 2시, 정막한 연구실 모니터 앞에 홀로 앉아 모델의 하이퍼 파라미터 수치를 튜닝하며 밤새 씨름하던 그 고독하지만 위대한 시간 말입니다.
2026년의 선택
만약 제가 지금 2026년에 여러분이라면, 소파와 한 몸이 되어 넷플릭스 알고리즘이 떠먹여 주는 도파민에 주말을 헌납하는 대신, 그 주말을 전부 쏟아부어 나를 위해 일해 줄 에이전트 코더를 직접 설계하는 쪽을 택하겠습니다.
핵심 요약
생존을 위한 7가지 원칙
최신 도구를 놓치지 마라 - 3개월마다 바뀌는 도구의 최전선을 따라가라
프로덕트 엔지니어가 되어라 - 코딩과 제품 기획 능력을 통합하라
동료를 신중히 선택하라 - 회사 이름이 아닌 함께 일할 사람이 중요하다
연결 조직을 구축하라 - 네트워크가 여러분의 성장 속도를 결정한다
제품 관리 능력을 키워라 - 기술이 아닌 '무엇을 만들 것인가'가 병목이다
허락받지 말고 만들어라 - 책임감만 갖춘다면 누구의 허락도 필요 없다
지독하게 노력하라 - 예외 없이 모든 성공한 이들은 엄청나게 일했다
황금기의 메시지
저는 지금이 무언가를 만들어내려는 사람들에게 역사상 유례없는 골드러시, 즉 최고의 황금기라고 확신합니다.
AI가 독립적으로 해결할 수 있는 유효 작업 시간은 매 7개월마다 두 배로 길어지고 있으며, 코딩 실력의 더블링 타임은 고작 70일입니다.
이제 여러분은 거대 기업이나 엘리트 개발팀조차 1년 전에는 엄두도 못 냈던 일들을 혼자서 해낼 수 있게 됐습니다.
마치며
이것이 오늘 제가 여러분께 전하고 싶었던 이야기의 전부입니다.
지금 이 순간, 여러분 손에는 세상을 바꿀 수 있는 도구가 있습니다. 문제는 기술이 아닙니다. 문제는 여러분이 무엇을 만들 것인지, 누구와 함께 할 것인지, 그리고 얼마나 진지하게 임할 것인지입니다.
Claude Code는 Anthropic의 Claude AI를 터미널에서 직접 사용할 수 있는 강력한 CLI 도구입니다. 코드 작성, 파일 편집, 디버깅, 프로젝트 분석 등을 대화형으로 수행할 수 있으며, IDE와 통합하여 효율적인 개발 워크플로우를 구축할 수 있습니다.
이 가이드는 Claude Code의 설치부터 초기 설정, 주요 기능, 그리고 기본적인 사용법까지 다룹니다.
# 1. Node.js 버전 확인
node --version
# v20.x.x 이상이어야 함
# 2. Claude Code 전역 설치
npm install -g @anthropic-ai/claude-code
# 3. 설치 확인
claude --version
# 출력: claude-code v1.x.x
설치 중 권한 오류 발생 시:
# macOS/Linux: sudo 사용
sudo npm install -g @anthropic-ai/claude-code
# 또는 nvm 사용 (권장)
# nvm으로 설치한 Node.js는 권한 문제 없음
방법 2: npx로 임시 실행
설치 없이 바로 사용하고 싶다면:
# 설치 없이 실행
npx @anthropic-ai/claude-code
# 매번 최신 버전 사용
npx @anthropic-ai/claude-code@latest
장점:
설치 불필요
항상 최신 버전 사용
단점:
실행할 때마다 다운로드 (느림)
로컬 설정 유지 어려움
방법 3: 소스에서 빌드
개발자이거나 최신 개발 버전을 사용하려면:
# 1. 레포지토리 클론
git clone https://github.com/anthropics/claude-code.git
cd claude-code
# 2. 의존성 설치
npm install
# 3. 빌드
npm run build
# 4. 전역 링크
npm link
# 5. 실행 확인
claude --version
# Claude Code 실행
claude
# 처음 실행 시 API 키 입력 프롬프트
# API key를 입력하면 ~/.claude/config.json에 자동 저장
방법 2: 환경변수
# ~/.bashrc 또는 ~/.zshrc에 추가
export ANTHROPIC_API_KEY="sk-ant-api03-xxxxx..."
# 적용
source ~/.bashrc # 또는 source ~/.zshrc
# 테스트
claude chat "Hello"
방법 3: 설정 파일 직접 편집
# 설정 디렉토리 생성
mkdir -p ~/.claude
# 설정 파일 생성
cat > ~/.claude/config.json << 'EOF'
{
"apiKey": "sk-ant-api03-xxxxx...",
"model": "claude-sonnet-4-20250514",
"maxTokens": 8192
}
EOF
# 권한 설정 (보안)
chmod 600 ~/.claude/config.json
초기 설정 확인
# 설정 파일 위치 확인
claude config show
# API 연결 테스트
claude chat "Hello, Claude!"
# 출력 예시:
# Claude: Hello! How can I help you today?
기본 사용법
1. 대화형 모드 (Chat)
# 기본 실행
claude
# 프롬프트가 나타나면 질문 입력
You: Python으로 피보나치 수열을 구현해줘
Claude: 물론입니다. 재귀와 반복 두 가지 방식으로 구현해드리겠습니다.
[코드 생성...]
You: /exit # 종료
특수 명령어:
명령어
기능
/help
도움말 표시
/exit
종료
/clear
대화 기록 초기화
/save <file>
대화 내용 저장
/load <file>
대화 내용 불러오기
2. 단발성 질의
# 한 줄 명령
claude chat "Explain Git in one sentence"
# 파이프 활용
echo "Translate to Korean: Hello World" | claude chat
# 파일에서 프롬프트 읽기
claude chat < prompt.txt
# 결과를 파일로 저장
claude chat "Write a README for a Todo app" > README.md
3. 파일 편집
# 프로젝트 디렉토리에서 실행
cd my-project
# Claude에게 파일 수정 요청
claude edit "Fix the bug in src/app.js where the user login fails"
# 특정 파일 지정
claude edit --file src/utils.js "Add error handling to all functions"
# 여러 파일 동시 수정
claude edit "Refactor the authentication system"
동작 방식:
Claude가 관련 파일 자동 탐색
코드 분석 후 수정안 제시
사용자 승인 시 파일 직접 편집
Git diff 형식으로 변경사항 표시
4. 프로젝트 분석
# 전체 코드베이스 이해
claude analyze
# 특정 질문
claude analyze "Where is the user authentication implemented?"
# 아키텍처 다이어그램 요청
claude analyze "Draw the system architecture"
5. Git 통합
# 커밋 메시지 자동 생성
claude commit
# Pull Request 설명 작성
claude pr
# 코드 리뷰
claude review
# Homebrew 설치 (없는 경우)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Ollama 설치
brew install ollama
# 설치 확인
ollama --version
# 출력: ollama version 0.1.x
방법 2: 공식 설치 스크립트
curl -fsSL https://ollama.com/install.sh | sh
# 서비스 자동 시작 (macOS)
brew services start ollama
Linux 설치 (Ubuntu/Debian)
# 공식 설치 스크립트
curl -fsSL https://ollama.com/install.sh | sh
# systemd 서비스로 자동 시작
sudo systemctl enable ollama
sudo systemctl start ollama
# 상태 확인
sudo systemctl status ollama
수동 설치 (바이너리):
# 최신 릴리스 다운로드
curl -L https://github.com/ollama/ollama/releases/latest/download/ollama-linux-amd64 -o ollama
# 실행 권한 부여
chmod +x ollama
# PATH에 추가
sudo mv ollama /usr/local/bin/
# 데몬 실행
ollama serve &
Windows 설치
WSL2 사용 (권장):
# PowerShell에서 WSL2 설치
wsl --install
# Ubuntu 재시작 후 WSL 터미널에서
curl -fsSL https://ollama.com/install.sh | sh
네이티브 Windows (실험적):
# Chocolatey로 설치
choco install ollama
# 또는 공식 Windows 인스톨러 다운로드
# https://ollama.com/download/windows
Docker 설치 (플랫폼 독립)
# CPU 전용
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
# NVIDIA GPU 지원
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
# 실행 확인
curl http://localhost:11434/api/version
설치 확인
# 1. 버전 확인
ollama --version
# 2. 서버 상태 확인
curl http://localhost:11434/api/tags
# 3. 테스트 모델 실행
ollama run llama3:8b
모델 관리 완전 가이드
인기 모델 카탈로그
모델
파라미터
크기
RAM 요구
속도
품질
주요 용도
llama3:8b
8B
4.7GB
8GB
★★★★☆
★★★★☆
범용 (추천 시작점)
llama3:70b
70B
40GB
64GB
★★☆☆☆
★★★★★
고품질 작업
mistral:7b
7B
4.1GB
6GB
★★★★★
★★★☆☆
빠른 응답 필요 시
mixtral:8x7b
47B
26GB
32GB
★★★☆☆
★★★★★
복잡한 추론
codellama:13b
13B
7.4GB
16GB
★★★☆☆
★★★★☆
코드 생성
phi-2
2.7B
1.7GB
4GB
★★★★★
★★☆☆☆
저사양 환경
gemma:7b
7B
5.0GB
8GB
★★★★☆
★★★★☆
Google 모델
모델 다운로드
# 기본 다운로드 (최신 버전)
ollama pull llama3:8b
# 특정 양자화 버전 (메모리 절약)
ollama pull llama3:8b-q4_0 # 4-bit 양자화 (3.5GB)
ollama pull llama3:8b-q8_0 # 8-bit 양자화 (7.0GB)
# 여러 모델 동시 다운로드
ollama pull llama3:8b & \
ollama pull mistral:7b & \
ollama pull codellama:13b &
wait
echo "모든 모델 다운로드 완료"
모델 조회 및 삭제
# 로컬 모델 목록
ollama list
# 출력 예시:
# NAME ID SIZE MODIFIED
# llama3:8b a6f7e2f3c1d8 4.7GB 2 days ago
# mistral:7b b8c9d0e1f2a3 4.1GB 1 week ago
# 모델 상세 정보
ollama show llama3:8b
# 모델 삭제
ollama rm mistral:7b
# 디스크 공간 확인
du -sh ~/.ollama/models