GitHub 배포 설정
안녕하세요! 이제 우리가 만든 Laravel 프로젝트를 GitHub에 올려서 관리해보겠습니다. Git과 GitHub은 개발자의 필수 도구예요. 마치 작성 중인 소설 원고를 안전한 곳에 백업하고, 여러 버전을 관리하는 것과 같다고 생각하시면 됩니다.
💡 강의 노트: Git이 처음이라면 조금 복잡해 보일 수 있어요. 하지만 한 번 익숙해지면 없어서는 안 될 도구가 됩니다! 천천히 따라해보세요.
🤔 왜 Git을 사용하나요?
Git을 사용하는 이유를 간단히 설명드릴게요:
- 백업: 코드가 사라질 걱정 없어요
- 버전 관리: 언제든 이전 버전으로 돌아갈 수 있어요
- 협업: 여러 명이 함께 개발할 수 있어요
- 배포: 서버에 쉽게 코드를 올릴 수 있어요
🎯 실무 팁: 회사에서는 Git 없는 개발은 상상할 수 없어요. 꼭 익숙해져야 하는 도구입니다!
🚀 Git 저장소 초기화
먼저 우리 프로젝트를 Git으로 관리할 수 있도록 설정해보겠습니다.
기본 Git 설정 확인
처음 Git을 사용한다면 사용자 정보를 설정해야 해요:
# Git 사용자 정보 설정 (한 번만 하면 됩니다)
git config --global user.name "홍길동"
git config --global user.email "your-email@example.com"
# 설정 확인
git config --global user.name
git config --global user.email
📝 중요: 이메일은 나중에 GitHub 계정과 같은 이메일을 사용하시는 걸 추천해요!
프로젝트를 Git 저장소로 만들기
Laravel 프로젝트 폴더에서 다음 명령어를 실행하세요:
# 현재 폴더가 jinyphp_demo_01인지 확인
pwd
# Git 저장소 초기화
git init
# 현재 상태 확인
git status
✅ 성공 확인: “Initialized empty Git repository”라는 메시지가 나오면 성공!
💬 설명:
git init: 현재 폴더를 Git으로 관리하기 시작해요git status: 현재 Git 상태를 보여줍니다
📋 .gitignore 파일 확인
Git에서 제외할 파일들을 설정해야 합니다. Laravel은 자동으로 .gitignore 파일을 만들어주는데, 내용을 확인해보겠습니다.
🤫 비밀:
.env파일처럼 비밀번호가 들어있는 파일은 Git에 올리면 안 돼요! 해커들이 볼 수 있거든요.
# .gitignore 파일 내용 확인
cat .gitignore
기본으로 제외되는 중요한 파일들:
# 환경 설정 (비밀번호 포함)
/.env
# 의존성 (너무 크고 자동으로 설치 가능)
/vendor
/node_modules
# 캐시 파일 (자동으로 생성됨)
/storage/framework/cache/*
/storage/framework/sessions/*
/storage/logs/*
# IDE 설정
/.idea
/.vscode
추가로 넣으면 좋은 것들 (선택사항):
# .gitignore 파일 끝에 추가
echo "" >> .gitignore
echo "# 추가 제외 파일들" >> .gitignore
echo ".DS_Store" >> .gitignore
echo "Thumbs.db" >> .gitignore
echo "*.log" >> .gitignore
💡 팁: macOS에서는
.DS_Store, Windows에서는Thumbs.db라는 숨김 파일이 자동으로 생성되는데, 이런 것들은 Git에 포함하지 않는 게 좋아요.
📦 첫 번째 커밋 만들기
이제 현재 상태를 Git에 저장해보겠습니다. 커밋은 ‘이 시점의 코드를 저장한다’는 의미예요.
스테이징과 커밋
Git에서는 2단계로 저장합니다:
# 1단계: 저장할 파일들을 준비 (스테이징)
git add .
# 현재 상태 확인
git status
# 2단계: 실제로 저장 (커밋)
git commit -m "Initial Laravel project setup"
💬 각 명령어 설명:
git add .: 모든 파일을 스테이징 영역에 추가git status: 어떤 파일이 변경되었는지 확인git commit -m "메시지": 변경사항을 저장하고 메시지 작성
📝 커밋 메시지 팁:
- 영어로 작성하는 게 일반적이에요
- “Add”, “Fix”, “Update” 같은 동사로 시작
- 50자 이내로 간단하게
커밋 내역 확인
# 커밋 기록 확인
git log --oneline
# 결과 예시:
# a1b2c3d Initial Laravel project setup
🐙 GitHub 연결하기
이제 우리 코드를 GitHub에 올려보겠습니다! GitHub은 Git 저장소를 온라인에서 관리할 수 있는 서비스예요.
GitHub 저장소 생성
먼저 GitHub 웹사이트에서 새 저장소를 만들어야 해요:
- GitHub.com 접속 및 로그인
- “New repository” 버튼 클릭 (또는 + 아이콘)
- Repository name:
jinyphp_demo_01 - Description: “Laravel JinyPHP Demo Project” (선택사항)
- Public/Private 선택 (학습용이므로 Public 추천)
- ❌ Initialize with README 체크하지 마세요! (이미 우리가 만들어둔 프로젝트가 있으니까)
- “Create repository” 클릭
⚠️ 주의: “Initialize this repository with a README” 체크박스를 체크하면 안 돼요! 이미 만들어진 프로젝트와 충돌이 날 수 있어요.
로컬 프로젝트와 GitHub 연결
GitHub에서 저장소를 만든 후 나오는 명령어들을 복사해서 실행하세요:
# GitHub 저장소를 원격 저장소로 추가
git remote add origin https://github.com/your-username/jinyphp_demo_01.git
# 브랜치 이름을 main으로 변경 (최신 표준)
git branch -M main
# GitHub에 코드 업로드
git push -u origin main
🔐 인증 방법:
- HTTPS: GitHub 사용자명/비밀번호 또는 Personal Access Token
- SSH: SSH 키 설정 필요 (고급 사용자용)
💬 설명:
origin: GitHub 저장소의 별명main: 기본 브랜치 이름 (예전에는master를 사용했어요)-u: 앞으로git push만 해도 자동으로 origin main에 올라가도록 설정
업로드 확인
GitHub 웹사이트를 새로고침하면 코드가 업로드된 걸 확인할 수 있어요!
🔧 환경별 설정 파일 준비
배포할 때 필요한 설정 파일들을 준비해보겠습니다.
.env.example 파일 업데이트
.env 파일은 Git에 올리면 안 되지만, .env.example은 올려야 해요. 다른 사람이 프로젝트를 받았을 때 참고할 수 있거든요.
# 현재 .env 파일을 기반으로 .env.example 업데이트
cp .env .env.example
# 민감한 정보 제거 (비밀번호, API 키 등)
.env.example 파일을 열어서 다음과 같이 수정하세요:
APP_NAME="Jinyphp Demo 01"
APP_ENV=production
APP_DEBUG=false
APP_KEY=
APP_TIMEZONE=Asia/Seoul
APP_URL=https://your-domain.com
LOG_CHANNEL=stack
LOG_LEVEL=error
# 데이터베이스 설정 (실제 비밀번호는 제거)
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=jinyphp_demo_01
DB_USERNAME=jinyphp
DB_PASSWORD=
# 캐시 설정
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
# Redis 설정
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=
REDIS_PORT=6379
# 메일 설정
MAIL_MAILER=smtp
MAIL_HOST=
MAIL_PORT=587
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
🔑 보안 팁: 실제 비밀번호, API 키, 데이터베이스 접속 정보는 절대 GitHub에 올리면 안 됩니다!
🏗️ Laravel 최적화
배포를 위해 Laravel을 최적화해보겠습니다. 성능이 훨씬 좋아져요!
Composer 최적화
# 프로덕션용 의존성만 설치 (개발 도구 제외)
composer install --optimize-autoloader --no-dev
# 다시 개발 모드로 (로컬에서는 개발 도구가 필요해요)
composer install
Laravel 캐시 최적화
# 설정 캐시 생성 (성능 향상)
php artisan config:cache
# 라우트 캐시 생성
php artisan route:cache
# 뷰 캐시 생성
php artisan view:cache
# 모든 캐시 확인
ls -la bootstrap/cache/
💡 캐시란? 자주 사용되는 설정들을 미리 저장해서 속도를 빠르게 만드는 기법이에요.
프론트엔드 빌드
CSS와 JavaScript를 최적화해보겠습니다:
# Node.js 의존성 설치
npm install
# 프로덕션용 빌드 (압축된 파일 생성)
npm run build
# 빌드 결과 확인
ls -la public/build/
⚙️ GitHub Actions 설정 (자동 배포)
GitHub Actions를 설정하면 코드를 푸시할 때마다 자동으로 테스트하고 빌드할 수 있어요! 이건 좀 고급 기능이라 나중에 필요할 때 설정하셔도 됩니다.
CI/CD 설정 파일 생성
# GitHub Actions 폴더 생성
mkdir -p .github/workflows
.github/workflows/deploy.yml 파일 생성:
name: Laravel CI/CD
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15
env:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: testing
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.4
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, pgsql
- name: Install Composer dependencies
run: composer install --optimize-autoloader --no-dev
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install NPM dependencies
run: npm ci
- name: Build assets
run: npm run build
- name: Prepare Laravel Application
run: |
cp .env.example .env
php artisan key:generate
- name: Run tests
run: php artisan test
🤖 설명: 이 설정파일은 코드가 푸시될 때마다 자동으로 테스트를 실행하고 빌드해줍니다. 마치 자동 검사관 같은 역할이에요!
📤 변경사항 커밋 및 푸시
지금까지 만든 설정들을 GitHub에 올려보겠습니다:
# 변경된 파일들 확인
git status
# 모든 변경사항 스테이징
git add .
# 커밋 메시지와 함께 저장
git commit -m "Add deployment configuration and optimization"
# GitHub에 업로드
git push
브랜치 전략 (팀 개발용)
나중에 팀으로 개발할 때 유용한 브랜치 사용법:
# 개발 브랜치 생성
git checkout -b develop
# 기능 브랜치 생성
git checkout -b feature/user-auth
git checkout -b feature/admin-panel
# 브랜치 전환
git checkout main
git checkout develop
# 브랜치 병합
git checkout develop
git merge feature/user-auth
git push origin develop
🌳 브랜치란? 코드의 다른 버전을 병렬로 관리하는 방법이에요. main은 완성된 코드, develop은 개발 중인 코드를 관리합니다.
✅ GitHub 배포 설정 완료 체크리스트
Git 기본 설정
- Git 사용자 정보 설정 (
user.name,user.email) - Git 저장소 초기화 (
git init) - .gitignore 파일 확인
- 첫 번째 커밋 생성
GitHub 연결
- GitHub 저장소 생성 (
jinyphp_demo_01) - 원격 저장소 연결 (
git remote add origin) - 코드 업로드 완료 (
git push)
배포 준비
- .env.example 파일 업데이트 (비밀정보 제거)
- Laravel 캐시 최적화
- 프론트엔드 빌드 완료
- GitHub Actions 설정 (선택사항)
🔗 다음 단계
GitHub 설정이 완료되었습니다! 이제:
- JinyPHP 패키지 설치 →
../02.jinyphp.md- Laravel 기능 확장
- 서버 배포 →
../배포.md- 실제 서버에 프로젝트 올리기
- 팀 협업 시작
- 다른 팀원들과 코드 공유
❓ 자주 발생하는 문제들
Q1: git push할 때 Username/Password를 계속 물어봐요
A: GitHub Personal Access Token을 사용하세요:
- GitHub Settings → Developer settings → Personal access tokens
- 토큰 생성 후 비밀번호 대신 토큰 입력
Q2: “! [rejected] main -> main (fetch first)” 에러가 나요
A: 원격 저장소에 변경사항이 있을 때 나타납니다:
git pull origin main
git push origin main
Q3: .env 파일이 GitHub에 올라갔어요!
A: 즉시 제거하고 새 비밀번호로 변경하세요:
git rm --cached .env
git commit -m "Remove .env file"
git push
Q4: 커밋 메시지를 잘못 작성했어요
A: 마지막 커밋이라면 수정 가능합니다:
git commit --amend -m "새로운 커밋 메시지"
Q5: GitHub Actions가 실행되지 않아요
A: 저장소 Settings → Actions에서 Actions가 활성화되어 있는지 확인해보세요.
📚 Git 명령어 치트 시트
기본 명령어
git status # 현재 상태 확인
git add . # 모든 파일 스테이징
git add filename # 특정 파일만 스테이징
git commit -m "message" # 커밋하기
git push # 원격 저장소에 올리기
git pull # 원격 저장소에서 받기
브랜치 관리
git branch # 브랜치 목록 확인
git checkout -b name # 새 브랜치 생성 및 전환
git checkout name # 브랜치 전환
git merge name # 브랜치 병합
되돌리기
git reset --soft HEAD~1 # 마지막 커밋 취소 (파일은 유지)
git reset --hard HEAD~1 # 마지막 커밋 완전 취소
git checkout filename # 특정 파일 되돌리기
축하합니다! 이제 여러분의 Laravel 프로젝트가 GitHub에서 안전하게 관리되고 있어요. 전 세계 어디서든 코드를 받아볼 수 있고, 팀원들과 협업할 준비도 끝났습니다! 🎉