Ubuntu 24.04 LTS에서 Apache2 + PHP 8.3 + MySQL로 워드프레스 설치하는 완벽 가이드

Ubuntu 24.04 LTS에서 웹서버(Apache + PHP + MySQL) 구성하기

Ubuntu 24.04 웹서버 구축을 시작하게 된 계기는 정말 단순했습니다. 회사에서 새로운 프로젝트를 진행하는데 안정적인 개발 환경이 필요했거든요. 처음엔 클라우드 서비스만 사용하려고 했는데, 비용도 비용이고 직접 서버를 구축해보고 싶다는 생각이 들었어요. 솔직히 말하자면 Ubuntu 22.04 버전은 좀 아쉬웠습니다. 많은 변경사항들이 있었는데 오히려 혼란만 가중시키는 느낌이었거든요. 하지만 24.04 LTS 버전은 정말 안정적이에요. 실제 사업체에서도 충분히 사용할 수 있을 정도로 검증된 환경을 제공합니다. 이 글에서는 10년 넘게 Ubuntu 서버를 운영해온 경험을 바탕으로, 실무에서 바로 활용할 수 있는 APM(Apache + PHP + MySQL) 웹서버 구축 방법을 알려드리겠습니다.

STEP 2: 목차 1-2 내용 작성

시스템 준비 및 기본 설정

서버를 구축하기 전에 가장 중요한 건 바로 기초 작업이에요. 아무리 급해도 이 부분은 꼼꼼히 해야 합니다. 저도 처음엔 이런 걸 건너뛰고 바로 웹서버부터 설치했다가 나중에 문제가 생겨서 처음부터 다시 해야 했던 경험이 있거든요.
Root 권한으로 전환하기
1) 현재 계정 확인:
whoami
복사됨!
2) Root로 전환:
sudo su -l root
복사됨!
3) 쉘 색상 변경:
cp /etc/skel/.bashrc /root/.bashrc
복사됨!
다음으로 시스템 언어 설정을 해야 해요. 국내 일부 클라우드 업체에서 서버를 받으면 한국어로 설정되어 있는 경우가 많은데, 이렇게 되면 나중에 오류가 발생했을 때 구글 검색이 어려워집니다. 영어 오류 메시지가 훨씬 검색하기 좋거든요.
언어 설정 확인 및 변경
1) 오류 메시지 테스트 (의도적 오류):
qwerty
복사됨!
2) 언어 설정 변경:
vi /etc/default/locale
복사됨!
3) 파일 내용을 다음과 같이 변경:
LANG=en_US.UTF-8
복사됨!
시스템 정보도 미리 확인해두는 게 좋습니다. 나중에 문제가 생겼을 때 이런 정보들이 필요하거든요. 실제로 저는 서버 메모리가 부족해서 사이트가 느려졌을 때 이런 명령어들로 원인을 찾아낸 적이 있어요.
시스템 정보 확인하기
1) 운영체제 버전:
lsb_release -a
복사됨!
2) CPU 정보:
cat /proc/cpuinfo | grep “model name” | head -1
복사됨!
3) CPU 코어 수:
cat /proc/cpuinfo | grep “processor” | wc -l
복사됨!
4) 메모리 정보:
free -m
복사됨!
5) 디스크 공간:
df -h
복사됨!

Apache 웹서버 설치 및 구성

이제 본격적으로 웹서버를 설치해보겠습니다. Apache는 정말 안정적이고 검증된 웹서버예요. 전 세계 웹사이트의 상당 부분이 Apache를 사용하고 있을 정도니까요. 설치 자체는 간단하지만, 보안 설정까지 제대로 해야 실무에서 사용할 수 있습니다.
먼저 시스템 패키지를 최신 상태로 업데이트해야 해요. 이건 정말 중요한 단계입니다. 어떤 운영체제든 가장 먼저 해야 할 일은 업데이트거든요.
시스템 업데이트
1) 패키지 목록 갱신:
apt update
복사됨!
2) 설치된 프로그램 업데이트:
apt upgrade
복사됨!
3) 불필요한 패키지 제거:
apt autoremove
복사됨!
이제 Apache2를 설치해보겠습니다. Ubuntu 24.04에서는 Apache 2.4.58 버전이 설치됩니다. 설치가 완료되면 바로 웹브라우저에서 서버 IP로 접속해서 확인할 수 있어요.
Apache2 설치
1) Apache 설치:
apt install apache2
복사됨!
2) 버전 확인:
apache2 -v
복사됨!
3) SSL 인증서 도구:
apt install ssl-cert
복사됨!
4) 무료 인증서 도구 (선택사항):
apt install certbot
복사됨!
Apache 모듈 설정도 중요해요. 기본 설정으로는 워드프레스 같은 프로그램이 제대로 작동하지 않을 수 있거든요. 특히 URL 재작성 기능이나 SSL 지원을 위해서는 반드시 이 작업을 해야 합니다.
Apache 모듈 활성화
1) URL 재작성 모듈:
a2enmod rewrite
복사됨!
2) 헤더 처리 모듈:
a2enmod headers
복사됨!
3) SSL 지원 모듈:
a2enmod ssl
복사됨!
4) 디렉토리 목록 비활성화:
a2dismod -f autoindex
복사됨!
5) 변경사항 적용:
service apache2 restart
복사됨!
설정이 제대로 되었는지 확인해보겠습니다. 문법 검사 명령어는 정말 유용해요. 설정 파일을 수정했는데 오타가 있으면 Apache가 시작되지 않거든요. 이 명령어로 미리 확인할 수 있습니다.
설정 확인
1) 문법 검사:
apache2ctl -S
복사됨!
2) 웹브라우저에서 http://서버IP 접속 확인
3) Apache 기본 페이지가 표시되면 성공!



