Ubuntu 24.04 기반 고성능 웹서버(LEMP) 구축 가이드
느린 웹사이트는 방문자와 구글 검색 순위 모두를 잃게 만듭니다. 본 가이드는 단순한 설치를 넘어 실무에서 사용하는 최적화 설정을 그대로 반영했습니다. 불필요한 설명은 배제하고, 터미널에 바로 붙여넣어 10분 만에 전문가급 서버를 구축하는 과정을 정리합니다.
시스템 준비 및 기본 설정
본격적인 스택 설치 전, 서버의 작업 환경을 구축하는 단계입니다. 시간대 설정과 메모리 확보를 통해 안정성을 높입니다.
1.1 터미널 가독성 설정 (선택사항)
사용자명과 경로를 색상으로 구분하여 명령어 입력 시 가독성을 높입니다.
source ~/.bashrc
1.2 시스템 업데이트 및 업그레이드
최신 보안 패치를 적용하여 서버 패키지 상태를 최신화합니다.
1.3 한국 시간대(KST) 설정
서버 시스템 시간과 로그 기록 시간을 한국 표준시로 일치시킵니다.
timedatectl
1.4 SWAP 메모리 설정 (2GB 권장)
메모리 부족 시 발생할 수 있는 서버 멈춤 현상을 방지하기 위해 가상 메모리를 할당합니다.
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo ‘/swapfile none swap sw 0 0’ | sudo tee -a /etc/fstab
1.5 시스템 사양 최종 점검
OS 버전, CPU, 메모리 상태를 마지막으로 확인합니다.
lscpu | grep “Model name”
free -h
Nginx 웹서버 설치 및 구성
Nginx는 가볍고 빠른 처리가 가능한 엔진으로, 최신 Ubuntu 24.04 저장소의 패키지를 사용하여 설치를 진행합니다.
2.1 Nginx 설치 및 실행
패키지를 설치하고 서버 부팅 시 자동으로 실행되도록 설정합니다.
sudo systemctl enable nginx
sudo systemctl start nginx
2.2 보안 및 성능 최적화 (nginx.conf)
보안을 위해 Nginx 버전을 숨기고, 전송 속도 향상을 위해 Gzip 압축을 활성화합니다.
sudo nano /etc/nginx/nginx.conf
파일 내부에서 다음 항목을 찾아 주석(#)을 제거하거나 수정하십시오.
gzip on; # 데이터 압축 전송 활성화
gzip_comp_level 5; # 압축 효율 설정 (1~9)
gzip_types text/plain text/css application/json application/javascript text/xml;
2.3 설정값 검사 및 적용
수정한 설정 파일에 문법적 오류가 없는지 확인한 뒤 서버에 적용합니다.
sudo systemctl reload nginx
PHP 8.3 설치 및 최적화
워드프레스와 같은 동적 웹사이트 구동을 위해 PHP 8.3을 설치합니다. 최신 엔진과 더불어 실행 속도를 획기적으로 높여주는 OPcache 설정을 포함합니다.3.1 PHP 8.3 및 필수 확장 모듈 설치
Nginx와 통신하기 위한 FPM 모듈 및 워드프레스 운영에 꼭 필요한 이미지 처리, 문자열, DB 연결 모듈을 함께 설치합니다.3.2 PHP-FPM 실행 및 자동 시작 설정
설치된 PHP 서비스가 정상적으로 동작하도록 실행 상태를 점검합니다.3.3 성능 최적화: OPcache 및 업로드 용량 설정
컴파일된 PHP 코드를 메모리에 캐싱하여 속도를 높이고, 워드프레스 테마나 이미지 업로드 시 용량 제한에 걸리지 않도록 설정값을 수정합니다.3.4 PHP 서비스 재시작
변경된 설정값을 시스템에 적용합니다.3.5 웹 디렉토리 권한 설정
PHP가 파일을 쓰고 수정할 수 있도록 웹 루트 폴더의 소유권을 변경합니다.
sudo chmod -R 755 /var/www/html
MariaDB 데이터베이스 서버 구축
웹사이트의 모든 데이터가 저장되는 엔진입니다. MySQL의 강력한 대안이자 고성능 오픈소스인 MariaDB를 설치하고 보안을 강화합니다.
4.1 MariaDB 설치 및 실행
Ubuntu 24.04 공식 저장소를 통해 MariaDB를 설치하고 서버 부팅 시 자동으로 실행되도록 설정합니다.
sudo systemctl enable mariadb
sudo systemctl start mariadb
4.2 MariaDB 보안 스크립트 실행
설치 직후 외부 침입을 방지하고 불필요한 테스트 데이터를 제거하기 위해 보안 설정을 진행합니다.
실행 시 나타나는 질문에 다음과 같이 답변하십시오.
2. Change the root password? : y (루트 비밀번호 설정)
3. Remove anonymous users? : y
4. Disallow root login remotely? : y
5. Remove test database and access to it? : y
6. Reload privilege tables now? : y
4.3 워드프레스용 데이터베이스 및 전용 계정 생성
보안을 위해 관리자(root) 계정 대신 특정 데이터베이스만 제어할 수 있는 전용 사용자 계정을 만듭니다.
sudo mariadb -u root -p
접속 후 아래 쿼리를 한 줄씩 입력하십시오. (your_password 부분은 본인만의 비밀번호로 수정)
CREATE USER ‘my_user’@’localhost’ IDENTIFIED BY ‘your_password’;
GRANT ALL PRIVILEGES ON my_website_db.* TO ‘my_user’@’localhost’;
FLUSH PRIVILEGES;
EXIT;
서버 최적화 및 가상 호스트 설정
Nginx와 PHP-FPM을 유기적으로 연결하고, 대량의 접속에도 안정적으로 구동될 수 있도록 성능을 쥐어짜는 최종 설정 단계입니다.
6.1 웹 파일 소유권 및 권한 교정
워드프레스에서 플러그인 설치나 이미지 업로드 시 발생하는 권한 오류를 방지하기 위해 파일 소유권을 웹 서버 계정으로 변경합니다.
sudo chown -R www-data:www-data /var/www/html
# 폴더 및 파일 권한 일괄 설정
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
6.2 Nginx 가상 호스트 설정 (PHP 연동)
Nginx가 PHP 파일을 인식하고 고성능으로 처리할 수 있도록 기본 설정 파일을 수정합니다.
기존 내용을 모두 지우고 아래 최적화된 설정값을 복사하여 붙여넣으십시오.
listen 80;
server_name yourdomain.com; # 도메인 또는 IP 입력
root /var/www/html;
index index.php index.html;
# 워드프레스 고유주소(Permalink) 설정 지원
location / {
try_files $uri $uri/ /index.php?$args;
}
# PHP-FPM 연동 및 보안 강화
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 정적 파일 캐싱 (이미지, CSS, JS 속도 향상)
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
}
6.3 전체 서비스 재시작 및 연동 확인
지금까지의 모든 설정을 검사하고 서비스를 재시작하여 최종적으로 시스템을 가동합니다.
sudo nginx -t
# 설정에 문제가 없다면 서비스 재시작
sudo systemctl restart nginx
sudo systemctl restart php8.3-fpm
# PHP 연동 테스트 파일 생성
echo “<?php phpinfo(); ?>” | sudo tee /var/www/html/info.php
서버 최적화 및 가상 호스트 설정
Nginx와 PHP-FPM을 연결하고, 대량의 접속에도 안정적으로 구동될 수 있도록 성능을 극대화하는 최종 설정 단계입니다.
6.1 웹 파일 소유권 및 권한 교정
워드프레스에서 플러그인 설치나 이미지 업로드 시 발생하는 권한 오류를 원천 차단하기 위해 소유권을 변경합니다.
sudo chown -R www-data:www-data /var/www/html
# 폴더 및 파일 권한 일괄 설정
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
6.2 Nginx 가상 호스트 설정 (PHP 8.3 연동)
Nginx가 PHP 파일을 인식하고 고성능으로 처리할 수 있도록 기본 설정 파일을 수정합니다. 기존 내용은 모두 지우고 아래 최적화된 코드를 사용하세요.
listen 80;
server_name yourdomain.com; # 도메인 또는 서버 IP
root /var/www/html;
index index.php index.html;
# 워드프레스 고유주소(Permalink) 및 보안 설정
location / {
try_files $uri $uri/ /index.php?$args;
}
# PHP-FPM 8.3 소켓 연동
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 정적 파일 캐싱 (이미지, CSS, JS 속도 향상)
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
}
6.3 통신 소켓 검증 및 최종 적용
Nginx와 PHP가 만나는 통로인 소켓 파일이 정확한 위치에 있는지 확인한 뒤 서비스를 재시작합니다.
ls -al /run/php/php8.3-fpm.sock
# Nginx 설정 문법 검사
sudo nginx -t
# 모든 서비스 재시작
sudo systemctl restart nginx
sudo systemctl restart php8.3-fpm
6.4 PHP 연동 최종 확인
브라우저를 통해 실제 서버가 PHP를 정상적으로 처리하는지 테스트합니다.
sudo rm /var/www/html/info.php
서버 구축 대장정이 완료되었습니다
기초 설정부터 보안 SSL 적용, 그리고 성능 최적화까지 모든 과정을 성공적으로 마치셨습니다.
이제 귀하의 서버는 수많은 방문자를 맞이할 준비가 된 고성능 상태입니다.
불필요한 리소스 낭비 없이, 오직 귀하의 콘텐츠에만 집중할 수 있는 환경이 마련되었습니다.
Keytechcore는 여러분의 성공적인 IT 운영을 응원합니다.