2단계: 서버 환경 설정
| ← 이전: 클라우드 준비 | 메인으로 | 다음: Laravel 배포 → |
서버가 준비되었으니 이제 Laravel을 실행하는데 필요한 소프트웨어들을 설치해볼까요? 이 단계에서는 PHP, MySQL, Redis, Nginx 등 모든 필수 요소들을 차근차근 설치할 거예요.
이 단계에서 배울 내용
- PHP 8.4 설치 및 Laravel 필수 확장 설치
- Composer 의존성 관리 도구 설치
- Git 버전 관리 시스템 설치
- MySQL 8.4 데이터베이스 설치 및 보안 설정
- Redis 7.x 캐시 서버 설치
- Nginx 1.28 웹서버 설치
- Node.js 20.x LTS 설치 (프론트엔드 빌드용)
💡 예상 소요 시간: 40-50분 정도 걸려요.
2.1 PHP 8.4 설치하기
PHP 8.4가 뭐가 좋은가요?
PHP 8.4는 최신 버전으로 엄청난 성능 향상과 새로운 기능들을 제공해요:
- Property Hooks: getter/setter를 더 간결하게 작성
- JIT 컴파일러: 코드 실행 속도가 훨씬 빨라져요
- 새로운 배열 함수: 코드가 더 읽기 쉬워져요
- 향상된 보안: 더 안전한 애플리케이션 개발 가능
패키지 목록 업데이트
# 최신 패키지 정보 업데이트
sudo apt update
PHP 8.4 코어 설치
Ubuntu 25.10은 기본적으로 PHP 8.4를 제공해요!
# PHP 8.4 코어 및 FPM 설치
sudo apt install -y php8.4-fpm php8.4-cli
💡 PHP-FPM이 뭔가요? FPM(FastCGI Process Manager)은 PHP를 웹서버와 연결해주는 브릿지예요. Nginx와 함께 사용하면 성능이 매우 좋습니다.
Laravel 필수 확장 모듈 설치
Laravel이 제대로 작동하려면 여러 PHP 확장이 필요해요:
# Laravel 필수 확장 한 번에 설치
sudo apt install -y php8.4-mysql php8.4-redis php8.4-xml php8.4-curl \
php8.4-zip php8.4-mbstring php8.4-bcmath php8.4-tokenizer \
php8.4-gd php8.4-intl php8.4-sqlite3
각 확장이 하는 일
| 확장 | 용도 |
|---|---|
| mysql | MySQL 데이터베이스 연결 |
| redis | Redis 캐시 연결 |
| xml | XML 파싱 |
| curl | HTTP 요청 보내기 |
| zip | 압축 파일 처리 |
| mbstring | 멀티바이트 문자열 (한글 등) |
| bcmath | 정밀한 수학 계산 |
| tokenizer | 코드 파싱 |
| gd | 이미지 처리 |
| intl | 국제화 지원 |
| sqlite3 | SQLite 데이터베이스 |
추가 유용한 확장
# 추가 확장 설치 (선택사항)
sudo apt install -y php8.4-soap php8.4-xmlrpc php8.4-imagick
PHP 설정 최적화
이제 PHP를 Laravel에 최적화해봅시다:
# PHP 설정 파일 경로: /etc/php/8.4/fpm/php.ini
# 메모리 제한 증가
sudo sed -i 's/memory_limit = .*/memory_limit = 512M/' /etc/php/8.4/fpm/php.ini
# 파일 업로드 크기 제한 증가
sudo sed -i 's/upload_max_filesize = .*/upload_max_filesize = 64M/' /etc/php/8.4/fpm/php.ini
sudo sed -i 's/post_max_size = .*/post_max_size = 64M/' /etc/php/8.4/fpm/php.ini
# 실행 시간 제한 증가
sudo sed -i 's/max_execution_time = .*/max_execution_time = 300/' /etc/php/8.4/fpm/php.ini
PHP 8.4 JIT 컴파일러 활성화
JIT를 켜면 성능이 크게 향상돼요:
# OPcache 및 JIT 활성화
sudo sed -i 's/;opcache.enable=1/opcache.enable=1/' /etc/php/8.4/fpm/php.ini
sudo sed -i 's/;opcache.jit=1205/opcache.jit=1205/' /etc/php/8.4/fpm/php.ini
sudo sed -i 's/;opcache.jit_buffer_size=0/opcache.jit_buffer_size=64M/' /etc/php/8.4/fpm/php.ini
프로덕션 환경 에러 설정
# 에러 표시 끄기 (보안)
sudo sed -i 's/display_errors = .*/display_errors = Off/' /etc/php/8.4/fpm/php.ini
# 에러 로깅 켜기
sudo sed -i 's/log_errors = .*/log_errors = On/' /etc/php/8.4/fpm/php.ini
💡 왜 display_errors를 끄나요? 에러 메시지에 민감한 정보가 포함될 수 있어서 보안상 끄는 게 좋아요. 대신 로그 파일에 기록합니다.
PHP-FPM 서비스 시작
# PHP-FPM 서비스 시작
sudo systemctl start php8.4-fpm
# 부팅 시 자동 시작 설정
sudo systemctl enable php8.4-fpm
# 서비스 상태 확인
sudo systemctl status php8.4-fpm
PHP 설치 확인
# PHP 버전 확인
php --version
# 출력 예시:
# PHP 8.4.x (cli) (built: ...)
# 설치된 확장 모듈 확인
php -m
# JIT 활성화 확인
php -m | grep -i opcache
2.2 Composer 설치하기
Composer가 뭔가요?
Composer는 PHP의 의존성 관리 도구예요. Laravel 프로젝트가 필요로 하는 모든 패키지를 자동으로 설치해줍니다. Node.js의 npm이나 Python의 pip와 비슷한 역할이에요.
Composer 다운로드 및 설치
# Composer 인스톨러 다운로드 및 실행
curl -sS https://getcomposer.org/installer | php
# 시스템 전역 위치로 이동
sudo mv composer.phar /usr/local/bin/composer
# 실행 권한 부여
sudo chmod +x /usr/local/bin/composer
설치 확인
# Composer 버전 확인
composer --version
# 출력 예시:
# Composer version 2.x.x
# 전역 사용 가능 확인
which composer
# 출력: /usr/local/bin/composer
완벽해요! 🎉
2.3 Git 설치 및 설정하기
Git이 왜 필요한가요?
Git은 코드를 관리하고, GitHub에서 프로젝트를 가져오는데 필수적이에요.
Git 설치
# Git 패키지 설치
sudo apt install -y git
Git 전역 설정 (선택사항)
나중에 서버에서 직접 커밋할 일이 있을 수 있으니 설정해둡시다:
# 사용자 이름 설정
git config --global user.name "Deploy User"
# 이메일 주소 설정
git config --global user.email "deploy@example.com"
# 기본 브랜치명 설정
git config --global init.defaultBranch main
Git 설치 확인
# Git 버전 확인
git --version
# 출력 예시:
# git version 2.x.x
# Git 설정 확인
git config --list --global
2.4 MySQL 8.4 설치하기
MySQL 서버 설치
Ubuntu 25.10은 기본적으로 MySQL 8.4를 제공해요!
# MySQL 8.4 서버 설치
sudo apt install -y mysql-server
# MySQL 서비스 시작 및 자동 시작 설정
sudo systemctl start mysql
sudo systemctl enable mysql
MySQL 버전 확인
# MySQL 버전 확인
mysql --version
# 출력 예시:
# mysql Ver 8.4.x for Linux on x86_64
MySQL 보안 설정
새로 설치한 MySQL은 보안 설정이 느슨해요. 강화해봅시다:
# MySQL 보안 설정 마법사 실행
sudo mysql_secure_installation
보안 설정 과정
차례대로 나오는 질문들에 답해주세요:
1. VALIDATE PASSWORD 플러그인 설치하시겠습니까?
→ Y (비밀번호 강도 검사)
2. 비밀번호 정책 레벨을 선택하세요 (0=LOW, 1=MEDIUM, 2=STRONG)
→ 1 (또는 2)
3. Root 비밀번호를 설정하세요
→ 강력한 비밀번호 입력 (잘 기억해두세요!)
4. 익명 사용자를 제거하시겠습니까?
→ Y (보안 강화)
5. root 사용자의 원격 로그인을 금지하시겠습니까?
→ Y (보안 강화)
6. test 데이터베이스를 제거하시겠습니까?
→ Y (필요 없음)
7. 권한 테이블을 다시 로드하시겠습니까?
→ Y (설정 적용)
🔒 비밀번호 꿀팁: 강력한 비밀번호 예시:
MySecure#Pass2024!(대소문자, 숫자, 특수문자 조합)
Laravel 애플리케이션용 데이터베이스 생성
이제 Laravel이 사용할 데이터베이스와 사용자를 만들어봅시다:
# MySQL 접속 (root 계정)
sudo mysql -u root -p
비밀번호를 입력하면 MySQL 콘솔로 들어갑니다:
-- 데이터베이스 생성 (UTF-8 인코딩)
CREATE DATABASE jinyerp_demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 애플리케이션용 사용자 생성
CREATE USER 'jinyerp'@'localhost' IDENTIFIED BY 'your_secure_password_here';
-- 데이터베이스 권한 부여
GRANT ALL PRIVILEGES ON jinyerp_demo.* TO 'jinyerp'@'localhost';
-- 권한 새로고침
FLUSH PRIVILEGES;
-- 생성된 데이터베이스 확인
SHOW DATABASES;
-- MySQL 종료
EXIT;
🔒 중요:
your_secure_password_here를 실제로 사용할 강력한 비밀번호로 바꿔주세요!
MySQL 연결 테스트
# 새로 만든 사용자로 접속 테스트
mysql -u jinyerp -p jinyerp_demo -e "SELECT 1;"
비밀번호 입력 후 에러가 없으면 성공! 🎉
주요 MySQL 설정 파일 경로
나중에 필요할 때를 위해 알아두세요:
- 메인 설정:
/etc/mysql/mysql.conf.d/mysqld.cnf - 클라이언트 설정:
/etc/mysql/conf.d/mysql.cnf - 데이터 디렉토리:
/var/lib/mysql/ - 에러 로그:
/var/log/mysql/error.log - 소켓 파일:
/var/run/mysqld/mysqld.sock
2.5 Redis 7.x 설치하기
Redis가 왜 필요한가요?
Redis는 초고속 인메모리 데이터베이스예요. Laravel에서는 주로:
- 세션 저장소: 로그인 정보 저장
- 캐시: 자주 사용하는 데이터 저장
- 큐: 백그라운드 작업 관리
Redis 서버 설치
# Redis 7.x 서버 설치
sudo apt install -y redis-server
# Redis 서비스 시작 및 자동 시작 설정
sudo systemctl start redis-server
sudo systemctl enable redis-server
Redis 버전 확인
# Redis 버전 확인
redis-server --version
# 출력 예시:
# Redis server v=7.x.x
Redis 보안 및 성능 설정
설정 파일 백업
# 원본 설정 파일 백업
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.backup
Redis 설정 편집
# Redis 설정 파일 편집
sudo nano /etc/redis/redis.conf
다음 설정들을 찾아서 수정해주세요:
# 메모리 제한 설정 (서버 RAM의 25% 정도)
maxmemory 256mb
maxmemory-policy allkeys-lru
# 보안을 위한 비밀번호 설정
requirepass your_strong_redis_password_here
# 외부 접속 제한 (로컬에서만 접속)
bind 127.0.0.1 ::1
# 위험한 명령어 비활성화 (보안)
rename-command FLUSHDB ""
rename-command FLUSHALL ""
💡 설정 설명:
maxmemory: Redis가 사용할 최대 메모리maxmemory-policy: 메모리 가득 차면 오래된 키 삭제requirepass: 비밀번호 설정bind: 로컬에서만 접속 허용rename-command: 위험한 명령어 비활성화
저장하고 종료: Ctrl + X, Y, Enter
Redis 재시작 및 확인
# 설정 적용을 위한 Redis 재시작
sudo systemctl restart redis-server
# Redis 서비스 상태 확인
sudo systemctl status redis-server
# Redis 연결 테스트 (비밀번호 필요)
redis-cli -a your_strong_redis_password_here ping
# 출력: PONG
# Redis 메모리 사용량 확인
redis-cli -a your_strong_redis_password_here info memory
Redis 설정 파일 경로
- 메인 설정:
/etc/redis/redis.conf - 백업 설정:
/etc/redis/redis.conf.backup - 로그 파일:
/var/log/redis/redis-server.log - 데이터 디렉토리:
/var/lib/redis/
2.6 Nginx 1.28 웹서버 설치하기
Nginx가 뭔가요?
Nginx는 빠르고 효율적인 웹서버예요. Apache보다 메모리를 적게 사용하면서도 더 많은 동시 접속을 처리할 수 있어요.
Nginx 설치
# Nginx 1.28 패키지 설치
sudo apt install -y nginx
# Nginx 서비스 시작 및 자동 시작 설정
sudo systemctl start nginx
sudo systemctl enable nginx
Nginx 버전 확인
# Nginx 버전 확인
nginx -v
# 출력 예시:
# nginx version: nginx/1.28.x
Nginx 기본 동작 확인
# Nginx 서비스 상태 확인
sudo systemctl status nginx
# 웹서버 동작 확인
curl http://localhost
HTML 코드가 출력되면 성공! 🎉
Nginx 설정 문법 확인
# 설정 파일 문법 확인
sudo nginx -t
# 출력 예시:
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful
기본 보안 설정
기본 사이트 비활성화
# 기본 사이트 비활성화
sudo rm -f /etc/nginx/sites-enabled/default
서버 토큰 숨기기
# Nginx 버전 정보 숨기기 (보안)
sudo sed -i '/server_tokens/s/^#//' /etc/nginx/nginx.conf
sudo sed -i 's/server_tokens on/server_tokens off/' /etc/nginx/nginx.conf
# 설정 적용
sudo systemctl reload nginx
💡 왜 서버 토큰을 숨기나요? Nginx 버전 정보가 노출되면 해당 버전의 취약점을 이용한 공격을 받을 수 있어요.
Nginx 주요 설정 파일 경로
- 메인 설정:
/etc/nginx/nginx.conf - 사이트 설정:
/etc/nginx/sites-available/ - 활성 사이트:
/etc/nginx/sites-enabled/ - 추가 설정:
/etc/nginx/conf.d/ - 에러 로그:
/var/log/nginx/error.log - 액세스 로그:
/var/log/nginx/access.log
2.7 Node.js 및 NPM 설치하기
Node.js가 왜 필요한가요?
Laravel의 프론트엔드 에셋(CSS, JavaScript)을 빌드하는데 필요해요. Vite나 Laravel Mix를 사용하려면 필수입니다.
Node.js 20.x LTS 저장소 추가
# NodeSource 저장소 스크립트 다운로드 및 실행
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
# 패키지 목록 업데이트
sudo apt update
Node.js 및 NPM 설치
# Node.js 패키지 설치 (NPM 자동 포함)
sudo apt install -y nodejs
# 필수 빌드 도구 설치
sudo apt install -y build-essential
Node.js 설치 확인
# Node.js 버전 확인
node --version
# 출력: v20.x.x
# NPM 버전 확인
npm --version
# 출력: 10.x.x
NPM 최신 버전으로 업데이트
# NPM을 최신 버전으로 업데이트
sudo npm install -g npm@latest
# 업데이트 확인
npm --version
NPM 전역 패키지 권한 설정 (선택사항)
# 전역 패키지 디렉토리 생성
mkdir ~/.npm-global
# NPM 설정 변경
npm config set prefix '~/.npm-global'
# PATH 환경 변수 추가
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.profile
# 설정 적용
source ~/.profile
2.8 서버 설정 완료 확인
모든 소프트웨어를 설치했어요! 이제 제대로 설치되었는지 최종 확인해봅시다.
모든 서비스 상태 확인
# 모든 설치된 서비스 상태 한 번에 확인
sudo systemctl status php8.4-fpm mysql redis-server nginx --no-pager
모두 active (running) 상태면 성공! 🎉
서비스 포트 확인
# 각 서비스가 사용하는 포트 확인
sudo netstat -tlnp | grep -E ':22|:80|:443|:3306|:6379'
출력 예시:
tcp 0.0.0.0:22 LISTEN (SSH)
tcp 0.0.0.0:80 LISTEN (Nginx HTTP)
tcp 0.0.0.0:443 LISTEN (Nginx HTTPS)
tcp 127.0.0.1:3306 LISTEN (MySQL)
tcp 127.0.0.1:6379 LISTEN (Redis)
메모리 사용량 확인
# 메모리 사용량 확인
free -h
설치된 버전 요약
# 모든 버전 한 번에 확인
echo "=== PHP ===" && php --version | head -1
echo "=== Composer ===" && composer --version
echo "=== Git ===" && git --version
echo "=== MySQL ===" && mysql --version
echo "=== Redis ===" && redis-server --version
echo "=== Nginx ===" && nginx -v 2>&1
echo "=== Node.js ===" && node --version
echo "=== NPM ===" && npm --version
✅ 2단계 완료 체크리스트
모든 단계를 완료하셨나요? 체크리스트로 확인해봅시다!
- PHP 8.4 설치 및 확장 모듈 설정
- PHP JIT 컴파일러 활성화
- PHP-FPM 서비스 실행 확인
- Composer 설치 및 전역 사용 가능
- Git 설치 및 기본 설정
- MySQL 8.4 설치 및 보안 설정
- MySQL 데이터베이스 및 사용자 생성
- Redis 7.x 설치 및 보안 설정
- Nginx 1.28 설치 및 기본 보안 설정
- Node.js 20.x LTS 및 NPM 설치
- 모든 서비스 정상 동작 확인
문제 해결
문제 1: PHP 확장이 설치 안 돼요
E: Unable to locate package php8.4-xxx
해결 방법:
# 패키지 목록 다시 업데이트
sudo apt update
# 사용 가능한 PHP 패키지 검색
apt-cache search php8.4
문제 2: MySQL root 비밀번호를 잊어버렸어요
해결 방법:
# MySQL 안전 모드로 시작
sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables &
# 비밀번호 없이 접속
mysql -u root
# 비밀번호 재설정
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
EXIT;
# MySQL 재시작
sudo systemctl restart mysql
문제 3: Redis가 시작 안 돼요
해결 방법:
# Redis 로그 확인
sudo tail -f /var/log/redis/redis-server.log
# 설정 파일 문법 확인
redis-server /etc/redis/redis.conf --test-config
# 권한 확인
ls -la /var/lib/redis/
문제 4: Nginx 설정 테스트 실패
해결 방법:
# 상세한 에러 메시지 확인
sudo nginx -t
# 설정 파일 문법 확인
sudo nano /etc/nginx/nginx.conf
# 에러 로그 확인
sudo tail -f /var/log/nginx/error.log
다음 단계
축하합니다! 2단계를 완료하셨어요! 🎉
서버 환경이 모두 준비되었으니 이제 Laravel 프로젝트를 배포할 차례입니다!
| ← 이전: 클라우드 준비 | 메인으로 | 다음: Laravel 배포 → |