데이터베이스 설정
안녕하세요! 이제 Laravel에 데이터베이스를 연결해보겠습니다. 데이터베이스는 우리 애플리케이션의 기억 저장소라고 생각하시면 됩니다. 사용자 정보, 게시글, 주문 내역 등 모든 중요한 데이터가 여기에 저장돼요.
💡 강의 노트: 데이터베이스 설정이 Laravel에서 가장 중요한 부분 중 하나입니다. 한 번 제대로 설정해두면 Laravel이 알아서 모든 걸 처리해줘요!
🤔 어떤 데이터베이스를 선택할까요?
Laravel은 3가지 주요 데이터베이스를 지원합니다:
📊 데이터베이스 선택지 비교
| 특성 | SQLite | PostgreSQL | MySQL |
|---|---|---|---|
| 설치 | 불필요 (Laravel 내장) | 별도 설치 필요 | 별도 설치 필요 |
| 복잡도 | 매우 간단 | 중간 | 중간 |
| 성능 | 낮음 | 매우 높음 | 높음 |
| 동시 접속 | 제한적 | 우수 | 우수 |
| 적합한 용도 | 개발/학습/소규모 | 운영/대규모 | 운영/웹서비스 |
| 파일 크기 | 단일 파일 | 복수 파일 | 복수 파일 |
🎯 상황별 추천
1. 처음 Laravel을 배우는 분
- SQLite 추천 → 설치 없이 바로 시작 가능
2. 실제 서비스를 개발하는 분
- PostgreSQL 추천 → 최고의 성능과 안정성
3. 기존에 MySQL 경험이 있는 분
- MySQL 선택 → 익숙한 환경에서 학습
💡 학습 팁: SQLite로 시작해서 Laravel을 익힌 후, 나중에 PostgreSQL이나 MySQL로 이전하는 것도 좋은 전략입니다!
📱 방법 1: SQLite 설정 (가장 간단)
SQLite는 Laravel에 기본으로 포함되어 있어서 별도 설치가 필요 없습니다! 파일 기반 데이터베이스라서 학습이나 개발용으로 완벽해요.
🚀 초보자 최적: 복잡한 설치 과정 없이 바로 Laravel을 체험할 수 있어요!
SQLite 장점
- 🎯 설치 불필요 - Laravel에 이미 포함됨
- 📁 단일 파일 - 데이터베이스가 하나의 파일로 관리됨
- ⚡️ 빠른 시작 - 즉시 개발 시작 가능
- 🔄 이동 용이 - 파일 하나만 백업/복사하면 됨
SQLite 단점
- 👥 동시 접속 제한 - 여러 사용자가 동시에 사용하기 어려움
- 📈 대용량 데이터 제한 - 큰 서비스에는 부적합
- 🌐 네트워크 접속 불가 - 원격 접속 불가능
SQLite 설정하기
이미 Laravel에 포함되어 있으니 설정만 하면 끝!
.env 파일을 열어서 다음과 같이 수정하세요:
# 데이터베이스 설정 (SQLite)
DB_CONNECTION=sqlite
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD는 주석 처리하거나 삭제
database 폴더에 SQLite 파일을 생성하세요:
# Laravel 프로젝트 폴더에서 실행
touch database/database.sqlite
# Windows에서는
echo. > database/database.sqlite
📁 SQLite 관련 파일들:
- 데이터베이스 파일:
database/database.sqlite - 설정 파일:
.env(DB_CONNECTION=sqlite)
SQLite 연결 테스트
# Laravel에서 연결 확인
php artisan tinker
tinker에서 테스트:
// 데이터베이스 연결 테스트
DB::connection()->getPdo();
// SQLite 버전 확인
DB::select("SELECT sqlite_version()");
// 종료
exit
✅ 성공 신호: 에러 없이 실행되고 SQLite 버전이 표시되면 성공!
언제 SQLite를 사용할까요?
✅ 좋은 경우:
- Laravel을 처음 배울 때
- 개인 프로젝트나 포트폴리오
- 프로토타입 개발
- 소규모 내부 도구
❌ 피해야 하는 경우:
- 여러 사용자가 동시에 사용하는 서비스
- 대용량 데이터 처리
- 고성능이 필요한 애플리케이션
🐘 방법 2: PostgreSQL 설정 (운영 권장)
PostgreSQL을 ‘포스트그레스큐엘’ 또는 줄여서 ‘포스트그레스’라고 부릅니다. 세계에서 가장 발전된 오픈 소스 데이터베이스 중 하나예요.
PostgreSQL 설치하기
운영체제별로 설치 방법이 다릅니다.
macOS 사용자
# Homebrew로 PostgreSQL 설치
brew install postgresql@15
# PostgreSQL 서비스 시작
brew services start postgresql@15
# 설치 확인
psql --version
Windows 사용자
- PostgreSQL 공식 사이트에서 다운로드
- 설치 프로그램 실행
- 비밀번호 설정 (잊지 마세요!)
Ubuntu/Linux 사용자
# PostgreSQL 설치
sudo apt update
sudo apt install postgresql-15 postgresql-contrib-15
# 서비스 시작
sudo systemctl start postgresql
sudo systemctl enable postgresql
🔐 중요: PostgreSQL 설치 시 설정한 비밀번호를 꼭 기억해주세요!
데이터베이스 생성하기
이제 우리 프로젝트용 데이터베이스를 만들어보겠습니다.
# PostgreSQL에 접속 (비밀번호 입력 필요)
sudo -u postgres psql
# 또는 macOS에서
psql postgres
PostgreSQL에 접속하면 다음 명령어들을 입력하세요:
-- 우리 프로젝트용 데이터베이스 생성
CREATE DATABASE jinyphp_demo_01;
-- 전용 사용자 생성 (보안을 위해)
CREATE USER jinyphp WITH PASSWORD 'your_password_here';
-- 사용자에게 데이터베이스 권한 부여
GRANT ALL PRIVILEGES ON DATABASE jinyphp_demo_01 TO jinyphp;
-- UUID 확장 설치 (Laravel에서 유용)
\c jinyphp_demo_01;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- 접속 종료
\q
📝 비밀번호 설정:
your_password_here부분을 원하는 비밀번호로 바꿔주세요! (예:password123)
Laravel에서 PostgreSQL 설정
이제 Laravel이 PostgreSQL에 연결할 수 있도록 설정해보겠습니다.
.env 파일을 열어서 다음과 같이 수정하세요:
# 데이터베이스 설정 (PostgreSQL)
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=jinyphp_demo_01
DB_USERNAME=jinyphp
DB_PASSWORD=your_password_here
⚠️ 주의:
DB_PASSWORD에는 위에서 설정한 실제 비밀번호를 입력하세요!
📁 PostgreSQL 관련 파일들:
- macOS 설정:
/usr/local/var/postgres/postgresql.conf - Ubuntu 설정:
/etc/postgresql/15/main/postgresql.conf - 데이터 저장 위치:
/usr/local/var/postgres/(macOS)
🐬 방법 3: MySQL 설정 (인기 선택지)
MySQL을 ‘마이에스큐엘’이라고 부릅니다. 세계에서 가장 널리 사용되는 데이터베이스 중 하나예요.
MySQL 설치하기
macOS 사용자
# Homebrew로 MySQL 설치
brew install mysql@8.0
# MySQL 서비스 시작
brew services start mysql@8.0
# 보안 설정 (중요!)
mysql_secure_installation
Windows 사용자
- MySQL 공식 사이트에서 다운로드
- MySQL Installer 실행
- ‘Developer Default’ 선택
- 루트 비밀번호 설정
Ubuntu/Linux 사용자
# MySQL 설치
sudo apt update
sudo apt install mysql-server-8.0
# 보안 설정
sudo mysql_secure_installation
MySQL 데이터베이스 생성하기
# MySQL에 루트로 접속
mysql -u root -p
# 비밀번호 입력
MySQL에 접속하면 다음 명령어들을 입력하세요:
-- 프로젝트용 데이터베이스 생성
CREATE DATABASE jinyphp_demo_01 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 전용 사용자 생성
CREATE USER 'jinyphp'@'localhost' IDENTIFIED BY 'your_password_here';
-- 권한 부여
GRANT ALL PRIVILEGES ON jinyphp_demo_01.* TO 'jinyphp'@'localhost';
-- 권한 적용
FLUSH PRIVILEGES;
-- 접속 종료
EXIT;
Laravel에서 MySQL 설정
.env 파일에서 다음과 같이 수정하세요:
# 데이터베이스 설정 (MySQL)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=jinyphp_demo_01
DB_USERNAME=jinyphp
DB_PASSWORD=your_password_here
📁 MySQL 관련 파일들:
- macOS 설정:
/usr/local/etc/my.cnf - Ubuntu 설정:
/etc/mysql/mysql.conf.d/mysqld.cnf - 데이터 저장 위치:
/usr/local/var/mysql/
🧪 데이터베이스 연결 테스트
설정이 끝났으니 실제로 연결이 되는지 확인해보겠습니다!
Laravel에서 연결 확인
# Laravel 프로젝트 폴더에서 실행
php artisan tinker
tinker가 실행되면 다음 명령어를 입력하세요:
// 데이터베이스 연결 테스트
DB::connection()->getPdo();
// 성공하면 PDO 객체 정보가 출력됩니다
// 실패하면 에러 메시지가 나타납니다
// tinker 종료
exit
✅ 성공 신호: 에러 없이 PDO 객체 정보가 나오면 연결 성공! 🚨 실패 시: 사용자명, 비밀번호, 데이터베이스 이름을 다시 확인해보세요.
직접 데이터베이스 연결 확인
터미널에서도 확인할 수 있어요:
# SQLite 연결 테스트
sqlite3 database/database.sqlite ".tables"
# PostgreSQL 연결 테스트
psql -U jinyphp -d jinyphp_demo_01 -h localhost
# MySQL 연결 테스트
mysql -u jinyphp -p -h localhost jinyphp_demo_01
📊 마이그레이션 실행
Laravel의 마법 같은 기능을 체험해보겠습니다! 마이그레이션은 데이터베이스 테이블을 자동으로 만들어주는 기능이에요.
💫 Laravel의 마법: 복잡한 SQL 문을 직접 작성할 필요 없이 Laravel이 알아서 테이블을 만들어줍니다!
# 기본 테이블들 생성 (사용자, 비밀번호 재설정 등)
php artisan migrate
# 성공 메시지 확인
# Migration table created successfully.
# Migrating: 2014_10_12_000000_create_users_table
# Migrated: 2014_10_12_000000_create_users_table (15.23ms)
🎉 성공하면 다음 테이블들이 자동으로 생성됩니다:
users- 사용자 정보password_reset_tokens- 비밀번호 재설정sessions- 사용자 세션cache- 캐시 데이터
마이그레이션 상태 확인
# 어떤 마이그레이션이 실행되었는지 확인
php artisan migrate:status
# 결과 예시:
# +------+----------------------------------------------+-------+
# | Ran? | Migration | Batch |
# +------+----------------------------------------------+-------+
# | Yes | 2014_10_12_000000_create_users_table | 1 |
# | Yes | 2014_10_12_100000_create_password_... | 1 |
# +------+----------------------------------------------+-------+
📋 해석: ‘Yes’로 표시된 것들은 이미 실행된 마이그레이션입니다.
🎯 샘플 데이터 추가 (선택사항)
테스트용 데이터를 추가해보겠습니다. 실제 개발할 때 유용해요.
# 샘플 데이터 생성 (있는 경우에만)
php artisan db:seed
# 또는 특정 시더 실행
php artisan db:seed --class=UserSeeder
💡 참고: 기본 Laravel에는 시더가 없을 수도 있어요. 나중에 필요할 때 만들면 됩니다.
✅ 데이터베이스 설정 완료 체크리스트
설치 및 설정
- 데이터베이스 선택 - SQLite / PostgreSQL / MySQL 중 하나
- SQLite: database/database.sqlite 파일 생성
- PostgreSQL/MySQL: 데이터베이스 생성 (
jinyphp_demo_01) - PostgreSQL/MySQL: 전용 사용자 생성 (
jinyphp) - Laravel .env 파일 수정 완료
연결 테스트
- Laravel tinker로 연결 확인
- 직접 데이터베이스 접속 확인
- 마이그레이션 실행 성공
- 테이블 생성 확인
🔗 다음 단계
데이터베이스 설정이 완료되었습니다! 이제:
- GitHub 배포 설정 →
04.github-deploy.md- Git 저장소 설정
- 소스코드 버전 관리
- JinyPHP 패키지 설치 →
../02.jinyphp.md- Laravel 확장 기능 추가
❓ 자주 발생하는 문제들
Q1: SQLite 파일을 찾을 수 없다고 나와요
A: database/database.sqlite 파일이 존재하는지 확인하세요. 없으면 touch database/database.sqlite 명령으로 생성하세요.
Q2: “Access denied for user” 에러가 나요 (PostgreSQL/MySQL)
A: 사용자명이나 비밀번호가 틀렸을 가능성이 높습니다. .env 파일을 다시 확인해보세요.
Q3: “Database does not exist” 에러가 나요
A: 데이터베이스 이름을 확인해보세요. 대소문자도 정확해야 합니다.
Q4: PostgreSQL/MySQL 서비스가 시작되지 않아요
A:
- macOS:
brew services restart postgresql@15 - Ubuntu:
sudo systemctl restart postgresql
Q5: 마이그레이션이 실행되지 않아요
A: 먼저 데이터베이스 연결을 확인해보세요. php artisan tinker로 테스트 후 다시 시도해보세요.
Q6: SQLite 권한 오류가 나요
A: database 폴더와 SQLite 파일에 쓰기 권한이 있는지 확인하세요:
chmod 755 database/
chmod 664 database/database.sqlite
Q7: 포트가 이미 사용 중이라고 나와요
A: 다른 프로그램이 같은 포트를 사용하고 있을 수 있습니다. 데이터베이스 서비스를 재시작하거나 다른 포트를 사용해보세요.
수고하셨습니다! 이제 Laravel이 데이터베이스와 완전히 연결되었어요. 다음 강의에서 Git 설정을 해보겠습니다! 🎉