Ubuntu 24.04 LTS에서 PHP 8.3 설치 및 필수 모듈 구성

STEP 3: PHP 8.3 설치 및 필수 모듈 구성

PHP 8.3 설치하기

이제 PHP를 설치해보겠습니다. Ubuntu 24.04에서는 기본적으로 PHP 8.3이 설치되는데, 정말 안정적이고 성능도 좋아요. 저는 PHP 7.4에서 8.3으로 업그레이드했을 때 확실히 성능 향상을 체감할 수 있었거든요. 특히 타입 선언이나 JIT 컴파일러 덕분에 속도가 많이 빨라졌어요.
PHP 8.3 기본 설치
1) PHP 설치:
apt install php
복사됨!
2) 설치된 PHP 버전 확인:
php -v
복사됨!
3) PHP CLI 추가 설치:
apt install php-cli
복사됨!
참고: Ubuntu 24.04에서는 PHP 8.3.6 버전이 설치됩니다. 이는 현재 가장 안정적인 버전 중 하나입니다.

웹 개발 필수 PHP 모듈 설치

PHP만 설치해서는 실제 웹 개발에서 한계가 있어요. 데이터베이스 연결, 이미지 처리, 다국어 지원 등을 위해서는 추가 모듈들이 필요합니다. 실무에서 정말 자주 사용하는 모듈들을 카테고리별로 설치해보겠습니다.
🔗 데이터베이스 연결 모듈
MySQL/MariaDB 연결을 위한 필수 모듈:
apt install php-mysql
복사됨!
PDO 및 MySQLi 확장이 포함됩니다.
🌏 다국어 지원 모듈
한글, 중국어, 일본어 등 멀티바이트 문자 처리:
apt install php-mbstring
복사됨!
이 모듈 없으면 한글이 깨집니다!
🖼️ 이미지 처리 모듈
썸네일 생성, 이미지 리사이징 등:
apt install php-gd
복사됨!
워드프레스, 쇼핑몰 등에서 필수입니다.
🌐 네트워크 통신 모듈
외부 API 호출, 파일 다운로드 등:
apt install php-curl
복사됨!
카카오페이, 네이버 로그인 API 등에서 사용합니다.
📄 XML/HTML 처리 모듈
XML 파싱, DOM 조작 등:
apt install php-xml
복사됨!
RSS 피드, 사이트맵 생성에 필요합니다.
🗜️ 압축 파일 처리 모듈
ZIP 파일 생성/해제:
apt install php-zip
복사됨!
파일 다운로드, 백업 기능에서 사용합니다.

고급 PHP 모듈 설치

여기서부터는 좀 더 전문적인 모듈들이에요. 대용량 사이트나 특별한 기능이 필요한 경우에 설치하는 모듈들입니다. 하지만 요즘은 대부분의 프레임워크에서 이런 모듈들을 요구하는 경우가 많아서 미리 설치해두는 게 좋아요.
🔢 수학 연산 확장 모듈
고정밀도 계산, 암호화 등:
apt install php-bcmath
복사됨!
전자상거래, 금융 계산에서 필수입니다.
🔐 OAuth 인증 모듈
구글, 페이스북 로그인 등:
apt install php-oauth
복사됨!
소셜 로그인 구현할 때 필요합니다.
📊 JSON 처리 모듈
API 개발의 필수 모듈:
apt install php-json
복사됨!
REST API, AJAX 통신에서 사용합니다.
🎨 고급 이미지 처리 모듈 (ImageMagick)
1) ImageMagick 라이브러리 설치:
apt install imagemagick libmagickwand-dev
복사됨!
2) PHP Imagick 확장 설치:
apt install php-imagick
복사됨!
GD보다 훨씬 강력한 이미지 처리가 가능합니다!
📦 Composer (PHP 패키지 관리자)
라라벨, 심포니 등 현대적 프레임워크 필수:
apt install composer
복사됨!
요즘 PHP 개발에서는 필수입니다.

성능 향상 모듈

사이트 속도는 정말 중요해요. 특히 모바일 시대에는 페이지 로딩이 1초만 늦어져도 사용자들이 떠나거든요. 이런 모듈들을 설치하면 확실히 성능 향상을 체감할 수 있어요.
⚡ APCu (메모리 캐시)
PHP 데이터 캐싱으로 속도 향상:
apt install php-apcu
복사됨!
데이터베이스 부하를 크게 줄여줍니다.
🗄️ Redis 연결 모듈
세션 저장, 캐싱 등에 사용:
apt install php-redis
복사됨!
대용량 사이트에서는 거의 필수입니다.
주의: Redis 모듈을 사용하려면 먼저 Redis 서버를 설치해야 합니다. 나중에 필요할 때 설치하셔도 됩니다.

PHP 설정 및 최적화

