데이터베이스 설정

안녕하세요! 이제 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 사용자

  1. PostgreSQL 공식 사이트에서 다운로드
  2. 설치 프로그램 실행
  3. 비밀번호 설정 (잊지 마세요!)

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 사용자

  1. MySQL 공식 사이트에서 다운로드
  2. MySQL Installer 실행
  3. ‘Developer Default’ 선택
  4. 루트 비밀번호 설정

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로 연결 확인
  • 직접 데이터베이스 접속 확인
  • 마이그레이션 실행 성공
  • 테이블 생성 확인

🔗 다음 단계

데이터베이스 설정이 완료되었습니다! 이제:

  1. GitHub 배포 설정04.github-deploy.md
    • Git 저장소 설정
    • 소스코드 버전 관리
  2. 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 설정을 해보겠습니다! 🎉