Jump Desktop으로 iPad에서 Mac 원격 접속 3가지 방법 비교

iPad로 MacBook을 원격 제어하고 싶어서 여러 방법을 시도했다. 결론부터 말하면, Jump Desktop의 Fluid 프로토콜이 가장 만족스러웠다. Chrome 원격 데스크톱으로 시작해서 Tailscale + macOS 화면 공유를 거쳐, 최종적으로 Jump Desktop에 정착하기까지 꽤 많은 시행착오를 겪었다. MacBook M1 32GB를 메인 개발 머신으로 쓰고 있는데, 외출할 때 iPad 하나만 들고 나가서 작업을 이어가고 싶었던 게 시작이었다. 이 글에서는 … 더 읽기

MCP 보안 가이드 — AI Agent 시스템 접근 시 주의할 점 5가지

MCP 보안 — 설정 및 실행 결과 화면

MCP(Model Context Protocol)를 처음 세팅했을 때, 솔직히 감탄부터 나왔다. Claude Code에서 “이 폴더 구조 좀 정리해줘”라고 하면 진짜 파일을 읽고 옮기고 삭제까지 해준다. DB MCP를 연결하면 “지난달 매출 데이터 뽑아줘”라고 했을 때 실제 쿼리를 날려서 결과를 보여준다. 마치 시스템 관리자를 한 명 더 고용한 느낌이었다. 그런데 열흘 정도 쓰다 보니 등골이 서늘해지는 순간이 왔다. 파일시스템 … 더 읽기

MCP 서버 직접 만들어본 후기 — AI Agent에 로컬 도구 5단계 연결

MCP 서버 — 설정 및 실행 결과 화면

AI 코딩 도구를 쓰다 보면 한 가지 답답한 순간이 온다. “이 파일 읽어줘”라고 했는데 못 읽고, “DB에서 이 테이블 구조 확인해봐”라고 했는데 접근 권한이 없다고 하는 그 순간이다. Claude나 GPT가 아무리 똑똑해도, 내 로컬 환경에 있는 파일이나 데이터베이스에 직접 접근할 수 없으면 결국 내가 복사-붙여넣기를 해줘야 한다. 이 문제를 해결하기 위해 Anthropic에서 공개한 프로토콜이 MCP(Model … 더 읽기

Cursor AI + Claude 연동하기 — Mac에서 AI 코딩 환경 4단계 세팅

Cursor — 설정 및 실행 결과 화면

VS Code를 5년 넘게 쓰다가 Cursor로 갈아탄 지 6개월 정도 됐다. 처음에는 “또 하나의 AI 에디터겠지” 싶었는데, Claude 모델과 제대로 연동하고 나니 코딩 방식 자체가 바뀌었다. 함수 하나 짤 때 레퍼런스 찾으러 브라우저 왔다 갔다 하던 시간이 거의 사라졌고, 특히 Composer 모드에서 여러 파일을 동시에 수정하는 워크플로우는 한번 맛보면 돌아가기 어렵다. 다만 Cursor는 설치만 하면 … 더 읽기

Ollama로 Mac M1에서 로컬 LLM 돌리기 — 32GB 최적 모델 5가지 비교

Ollama — 설정 및 실행 결과 화면

클라우드 API 비용이 부담스러운 건 나만의 문제가 아닐 거다. GPT-4o 한 달 쓰면 $20은 기본이고, Claude API로 자동화 파이프라인 돌리면 토큰 비용이 눈에 보이게 쌓인다. 그래서 로컬 LLM을 세팅하기로 했다. 내 메인 장비는 MacBook Pro M1 32GB인데, 결론부터 말하면 — 13B 모델까지는 쾌적하게, 30B급도 느리지만 돌아간다. Ollama 덕분에 세팅도 5분이면 끝난다. 이 글은 M1 32GB … 더 읽기

Claude Code Mac M1 세팅부터 첫 프로젝트까지 — CLI 4단계 실전 구성

Claude Code — 설정 및 실행 결과 화면

Claude Code는 Anthropic이 공식으로 만든 CLI 기반 AI 코딩 에이전트다. VS Code 확장이 아니라 터미널에서 직접 실행하는 방식이라, 처음 접하면 “이걸 어떻게 쓰는 거지?” 싶을 수 있다. 나도 처음 설치할 때 Node.js 버전 문제부터 API 키 설정, 권한 모드까지 한참을 헤맸다. 특히 M1 Mac에서는 ARM 네이티브 관련 이슈가 하나씩 튀어나와서, 공식 문서만으로는 부족한 부분이 꽤 … 더 읽기

GitHub Actions 배포 자동화 5단계 — 블로그 CI/CD 파이프라인 구축

GitHub Actions — 설정 및 실행 결과 화면

블로그에 글을 올릴 때마다 수동으로 빌드하고 배포하는 건, 한두 번은 괜찮지만 반복되면 상당한 시간 낭비입니다. hugo build 치고, 결과물 확인하고, FTP나 rsync로 올리고, 혹시 잘못된 건 없나 확인하고… 이 루틴을 매번 반복하다 보면, 글 쓰는 시간보다 배포하는 시간이 더 길어지는 날이 옵니다. 나는 Hugo로 블로그를 운영하면서, 초반에는 로컬에서 빌드하고 Cloudflare Pages에 수동으로 푸시하는 방식을 썼다. … 더 읽기

Whisper 자막 추출 3단계 — 유튜브 영상 자동 자막 무료 생성 가이드

Whisper — 설정 및 실행 결과 화면

유튜브 강의 영상의 핵심 내용을 텍스트로 정리하고 싶을 때, 자막 추출이 가장 빠른 방법입니다. 1시간짜리 컨퍼런스 발표를 노트 정리하거나, 영어 강의를 한국어로 번역하기 전에 원문 텍스트를 뽑아야 할 때, 또는 팟캐스트 내용을 블로그로 재가공할 때 — 이 모든 작업의 시작점이 음성-텍스트 변환입니다. OpenAI가 오픈소스로 공개한 Whisper를 쓰면 API 비용 없이 로컬에서 이 작업을 전부 처리할 … 더 읽기

Python으로 Telegram 알림봇 10분 만에 완성한 방법

이 글을 끝까지 따라하면, 텔레그램으로 서버 상태 알림을 받을 수 있는 봇이 완성된다. 배포 성공하면 “✅ 배포 완료”가 날아오고, 서버 CPU가 90%를 넘으면 “🔥 서버 과부하” 경고가 폰에 뜨는 그 봇을 말하는 거다. 슬랙이나 디스코드 웹훅도 써봤지만, 결국 가장 빠르게 확인하는 건 텔레그램이었다. 앱 알림이 바로 오니까. 나는 사이드 프로젝트 서버를 모니터링하려고 텔레그램 봇을 처음 … 더 읽기

Claude API JSON 파싱 에러 해결 3가지 방법

Claude API — JSON 파싱 에러 발생 화면

Claude API에 “결과를 JSON으로 줘”라고 분명히 요청했는데, json.loads()에서 JSONDecodeError가 터진 경험이 있는가? 나는 처음 Claude API를 프로덕션에 붙이던 날, 테스트 환경에서는 멀쩡하던 파싱 로직이 실서버에서 연달아 터지는 걸 보고 한참을 헤맸다. 원인은 단순했지만, 모르면 꽤 오래 삽질하게 되는 종류의 문제이다. 이 글에서는 Claude API 응답에서 JSON 파싱이 실패하는 대표적인 원인 4가지와, 각각에 대한 구체적인 해결 … 더 읽기