모듈 설치가 끝났으니 이제 PHP 설정을 최적화해보겠습니다. 기본 설정으로는 파일 업로드 크기가 너무 작거나 실행 시간이 부족할 수 있어요. 실무에서 자주 마주치는 문제들을 미리 해결해보겠습니다.
PHP 설정 파일 수정
1) Apache용 PHP 설정:
vi /etc/php/8.3/apache2/php.ini
복사됨!
2) CLI용 PHP 설정:
vi /etc/php/8.3/cli/php.ini
복사됨!
두 파일 모두에서 다음 설정들을 수정하세요:
; 타임존 설정
date.timezone = Asia/Seoul

; 업로드 파일 크기 (기본 2M → 64M)
upload_max_filesize = 64M
post_max_size = 64M

; 메모리 제한 (기본 128M → 256M)
memory_limit = 256M

; 실행 시간 제한 (기본 30초 → 300초)
max_execution_time = 300

; 에러 표시 (개발 중에만)
display_errors = Off
log_errors = On

복사됨!
변경사항 적용
Apache 재시작:
service apache2 restart
복사됨!
설정 확인:
php -v
복사됨!

PHP 동작 테스트

마지막으로 PHP가 제대로 동작하는지 테스트해보겠습니다. phpinfo() 페이지를 만들어서 설치된 모듈들과 설정을 확인할 수 있어요. 하지만 보안을 위해 특별한 방식으로 만들어보겠습니다.
PHP 테스트 파일 생성
1) 서버 호스트명 확인:
hostname
복사됨!
2) 보안 phpinfo 파일 생성:
echo “” > /var/www/html/myphpinfo.php
복사됨!
3) 웹브라우저에서 접속:
http://서버IP/myphpinfo.php?q=서버호스트명
복사됨!
확인사항: phpinfo 페이지에서 다음 항목들을 확인하세요:

• PHP Version: 8.3.x

• Default charset: UTF-8

• Default timezone: Asia/Seoul

• 설치한 모듈들이 모두 표시되는지 확인
🔍 설치된 모듈 확인 명령어
php -m
복사됨!
📋 특정 모듈 확인
php -m | grep mysql
복사됨!
축하합니다! PHP 8.3과 필수 모듈들의 설치가 완료되었습니다. 이제 데이터베이스 연결, 이미지 처리, 다국어 지원, API 통신 등 웹 개발에 필요한 대부분의 기능을 사용할 수 있어요. 다음 단계에서는 MySQL 데이터베이스를 설치하고 실제 웹사이트를 배포해보겠습니다.

placeholder

Ubuntu 24.04 LTS에서 MySQL 8.0 데이터베이스 서버 구축

STEP 4: MySQL 8.0 설치 및 데이터베이스 서버 구성

MySQL 8.0 설치하기

이제 데이터베이스 서버를 설치해보겠습니다. 요즘엔 클라우드 DB 서비스를 많이 사용하지만, 직접 설치하면 비용도 절약되고 더 세밀한 제어가 가능해요. MySQL 8.0은 정말 안정적이고 성능도 좋습니다. 저는 10년 넘게 MySQL을 사용해왔는데 8.0 버전부터는 확실히 성능 향상을 체감할 수 있어요.
MySQL 클라이언트 먼저 설치
외부 DB를 사용하든 안하든 설치하는 것이 좋습니다:
apt install mysql-client
복사됨!
콘솔 환경에서 mysql 명령어를 사용할 수 있게 됩니다.
MySQL 서버 설치
1) MySQL 서버 설치:
apt install mysql-server
복사됨!
2) 설치된 버전 확인:
mysqladmin version
복사됨!
3) MySQL 서비스 상태 확인:
systemctl status mysql
복사됨!
참고: Ubuntu 24.04에서는 MySQL 8.0.36 버전이 설치됩니다. 기본적으로 root 사용자는 auth_socket 인증을 사용하므로 리눅스 root 사용자는 비밀번호 없이 MySQL에 접속할 수 있습니다.

MySQL 접속 및 초기 설정

MySQL 8.0부터는 보안이 강화되어서 기본 설정이 조금 복잡해졌어요. 하지만 이 설정들이 실제로는 보안에 도움이 되니까 그대로 두는 게 좋습니다. 대신 웹에서 사용할 별도의 관리자 계정을 만들어보겠습니다.
MySQL 기본 관리자 정보 확인
시스템에서 자동 생성된 관리자 계정 정보:
cat /etc/mysql/debian.cnf
복사됨!
이 정보로 phpMyAdmin에 로그인할 수 있습니다.
MySQL 콘솔 접속
Root 권한으로 MySQL 접속:
mysql
복사됨!
MySQL 프롬프트가 나타나면 성공입니다!

phpMyAdmin 설치 및 설정

