바이브코딩 완벽 매뉴얼
Claude 4종 완벽 가이드, Supabase, Vercel, GitHub, VS Code 사용법을 한곳에서 확인하세요.
Claude
모바일-앱, 웹, 데스크톱-앱, Code 4종 완벽 가이드. 설치부터 활용까지.
GitHub
Git 명령어, 저장소 관리, GitHub Flow, 마크다운, Actions까지.
Supabase
PostgreSQL 기반 BaaS. DB, Auth, Storage, 벡터 DB & AI까지.
Vercel
AI Cloud 배포 플랫폼. 프레임워크, Functions, AI SDK까지.
VS Code
코드 편집기. 확장 프로그램과 단축키로 생산성 극대화.
설치 순서 로드맵
VS Code 설치
코드 편집기가 모든 개발의 시작점입니다. 터미널, Git, 확장 프로그램을 한 곳에서 사용합니다.
winget install Microsoft.VisualStudioCode
자세히 보기 →
Node.js 설치
JavaScript 런타임. npm(패키지 매니저)이 함께 설치되어 Claude Code, Vercel CLI 등을 설치할 수 있습니다.
winget install OpenJS.NodeJS.LTS
설치 확인:
node -v && npm -v
GitHub 계정 생성 & 설정
코드 호스팅 플랫폼. 계정 생성 후 Git 사용자 정보와 SSH 키를 설정합니다.
git config --global user.name "이름"
git config --global user.email "이메일"
자세히 보기 →
Claude Code 설치
AI 코딩 어시스턴트. Node.js가 설치된 상태에서 npm으로 설치합니다.
npm install -g @anthropic-ai/claude-code
실행:
claude
자세히 보기 →
Supabase 프로젝트 생성
백엔드 서비스. 웹에서 회원가입 후 프로젝트를 생성하고, 클라이언트 라이브러리를 설치합니다.
npm install @supabase/supabase-js
자세히 보기 →
Vercel 연결 & 배포
배포 플랫폼. GitHub 저장소를 연결하면 push마다 자동 배포됩니다.
npm install -g vercel
로그인:
vercel login → 배포: vercel --prod
자세히 보기 →
개발 시작!
모든 도구가 준비되었습니다. VS Code에서 터미널을 열고 claude를 실행하면 AI와 함께 개발을 시작할 수 있습니다.
code . && claude
Claude 4종 소개
Claude는 모바일-앱, 웹, 데스크톱-앱, Claude Code 4가지 접근방식을 제공합니다.
왜 Claude인가?
Claude는 Anthropic이 만든 AI 어시스턴트로, 헌법적 AI(Constitutional AI) 철학에 기반한 안전하고 유용한 도구입니다. 모바일-앱이 가위라면 Claude Code는 다기능 공구입니다. 4가지 접근방식을 모두 활용하면 강력한 통합 AI 작업환경을 구축할 수 있습니다.
4종 비교
| 기능 | 모바일-앱 | 웹 | 데스크톱-앱 | Claude Code |
|---|---|---|---|---|
| 기본 AI 대화 | O | O | O | O |
| 대화 기록 동기화 | O | O | O | X |
| 음성 입력 | O | X | X | X |
| 카메라 연동 | O | X | X | X |
| Artifacts 표시 | O | O | O | X |
| 파일 생성/다운로드 | X | O | O | O |
| 로컬 파일 접근 | X | X | O (MCP) | O |
| 시스템 명령 실행 | X | X | X | O |
| 프로그램 자동 설치 | X | X | X | O |
| Git 명령 실행 | X | X | 일부 | O |
각 접근방식 특징
- 모바일-앱 - 이동 중 음성 대화, 카메라 연동, 즉석 질문. iOS/Android 지원
- 웹 - 설치 없이 브라우저에서 바로 사용. Excel, PPT, PDF 파일 생성 가능
- 데스크톱-앱 - PC 전용 독립 앱. MCP 서버로 로컬 파일 접근, Memory 기능
- Claude Code - 터미널 기반 AI 어시스턴트. 시스템 명령 실행, 파일 직접 편집, Git 통합, 자동화
통합 작업환경 구성
모든 도구를 유기적으로 연결하면 강력한 AI 워크스테이션이 됩니다:
- Claude Code (메인) - 개발/자동화/파일 작업의 중심
- 데스크톱-앱 - MCP 연동, Artifacts 미리보기, 긴 문서 분석
- 모바일-앱 - 음성 대화로 빠른 질문, 이동 중 작업 확인
- VS Code - 코드 편집 + 내장 터미널에서 Claude Code 실행
3가지 모델 체계
- Haiku (경량) - 응답 0.25~0.5초, 간단한 분류/요약/번역. 입력 $0.80/출력 $4.00 (백만 토큰당)
- Sonnet (균형) - 범용 코딩/문서 작성/분석. 무료 사용 가능. 입력 $3/출력 $15
- Opus (고성능) - 복잡한 추론/창의적 작업/아키텍처 설계. 입력 $15/출력 $75
설치 가이드 (7단계)
Claude 4종과 VS Code를 단계별로 설치합니다. 약 3시간이면 모두 완료됩니다.
1단계: 모바일-앱 설치
- App Store(iOS) 또는 Google Play(Android)에서 "Claude" 검색
- "Claude by Anthropic" 앱 설치
- 이메일 주소 입력 → 인증 코드 6자리 입력 → 로그인 완료
2단계: 웹 설치
https://claude.ai접속- PWA 설치: Chrome 주소창 우측 "앱에서 열기" 아이콘 클릭 → 작업 표시줄에 고정
- 동일 계정으로 로그인하면 모바일-앱과 대화 기록 자동 동기화
3단계: 데스크톱-앱 설치
https://claude.ai/download접속- 운영체제에 맞는 설치 파일 다운로드 (Windows / Windows arm64)
- 설치 파일 더블클릭 → 자동 설치 → 바탕화면 바로가기 생성
- 빠른 호출:
Ctrl+Alt+Space로 어디서든 Claude 창 호출
4단계: 공통 프로그램 설치
Node.js 설치 (Claude Code와 MCP 서버 실행에 필수)
# https://nodejs.org 에서 LTS 버전 다운로드 후 설치
node --version
npm --version
Git 설치 (버전 관리, npm 패키지 의존성)
# https://git-scm.com/downloads/win 에서 다운로드 후 설치
git --version
5단계: Claude Code 설치
# Claude Code 설치
npm install -g @anthropic-ai/claude-code
# 설치 확인
claude --version
# 실행
claude
최초 실행 시 로그인 방식을 선택합니다:
- 1. Claude account with subscription (권장) - 기존 Claude 계정 연동
- 2. Anthropic Console account - API 사용량 기반 과금
웹 브라우저에서 인증 승인 후 로그인이 완료됩니다.
6단계: 데스크톱-앱에 MCP 연결
MCP(Model Context Protocol)는 데스크톱-앱이 로컬 파일과 프로그램에 접근할 수 있게 해주는 연결 도구입니다.
설치할 MCP 서버 3종:
- filesystem - 로컬 파일 읽기/쓰기/관리
- memory - 대화 간 정보 저장, 컨텍스트 유지
- anthropic - 6종 특수 도구 (vision, multi_turn 등)
가장 쉬운 방법: Claude Code에게 요청
"내부 MCP 서버 3종을 설치하고 설정해줘"
수동 설치:
# Filesystem & Memory 서버 설치
npm install -g @modelcontextprotocol/server-filesystem
npm install -g @modelcontextprotocol/server-memory
설정 파일 위치: C:\Users\[사용자]\AppData\Roaming\Claude\claude_desktop_config.json
{
"mcpServers": {
"filesystem": {
"command": "node.exe",
"args": ["...server-filesystem/dist/index.js", "G:\\내 드라이브\\MyTask"]
},
"memory": {
"command": "node.exe",
"args": ["...server-memory/dist/index.js"]
},
"anthropic": {
"command": "node.exe",
"args": ["C:\\AnthropicMCP\\dist\\index.js"],
"env": { "ANTHROPIC_API_KEY": "sk-ant-api03-..." }
}
}
}
설정 후 데스크톱-앱을 재시작하면 MCP 연결이 활성화됩니다.
7단계: VS Code 설치
https://code.visualstudio.com에서 다운로드- 설치 시 모든 옵션 체크 (PATH 추가, 우클릭 메뉴 등)
- 한국어 설정: 확장 프로그램에서
Korean Language Pack설치 - Claude Code 연동:
Ctrl + `로 터미널 열고claude실행
기본 사용법
일상적으로 사용하는 핵심 기능들입니다.
주요 슬래시 명령어
/help- 도움말 및 사용 가능한 명령어 목록 보기/clear- 대화 내역 완전 삭제 후 새로 시작/compact- 대화를 요약하여 컨텍스트 공간 확보 (맥락 유지)/cost- 현재 세션의 토큰 사용량 및 비용 확인/init- 프로젝트 분석 후 CLAUDE.md 파일 자동 생성/config- Claude Code 설정 변경 (테마, 모델 등)/model- 사용할 AI 모델 변경 (Opus, Sonnet 등)/permissions- 도구 권한 설정 확인 및 변경/status- 현재 세션 상태 정보 표시/review- 현재 코드 변경사항 리뷰 요청/pr-comments- GitHub PR 코멘트 확인/vim- Vim 키바인딩 모드 토글/terminal-setup- 터미널 Shift+Enter 키 설정/doctors- Claude Code 설치 상태 진단/bug- 버그 리포트 제출/login- 계정 로그인 또는 전환/logout- 현재 계정 로그아웃/add-dir- 작업 디렉토리 추가 (멀티 폴더 작업)/mcp- MCP 서버 연결 상태 확인/memory- CLAUDE.md 메모리 파일 편집
주요 CLI 플래그
claude -p "질문"- 비대화형 모드 (한 번 실행 후 종료)claude --model opus- 특정 모델로 시작claude --resume- 이전 대화 이어서 시작claude --continue- 가장 최근 대화 이어서 시작claude --dangerously-skip-permissions- 권한 확인 건너뛰기 (CI용)
파일 작업 요청
# 파일 수정 요청
"login 함수에 에러 핸들링 추가해줘"
# 새 파일 생성
"사용자 인증 미들웨어 만들어줘"
# 버그 수정
"이 에러 원인 찾아서 고쳐줘"
권한 모드
- 읽기 - 파일 읽기, 검색 (자동 허용)
- 쓰기 - 파일 수정, 생성 (확인 필요)
- 실행 - 셸 명령 실행 (확인 필요)
주요 에러 메시지 및 해결법
Claude Code 사용 중 자주 만나는 에러 메시지와 해결 방법입니다.
-
Context limit reached컨텍스트 창 토큰 한도 초과./compact로 요약하거나/clear로 초기화 -
Invalid API keyAPI 키가 잘못되었거나 만료됨.ANTHROPIC_API_KEY환경변수 재설정 필요 -
Rate limit exceededAPI 호출 한도 초과. 잠시 기다린 후 재시도하거나 요금제 확인 -
Permission denied파일/명령 실행 권한 거부. 프롬프트에서 허용하거나/permissions에서 설정 -
ENOENT: no such file or directory파일 또는 디렉토리가 존재하지 않음. 경로를 확인하고 올바른 위치에서 실행 -
Connection refused / Network error네트워크 연결 실패. 인터넷 연결 상태 및 프록시/VPN 설정 확인 -
Overloaded - Too many requestsAnthropic 서버 과부하 상태. 몇 분 후 재시도 -
Command not found: claudeClaude Code가 설치되지 않았거나 PATH에 없음. 재설치 필요 -
EPERM: operation not permittedOS 수준 파일 권한 문제. 관리자 권한으로 실행하거나 파일 권한 변경 -
Token budget exceeded단일 요청의 토큰 예산 초과. 요청을 더 작은 단위로 분할하여 시도 -
MCP server connection failedMCP 서버 연결 실패./mcp로 상태 확인 후 설정 파일 점검 -
Git: not a git repository현재 폴더가 Git 저장소가 아님.git init으로 초기화 필요 -
Timeout: command exceeded time limit명령 실행 시간 초과. 작업을 분할하거나 타임아웃 설정 조정 -
CLAUDE.md not found프로젝트 설정 파일 없음./init명령어로 자동 생성 가능 -
Billing limit reached월간 사용 한도 도달. Anthropic 콘솔에서 결제 정보 및 한도 확인 -
Unable to read file (binary)바이너리 파일은 읽기 불가. 텍스트 기반 파일만 지원됨 -
Session expired세션이 만료됨./login으로 재로그인하거나 새 세션 시작 -
npm ERR! code EACCESnpm 글로벌 설치 권한 부족.sudo사용 또는 npm prefix 경로 변경 -
Unsupported Node.js versionNode.js 버전이 너무 낮음. Node.js 18 이상으로 업데이트 필요 -
Tool execution failed도구(Bash, Read 등) 실행 실패. 대상 파일/명령이 유효한지 확인
고급 기능
생산성을 높이는 고급 활용법입니다.
비대화형 모드
# 한 번에 명령 실행
claude -p "이 프로젝트의 구조 설명해줘"
# 파이프 입력
cat error.log | claude -p "이 에러 분석해줘"
CLAUDE.md 설정
프로젝트 루트에 CLAUDE.md 파일을 만들어 프로젝트 컨텍스트를 제공합니다:
# CLAUDE.md
이 프로젝트는 Next.js 14 + Supabase 기반입니다.
- 컴포넌트는 src/components에 위치
- API 라우트는 src/app/api에 위치
- Supabase 클라이언트는 src/lib/supabase.ts
MCP 서버 연동
MCP(Model Context Protocol)는 "AI를 위한 USB-C"로, 외부 시스템과 AI를 표준화된 방식으로 연결합니다.
# .claude/settings.json
{
"mcpServers": {
"supabase": {
"command": "npx",
"args": ["-y", "@supabase/mcp-server"]
}
}
}
연결 가능한 외부 MCP 서버: GitHub, Google Drive, Slack, PostgreSQL, Docker, Puppeteer, Notion, Jira 등
서브 에이전트 시스템
복잡한 작업을 전문 영역별로 분해하여 독립된 컨텍스트에서 병렬 처리합니다.
- 각 서브 에이전트가 200K 토큰의 독립 컨텍스트 보유
- 메인 오케스트레이터가 전체 계획 관리, 전문 에이전트에게 작업 위임
- 예: 요구사항 분석 → 구현 → 테스트 → 검토 각 단계를 전문 에이전트가 처리
작업 모드 3가지
- 일반 모드 - 파일 수정 전 매번 사용자 승인 요청 (기본값)
- 자동 수정 모드 - 파일 수정을 자동 승인하여 즉시 실행.
Shift+Tab으로 전환 - 플래닝 모드 - 작업 실행 전 전체 계획을 먼저 제시하고 승인받음
주요 도구 목록
/tools 명령어로 확인 가능:
Bash- 시스템 명령어 실행Read/Write/Edit- 파일 읽기/생성/수정Grep/Glob- 파일 내용/이름 검색WebSearch/WebFetch- 웹 검색/페이지 가져오기Task- 서브 에이전트 실행TodoWrite- 작업 목록 관리
VS Code 연동
VS Code와 Claude Code를 결합하면 AI 지원 통합 개발 환경이 완성됩니다.
VS Code에서 Claude Code 사용하기
# 1. VS Code 내장 터미널 열기: Ctrl + ` (백틱)
# 2. Claude Code 실행
claude
# 3. 원하는 폴더에서 VS Code 열기
code .
필수 확장 프로그램
한국어 지원
Korean Language Pack- VS Code 메뉴를 한국어로 변경
AI 어시스턴트
Claude Code- 터미널 기반 AI 코딩 어시스턴트Continue- 여러 AI를 동시 활용한 코드 작성 지원
공통 도구
Material Icon Theme- 파일 종류별 아이콘 표시GitLens- 파일 변경 이력과 작성자 확인Markdown All in One- 마크다운 자동완성과 미리보기Live Server- HTML 파일 실시간 브라우저 미리보기REST Client- API 테스트를 VS Code에서 실행Todo Tree- 할 일 목록 정리PDF Viewer- PDF 파일을 VS Code에서 열기
개발 전용
Python+Pylance- Python 코드 실행/디버깅/자동완성Auto Rename Tag- HTML 태그 자동 변경Path Intellisense- 파일 경로 자동완성JavaScript (ES6) Snippets- JS 코드 스니펫
권장 설정
- 자동 저장: 파일 → 자동저장 선택 (작업 손실 방지)
- 괄호 색상: 설정에서
editor.bracketPairColorization.enabled: true
사용료 체계
6가지 요금제와 5시간 리셋 시스템을 이해합니다.
요금제 비교
| 플랜 | 가격 | 5시간당 메시지 | 모델 | Claude Code |
|---|---|---|---|---|
| Free | 무료 | 10~15개 | 자동 선택 | X |
| Pro | $20/월 | 45개 | Haiku/Sonnet/Opus | O |
| Max 5x | $100/월 | 225개 | 전체 | O |
| Max 20x | $200/월 | 900개 | 전체 | O |
| Team | $30/월/인 | ~225개 | 전체 | Premium Seat |
| Enterprise | 맞춤 견적 | 맞춤 | 전체 + 커스텀 | Premium Seat |
5시간 리셋 시스템
Claude는 첫 메시지 시점부터 5시간 단위로 사용량이 리셋됩니다.
- 오전 9:00에 첫 메시지 → 오후 2:00에 리셋
- 미사용분은 누적 가능 (일일 최대치까지)
- 새벽 3~7시: 서버 한산, 응답 빠름, 대량 처리 적합
토큰이란?
AI가 텍스트를 처리하는 기본 단위입니다. 1토큰 ≈ 영어 3~5글자 ≈ 한글 2~3글자
- "안녕하세요" → 약 3토큰
- A4 1장 (2,000자) → 약 1,000토큰
- 이미지 1장 → 약 1,000~5,000토큰
- PDF 10페이지 → 약 10,000토큰
출력 토큰은 입력 토큰보다 5배 비쌉니다. AI가 텍스트를 생성하는 것이 이해하는 것보다 계산적으로 더 복잡하기 때문입니다.
모델별 토큰 요금 (백만 토큰당)
| 모델 | 입력 | 출력 | 특징 |
|---|---|---|---|
| Haiku | $0.80 | $4.00 | 가장 저렴, 빠름 |
| Sonnet | $3.00 | $15.00 | 균형형 (기본 추천) |
| Opus | $15.00 | $75.00 | 최고 성능 (Haiku 대비 19배) |
플랜 추천
- Free - AI 처음 체험, 주 2~3회 사용, 테스트 목적
- Pro - 매일 1시간 이상 사용하는 직장인, 개발자, 콘텐츠 크리에이터
- Max 5x - 전문 개발자, AI 기반 서비스 운영자, 대량 콘텐츠 제작
- Max 20x - AI 스타트업, 대규모 자동화 시스템, 풀타임 AI 활용 전문가
토큰 절감 방안 9가지
토큰 사용량을 줄여 비용을 절약하는 실전 방법입니다.
1. 대화 및 컨텍스트 관리
매번 질문할 때마다 이전 대화 전체가 토큰으로 계산됩니다. 10~15개 메시지마다 새 대화를 시작하고, 20개 메시지 후 핵심을 5줄로 요약하여 새 대화에 복사하세요.
효과: 토큰 사용량 80% 감소
2. 파일 업로드 최소화
100페이지 PDF 통째 업로드 대신, 필요한 페이지/섹션만 텍스트로 복사-붙여넣기 하세요.
효과: 토큰 사용량 95% 감소
3. 모델 선택 전략
- Haiku - 간단한 번역, 요약, 데이터 정렬
- Sonnet - 일반 프로그래밍, 문서 작성 (기본 추천)
- Opus - 고난도 알고리즘, 복잡한 디버깅, 창의적 문제 해결
효과: 단순 작업에 Haiku 사용 시 Opus 대비 19배 절감
4. 템플릿 활용
반복 작업(코드 리뷰, 일일 보고서 등)을 템플릿으로 저장하고 변경 부분만 수정하세요.
효과: 월 135,000 토큰 절감
5. 이미지 사용 최소화
이미지 1장 = 텍스트 5페이지 토큰. 핵심 부분만 캡처한 1~2장 + 텍스트 설명으로 대체하세요.
효과: 토큰 사용량 76% 감소
6. 프롬프트 간소화
인사말 없이 핵심만 간결하게. 구조화된 형식(작업/언어/목적/코드)으로 작성하세요.
효과: 토큰 사용량 25% 감소
7. 병렬 처리 활용
한 대화에서 여러 프로젝트 혼재 대신, 프로젝트별 독립 세션으로 분리하세요.
효과: 토큰 사용량 30% 감소
8. 배치 처리 (API 전용)
대량 작업(1,000개 리뷰 분석 등)을 배치로 일괄 처리하면 50% 할인됩니다. 최대 10,000개/배치.
효과: 토큰 사용량 50% 감소
9. 프롬프트 캐싱 (API 전용)
자주 사용하는 시스템 프롬프트를 캐시하면 5분간 재사용 가능. 캐시 읽기는 기본 가격의 10%만 소요.
효과: 토큰 사용량 최대 90% 감소
Anthropic 이야기
기업가치 254조원, 창업 4년 3개월 만에 비상장기업 세계 4위에 오른 회사의 이야기.
창업 스토리 (2021년 6월)
OpenAI 핵심 연구진 7명이 AI 안전성에 대한 철학 차이로 독립하여 설립. Dario Amodei(연구 담당 부사장)와 Daniela Amodei(안전/정책 부사장) 남매가 이끌었습니다.
회사 명칭 'Anthropic'은 그리스어 'anthropos(인간)'에서 유래하여 "인간 중심적 AI"라는 철학을 담고 있습니다. 공익법인(PBC) 형태로 설립되었습니다.
헌법적 AI (Constitutional AI)
2022년 12월 발표한 혁신적 기술. AI가 명확한 원칙('헌법')에 따라 스스로를 평가하고 개선합니다.
- 기존 RLHF(인간 피드백) → RLAIF(AI 피드백)로 대체
- 비용: 데이터 건당 $1~$10 → $0.01 미만으로 감소
- 원칙: "인간에게 도움", "해를 끼치지 않음", "정직하고 투명"
- 단순 거부가 아닌 건설적 대안 제시
Claude의 진화
- Claude 1 (2023.3) - 첫 모델, 10만 토큰 컨텍스트. 거부율 47%로 개선 필요
- Claude 2 (2023.7) - 거부율 8%로 감소, 파일 업로드, 코딩 능력 대폭 향상
- Claude 3 (2024.3) - Haiku/Sonnet/Opus 3종 동시 출시, 20만 토큰, GPT-4 능가
- Claude 3.5 Sonnet (2024.6) - Artifacts 출시, HumanEval 92%, Computer Use 베타
- Claude 4 (2025.5) - Claude Code 1.0 정식 출시, 멀티모달 통합
- Opus 4.1 (2025.8) - SWE-bench 74.5%, 향상된 추론 능력
- Sonnet 4.5 (2025.9) - SWE-bench 77.2% (세계 최고), 30시간 집중력 유지, 코드 편집 오류율 0%
투자 유치와 성장
| 시기 | 라운드 | 금액 | 주요 투자자 |
|---|---|---|---|
| 2021.9 | Series A | $1.24억 | Lightspeed, General Catalyst |
| 2022.4 | Series B | $5.8억 | FTX (이후 파산) |
| 2023.5 | Series C | $4.5억 | Google, Salesforce, SK텔레콤 |
| 2023.9 | Series D | $40억 | Amazon (총 $80억, 최대 단일 투자자) |
| 2025.3 | Series E | $35억 | Lightspeed, Fidelity (기업가치 $615억) |
| 2025.9 | Series F | $130억 | ICONIQ, BlackRock, GIC (기업가치 $1,830억 = 254조원) |
총 투자 유치: 256억 달러 | 비상장기업 가치 세계 4위 (SpaceX, OpenAI, TikTok 다음)
수익 성장
- 2024년: ARR $10억
- 2025년 4월: ARR $17.5억 (4개월 만에 75% 증가)
- 2025년 7월: ARR $50억 (3개월 만에 186% 증가)
- 2025년 연간 예상: $90억 (1년 만에 9배)
기업 AI 시장 점유율 32% (OpenAI 25%), 코딩 분야 42% (OpenAI 21%)
한국 시장
한국의 AUI(1인당 Claude 사용 지수)는 3.73으로 세계 5위, 미국(3.62)보다 높습니다.
- SK텔레콤과 전략적 제휴 (2023.8, $1억 투자)
- 앤트로픽 코리아 법인 설립 (2024.7, 서울 강남)
- 더존비즈온, AWS와 3자간 업무협약 (2024.7)
- 한국어 완벽 지원: 존댓말 7단계, 관용어, 신조어 인식
핵심 기술 11가지
Tier 1 - 차별화 핵심: 헌법적 AI, 대규모 컨텍스트 처리 (200K~1M 토큰), Computer Use
Tier 2 - 핵심 기능: Tool Use/Function Calling, Artifacts, Vision, 서브 에이전트
Tier 3 - 효율성: Prompt Caching (비용 90% 절감), Projects, Message Batches API
Tier 4 - 생태계: MCP (AI를 위한 USB-C, 200+ 커뮤니티 서버)
저자 소개
이 가이드북은 현직 공인회계사이자 스타트업 엑셀러레이터인 써니(선웅규)님이 5개월간의 실사용 경험을 바탕으로 제작했습니다. Claude를 프롬프터로, Claude가 집필자로 참여한 협업 결과물입니다.
문의: wksun999@hanmail.net | 카카오톡 채널: @Claude
소개 및 설정
GitHub는 Git 기반의 코드 호스팅 및 협업 플랫폼입니다. 전 세계 1억 명 이상의 개발자가 사용합니다.
GitHub란?
- 버전 관리 - Git을 사용해 코드 변경 이력을 추적·관리
- 협업 - Pull Request, 이슈, 코드 리뷰로 팀 협업
- 자동화 - GitHub Actions로 CI/CD 파이프라인 구축
- 호스팅 - 코드 저장소를 클라우드에서 관리
- 오픈소스 - 전 세계 프로젝트에 기여하고 학습
계정 유형
| 플랜 | 가격 | 저장소 | 주요 기능 |
|---|---|---|---|
| Free | 무료 | 무제한(공개/비공개) | Actions 2,000분/월 |
| Pro | $4/월 | 무제한 | 고급 인사이트, 위키 |
| Team | $4/인/월 | 무제한 | 팀 관리, Actions 3,000분 |
| Enterprise | $21/인/월 | 무제한 | SAML SSO, Advanced Security |
Git 설치
# 설치 확인
git --version
# Windows
winget install Git.Git
# macOS
brew install git
# Linux (Ubuntu/Debian)
sudo apt install git
초기 설정 (필수)
# 사용자 정보 설정 (커밋에 기록됨)
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
# 기본 브랜치명 설정
git config --global init.defaultBranch main
# 기본 편집기 설정
git config --global core.editor "code --wait"
# 줄 끝 처리 (Windows)
git config --global core.autocrlf true
# 줄 끝 처리 (macOS/Linux)
git config --global core.autocrlf input
# 설정 확인
git config --list
인증 설정
# SSH 키 생성 (권장)
ssh-keygen -t ed25519 -C "your@email.com"
# 공개키 복사 → GitHub > Settings > SSH Keys에 등록
cat ~/.ssh/id_ed25519.pub
# SSH 연결 테스트
ssh -T git@github.com
GitHub CLI (gh)
# 설치
brew install gh # macOS
winget install GitHub.cli # Windows
# 로그인
gh auth login
# 상태 확인
gh auth status
# 자동완성 설정 (bash)
eval "$(gh completion -s bash)"
Git 핵심 명령어
Git의 핵심 명령어를 익혀 버전 관리의 기본을 다집니다.
기본 워크플로우
# 1. 작업 디렉토리 초기화
git init
# 2. 파일 상태 확인
git status
# 3. 변경사항 스테이징 (추적 시작)
git add index.html # 특정 파일
git add . # 모든 변경사항
git add -p # 변경사항 일부만 선택
# 4. 커밋 (스냅샷 저장)
git commit -m "feat: 로그인 기능 추가"
# 5. 원격 저장소에 푸시
git push origin main
커밋 메시지 규칙 (Conventional Commits)
feat:- 새로운 기능 추가fix:- 버그 수정docs:- 문서 변경style:- 코드 포맷팅 (기능 변경 없음)refactor:- 리팩토링test:- 테스트 추가/수정chore:- 빌드, 설정 변경
이력 조회
# 커밋 로그 보기
git log
# 한 줄로 보기
git log --oneline
# 그래프로 보기
git log --oneline --graph --all
# 특정 파일 이력
git log -- index.html
# 변경 내용 비교
git diff # 스테이징 전 변경사항
git diff --staged # 스테이징된 변경사항
git diff main..feature # 브랜치 간 비교
되돌리기
# 스테이징 취소 (파일 유지)
git restore --staged index.html
# 작업 디렉토리 변경 취소
git restore index.html
# 마지막 커밋 메시지 수정
git commit --amend -m "수정된 메시지"
# 특정 커밋으로 되돌리기 (새 커밋 생성)
git revert abc1234
# 커밋 이력 초기화 (주의: 되돌릴 수 없음)
git reset --hard abc1234
Stash (임시 저장)
# 현재 변경사항 임시 저장
git stash
# 메시지와 함께 저장
git stash save "로그인 작업 중"
# 저장 목록 보기
git stash list
# 가장 최근 stash 복원
git stash pop
# 특정 stash 복원
git stash apply stash@{1}
# stash 삭제
git stash drop stash@{0}
.gitignore (파일 무시)
# .gitignore 파일 예시
node_modules/
.env
.env.local
*.log
dist/
.DS_Store
*.pyc
__pycache__/
.vscode/settings.json
태그
# 태그 생성
git tag v1.0.0
# 주석 태그 생성
git tag -a v1.0.0 -m "첫 번째 릴리스"
# 태그 목록
git tag -l
# 태그 푸시
git push origin v1.0.0
git push origin --tags # 모든 태그
저장소 관리
저장소 생성부터 브랜치, Pull Request까지 협업의 핵심을 다룹니다.
저장소 생성
# GitHub CLI로 생성 (권장)
gh repo create my-project --public --clone
gh repo create my-project --private --clone
# 웹에서 생성 후 클론
git clone git@github.com:username/repo.git
# 기존 프로젝트를 GitHub에 연결
git init
git add .
git commit -m "Initial commit"
git remote add origin git@github.com:username/repo.git
git push -u origin main
원격 저장소 관리
# 원격 저장소 확인
git remote -v
# 원격 저장소 추가
git remote add origin git@github.com:user/repo.git
# 원격 저장소 URL 변경
git remote set-url origin git@github.com:user/new-repo.git
# 원격 저장소 삭제
git remote remove origin
# 원격 변경사항 가져오기 (병합 안 함)
git fetch origin
# 원격 변경사항 가져와서 병합
git pull origin main
브랜치 관리
# 브랜치 생성
git branch feature/login
# 브랜치 생성 + 이동
git checkout -b feature/login
git switch -c feature/login # 최신 방식
# 브랜치 이동
git checkout main
git switch main # 최신 방식
# 브랜치 목록
git branch # 로컬
git branch -r # 원격
git branch -a # 전체
# 브랜치 삭제
git branch -d feature/login # 병합된 브랜치
git branch -D feature/login # 강제 삭제
# 원격 브랜치 삭제
git push origin --delete feature/login
병합 (Merge)
# feature 브랜치를 main에 병합
git checkout main
git merge feature/login
# 충돌 발생 시
# 1. 충돌 파일 수동 편집
# 2. 충돌 해결 후
git add .
git commit -m "fix: 병합 충돌 해결"
# 병합 취소
git merge --abort
Pull Request (PR)
# PR 생성
gh pr create --title "feat: 로그인 기능" --body "설명"
# PR 생성 (대화형)
gh pr create
# PR 목록
gh pr list
# PR 상세 보기
gh pr view 123
# PR 체크아웃 (로컬에서 테스트)
gh pr checkout 123
# PR 머지
gh pr merge 123
gh pr merge 123 --squash # 스쿼시 머지
gh pr merge 123 --rebase # 리베이스 머지
# PR 닫기
gh pr close 123
이슈 관리
# 이슈 생성
gh issue create --title "버그: 로그인 오류" --body "설명"
# 이슈 목록
gh issue list
# 이슈 상세 보기
gh issue view 45
# 이슈 닫기
gh issue close 45
# 이슈를 PR에 연결 (커밋 메시지에)
git commit -m "fix: 로그인 오류 수정 (closes #45)"
Fork & 오픈소스 기여
# 저장소 Fork
gh repo fork owner/repo --clone
# upstream 원본 저장소 추가
git remote add upstream git@github.com:owner/repo.git
# 원본 최신 코드 동기화
git fetch upstream
git merge upstream/main
# 기여 워크플로우
# 1. Fork → 2. Clone → 3. Branch 생성
# 4. 수정 → 5. Push → 6. PR 생성
GitHub Flow
GitHub Flow는 간단하고 효과적인 분기 기반 협업 워크플로우입니다.
6단계 워크플로우
| 단계 | 작업 | 설명 |
|---|---|---|
| 1 | 브랜치 생성 | main에서 설명적인 이름의 브랜치 생성 (예: add-login-page) |
| 2 | 변경 작업 | 코드 수정 후 설명적인 커밋 메시지로 커밋·푸시 |
| 3 | PR 생성 | Pull Request를 만들어 변경사항 요약 및 관련 이슈 연결 |
| 4 | 코드 리뷰 | 팀원이 코드를 검토하고 피드백, 필요시 추가 커밋 |
| 5 | 병합 | 승인 후 PR을 main 브랜치에 병합 |
| 6 | 브랜치 삭제 | 병합 완료 후 작업 브랜치 삭제 (필요시 복원 가능) |
실전 예시
# 1. 브랜치 생성
git switch -c feature/add-login-page
# 2. 코드 수정 및 커밋
git add .
git commit -m "feat: 로그인 페이지 UI 구현"
git push -u origin feature/add-login-page
# 3. PR 생성
gh pr create --title "feat: 로그인 페이지 추가" \
--body "## 변경사항
- 로그인 폼 UI 구현
- 이메일/비밀번호 유효성 검사
Closes #12"
# 4. 리뷰 반영 후 추가 커밋
git add .
git commit -m "fix: 리뷰 피드백 반영"
git push
# 5. PR 병합
gh pr merge --squash
# 6. 로컬 브랜치 정리
git switch main
git pull
git branch -d feature/add-login-page
브랜치 이름 규칙
feature/기능명- 새 기능 개발fix/버그설명- 버그 수정hotfix/긴급수정- 프로덕션 긴급 수정docs/문서설명- 문서 작업refactor/대상- 코드 리팩토링
코드 리뷰 체크리스트
- 코드가 의도대로 동작하는가?
- 테스트가 충분한가?
- 보안 취약점은 없는가?
- 성능 문제는 없는가?
- 코드 스타일이 일관적인가?
- 불필요한 코드나 console.log가 남아있지 않은가?
마크다운 문법
GitHub에서 이슈, PR, README 등을 작성할 때 사용하는 마크다운 문법입니다.
텍스트 서식
# 제목 (h1 ~ h6)
# 제목 1
## 제목 2
### 제목 3
# 텍스트 스타일
**굵게**
*기울임*
~~취소선~~
**_굵은 기울임_**
<sub>아래첨자</sub>
<sup>위첨자</sup>
링크 & 이미지
# 링크
[표시 텍스트](https://example.com)
# 이미지

# 상대 경로 링크
[문서 보기](./docs/guide.md)
리스트
# 순서 없는 리스트
- 항목 1
- 항목 2
- 하위 항목
# 순서 있는 리스트
1. 첫 번째
2. 두 번째
3. 세 번째
# 체크리스트 (이슈/PR에서 활용)
- [x] 완료된 작업
- [ ] 미완료 작업
코드
# 인라인 코드
`변수명` 또는 `함수()`
# 코드 블록 (언어 지정)
```javascript
function hello() {
console.log("Hello!");
}
```
# diff 표시
```diff
- 삭제된 줄
+ 추가된 줄
```
테이블
| 기능 | 설명 | 상태 |
|------|------|------|
| 로그인 | 이메일 인증 | 완료 |
| 회원가입 | 소셜 로그인 | 진행중 |
# 정렬
| 왼쪽 | 가운데 | 오른쪽 |
|:-----|:------:|------:|
| L | C | R |
인용 & 알림
# 인용
> 인용 텍스트입니다.
# 알림 (GitHub 전용)
> [!NOTE]
> 참고할 내용
> [!TIP]
> 유용한 팁
> [!WARNING]
> 경고 메시지
> [!CAUTION]
> 주의 사항
README.md 템플릿
# 프로젝트 이름
프로젝트에 대한 간단한 설명
## 기능
- 주요 기능 1
- 주요 기능 2
## 설치
```bash
npm install
npm run dev
```
## 사용법
사용 방법 설명
## 기여
기여 방법 안내
## 라이선스
MIT License
GitHub Actions
CI/CD 자동화 워크플로우를 설정하여 빌드, 테스트, 배포를 자동화합니다.
핵심 개념
- Workflow -
.github/workflows/에 저장되는 YAML 자동화 파일 - Event - 워크플로우를 실행하는 트리거 (push, PR, schedule 등)
- Job - 하나의 러너에서 실행되는 단계(Step) 모음
- Step - 개별 명령어 또는 Action
- Action - 재사용 가능한 작업 단위 (마켓플레이스에서 검색)
- Runner - 워크플로우를 실행하는 서버 (ubuntu, windows, macos)
기본 구조
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 코드 체크아웃
uses: actions/checkout@v4
- name: Node.js 설정
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: 의존성 설치
run: npm ci
- name: 빌드
run: npm run build
- name: 테스트
run: npm test
배포 워크플로우
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run build
- name: Vercel 배포
uses: amondnet/vercel-action@v25
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.ORG_ID }}
vercel-project-id: ${{ secrets.PROJECT_ID }}
vercel-args: '--prod'
주요 트리거
# 다양한 이벤트 트리거
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
schedule:
- cron: '0 9 * * 1' # 매주 월요일 9시
workflow_dispatch: # 수동 실행 버튼
release:
types: [published]
Secrets & 환경변수
Settings > Secrets and variables > Actions에서 관리합니다.
# 워크플로우에서 Secrets 사용
env:
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
SUPABASE_KEY: ${{ secrets.SUPABASE_KEY }}
# 환경변수 직접 설정
env:
NODE_ENV: production
CI: true
유용한 Actions
actions/checkout@v4- 코드 체크아웃actions/setup-node@v4- Node.js 환경 설정actions/setup-python@v5- Python 환경 설정actions/cache@v4- 의존성 캐싱actions/upload-artifact@v4- 빌드 결과물 업로드peaceiris/actions-gh-pages@v4- GitHub Pages 배포
GitHub CLI로 Actions 관리
# 워크플로우 목록
gh workflow list
# 워크플로우 실행
gh workflow run ci.yml
# 실행 상태 확인
gh run list
# 실행 로그 보기
gh run view 12345 --log
소개 및 설정
Supabase는 PostgreSQL 기반의 오픈소스 BaaS(Backend as a Service) 플랫폼으로, Firebase의 오픈소스 대안입니다.
Supabase란?
- PostgreSQL 기반 - 관계형 DB로 복잡한 쿼리와 JOIN 지원
- 실시간 - 데이터 변경을 실시간으로 감지·전달
- 인증 - 이메일, OAuth, 매직링크 등 다양한 인증
- 스토리지 - 파일 업로드/관리/CDN 제공
- Edge Functions - 서버리스 함수 (Deno 기반)
- 벡터 DB - pgvector로 AI/RAG 시스템 구축
- 오픈소스 - 벤더 락인 없이 자체 호스팅 가능
Supabase vs Firebase
| 항목 | Supabase | Firebase |
|---|---|---|
| 데이터베이스 | PostgreSQL (관계형) | Firestore (NoSQL) |
| 쿼리 | SQL, JOIN 지원 | 제한적 쿼리 |
| 오픈소스 | O (자체 호스팅 가능) | X (Google 종속) |
| 벡터 DB | pgvector 내장 | 별도 서비스 필요 |
| 서버리스 함수 | Edge Functions (Deno) | Cloud Functions (Node) |
요금제
| 항목 | Free | Pro ($25/월) | Team ($599/월) |
|---|---|---|---|
| DB 크기 | 500MB | 8GB | 무제한 |
| 스토리지 | 1GB | 100GB | 무제한 |
| 프로젝트 | 2개 | 무제한 | 무제한 |
| 백업 | 없음 | 매일 | PITR |
| 비활성 일시정지 | 1주일 후 정지 | 없음 | 없음 |
회원가입 & 프로젝트 생성
- supabase.com 접속 → Start your project 클릭
- GitHub 또는 이메일로 회원가입 (이메일 인증 10분 내 완료)
- New Project 클릭
- 프로젝트명 입력
- DB 비밀번호 설정 (12자 이상, 대소문자+숫자+특수문자)
- Region: Northeast Asia (Seoul) 선택
- Create new project 클릭
API 키 확인
Project Settings → API에서 확인합니다:
- Project URL - 프로젝트 접속 주소
- anon (public) - 클라이언트에서 사용 (RLS로 보호)
- service_role - 서버에서만 사용 (RLS 우회, 절대 공개 금지)
환경변수 설정
# .env.local
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIs...
SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIs... # 서버 전용!
클라이언트 설치 & 초기화
# 설치
npm install @supabase/supabase-js
# 초기화 (lib/supabase.js)
import { createClient } from '@supabase/supabase-js'
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
export const supabase = createClient(supabaseUrl, supabaseKey)
대시보드 주요 메뉴
- Table Editor - GUI로 테이블 생성·편집·데이터 관리
- SQL Editor - SQL 쿼리 직접 작성·실행
- Authentication - 사용자 관리, OAuth 설정
- Storage - 파일 업로드·버킷 관리
- Edge Functions - 서버리스 함수 배포
- Database - 테이블, Extensions, Roles 관리
- API Docs - 자동 생성 API 문서 확인
데이터베이스
PostgreSQL 기반 테이블 생성, CRUD, 필터링, 실시간 구독을 다룹니다.
테이블 생성 (SQL Editor)
-- todos 테이블 생성
CREATE TABLE public.todos (
id uuid DEFAULT gen_random_uuid() NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
task text NOT NULL,
is_complete boolean DEFAULT false NOT NULL,
user_id uuid REFERENCES auth.users(id),
CONSTRAINT todos_pkey PRIMARY KEY (id)
);
-- RLS 활성화
ALTER TABLE public.todos ENABLE ROW LEVEL SECURITY;
또는 Table Editor에서 GUI로 생성할 수 있습니다:
데이터 조회 (SELECT)
// 전체 조회
const { data, error } = await supabase
.from('todos')
.select('*')
// 정렬 + 페이징
const { data } = await supabase
.from('todos')
.select('*')
.order('created_at', { ascending: false })
.range(0, 9) // 0~9번째 (10개)
// 특정 컬럼만
const { data } = await supabase
.from('todos')
.select('id, task, is_complete')
// 관계 테이블 JOIN
const { data } = await supabase
.from('todos')
.select('*, profiles(username, avatar_url)')
필터링
// 같음
.eq('is_complete', true)
// 같지 않음
.neq('status', 'deleted')
// 비교
.gt('score', 80) // >
.gte('score', 80) // >=
.lt('score', 50) // <
.lte('score', 50) // <=
// 포함
.in('status', ['active', 'pending'])
// 텍스트 검색
.like('task', '%공부%')
.ilike('task', '%supabase%') // 대소문자 무시
// NULL 체크
.is('deleted_at', null)
// 복합 조건
.or('is_complete.eq.true, task.ilike.%긴급%')
데이터 삽입 (INSERT)
// 단일 삽입
const { data, error } = await supabase
.from('todos')
.insert({ task: 'Supabase 공부하기', user_id: userId })
.select() // 삽입된 데이터 반환
// 다중 삽입
const { data, error } = await supabase
.from('todos')
.insert([
{ task: '할 일 1' },
{ task: '할 일 2' },
{ task: '할 일 3' }
])
.select()
데이터 수정 (UPDATE)
const { data, error } = await supabase
.from('todos')
.update({ is_complete: true })
.eq('id', '특정-uuid')
.select()
데이터 삭제 (DELETE)
const { error } = await supabase
.from('todos')
.delete()
.eq('id', '삭제할-uuid')
실시간 구독
// 테이블 변경 실시간 감지
const channel = supabase
.channel('todos-changes')
.on('postgres_changes',
{ event: '*', schema: 'public', table: 'todos' },
(payload) => {
console.log('변경 유형:', payload.eventType)
console.log('새 데이터:', payload.new)
console.log('이전 데이터:', payload.old)
}
)
.subscribe()
// 특정 이벤트만 감지
.on('postgres_changes',
{ event: 'INSERT', schema: 'public', table: 'todos' },
(payload) => console.log('새 할 일:', payload.new)
)
// 구독 해제
supabase.removeChannel(channel)
SQL Editor에서 직접 실행
-- 기본 CRUD
INSERT INTO todos (task, user_id) VALUES ('할 일', '...');
SELECT * FROM todos WHERE is_complete = false;
UPDATE todos SET is_complete = true WHERE id = '...';
DELETE FROM todos WHERE id = '...';
인증 (Auth)
이메일, OAuth, 매직링크 등 다양한 인증 방법을 지원합니다.
지원 인증 방식
- 이메일/비밀번호 - 기본 회원가입·로그인
- 매직링크 - 이메일 링크 클릭으로 로그인
- OAuth - Google, GitHub, Apple, Kakao 등 소셜 로그인
- Phone OTP - 전화번호 인증
- 익명 인증 - 회원가입 없이 임시 사용
이메일 회원가입
const { data, error } = await supabase.auth.signUp({
email: 'user@example.com',
password: 'securePassword123!',
options: {
data: {
username: '홍길동', // 추가 메타데이터
avatar_url: 'https://...'
}
}
})
// data.user - 생성된 사용자 정보
// data.session - 세션 정보 (이메일 확인 전에는 null)
로그인
// 이메일/비밀번호 로그인
const { data, error } = await supabase.auth.signInWithPassword({
email: 'user@example.com',
password: 'securePassword123!'
})
// 매직링크 로그인 (이메일 링크)
const { error } = await supabase.auth.signInWithOtp({
email: 'user@example.com'
})
OAuth (소셜 로그인)
대시보드 > Authentication > Providers에서 원하는 프로바이더를 활성화합니다.
// Google 로그인
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'google',
options: {
redirectTo: 'https://your-site.com/callback'
}
})
// GitHub 로그인
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'github'
})
// Kakao 로그인
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'kakao'
})
세션 관리
// 현재 사용자 확인
const { data: { user } } = await supabase.auth.getUser()
// 현재 세션 확인
const { data: { session } } = await supabase.auth.getSession()
// 로그아웃
await supabase.auth.signOut()
// 인증 상태 변화 감지
supabase.auth.onAuthStateChange((event, session) => {
console.log(event) // SIGNED_IN, SIGNED_OUT, TOKEN_REFRESHED 등
console.log(session)
})
비밀번호 재설정
// 재설정 이메일 발송
const { error } = await supabase.auth.resetPasswordForEmail(
'user@example.com',
{ redirectTo: 'https://your-site.com/reset-password' }
)
// 새 비밀번호 설정 (리다이렉트 후)
const { error } = await supabase.auth.updateUser({
password: 'newSecurePassword!'
})
스토리지
파일 업로드, 다운로드, 이미지 변환 등 스토리지 기능을 다룹니다.
버킷 생성
대시보드 > Storage에서 New bucket을 클릭하거나 코드로 생성합니다:
// 공개 버킷 생성
const { data, error } = await supabase.storage.createBucket('avatars', {
public: true,
fileSizeLimit: 1024 * 1024 * 2 // 2MB 제한
})
// 비공개 버킷 생성
const { data, error } = await supabase.storage.createBucket('documents', {
public: false
})
파일 업로드
// 파일 업로드
const { data, error } = await supabase.storage
.from('avatars')
.upload('public/avatar.png', file, {
cacheControl: '3600',
upsert: true // 같은 이름이면 덮어쓰기
})
// 업로드 + 고유 파일명
const fileName = `${Date.now()}-${file.name}`
const { data, error } = await supabase.storage
.from('avatars')
.upload(fileName, file)
파일 URL 가져오기
// 공개 URL (공개 버킷)
const { data } = supabase.storage
.from('avatars')
.getPublicUrl('public/avatar.png')
// data.publicUrl → "https://xxx.supabase.co/storage/v1/object/public/..."
// 임시 URL (비공개 버킷, 60초 유효)
const { data, error } = await supabase.storage
.from('documents')
.createSignedUrl('secret.pdf', 60)
파일 다운로드 & 삭제
// 다운로드
const { data, error } = await supabase.storage
.from('avatars')
.download('public/avatar.png')
// 파일 삭제
const { error } = await supabase.storage
.from('avatars')
.remove(['public/avatar.png'])
// 여러 파일 삭제
const { error } = await supabase.storage
.from('avatars')
.remove(['file1.png', 'file2.png'])
파일 목록 조회
const { data, error } = await supabase.storage
.from('avatars')
.list('public', {
limit: 100,
offset: 0,
sortBy: { column: 'created_at', order: 'desc' }
})
이미지 변환 (Pro 플랜)
// 리사이즈된 이미지 URL
const { data } = supabase.storage
.from('avatars')
.getPublicUrl('avatar.png', {
transform: {
width: 200,
height: 200,
resize: 'cover'
}
})
RLS & 보안
Row Level Security(RLS)로 데이터베이스 보안을 설정합니다. Supabase 보안의 핵심입니다.
RLS란?
PostgreSQL의 행 수준 보안 기능으로, 테이블의 각 행에 대해 누가 읽기/쓰기할 수 있는지 정책(Policy)으로 제어합니다. Supabase에서 테이블을 생성하면 기본적으로 RLS가 활성화되어 정책이 없으면 아무도 접근할 수 없습니다.
RLS 활성화/비활성화
-- RLS 활성화
ALTER TABLE public.todos ENABLE ROW LEVEL SECURITY;
-- RLS 비활성화 (개발 중에만! 프로덕션에서는 절대 비활성화 금지)
ALTER TABLE public.todos DISABLE ROW LEVEL SECURITY;
읽기 정책 (SELECT)
-- 누구나 읽기 허용 (공개 데이터)
CREATE POLICY "공개 읽기" ON public.todos
FOR SELECT USING (true);
-- 본인 데이터만 읽기
CREATE POLICY "본인 데이터 읽기" ON public.todos
FOR SELECT USING (auth.uid() = user_id);
-- 로그인한 사용자만 읽기
CREATE POLICY "인증된 사용자 읽기" ON public.todos
FOR SELECT TO authenticated USING (true);
쓰기 정책 (INSERT / UPDATE / DELETE)
-- 로그인한 사용자만 생성 (본인 user_id로만)
CREATE POLICY "본인 데이터 생성" ON public.todos
FOR INSERT TO authenticated
WITH CHECK (auth.uid() = user_id);
-- 본인 데이터만 수정
CREATE POLICY "본인 데이터 수정" ON public.todos
FOR UPDATE TO authenticated
USING (auth.uid() = user_id)
WITH CHECK (auth.uid() = user_id);
-- 본인 데이터만 삭제
CREATE POLICY "본인 데이터 삭제" ON public.todos
FOR DELETE TO authenticated
USING (auth.uid() = user_id);
자주 쓰는 RLS 패턴
-- 전체 CRUD (본인 데이터만)
CREATE POLICY "본인 전체 권한" ON public.todos
FOR ALL TO authenticated
USING (auth.uid() = user_id)
WITH CHECK (auth.uid() = user_id);
-- 관리자 전체 접근
CREATE POLICY "관리자 전체 권한" ON public.todos
FOR ALL USING (
EXISTS (
SELECT 1 FROM profiles
WHERE profiles.id = auth.uid()
AND profiles.role = 'admin'
)
);
정책 관리
-- 정책 삭제
DROP POLICY "정책 이름" ON public.todos;
-- 정책 목록 확인
SELECT * FROM pg_policies WHERE tablename = 'todos';
보안 체크리스트
- 모든 테이블에 RLS 활성화 - 예외 없이
- anon key는 클라이언트용 - RLS가 보호
- service_role key는 서버 전용 - 절대 클라이언트에 노출 금지
- .env 파일 gitignore - API 키를 Git에 커밋하지 않기
- 정책 테스트 - SQL Editor에서 직접 확인
벡터 DB & AI
pgvector 확장으로 벡터 데이터베이스를 구축하고, RAG(검색 증강 생성) 시스템을 만듭니다.
pgvector란?
PostgreSQL에서 벡터(임베딩) 데이터를 저장하고 유사도 검색을 수행하는 확장입니다. 별도의 벡터 DB 서비스(Pinecone 등) 없이 Supabase 하나로 관계형 데이터와 AI 기능을 동시에 처리할 수 있습니다.
pgvector 활성화
대시보드 > Database > Extensions에서 "vector" 검색 후 Enable:
-- 또는 SQL로 활성화
CREATE EXTENSION IF NOT EXISTS vector;
문서 테이블 생성
CREATE TABLE documents (
id serial PRIMARY KEY,
title text NOT NULL,
content text NOT NULL,
embedding vector(1536), -- OpenAI text-embedding-3-small 차원
metadata jsonb,
created_at timestamptz DEFAULT now()
);
-- 검색 성능을 위한 인덱스
CREATE INDEX ON documents
USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
유사도 검색 함수
CREATE OR REPLACE FUNCTION match_documents (
query_embedding vector(1536),
match_threshold float,
match_count int
)
RETURNS TABLE (
id bigint,
title text,
content text,
similarity float
)
LANGUAGE sql STABLE
AS $$
SELECT
documents.id,
documents.title,
documents.content,
1 - (documents.embedding <=> query_embedding) as similarity
FROM documents
WHERE 1 - (documents.embedding <=> query_embedding) > match_threshold
ORDER BY documents.embedding <=> query_embedding
LIMIT match_count;
$$;
Node.js RAG 구현
import OpenAI from 'openai'
import { supabase } from './lib/supabase'
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
// 1. 문서 임베딩 → 저장
async function embedAndStore(title, content) {
const response = await openai.embeddings.create({
model: 'text-embedding-3-small',
input: content
})
const embedding = response.data[0].embedding
const { data, error } = await supabase
.from('documents')
.insert({ title, content, embedding })
return data
}
// 2. 유사 문서 검색
async function searchDocs(query) {
const response = await openai.embeddings.create({
model: 'text-embedding-3-small',
input: query
})
const { data } = await supabase.rpc('match_documents', {
query_embedding: response.data[0].embedding,
match_threshold: 0.7,
match_count: 5
})
return data
}
// 3. RAG 기반 답변 생성
async function generateAnswer(question) {
const docs = await searchDocs(question)
const context = docs.map(d => d.content).join('\n\n')
const completion = await openai.chat.completions.create({
model: 'gpt-4',
messages: [
{ role: 'system', content: '제공된 문서를 기반으로 정확하게 답변하세요.' },
{ role: 'user', content: `문서:\n${context}\n\n질문: ${question}` }
]
})
return completion.choices[0].message.content
}
활용 사례
- 문서 Q&A 챗봇 - 사내 문서 기반 질의응답
- 유사 콘텐츠 추천 - 블로그, 상품 등 유사 항목 검색
- 시맨틱 검색 - 키워드가 아닌 의미 기반 검색
- 이미지 검색 - CLIP 임베딩으로 이미지 유사도 검색
소개 및 배포
Vercel은 프론트엔드 및 풀스택 애플리케이션을 위한 클라우드 배포 플랫폼입니다. Git push만으로 자동 배포됩니다.
Vercel이란?
- 자동 배포 - Git push 시 자동 빌드 & 배포 (CI/CD 내장)
- 프리뷰 환경 - PR마다 고유 프리뷰 URL 자동 생성
- 글로벌 CDN - 전 세계 엣지 네트워크로 빠른 응답
- 서버리스 Functions - API 라우트를 서버 없이 실행
- 자동 HTTPS - SSL 인증서 자동 발급·갱신
- 프레임워크 감지 - Next.js, Vite, Nuxt 등 자동 인식·최적화
- AI 인프라 - AI SDK, AI Gateway, v0 등 AI 도구 통합
요금제
| 항목 | Hobby (무료) | Pro ($20/인/월) | Enterprise |
|---|---|---|---|
| 대상 | 개인 프로젝트 | 팀·비즈니스 | 대규모 조직 |
| 대역폭 | 100GB/월 | 1TB/월 | 커스텀 |
| 빌드 시간 | 6,000분/월 | 24,000분/월 | 커스텀 |
| 서버리스 실행 | 100GB-시간 | 1,000GB-시간 | 커스텀 |
| 팀 기능 | X | 역할·권한 관리 | SSO, SAML |
| 지원 | 커뮤니티 | 이메일 | 전담 매니저, SLA |
계정 생성 & 프로젝트 연결
- vercel.com/signup에서 회원가입 (GitHub/GitLab/이메일)
- Add New Project → GitHub 저장소 선택
- 프레임워크 자동 감지 → Deploy 클릭
- 배포 완료! 이후
git push마다 자동 배포
Vercel CLI 설치
# 설치
npm install -g vercel
# 로그인
vercel login
# 현재 폴더 배포 (프리뷰)
vercel
# 프로덕션 배포
vercel --prod
# 로컬 개발 서버 (환경변수 포함)
vercel dev
# 프로젝트 정보 확인
vercel inspect
# 배포 목록
vercel ls
배포 환경
- Production -
main브랜치 push 시 자동 배포, 실제 도메인에 연결 - Preview - PR 생성 시 고유 URL로 자동 배포 (팀 리뷰용)
- Development -
vercel dev로 로컬에서 Vercel 환경 재현
즉시 롤백
# 이전 배포로 즉시 롤백
vercel rollback
# 특정 배포로 롤백
vercel rollback [deployment-url]
프레임워크
Vercel은 다양한 프레임워크를 자동 인식하고 최적화합니다. 별도 설정 없이 배포할 수 있습니다.
지원 프레임워크 & 기능
| 프레임워크 | SSR | ISR | Middleware | 이미지 최적화 | 스트리밍 |
|---|---|---|---|---|---|
| Next.js | ✓ | ✓ | ✓ | ✓ | ✓ |
| SvelteKit | ✓ | ✓ | ✓ | ✓ | ✓ |
| Nuxt | ✓ | ✓ | ✓ | ✓ | ✗ |
| Astro | ✓ | ✓ | ✓ | ✓ | ✓ |
| Remix | ✓ | ✗ | ✓ | ✗ | ✓ |
| Vite / React | N/A | N/A | ✓ | N/A | N/A |
| TanStack | ✓ | ✗ | ✓ | N/A | ✓ |
주요 프레임워크 특징
- Next.js - Vercel이 개발. 모든 기능 최우선 지원, App Router, Server Components
- SvelteKit - Svelte 기반 풀스택. 컴파일 기반으로 매우 빠름
- Nuxt - Vue.js 기반 풀스택. SEO, SSR 우수
- Astro - 콘텐츠 중심. 아일랜드 아키텍처로 최소 JS
- Remix - 웹 표준 기반 풀스택. 중첩 라우팅
- Vite - 빠른 빌드 도구. React, Vue, Svelte 등과 함께 사용
Next.js 프로젝트 생성 & 배포
# Next.js 프로젝트 생성
npx create-next-app@latest my-app
cd my-app
# 로컬 개발
npm run dev
# GitHub에 푸시
git init && git add . && git commit -m "Initial commit"
gh repo create my-app --public --push --source=.
# Vercel에서 자동 배포 (GitHub 연동 후)
# 또는 CLI로 배포
vercel --prod
정적 사이트 배포 (Vite)
# Vite + React 프로젝트
npm create vite@latest my-site -- --template react
cd my-site && npm install
# vercel.json (선택)
{
"buildCommand": "npm run build",
"outputDirectory": "dist"
}
# 배포
vercel --prod
Functions & API
Vercel Functions로 서버 없이 API 라우트와 서버사이드 로직을 실행합니다.
Vercel Functions란?
- 서버리스 - 서버 관리 없이 코드만 작성
- 자동 스케일링 - 트래픽에 따라 자동으로 확장·축소
- 제로 스케일 - 요청이 없으면 비용 0
- Fluid Compute - 동일 인스턴스에서 동시 요청 처리로 비용 절감
- 글로벌 배치 - 기본 Washington D.C., 데이터 소스 가까이 설정 가능
API 라우트 생성 (Next.js App Router)
// app/api/hello/route.ts
export function GET(request: Request) {
return Response.json({ message: 'Hello from Vercel!' })
}
export async function POST(request: Request) {
const body = await request.json()
return Response.json({ received: body })
}
API 라우트 (api/ 디렉토리 - 범용)
// api/hello.ts (프레임워크 무관)
export default {
fetch(request: Request) {
return new Response('Hello from Vercel!')
}
}
// api/users.ts - HTTP 메서드별
export function GET(request: Request) {
return Response.json([{ id: 1, name: '홍길동' }])
}
export async function POST(request: Request) {
const { name } = await request.json()
return Response.json({ id: 2, name }, { status: 201 })
}
Middleware
요청이 처리되기 전에 실행되는 코드로, 인증 체크·리다이렉트·헤더 수정 등에 사용합니다.
// middleware.ts (프로젝트 루트)
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
export function middleware(request: NextRequest) {
// 인증 체크
const token = request.cookies.get('auth-token')
if (!token && request.nextUrl.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/login', request.url))
}
// 응답 헤더 추가
const response = NextResponse.next()
response.headers.set('X-Custom-Header', 'hello')
return response
}
export const config = {
matcher: ['/dashboard/:path*', '/api/:path*']
}
ISR (Incremental Static Regeneration)
// app/blog/[slug]/page.tsx
export const revalidate = 60 // 60초마다 재생성
export default async function BlogPost({ params }) {
const post = await fetch(`https://api.example.com/posts/${params.slug}`)
.then(r => r.json())
return <article>{post.title}</article>
}
// 또는 온디맨드 재검증
// app/api/revalidate/route.ts
import { revalidatePath } from 'next/cache'
export function POST(request: Request) {
revalidatePath('/blog')
return Response.json({ revalidated: true })
}
Functions 설정
// vercel.json
{
"functions": {
"api/**/*.ts": {
"memory": 1024, // MB (128~3008)
"maxDuration": 60 // 초 (Hobby: 10, Pro: 300)
}
},
"regions": ["icn1"] // 서울 리전
}
설정 및 도메인
프로젝트 설정, 커스텀 도메인, 리다이렉트 등을 관리합니다.
vercel.json 주요 설정
{
"buildCommand": "npm run build",
"outputDirectory": ".next",
"framework": "nextjs",
"regions": ["icn1"],
"rewrites": [
{ "source": "/api/:path*", "destination": "/api/:path*" }
],
"redirects": [
{ "source": "/old-page", "destination": "/new-page", "permanent": true }
],
"headers": [
{
"source": "/api/(.*)",
"headers": [
{ "key": "Access-Control-Allow-Origin", "value": "*" },
{ "key": "Cache-Control", "value": "s-maxage=86400" }
]
}
]
}
커스텀 도메인 연결
- Vercel 대시보드 > Settings > Domains
- 도메인 입력 후 Add
- DNS 레코드 설정:
- CNAME:
cname.vercel-dns.com(서브도메인용) - A 레코드:
76.76.21.21(루트 도메인용)
- CNAME:
- SSL 인증서 자동 발급 (Let's Encrypt)
도메인 CLI 관리
# 도메인 추가
vercel domains add example.com
# 도메인 목록
vercel domains ls
# 도메인 삭제
vercel domains rm example.com
# DNS 레코드 확인
vercel dns ls example.com
리전 목록 (자주 사용)
icn1- 서울 (한국)hnd1- 도쿄 (일본)sfo1- 샌프란시스코iad1- 워싱턴 D.C. (기본값)lhr1- 런던cdg1- 파리
보안 기능
- Deployment Protection - 비인가 접근 차단
- WAF - 웹 애플리케이션 방화벽 (공격·스크래퍼 차단)
- DDoS 보호 - 자동 DDoS 완화
- Bot Management - 봇 트래픽 관리
- RBAC - 역할 기반 접근 제어 (Pro+)
환경변수 관리
환경별 변수 설정으로 API 키와 설정값을 안전하게 관리합니다.
대시보드에서 설정
Settings > Environment Variables에서 추가합니다. 환경별로 다른 값을 설정할 수 있습니다:
| 변수명 | 용도 | 환경 |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase 프로젝트 URL | 전체 |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase 공개 키 | 전체 |
SUPABASE_SERVICE_ROLE_KEY | Supabase 서버 키 (비공개) | Production |
OPENAI_API_KEY | OpenAI API 키 | Production |
CLI로 관리
# 환경변수 추가 (대화형)
vercel env add SUPABASE_SERVICE_ROLE_KEY
# 환경 지정 추가
vercel env add API_KEY production
# 환경변수 목록
vercel env ls
# 로컬로 가져오기 (.env.local 생성)
vercel env pull
# 환경변수 삭제
vercel env rm API_KEY production
환경별 구분
- Production -
main브랜치 배포에만 적용 - Preview - PR 프리뷰 배포에 적용 (테스트 키 사용)
- Development -
vercel dev실행 시 적용
주의사항
NEXT_PUBLIC_접두사가 있는 변수는 클라이언트에 노출됨- 서버 전용 키(service_role 등)에는 접두사를 붙이지 않기
- 환경변수 변경 후 재배포 필요 (
vercel --prod) - Sensitive 체크 시 대시보드에서도 값 숨김
AI 인프라
Vercel의 AI SDK, AI Gateway, v0 등을 활용해 AI 애플리케이션을 구축합니다.
Vercel AI 도구 모음
- AI SDK - LLM 통합 라이브러리 (스트리밍, 도구 호출, 구조화 출력)
- AI Gateway - 여러 AI 프로바이더 통합 라우팅 + 자동 장애 조치
- v0 - AI 기반 UI 생성 도구 (프롬프트 → React 컴포넌트)
- MCP Servers - AI 에이전트가 시스템과 상호작용하는 도구
- Sandbox - 신뢰할 수 없는 코드의 안전한 실행 환경
AI SDK 설치 & 사용
# 설치
npm install ai @ai-sdk/openai
# app/api/chat/route.ts
import { openai } from '@ai-sdk/openai'
import { streamText } from 'ai'
export async function POST(req: Request) {
const { messages } = await req.json()
const result = streamText({
model: openai('gpt-4o'),
messages,
})
return result.toDataStreamResponse()
}
클라이언트에서 사용
// app/page.tsx
'use client'
import { useChat } from 'ai/react'
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat()
return (
<div>
{messages.map(m => (
<div key={m.id}>
<b>{m.role}:</b> {m.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input value={input} onChange={handleInputChange} />
<button type="submit">전송</button>
</form>
</div>
)
}
AI SDK 지원 프로바이더
@ai-sdk/openai- OpenAI (GPT-4o, GPT-4, o1 등)@ai-sdk/anthropic- Anthropic (Claude Opus, Sonnet, Haiku)@ai-sdk/google- Google (Gemini Pro, Flash)@ai-sdk/mistral- Mistral AI@ai-sdk/cohere- Cohere
도구 호출 (Tool Use)
import { openai } from '@ai-sdk/openai'
import { generateText, tool } from 'ai'
import { z } from 'zod'
const result = await generateText({
model: openai('gpt-4o'),
tools: {
weather: tool({
description: '특정 도시의 날씨를 가져옵니다',
parameters: z.object({
city: z.string().describe('도시 이름')
}),
execute: async ({ city }) => {
// 실제 API 호출
return { city, temp: 22, condition: '맑음' }
}
})
},
prompt: '서울 날씨 알려줘'
})
AI Gateway 설정
// vercel.json
{
"ai": {
"providers": [
{
"id": "openai",
"type": "openai",
"apiKey": "@openai-api-key"
},
{
"id": "anthropic",
"type": "anthropic",
"apiKey": "@anthropic-api-key"
}
]
}
}
소개 및 설치
Visual Studio Code는 Microsoft가 만든 무료 코드 편집기로, 전 세계 개발자들이 가장 많이 사용하는 IDE입니다.
VS Code란?
- 무료 & 오픈소스 - 개인·기업 모두 무료, MIT 라이선스
- 크로스 플랫폼 - Windows, macOS, Linux, 웹(vscode.dev) 지원
- 확장 프로그램 - 수만 개의 확장으로 기능 무한 확장
- 내장 터미널 - 여러 셸을 동시에 열고 관리
- Git 통합 - 스테이징, 커밋, 브랜치를 GUI로 관리
- IntelliSense - 스마트 코드 자동완성·타입 정보·시그니처
- AI Copilot - GitHub Copilot, Claude Code 등 AI 통합
- 원격 개발 - SSH, 컨테이너, WSL, Codespaces 원격 작업
설치 방법
# 공식 사이트: https://code.visualstudio.com
# Windows (winget)
winget install Microsoft.VisualStudioCode
# macOS (Homebrew)
brew install --cask visual-studio-code
# Linux (Ubuntu/Debian)
sudo apt install code
# 또는 snap
sudo snap install code --classic
CLI 명령어
# 현재 폴더를 VS Code로 열기
code .
# 특정 파일 열기
code index.html
# 특정 파일의 특정 줄로 열기
code -g index.html:42
# 새 창으로 열기
code -n .
# 파일 차이점 비교
code --diff file1.js file2.js
# 확장 프로그램 설치
code --install-extension ms-python.python
# 설치된 확장 목록
code --list-extensions
# 설정 초기화
code --user-data-dir /tmp/vscode-test
웹 버전
- vscode.dev - 브라우저에서 바로 VS Code 사용
- github.dev - GitHub 저장소에서
.키를 누르면 열림 - 설치 불필요, 가벼운 편집 작업에 적합
UI 구조 & 편집
VS Code의 인터페이스 구조를 이해하고, 편집 기능을 마스터합니다.
UI 구성 요소
| 영역 | 위치 | 역할 |
|---|---|---|
| Activity Bar | 왼쪽 끝 | 탐색기, 검색, Git, 디버그, 확장 등 뷰 전환 |
| Side Bar | 왼쪽 | 선택한 뷰의 상세 정보 (파일 트리, 검색 결과 등) |
| Editor | 중앙 | 코드 편집 영역. 탭으로 여러 파일, 분할 가능 |
| Panel | 하단 | 터미널, 출력, 문제, 디버그 콘솔 |
| Status Bar | 맨 아래 | 언어, 인코딩, 줄/열, Git 브랜치, 에러 수 |
편집기 분할
# 에디터 분할 단축키
Ctrl+\ → 세로 분할 (macOS: Cmd+\)
Ctrl+K Ctrl+\ → 가로 분할
# 분할 에디터 간 이동
Ctrl+1, Ctrl+2, Ctrl+3 → 1번, 2번, 3번 그룹
# 탭을 다른 그룹으로 이동
Ctrl+Alt+→ → 오른쪽 그룹으로 이동
IntelliSense (자동완성)
- 자동 트리거 - 입력하면 자동으로 제안 표시
- 수동 트리거 -
Ctrl+Space로 제안 열기 - 매개변수 힌트 -
Ctrl+Shift+Space로 함수 시그니처 보기 - 빠른 정보 - 심볼 위에 마우스를 올려 타입/문서 확인
코드 탐색
# 정의로 이동
F12 또는 Ctrl+Click
# 미리보기 (팝업)
Alt+F12 → Peek Definition
# 모든 참조 찾기
Shift+F12
# 심볼로 이동 (현재 파일)
Ctrl+Shift+O
# 심볼로 이동 (워크스페이스)
Ctrl+T
# 특정 줄로 이동
Ctrl+G
리팩토링
- 이름 바꾸기 -
F2로 심볼 이름 일괄 변경 - 함수 추출 - 코드 선택 후
Ctrl+.→ Extract Function - 변수 추출 - 표현식 선택 후
Ctrl+.→ Extract Variable - Quick Fix - 전구 아이콘 또는
Ctrl+.로 빠른 수정
멀티 커서 & 선택
# 멀티 커서
Alt+Click → 클릭 위치에 커서 추가
Ctrl+Alt+↑/↓ → 위/아래에 커서 추가
Ctrl+D → 같은 단어 선택 (반복 가능)
Ctrl+Shift+L → 같은 단어 모두 선택
# 선택 확장/축소
Shift+Alt+→ → 선택 확장
Shift+Alt+← → 선택 축소
# 열 선택 (박스 선택)
Shift+Alt+드래그 → 직사각형 영역 선택
터미널
- 열기:
Ctrl+`(백틱) - 새 터미널:
Ctrl+Shift+` - 터미널 분할:
Ctrl+Shift+5 - 터미널 간 이동:
Ctrl+PageUp/Down - 셸 선택: 드롭다운에서 PowerShell, Bash, Zsh 등 선택
- 이전 명령어:
Ctrl+↑/↓
확장 프로그램
Visual Studio Marketplace의 수만 개 확장으로 VS Code를 맞춤 개발 환경으로 만듭니다.
확장 설치 방법
- 사이드바: Activity Bar에서 확장 아이콘 클릭 (
Ctrl+Shift+X) - 명령 팔레트:
Ctrl+Shift+P→ "Install Extensions" - CLI:
code --install-extension 확장ID
한국어 지원
Korean Language Pack- VS Code 메뉴를 한국어로 변경
AI 어시스턴트
| 확장 | 특징 | 무료 |
|---|---|---|
| GitHub Copilot | 인라인 자동완성, 채팅, 에이전트, 커밋 메시지 생성 | 무료 티어 있음 |
| Claude Code | 터미널 기반 AI 코딩, 파일 편집, 명령 실행 | 유료 |
| Continue | 오픈소스, 여러 AI 모델 동시 활용 | 무료 |
| Cody (Sourcegraph) | 코드베이스 이해, 코드 검색, 설명 | 무료 티어 있음 |
필수 공통 도구
Material Icon Theme- 파일 종류별 아이콘 표시GitLens- 파일 변경 이력, blame, 비교Prettier- 코드 자동 포맷팅 (JS/TS/CSS/HTML/JSON)ESLint- JavaScript/TypeScript 코드 품질 검사Live Server- HTML 파일 실시간 브라우저 미리보기Markdown All in One- 마크다운 자동완성과 미리보기Error Lens- 에러/경고를 코드 줄에 인라인 표시Todo Tree- TODO/FIXME 주석을 트리로 정리
웹 개발
Auto Rename Tag- HTML 여는/닫는 태그 동시 변경CSS Peek- HTML에서 CSS 정의 미리보기Tailwind CSS IntelliSense- Tailwind 클래스 자동완성REST Client- VS Code에서 HTTP 요청 테스트Thunder Client- GUI REST API 클라이언트
언어별 필수 확장
- Python:
Python+Pylance+Jupyter - JavaScript/TypeScript: 기본 내장 (추가 불필요)
- Java:
Extension Pack for Java - C/C++:
C/C++(Microsoft) - Go:
Go(Google) - Rust:
rust-analyzer
테마 추천
One Dark Pro- Atom의 인기 테마Dracula Official- 보라색 계열 다크 테마GitHub Theme- GitHub 스타일 밝은/어두운 테마Catppuccin- 파스텔 컬러 테마
확장 관리 CLI
# 설치
code --install-extension ms-python.python
# 특정 버전 설치
code --install-extension ms-python.python@2024.0.1
# 설치 목록 확인
code --list-extensions
# 목록을 파일로 저장 (팀 공유용)
code --list-extensions > extensions.txt
# 파일에서 일괄 설치
cat extensions.txt | xargs -L 1 code --install-extension
# 제거
code --uninstall-extension ms-python.python
# 모든 확장 비활성화로 실행 (문제 해결)
code --disable-extensions
Git & 소스 제어
VS Code에 내장된 Git 기능으로 터미널 없이도 버전 관리를 수행합니다.
필수 요구사항
# Git 2.0 이상 설치 필요
git --version
# 사용자 설정
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
소스 제어 뷰 열기
- Activity Bar에서 분기 아이콘 클릭 또는
Ctrl+Shift+G - Changes - 수정된 파일 목록 (Diff 보기)
- Staged Changes - 스테이징된 파일
- Source Control Graph - 커밋 이력 시각화
기본 워크플로우 (GUI)
- 변경사항 확인 - 소스 제어 뷰에서 수정 파일 클릭 → Diff 보기
- 스테이징 - 파일 옆
+아이콘 클릭 (또는 전체 스테이징) - 커밋 메시지 입력 - 상단 텍스트 박스에 메시지 작성
- 커밋 -
Ctrl+Enter또는 체크마크 클릭 - Push - Status Bar의 동기화 아이콘 클릭
브랜치 관리
- 브랜치 전환 - Status Bar 왼쪽 하단 브랜치명 클릭
- 브랜치 생성 - 명령 팔레트 → "Git: Create Branch"
- 브랜치 병합 - 명령 팔레트 → "Git: Merge Branch"
- 브랜치 삭제 - 명령 팔레트 → "Git: Delete Branch"
병합 충돌 해결
충돌 발생 시 VS Code가 자동으로 충돌 영역을 표시합니다:
- Accept Current Change - 현재 브랜치 변경사항 선택
- Accept Incoming Change - 들어오는 변경사항 선택
- Accept Both Changes - 양쪽 모두 유지
- 3-way Merge Editor - 상세 비교 편집기 열기
Git 단축키
| 기능 | 단축키 |
|---|---|
| 소스 제어 뷰 열기 | Ctrl+Shift+G |
| 변경사항 스테이징 | 파일 옆 + |
| 커밋 | Ctrl+Enter |
| 인라인 Diff 열기 | 거터의 색상 표시 클릭 |
| Git 명령 팔레트 | Ctrl+Shift+P → "Git:" |
추천 Git 확장
GitLens- 줄별 blame, 이력 비교, 커밋 그래프GitHub Pull Requests- VS Code에서 PR 생성·리뷰·병합Git Graph- 커밋 이력을 그래프로 시각화
디버깅
VS Code의 강력한 디버거로 코드 문제를 효율적으로 찾고 해결합니다.
디버깅 시작
- 디버깅할 파일 열기
- 브레이크포인트 설정 - 줄 번호 왼쪽 클릭 또는
F9 F5키로 디버깅 시작 (또는 Run and Debug 뷰)- 디버거 선택 (Node.js, Python 등)
디버그 작업
| 작업 | 단축키 | 설명 |
|---|---|---|
| 계속/일시정지 | F5 | 다음 브레이크포인트까지 실행 |
| Step Over | F10 | 현재 줄 실행 (함수 안으로 들어가지 않음) |
| Step Into | F11 | 함수 내부로 진입 |
| Step Out | Shift+F11 | 현재 함수에서 빠져나옴 |
| 재시작 | Ctrl+Shift+F5 | 디버깅 세션 재시작 |
| 중지 | Shift+F5 | 디버깅 종료 |
브레이크포인트 종류
- 기본 브레이크포인트 -
F9또는 줄 번호 클릭 (빨간 원) - 조건부 브레이크포인트 - 우클릭 → "Add Conditional Breakpoint" (조건이 true일 때만 정지)
- 히트 카운트 - 지정 횟수 실행 후 정지 (반복문 디버깅)
- 로그포인트 - 우클릭 → "Add Logpoint" (정지 없이 로그만 출력)
- 인라인 브레이크포인트 -
Shift+F9(한 줄에 여러 문장이 있을 때) - 함수 브레이크포인트 - 함수명으로 브레이크포인트 설정
데이터 검사
- VARIABLES - 현재 스코프의 변수값 실시간 확인
- WATCH - 특정 표현식을 모니터링 (+아이콘으로 추가)
- CALL STACK - 함수 호출 스택 확인
- DEBUG CONSOLE -
Ctrl+Shift+Y로 열기, 표현식 직접 평가 (REPL) - 마우스 호버 - 변수 위에 마우스를 올려 값 확인
launch.json 설정
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Node.js 실행",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/index.js",
"console": "integratedTerminal"
},
{
"name": "Python 실행",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
{
"name": "Chrome 디버깅",
"type": "chrome",
"request": "launch",
"url": "http://localhost:3000",
"webRoot": "${workspaceFolder}/src"
}
]
}
기본 지원 언어
- JavaScript / TypeScript / Node.js - 별도 설치 없이 디버깅 가능
- Python - Python 확장 설치 후 디버깅
- Java / C++ / Go / Rust - 각 언어별 확장 설치 필요
설정 및 단축키
자주 사용하는 단축키와 권장 설정으로 작업 속도를 극대화합니다.
핵심 단축키 (Windows / macOS)
| 기능 | Windows | macOS |
|---|---|---|
| 명령 팔레트 | Ctrl+Shift+P | Cmd+Shift+P |
| 파일 빠르게 열기 | Ctrl+P | Cmd+P |
| 설정 열기 | Ctrl+, | Cmd+, |
| 내장 터미널 | Ctrl+` | Cmd+` |
| 사이드바 토글 | Ctrl+B | Cmd+B |
| 전체 검색 | Ctrl+Shift+F | Cmd+Shift+F |
| 줄 복사 | Alt+Shift+↓ | Opt+Shift+↓ |
| 줄 이동 | Alt+↑/↓ | Opt+↑/↓ |
| 줄 삭제 | Ctrl+Shift+K | Cmd+Shift+K |
| 멀티 커서 | Alt+Click | Opt+Click |
| 같은 단어 선택 | Ctrl+D | Cmd+D |
| 찾기 & 바꾸기 | Ctrl+H | Cmd+H |
| 정의로 이동 | F12 | F12 |
| 브레이크포인트 | F9 | F9 |
| 디버깅 시작 | F5 | F5 |
권장 설정 (settings.json)
{
// 편집기
"editor.fontSize": 14,
"editor.tabSize": 2,
"editor.wordWrap": "on",
"editor.formatOnSave": true,
"editor.bracketPairColorization.enabled": true,
"editor.minimap.enabled": false,
"editor.linkedEditing": true,
"editor.stickyScroll.enabled": true,
"editor.inlineSuggest.enabled": true,
// 파일
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 1000,
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
// 터미널
"terminal.integrated.fontSize": 13,
"terminal.integrated.defaultProfile.windows": "PowerShell",
// 워크벤치
"workbench.colorTheme": "One Dark Pro",
"workbench.iconTheme": "material-icon-theme",
"workbench.startupEditor": "none",
// Git
"git.autofetch": true,
"git.confirmSync": false,
"git.enableSmartCommit": true
}
설정 열기 방법
- GUI 설정:
Ctrl+,(macOS:Cmd+,) - JSON 설정: 명령 팔레트 →
Preferences: Open Settings (JSON) - 키보드 단축키 편집:
Ctrl+K Ctrl+S - User 설정: 모든 프로젝트에 적용
- Workspace 설정: 현재 프로젝트에만 적용 (
.vscode/settings.json)
유용한 설정 동기화
- Settings Sync - GitHub/Microsoft 계정으로 설정 동기화 (내장)
- 설정, 키바인딩, 확장 프로그램, 스니펫 등이 자동 동기화
- Activity Bar 하단 계정 아이콘 → Turn on Settings Sync
워크스페이스 설정 (.vscode/)
프로젝트/
├── .vscode/
│ ├── settings.json # 프로젝트별 설정
│ ├── launch.json # 디버그 설정
│ ├── tasks.json # 빌드/실행 태스크
│ └── extensions.json # 권장 확장 프로그램
├── src/
└── package.json
# extensions.json (팀원에게 확장 추천)
{
"recommendations": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"ms-python.python"
]
}
시작하기
Vibe Coding Manual 사이트의 사용 방법을 안내합니다.
Vibe Coding Manual이란?
Vibe Coding Manual은 현대 웹 개발에 필요한 5가지 핵심 도구(Claude Code, GitHub, Supabase, Vercel, VS Code)의 사용법을 한곳에 모은 종합 바이브코딩 완벽 매뉴얼입니다. 초보자부터 실무 개발자까지 단계별로 학습할 수 있도록 구성되어 있습니다.
사용 방법
- 상단 내비게이션 - 원하는 도구(Claude, GitHub, Supabase, Vercel, VS Code)를 클릭하면 해당 가이드의 첫 페이지로 이동합니다.
- 사이드바 메뉴 - 좌측 사이드바에서 각 도구의 세부 항목을 선택하여 원하는 내용으로 바로 이동할 수 있습니다.
- 코드 복사 - 코드 블록 우측 상단의 "복사" 버튼을 클릭하면 명령어를 클립보드에 복사합니다.
- 랜딩 페이지 - 좌측 상단의 "Vibe Coding Manual" 로고를 클릭하면 홈 화면으로 돌아갑니다.
권장 학습 순서
- VS Code 설치 - 코드 편집기가 모든 개발의 시작점입니다. winget install Microsoft.VisualStudioCode
- Node.js 설치 - JavaScript 런타임과 npm을 설치합니다. winget install OpenJS.NodeJS.LTS
- Git & GitHub 설정 - 버전 관리 환경을 구축합니다. winget install Git.Git
- Claude Code 설치 - AI 코딩 어시스턴트를 활용합니다. npm install -g @anthropic-ai/claude-code
- Supabase & Vercel - 백엔드와 배포 환경을 설정합니다. npm install -g vercel
화면 구성
Vibe Coding Manual의 인터페이스 구성 요소를 설명합니다.
상단 내비게이션 바
화면 최상단에 위치한 내비게이션 바입니다. 각 도구별 버튼을 클릭하면 해당 섹션으로 빠르게 이동할 수 있습니다.
- Vibe Coding Manual - 클릭 시 홈(랜딩 페이지)으로 이동
- Claude - Claude Code AI 어시스턴트 가이드
- GitHub - Git 버전 관리 & 협업 가이드
- Supabase - 백엔드 서비스 가이드
- Vercel - 배포 플랫폼 가이드
- VS Code - 코드 에디터 가이드
- 사용자 매뉴얼 - 본 사용자 매뉴얼
좌측 사이드바
각 도구의 세부 메뉴가 카테고리별로 정리되어 있습니다. 원하는 항목을 클릭하면 우측 콘텐츠 영역에 해당 내용이 표시됩니다.
우측 콘텐츠 영역
선택한 항목의 상세 내용이 표시되는 메인 영역입니다. 설명, 코드 예제, 이미지 등이 포함되어 있으며, 코드 블록에는 복사 버튼이 제공됩니다.
하단 푸터
사이트 정보, 포함된 가이드 목록, 관련 링크 등이 표시됩니다.
주요 기능
Vibe Coding Manual에서 제공하는 5가지 핵심 가이드를 소개합니다.
Claude Code
Anthropic이 개발한 AI 코딩 어시스턴트입니다. 모바일, 웹, 데스크톱, CLI 4가지 방식으로 사용할 수 있으며, 코드 생성, 디버깅, 리팩토링 등 개발 전반을 지원합니다.
- 4종 소개 및 비교
- 7단계 설치 가이드
- 기본 사용법 & 고급 기능
- 사용료 체계 & 토큰 절감 방안
GitHub
세계 최대의 코드 호스팅 플랫폼입니다. Git을 기반으로 버전 관리, 협업, CI/CD를 지원합니다.
- Git 핵심 명령어
- 저장소 관리 & GitHub Flow
- 마크다운 문법
- GitHub Actions CI/CD
Supabase
오픈소스 Firebase 대안으로, PostgreSQL 기반의 백엔드 서비스를 제공합니다.
- 데이터베이스 설계 & 관리
- 인증(Auth) 시스템
- 파일 스토리지
- RLS 보안 & 벡터 DB
Vercel
프론트엔드 배포에 최적화된 클라우드 플랫폼입니다. Git 연동으로 자동 배포를 지원합니다.
- 프레임워크 지원 (Next.js 등)
- Serverless Functions
- 도메인 설정 & 환경변수
- AI SDK 인프라
VS Code
Microsoft가 개발한 무료 코드 에디터로, 확장 프로그램을 통해 다양한 개발 환경을 구성할 수 있습니다.
- UI 구조 & 편집 기능
- 필수 확장 프로그램
- Git 소스 제어 연동
- 디버깅 & 단축키
자주 묻는 질문 (FAQ)
Vibe Coding Manual 사용 중 자주 묻는 질문과 답변입니다.
Q. 이 매뉴얼은 누구를 위한 것인가요?
프로그래밍 초보자부터 실무 개발자까지 모두를 대상으로 합니다. 각 도구의 기초부터 고급 활용법까지 단계별로 설명하고 있어 자신의 수준에 맞는 내용을 선택하여 학습할 수 있습니다.
Q. 모든 도구를 반드시 설치해야 하나요?
아닙니다. 자신의 프로젝트에 필요한 도구만 선택적으로 설치하면 됩니다. 다만, VS Code와 Git은 대부분의 개발 환경에서 필수이므로 우선 설치를 권장합니다.
Q. 설치 순서가 중요한가요?
네, 권장 설치 순서가 있습니다. VS Code → Node.js → Git & GitHub → Claude Code → Supabase & Vercel 순으로 설치하면 의존성 문제 없이 원활하게 환경을 구축할 수 있습니다.
Q. Claude Code 사용료가 발생하나요?
Claude Code는 유료 서비스입니다. 자세한 사용료 체계는 Claude 섹션의 "사용료 체계" 페이지에서 확인할 수 있으며, "토큰 절감 방안" 페이지에서 비용을 절약하는 방법도 안내하고 있습니다.
Q. 오프라인에서도 사용할 수 있나요?
이 매뉴얼 페이지 자체는 HTML 파일로 되어 있어 다운로드 후 오프라인에서 열람할 수 있습니다. 단, 일부 외부 이미지는 인터넷 연결이 필요할 수 있습니다.
Q. 매뉴얼에 오류가 있거나 개선 사항이 있으면 어떻게 하나요?
푸터에 있는 연락처로 문의해 주시면 확인 후 반영하겠습니다.