명령어로만 데이터베이스를 관리하기엔 너무 불편해요. phpMyAdmin은 웹 인터페이스로 MySQL을 쉽게 관리할 수 있게 해주는 도구입니다. 정말 안정적이고 오랫동안 검증된 프로그램이에요. 저도 10년 넘게 사용하고 있습니다.
phpMyAdmin 다운로드 및 설치
1) 최신 버전 다운로드:
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.zip -O /var/www/html/dbmyadmin.zip.lock
복사됨!
2) 압축 해제 및 폴더 이름 변경:
cd /var/www/html && unzip dbmyadmin.zip.lock && mv phpMyAdmin-5.2.2-all-languages dbmyadmin
복사됨!
3) 다운로드 파일 정리:
rm dbmyadmin.zip.lock
복사됨!
phpMyAdmin 설정 파일 구성
1) 설정 파일 복사:
mv /var/www/html/dbmyadmin/config.sample.inc.php /var/www/html/dbmyadmin/config.inc.php
복사됨!
2) 설정 파일 편집:
vi /var/www/html/dbmyadmin/config.inc.php
복사됨!
📝 vi 편집기 사용법:
i : 입력 모드 진입 (텍스트 편집 가능)
Esc : 명령 모드로 돌아가기
:set paste : 붙여넣기 모드 (들여쓰기 오류 방지)
gg + dG : 전체 내용 삭제 (gg로 맨 위 이동 후 dG로 맨 아래까지 삭제)
:wq : 저장 후 종료
:q! : 저장하지 않고 종료
기존 내용을 모두 지우고 다음 내용으로 교체하세요:
<?php declare(strict_types=1); // CHANGE HERE – 원하는 아이디/비밀번호로 변경하세요 $first_id = ‘webuser1’; $first_pw = ‘webpass1’; if (! (($_SERVER[‘PHP_AUTH_USER’] ?? ”) === $first_id && ($_SERVER[‘PHP_AUTH_PW’] ?? ”) === $first_pw)) { header(‘WWW-Authenticate: Basic realm=”password?”‘); header(‘HTTP/1.0 401 Unauthorized’); die (“Not authorized”); } $cfg[‘blowfish_secret’] = ‘hi%dh76Y^uumjuE9u3sHPyvjJdVw$M^N’; $cfg[‘NavigationTreeEnableGrouping’] = false; $cfg[‘MaxNavigationItems’] = ‘200’; $cfg[‘FirstLevelNavigationItems’] = ‘200’; $cfg[‘ShowDatabasesNavigationAsTree’] = false; $cfg[‘NumRecentTables’] = 0; $i = 0; $i++; $cfg[‘Servers’][$i][‘host’] = ‘localhost’; $cfg[‘Servers’][$i][‘compress’] = false; $cfg[‘Servers’][$i][‘AllowNoPassword’] = false; $cfg[‘Servers’][$i][‘port’] = ‘3306’;
복사됨!
보안 주의: $first_id와 $first_pw를 본인이 원하는 값으로 반드시 변경하세요. 이것은 phpMyAdmin 접속 전 1차 인증입니다. 간단하게 설정하셔도 됩니다.

데이터베이스 및 사용자 생성

이제 실제 웹사이트에서 사용할 데이터베이스와 사용자를 만들어보겠습니다. Root 계정을 직접 사용하는 것보다는 별도의 사용자를 만드는 게 보안상 훨씬 좋아요. 실무에서도 이렇게 하는 게 일반적입니다.
웹브라우저에서 phpMyAdmin 접속
1) 웹브라우저에서 접속:
http://서버IP/dbmyadmin
복사됨!
2) 1차 인증 (위에서 설정한 webuser1/webpass1)
3) 2차 인증 (debian-sys-maint 계정 정보 사용)
데이터베이스 생성 (phpMyAdmin에서)
1) 왼쪽 메뉴에서 “새로 만들기” 클릭
2) 데이터베이스 이름 입력 (예: mywebsite)
3) 문자집합을 “utf8mb4_general_ci” 선택
4) “만들기” 버튼 클릭
웹사이트용 MySQL 사용자 생성
1) 상단 메뉴에서 “사용자 계정” 클릭
2) “사용자 계정 추가” 클릭
3) 다음과 같이 입력:
👤 사용자 이름
mywebuser (원하는 이름)
🏠 호스트 이름
localhost
🔐 비밀번호
강력한 비밀번호 설정
🗄️ 데이터베이스
위에서 만든 데이터베이스 선택
4) 권한에서 “데이터” 항목들 모두 체크
5) “실행” 버튼 클릭

MySQL 보안 설정

MySQL도 Apache와 마찬가지로 보안 설정이 중요해요. 기본 설정도 나쁘지 않지만, 실무 환경에서 사용하려면 몇 가지 추가 설정을 해주는 게 좋습니다.
MySQL 설정 파일 최적화
설정 파일 편집:
vi /etc/mysql/mysql.conf.d/mysqld.cnf
복사됨!
📝 vi 편집기 사용법:
i : 입력 모드 진입
G : 파일 맨 끝으로 이동
o : 새 줄 생성하고 입력 모드
:set paste : 붙여넣기 모드
Esc : 명령 모드로 돌아가기
:wq : 저장 후 종료
파일의 [mysqld] 섹션 맨 아래에 다음 설정들을 추가:
# 기본 설정 최적화 innodb_buffer_pool_size = 128M innodb_log_file_size = 64M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT # 보안 설정 local-infile = 0 skip-symbolic-links # 문자셋 설정 character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
복사됨!
MySQL 서비스 재시작
설정 변경사항 적용:
systemctl restart mysql
복사됨!
서비스 상태 확인:
systemctl status mysql
복사됨!

데이터베이스 연결 테스트

마지막으로 PHP에서 MySQL에 제대로 연결되는지 테스트해보겠습니다. 실제 웹사이트를 만들기 전에 이런 테스트는 꼭 해봐야 해요.
PHP-MySQL 연결 테스트 파일 생성
테스트 파일 생성 (cat 명령어 사용):
cat > /var/www/html/dbtest.php << 'EOF' <?php $servername = "localhost"; $username = "mywebuser"; // 위에서 만든 사용자명 $password = "your_password"; // 위에서 설정한 비밀번호 $dbname = "mywebsite"; // 위에서 만든 데이터베이스명 try { $pdo = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8mb4", $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo “<h2>✅ 데이터베이스 연결 성공!</h2>”; echo “<p>PHP와 MySQL이 정상적으로 연결되었습니다.</p>”; // MySQL 버전 확인 $version = $pdo->query(‘SELECT VERSION()’)->fetchColumn(); echo “<p><strong>MySQL 버전:</strong> ” . $version . “</p>”; } catch(PDOException $e) { echo “<h2>❌ 데이터베이스 연결 실패</h2>”; echo “<p>오류 메시지: ” . $e->getMessage() . “</p>”; } ?> EOF
복사됨!
📝 cat 명령어 설명:
cat > 파일명 << 'EOF' : 여러 줄 텍스트를 파일에 저장
• 위 명령어 실행 후 코드를 붙여넣으면 됩니다
EOF 까지 입력된 모든 내용이 파일에 저장됩니다
• 한 번에 전체 파일을 생성할 수 있어 편리합니다
파일 내의 사용자명과 비밀번호를 실제 설정한 값으로 수정:
vi /var/www/html/dbtest.php
복사됨!
웹브라우저에서 테스트:
http://서버IP/dbtest.php
복사됨!
성공 확인: “✅ 데이터베이스 연결 성공!” 메시지와 MySQL 버전이 표시되면 모든 설정이 완료된 것입니다!
보안을 위한 테스트 파일 삭제
테스트 완료 후 파일 삭제:
rm /var/www/html/dbtest.php
복사됨!
실제 서비스에서는 이런 테스트 파일들을 남겨두면 안 됩니다.
축하합니다! MySQL 8.0 데이터베이스 서버 설정이 완료되었습니다. 이제 웹사이트 데이터를 안전하게 저장하고 관리할 수 있는 환경이 구축되었어요. phpMyAdmin을 통해 편리하게 데이터베이스를 관리할 수 있고, PHP에서도 정상적으로 연결됩니다. 다음 단계에서는 보안 설정과 SSL 인증서를 설정해보겠습니다.

Ubuntu 24.04 LTS에서 보안 설정 및 SSL 인증서 구성

STEP 5: 보안 설정 및 SSL 인증서 구성

시간 설정 및 동기화

웹서버에서 시간 설정은 정말 중요해요. 로그 기록, SSL 인증서 유효성, 세션 관리 등 모든 게 시간에 의존하거든요. 저도 예전에 시간 설정을 제대로 안 해서 SSL 인증서가 “아직 유효하지 않음” 오류가 났던 적이 있어요. 이런 문제를 미리 방지해보겠습니다.
TimeZone 설정하기
한국 시간대로 설정:
dpkg-reconfigure tzdata
복사됨!
📝 TimeZone 설정 방법:
• GUI 화면이 나타나면 키보드로 선택
Asia 선택 (a 키를 누르면 빠르게 이동)
Seoul 선택 (s 키를 누르면 빠르게 이동)
• 엔터로 확인
Docker 환경에서는 다음 명령어 사용:
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
복사됨!
현재 시간 확인:
date
복사됨!
시간 동기화 확인
시간 동기화 상태 확인:
timedatectl
복사됨!
NTP 동기화 상세 상태:
timedatectl timesync-status
복사됨!
시간 동기화 서비스 상태:
systemctl status systemd-timesyncd
복사됨!
확인사항: NTP service가 active이고 Server가 설정되어 있으면 정상입니다. 32초~34분 주기로 시간 동기화가 이루어집니다.

가상 메모리(SWAP) 설정

요즘 서버들은 메모리가 충분하지만, 그래도 SWAP을 설정해두는 게 좋아요. 특히 클라우드 환경에서는 512MB나 1GB 메모리 서버도 많이 사용하거든요. SWAP이 있으면 메모리 부족 상황에서도 서버가 다운되지 않고 버틸 수 있어요.
현재 메모리 및 SWAP 상태 확인
메모리 사용량 확인:
free -m
복사됨!
SWAP이 이미 있다면 이 단계를 건너뛰세요.
SWAP 파일 생성 (1GB)
SWAP 추가 스크립트 다운로드:
wget -q https://raw.githubusercontent.com/laelbe/linux-simple-scripts/main/_server_tools/add_swapfile -O /root/add_swapfile
복사됨!
SWAP 파일 생성 (1GB):
bash /root/add_swapfile 1
복사됨!
SWAP 적용 확인:
free -m
복사됨!

방화벽 설정

Ubuntu에는 UFW(Uncomplicated Firewall)라는 사용하기 쉬운 방화벽이 있어요. 클라우드 서비스를 사용한다면 클라우드 방화벽과 함께 이중으로 보안을 강화할 수 있습니다. 필요한 포트만 열어두는 것이 보안의 기본이에요.
UFW 방화벽 설정
현재 방화벽 상태 확인:
ufw status
복사됨!
SSH 포트 허용 (원격 접속 유지):
ufw allow ssh
복사됨!
HTTP 포트 허용 (웹사이트 접속):
ufw allow http
복사됨!
HTTPS 포트 허용 (SSL 인증서):
ufw allow https
복사됨!
방화벽 활성화:
ufw enable
복사됨!
설정 확인:
ufw status verbose
복사됨!
⚠️ 주의: SSH 포트를 먼저 허용하지 않으면 원격 접속이 끊어질 수 있습니다. 반드시 ufw allow ssh를 먼저 실행하세요!

무료 SSL 인증서 발급 (Let’s Encrypt)

요즘은 HTTPS가 필수예요. 구글도 HTTP 사이트는 “안전하지 않음”으로 표시하고, SEO 순위에도 영향을 줍니다. Let’s Encrypt는 완전 무료이면서도 브라우저에서 완전히 신뢰하는 인증서를 발급해줘요. 3개월마다 자동 갱신도 가능하고요.
도메인 준비
SSL 인증서를 받으려면 먼저 도메인이 필요합니다:
🌐 유료 도메인
가비아, 후이즈, 네임칩 등에서 구매
🆓 무료 도메인
nip.io 사용 (예: 52-79-173-82.nip.io)
도메인이 서버 IP를 올바르게 가리키는지 확인:
nslookup 도메인명
복사됨!
Apache 가상 호스트 설정
먼저 일반 사용자 계정 생성:
adduser myuser1
복사됨!
📝 사용자 생성 과정:
• 비밀번호 입력 (2회)
• 나머지 정보는 엔터로 스킵 가능
• 마지막에 Y로 확인
사용자 전환 및 웹 디렉토리 생성:
su -l myuser1
복사됨!
도메인명으로 디렉토리 생성 (myuser1 계정에서):
mkdir your-domain.com
복사됨!
root 계정으로 돌아가기:
exit
복사됨!
Apache 가상 호스트 설정 파일 생성
설정 파일 생성:
vi /etc/apache2/sites-available/your-domain.com.conf
복사됨!
다음 내용을 입력 (도메인명과 사용자명 수정):
<VirtualHost *:80> ServerName your-domain.com ServerAlias www.your-domain.com DocumentRoot /home/myuser1/your-domain.com <Directory /home/myuser1/your-domain.com> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> # ITK 모듈 사용시 AssignUserId myuser1 myuser1 ErrorLog ${APACHE_LOG_DIR}/your-domain.com_error.log CustomLog ${APACHE_LOG_DIR}/your-domain.com_access.log combined </VirtualHost>
사이트 활성화:
a2ensite your-domain.com.conf
복사됨!
Apache 재시작:
systemctl reload apache2
복사됨!
Let’s Encrypt SSL 인증서 발급
Certbot으로 SSL 인증서 발급:
certbot –apache -d your-domain.com -d www.your-domain.com
복사됨!
📝 Certbot 진행 과정:
• 이메일 주소 입력 (갱신 알림용)
• 약관 동의: A
• 마케팅 수신 동의: N (선택사항)
• HTTP를 HTTPS로 리디렉션: 2 (권장)
SSL 인증서 상태 확인:
certbot certificates
복사됨!
웹브라우저에서 HTTPS 접속 확인:
https://your-domain.com
복사됨!

SSL 인증서 자동 갱신 설정

Let’s Encrypt 인증서는 90일마다 갱신해야 해요. 수동으로 하면 깜빡할 수 있으니까 자동 갱신을 설정해두는 게 좋습니다. 한 번 설정해두면 평생 신경 쓸 필요가 없어요.
자동 갱신 테스트
갱신 시뮬레이션 (실제 갱신은 안 함):
certbot renew –dry-run
복사됨!
“Congratulations” 메시지가 나타나면 성공입니다.
Cron 자동 갱신 설정
Crontab 편집:
crontab -e
복사됨!
📝 Crontab 편집기 선택:
• 처음 실행시 편집기 선택 화면이 나타남
1 선택 (nano 편집기, 가장 쉬움)
• vi를 선호한다면 3 선택
파일 맨 아래에 다음 줄 추가:
0 2 * * 1 /usr/bin/certbot renew –quiet && /usr/bin/systemctl reload apache2
복사됨!
매주 월요일 새벽 2시에 자동 갱신됩니다.

보안 헤더 설정

HTTPS만으로는 부족해요. 추가적인 보안 헤더들을 설정하면 XSS, 클릭재킹 등 다양한 공격을 막을 수 있습니다. 이런 설정들은 보안 점수 테스트에서도 좋은 점수를 받을 수 있어요.
보안 헤더 설정 파일 생성
보안 헤더 설정 파일 생성:
vi /etc/apache2/conf-available/security-headers.conf
복사됨!
다음 내용을 입력:
# 보안 헤더 설정 Header always set X-Content-Type-Options nosniff Header always set X-Frame-Options DENY Header always set X-XSS-Protection “1; mode=block” Header always set Strict-Transport-Security “max-age=63072000; includeSubDomains; preload” Header always set Referrer-Policy “strict-origin-when-cross-origin” Header always set Permissions-Policy “geolocation=(), microphone=(), camera=()” # Content Security Policy (기본 설정) Header always set Content-Security-Policy “default-src ‘self’; script-src ‘self’ ‘unsafe-inline’; style-src ‘self’ ‘unsafe-inline’; img-src ‘self’ data:; font-src ‘self’;”
복사됨!
설정 활성화:
a2enconf security-headers
복사됨!
Apache 재시작:
systemctl reload apache2
복사됨!
보안 테스트: securityheaders.com에서 도메인을 입력하여 보안 점수를 확인해보세요. A+ 등급을 받을 수 있습니다!
축하합니다! 이제 웹서버의 보안 설정이 완료되었습니다. 시간 동기화, 방화벽, SSL 인증서, 보안 헤더까지 모든 기본적인 보안 요소들이 구축되었어요. 다음 단계에서는 실제 웹사이트를 배포하고 워드프레스를 설치해보겠습니다.

Ubuntu 24.04 LTS에서 실제 웹사이트 배포 및 워드프레스 설치

STEP 6: 실제 웹사이트 배포 및 워드프레스 설치

기본 웹사이트 파일 배포

드디어 마지막 단계입니다! 이제 실제로 웹사이트를 배포해보겠어요. 먼저 간단한 HTML 파일부터 시작해서 워드프레스까지 설치해보겠습니다. 저도 처음 웹서버를 구축했을 때 이 순간이 가장 설렜던 것 같아요. 모든 설정이 제대로 동작하는지 확인하는 순간이거든요.
웹사이트 사용자로 전환
앞서 만든 사용자 계정으로 전환:
su -l myuser1
복사됨!
웹사이트 디렉토리로 이동:
cd your-domain.com
복사됨!
현재 위치 확인:
pwd
복사됨!
개선된 HTML 파일 생성
현대적인 디자인의 테스트 페이지 생성:
cat > index.html << 'EOF' 웹서버 구축 완료!

🎉 Ubuntu 24.04 웹서버 구축 완료! 🎉

✅ 모든 서버 구성요소가 성공적으로 설치되었습니다!

Apache, PHP, MySQL, SSL 인증서까지 완벽하게 구성된 웹서버가 준비되었습니다.

🚀 설치된 서버 환경

  • 웹서버: Apache 2.4
  • 스크립트 언어: PHP 8.3
  • 데이터베이스: MySQL 8.0
  • SSL 인증서: Let’s Encrypt
  • 보안 설정: 방화벽 + 보안헤더
  • 관리 도구: phpMyAdmin

서버 구축이 완료되었습니다. 웹사이트 개발을 시작해보세요! 🌟

EOF
복사됨!
웹브라우저에서 확인:
https://your-domain.com
복사됨!
테스트 완료: 웹사이트가 정상적으로 표시되고 SSL 인증서(자물쇠 아이콘)가 보이면 모든 설정이 완료된 것입니다!

워드프레스 설치

이제 진짜 본격적인 웹사이트를 만들어보겠습니다. 워드프레스는 전 세계 웹사이트의 40% 이상이 사용하는 정말 강력한 CMS예요. 블로그부터 쇼핑몰, 기업 사이트까지 뭐든 만들 수 있어서 정말 좋아요. 제가 운영하는 사이트들도 대부분 워드프레스로 만들어져 있답니다.
워드프레스 다운로드 및 설치
최신 워드프레스 한국어 버전 다운로드:
wget https://ko.wordpress.org/latest-ko_KR.zip
복사됨!
압축 해제:
unzip latest-ko_KR.zip
복사됨!
워드프레스 파일들을 웹 루트로 이동:
mv wordpress/* .
복사됨!
빈 폴더 및 설치 파일 정리:
rmdir wordpress && rm latest-ko_KR.zip
복사됨!
파일 목록 확인:
ls -la
복사됨!
워드프레스용 데이터베이스 생성
root 계정으로 돌아가기:
exit
복사됨!
phpMyAdmin 접속하여 새 데이터베이스 생성:
http://서버IP/dbmyadmin
복사됨!
🗄️ 데이터베이스명
wordpress (또는 원하는 이름)
🔤 문자집합
utf8mb4_general_ci
👤 전용 사용자
wpuser (권한: 데이터 관련 모두)
🔐 사용자 비밀번호
강력한 비밀번호 설정

워드프레스 설정

워드프레스 설정은 웹 인터페이스로도 할 수 있지만, 설정 파일을 직접 만들어보겠습니다. 이렇게 하면 보안 키도 더 강력하게 설정할 수 있고, 나중에 다른 사이트를 만들 때도 응용할 수 있어요.
워드프레스 사용자로 전환
다시 웹사이트 사용자로 전환:
su -l myuser1
복사됨!
웹 디렉토리로 이동:
cd your-domain.com
복사됨!
보안 키 생성
워드프레스 보안 키 생성 (온라인):
curl -s https://api.wordpress.org/secret-key/1.1/salt/
복사됨!
생성된 키들을 복사해두세요 (곧 사용할 예정).
wp-config.php 파일 생성
워드프레스 설정 파일 생성:
cp wp-config-sample.php wp-config.php
복사됨!
설정 파일 편집:
vi wp-config.php
복사됨!
📝 wp-config.php 수정 방법:
/database_name_here 검색 → 데이터베이스명으로 변경
/username_here 검색 → DB 사용자명으로 변경
/password_here 검색 → DB 비밀번호로 변경
/put your unique phrase here 검색 → 보안 키들로 교체
:wq로 저장 후 종료
주요 수정 사항:
// 데이터베이스 정보 define(‘DB_NAME’, ‘wordpress’); define(‘DB_USER’, ‘wpuser’); define(‘DB_PASSWORD’, ‘your_db_password’); define(‘DB_HOST’, ‘localhost’); // 보안 키 (위에서 생성한 키들로 교체) define(‘AUTH_KEY’, ‘your_generated_key_here’); define(‘SECURE_AUTH_KEY’, ‘your_generated_key_here’); define(‘LOGGED_IN_KEY’, ‘your_generated_key_here’); define(‘NONCE_KEY’, ‘your_generated_key_here’); define(‘AUTH_SALT’, ‘your_generated_key_here’); define(‘SECURE_AUTH_SALT’, ‘your_generated_key_here’); define(‘LOGGED_IN_SALT’, ‘your_generated_key_here’); define(‘NONCE_SALT’, ‘your_generated_key_here’); // 추가 보안 설정 define(‘DISALLOW_FILE_EDIT’, true); define(‘WP_AUTO_UPDATE_CORE’, true);
복사됨!

워드프레스 설치 완료

이제 모든 준비가 완료되었습니다! 웹브라우저에서 워드프레스 설치를 진행해보겠어요. 이 과정은 정말 간단하고 직관적이에요. 5분이면 멋진 웹사이트가 완성됩니다.
웹브라우저에서 워드프레스 설치
웹브라우저에서 도메인 접속:
https://your-domain.com
복사됨!
워드프레스 설치 화면이 나타나면 다음 정보를 입력:
🌐 사이트 제목
원하는 웹사이트 이름
👤 관리자 사용자명
admin 말고 다른 이름 권장
🔐 관리자 비밀번호
복잡한 비밀번호 설정
📧 관리자 이메일
실제 사용하는 이메일
⚠️ 보안 주의사항:
• 관리자 사용자명으로 “admin”이나 “administrator” 사용 금지
• 비밀번호는 대소문자, 숫자, 특수문자 조합으로 12자리 이상
• “검색 엔진에서 이 사이트를 검색하지 않도록 합니다” 체크 해제 (나중에 변경 가능)
워드프레스 관리자 접속
설치 완료 후 관리자 페이지 접속:
https://your-domain.com/wp-admin
복사됨!
설치할 때 설정한 사용자명과 비밀번호로 로그인하세요.

워드프레스 추가 보안 설정

워드프레스는 인기가 많은 만큼 공격도 많이 받아요. 기본 설정만으로는 부족하니까 몇 가지 추가 보안 설정을 해보겠습니다. 이런 설정들은 실제로 해킹 시도를 많이 막아줘요.
.htaccess 보안 설정
Root 사용자로 다시 전환:
exit
복사됨!
웹사이트 사용자로 전환 후 .htaccess 파일 생성:
su -l myuser1 && cd your-domain.com
복사됨!
.htaccess 보안 설정 추가:
cat >> .htaccess << 'EOF' # 워드프레스 추가 보안 설정 # wp-config.php 접근 차단 order allow,deny deny from all # xmlrpc.php 접근 차단 (DDoS 방지) order allow,deny deny from all # 디렉토리 브라우징 차단 Options -Indexes # 서버 정보 숨기기 ServerSignature Off # 파일 업로드 크기 제한 php_value upload_max_filesize 64M php_value post_max_size 64M php_value max_execution_time 300 php_value max_input_vars 3000 EOF

필수 워드프레스 플러그인 추천

워드프레스 설치가 완료되었으니 이제 필수 플러그인들을 설치해보겠습니다. 이런 플러그인들은 보안과 성능, SEO에 정말 중요해요. 저도 모든 워드프레스 사이트에 이런 플러그인들을 기본으로 설치합니다.
🔒 Wordfence Security
강력한 보안 플러그인 (무료)
🚀 WP Rocket
캐싱 및 속도 최적화 (유료)
📈 Yoast SEO
SEO 최적화 (무료/유료)
🔄 UpdraftPlus
자동 백업 (무료/유료)
플러그인 설치 방법
1) 워드프레스 관리자 페이지 접속
2) 플러그인 → 새로 추가 클릭
3) 플러그인 이름 검색 후 설치
4) 활성화 버튼 클릭
🎉 축하합니다! Ubuntu 24.04 LTS에서 완전한 웹서버 환경이 구축되었습니다:
• ✅ Apache 2.4 웹서버
• ✅ PHP 8.3 + 필수 모듈들
• ✅ MySQL 8.0 데이터베이스
• ✅ SSL 인증서 (Let’s Encrypt)
• ✅ 보안 헤더 및 방화벽
• ✅ 워드프레스 CMS

이제 멋진 웹사이트를 만들어보세요!
정말 수고하셨습니다! 이제 여러분은 실무에서 바로 사용할 수 있는 완전한 웹서버 환경을 구축했어요. 이 서버로 개인 블로그부터 기업 웹사이트, 쇼핑몰까지 뭐든 만들 수 있습니다. 앞으로 새로운 프로젝트가 있을 때마다 이 가이드를 참고해서 빠르게 서버를 구축하실 수 있을 거예요.

댓글 남기기