서버 튜토리얼 · 9 min read · Dec 28, 2025
Ubuntu 16.04 (LTS) LAMP 서버 튜토리얼 - Apache, PHP 7, MySQL
LAMP는 L inux, A pache, M ySQL, P HP의 약자입니다. 이 튜토리얼에서는 Ubuntu 16.04 LTS (Xenial Xerus) 서버에 PHP 7 (mod_php) 및 MySQL / MariaDB 지원과 함께 Apache 웹 서버를 설치하는 방법과 Let’s Encrypt를 사용하여 SSL 인증서를 설정하는 방법을 보여줍니다. 또한 MySQL 관리를 쉽게 하기 위해 PHPMyAdmin을 설치할 것입니다. LAMP 설정은 Joomla, Wordpress 또는 Drupal과 같은 인기 있는 CMS 시스템의 완벽한 기반입니다.
사전 노트
이 튜토리얼에서는 호스트 이름 server1.example.com과 IP 주소 192.168.1.100을 사용할 것입니다. 이러한 설정은 여러분의 경우 다를 수 있으므로 적절한 곳에서 교체해야 합니다.
튜토리얼의 기초로 최소한의 Ubuntu 서버 설정을 사용하는 것을 권장합니다. 이는 웹 호스팅 회사의 Ubuntu 16.04 최소 설치가 포함된 가상 서버 또는 루트 서버 이미지일 수 있으며, 또는 우리의 최소 서버 튜토리얼을 사용하여 처음부터 서버를 설치할 수 있습니다.
이 튜토리얼의 모든 단계를 루트 권한으로 실행하고 있으므로 루트로 로그인했는지 확인하세요:
sudo su1. MySQL 또는 MariaDB 데이터베이스 설치
현재 두 가지 널리 사용되는 MySQL 데이터베이스 시스템이 있습니다. Oracle에서 개발한 클래식 “MySQL” 서버와 현재 버전 5.7을 제공하는 MySQL 포크인 MariaDB입니다.
아래에서 두 가지 대안을 설치하는 방법을 보여드리겠습니다. 1.1 또는 1.2 중 하나의 장을 따르세요. 두 개 모두 따르지 마세요. 저는 Howtoforge에서 다운로드할 수 있는 가상 머신 이미지에 MySQL 5.7을 사용할 것입니다.
1.1 MySQL 5.7 설치
MySQL 5.7을 설치하려면 다음 명령을 실행하세요:
apt-get -y install mysql-server mysql-client패키지 mysql-server와 mysql-client는 소위 ‘메타 패키지‘로, 항상 Ubuntu에서 사용할 수 있는 최신 MySQL 버전을 설치합니다. 현재 최신 버전은 MySQL 5.7입니다.
설치 중에 MySQL의 루트 비밀번호를 이미 설정했지만, 보안상의 이유로 익명 사용자와 테스트 데이터베이스를 제거하고 싶습니다. 아래의 mysql_secure_installation 명령을 실행하여 이를 달성하세요.
mysql_secure_installation다음 질문을 받게 됩니다:
MySQL 서버 배포 보안 설정 중입니다.루트 사용자 비밀번호 입력: <-- MySQL 루트 비밀번호 입력VALIDATE PASSWORD PLUGIN을 사용하여 비밀번호를 테스트하고 보안을 강화할 수 있습니다. 비밀번호의 강도를 확인하고 사용자가 충분히 안전한 비밀번호만 설정할 수 있도록 허용합니다. VALIDATE PASSWORD 플러그인을 설정하시겠습니까?예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르세요:
기존 비밀번호를 루트에 사용합니다.
루트 비밀번호를 변경하시겠습니까? ((예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르세요) : <-- 비밀번호 검증을 활성화하려면 여기서 'y'를 선택하세요. 저는 이 기능이 필요하지 않으므로 여기서 'n'을 선택합니다.... 건너뜁니다.
기본적으로 MySQL 설치에는 익명 사용자가 있으며, 이를 통해 누구나 사용자 계정을 생성하지 않고도 MySQL에 로그인할 수 있습니다. 이는 테스트 용도로만 의도되며 설치를 조금 더 원활하게 진행하기 위한 것입니다.
생산 환경으로 이동하기 전에 이를 제거해야 합니다.익명 사용자를 제거하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르세요) : <-- y
성공.
보통 루트는 'localhost'에서만 연결할 수 있어야 합니다. 이는 누군가가 네트워크에서 루트 비밀번호를 추측할 수 없도록 보장합니다.원격으로 루트 로그인을 금지하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르세요) : <-- y
성공.기본적으로 MySQL에는 'test'라는 데이터베이스가 있으며, 누구나 접근할 수 있습니다. 이는 테스트 용도로만 의도되며, 생산 환경으로 이동하기 전에 제거해야 합니다.테스트 데이터베이스 및 접근을 제거하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르세요) : <-- y
- 테스트 데이터베이스 삭제 중...
성공.- 테스트 데이터베이스에 대한 권한 제거 중...
성공.권한 테이블을 다시 로드하면 지금까지의 모든 변경 사항이 즉시 적용됩니다.권한 테이블을 지금 다시 로드하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르세요) : <-- y
성공.모든 작업이 완료되었습니다!이제 MySQL 설정이 보안되었습니다.
1.2 MariaDB 10 설치
다음 명령을 실행하여 MariaDB 서버 및 클라이언트를 설치하세요:
apt-get -y install mariadb-server mariadb-client이제 MariaDB의 루트 비밀번호를 설정합니다.
mysql_secure_installation다음 질문을 받게 됩니다:
루트의 현재 비밀번호 입력 (없으면 엔터): <-- 엔터를 누르세요
루트 비밀번호 설정? [Y/n] <-- y
새 비밀번호: <-- 여기에서 새로운 MariaDB 루트 비밀번호를 입력하세요
새 비밀번호를 다시 입력하세요: <-- 비밀번호를 반복하세요
익명 사용자를 제거하시겠습니까? [Y/n] <-- y
원격으로 루트 로그인을 금지하시겠습니까? [Y/n] <-- y
권한 테이블을 지금 다시 로드하시겠습니까? [Y/n] <-- yMariaDB에 로그인 테스트를 하려면 “mysql 명령”을 사용하세요.
mysql -u root -p그리고 위에서 설정한 MariaDB 루트 비밀번호를 입력하세요. 결과는 아래 스크린샷과 비슷해야 합니다:

MariaDB 셸을 종료하려면 “quit” 명령을 입력하고 엔터를 누르세요.
2. Apache 웹 서버 설치
Apache 2는 Ubuntu 패키지로 제공되므로 다음과 같이 설치할 수 있습니다:
apt-get -y install apache2이제 브라우저를 http://192.168.1.100으로 열면 Apache2 기본 페이지(작동 중!)를 볼 수 있습니다:

Apache 기본 가상 호스트의 문서 루트는 Ubuntu에서 /var/www/html이며, 주요 구성 파일은 /etc/apache2/apache2.conf입니다. 구성 시스템은 /usr/share/doc/apache2/README.Debian.gz에 완전히 문서화되어 있습니다.
3. PHP 7 설치
다음과 같이 PHP 7과 Apache PHP 모듈을 설치할 수 있습니다:
apt-get -y install php7.0 libapache2-mod-php7.0그런 다음 Apache를 재시작합니다:
systemctl restart apache24. PHP 테스트 및 PHP 설치에 대한 세부 정보 가져오기
기본 웹 사이트의 문서 루트는 /var/www/html입니다. 이제 해당 디렉토리에 작은 PHP 파일(info.php)을 생성하고 브라우저에서 호출합니다. 이 파일은 설치된 PHP 버전과 같은 PHP 설치에 대한 유용한 세부 정보를 표시합니다.
nano /var/www/html/info.php그런 다음 info.php 파일의 소유자를 www-data 사용자 및 그룹으로 변경합니다.
chown www-data:www-data /var/www/html/info.php이제 브라우저에서 해당 파일을 호출합니다 (예: http://192.168.1.100/info.php):

보시다시피, PHP 7.0이 작동하고 있으며, Apache 2.0 핸들러를 통해 작동하고 있습니다. 서버 API 줄에 표시됩니다. 아래로 스크롤하면 PHP5에서 이미 활성화된 모든 모듈을 볼 수 있습니다. MySQL은 거기에 나열되어 있지 않으므로 PHP에서 MySQL / MariaDB 지원이 아직 없습니다.
5. PHP에서 MySQL / MariaDB 지원 받기
PHP에서 MySQL 지원을 받으려면 php7.0-mysql 패키지를 설치할 수 있습니다. 애플리케이션에 필요할 수 있는 다른 PHP 모듈도 설치하는 것이 좋습니다. 사용 가능한 PHP 모듈을 다음과 같이 검색할 수 있습니다:
apt-cache search php7.0필요한 모듈을 선택하고 다음과 같이 설치하세요:
apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext이제 Apache2를 재시작합니다:
systemctl restart apache2
이제 PHP 7은 위의 phpinfo()에서 보여준 것처럼 MySQL / MariaDB 지원이 있습니다.
6. PHP 속도를 높이기 위한 Opcache + APCu PHP 캐시 설치
PHP 7은 PHP 중간 코드를 캐싱하고 최적화하기 위한 내장 opcode 캐시를 제공하며, 이름은 ‘opcache’이며 php7.0-opcache 패키지에서 사용할 수 있습니다. PHP 페이지 속도를 높이기 위해 Opcache를 설치하는 것이 강력히 권장됩니다. opcache 외에도 APCu를 설치할 것입니다. 이는 PHP 5.x 버전에서 자주 사용되는 캐싱 시스템인 APC 캐시의 기능을 제공하기 위한 opcache의 호환성 래퍼입니다.
Opcache와 APCu는 다음과 같이 설치할 수 있습니다:
apt-get -y install php7.0-opcache php-apcuOpcache가 이미 설치되어 있다고 표시되더라도 걱정하지 마세요.
이제 Apache를 재시작합니다:
systemctl restart apache2이제 브라우저에서 http://192.168.1.100/info.php를 새로 고치고 다시 모듈 섹션으로 스크롤하세요. 이제 그곳에서 많은 새로운 모듈을 찾아야 합니다:

더 이상 필요하지 않으면 info.php 파일을 삭제하는 것을 잊지 마세요. 이 파일은 서버의 민감한 세부 정보를 제공합니다. 파일을 삭제하려면 다음 명령을 실행하세요.
rm -f /var/www/html/info.php7. Apache에서 SSL 웹사이트 활성화
SSL/TLS는 웹 브라우저와 서버 간의 연결을 암호화하는 보안 계층입니다. 대부분의 웹 브라우저는 서버와 웹 브라우저 간의 연결이 SSL로 암호화되지 않은 경우 오늘날 사이트를 안전하지 않다고 표시하기 시작합니다. 이 장에서는 SSL로 웹사이트를 보호하는 방법을 보여줍니다.
서버에서 SSL (https://) 지원을 활성화하려면 다음 명령을 실행하세요. 실행:
a2enmod ssl
a2ensite default-ssl이는 SSL 모듈을 활성화하고 /etc/apache2/sites-available/default-ssl.conf 파일에 대한 심볼릭 링크를 /etc/apache2/sites-enabled 폴더에 추가하여 활성 Apache 구성에 포함시킵니다. 그런 다음 Apache를 재시작하여 새로운 구성을 활성화합니다:
systemctl restart apache2이제 브라우저에서 https://192.168.1.100을 열어 SSL 연결을 테스트하세요.

서버의 SSL 인증서가 “자체 서명된” SSL 인증서이기 때문에 SSL 경고가 표시됩니다. 이는 브라우저가 기본적으로 이 인증서를 신뢰하지 않으며 보안 경고를 먼저 수락해야 함을 의미합니다. 경고를 수락한 후 Apache 기본 페이지를 볼 수 있습니다.

브라우저의 URL 앞에 있는 닫힌 “녹색 자물쇠”는 연결이 암호화되었음을 나타냅니다.
SSL 경고를 제거하는 방법은 두 가지가 있습니다. 하나는 /etc/ssl/certs/ssl-cert-snakeoil.pem의 자체 서명된 SSL 인증서를 SSL 기관에서 구입한 공식 서명된 SSL 인증서로 교체하는 것이고, 다른 하나는 제가 8장에서 설명할 Let’s Encrypt에서 무료 SSL 인증서를 받는 것입니다.
8. Let’s Encrypt에서 무료 SSL 인증서 받기
Let’s Encrypt SSL 인증서로 웹사이트를 보호하기 위한 첫 번째 단계는 python-letsencrypt-apache 패키지를 설치하는 것입니다. 다음 명령을 실행하세요:
apt-get -y install python-letsencrypt-apache다음 단계에서는 Let’s Encrypt에서 SSL 인증서를 요청할 것입니다. 이 과정에서 Let’s Encrypt 서버는 제공한 도메인 이름을 통해 서버에 연결하려고 시도합니다. 이 도메인 이름이 DNS에서 이미 서버를 가리키고 있어야 하며, 웹사이트가 포트 80 (http)에서 도메인 이름으로 접근 가능해야 합니다. 웹사이트가 인터넷에서 접근할 수 없다면 Let’s Encrypt SSL 인증서 생성이 실패할 것입니다.
SSL 인증서를 생성하기 전에 가상 호스트 구성 파일에서 도메인 이름을 설정하세요. 기본 가상 호스트 파일을 편집기로 엽니다:
nano /etc/apache2/sites-available/000-default.conf그리고 다음 줄을 추가합니다:
ServerName example.com‘DocumentRoot’ 줄 바로 아래에 추가합니다. example.com을 자신의 웹사이트 도메인 이름으로 교체하세요.
그런 다음 다음 명령으로 SSL 인증서를 생성하세요:
letsencrypt --apache -d example.com여기서 example.com을 다시 자신의 도메인 이름으로 교체하세요. 이 명령은 여러 질문을 묻는 마법사를 시작합니다.
이 웹사이트의 관리자에게 연락할 수 있는 이메일 주소를 입력하세요.

Let’s Encrypt SSL 기관의 약관에 동의하세요.

비 SSL 요청을 https://로 자동으로 리디렉션할지 선택하세요. 중복 콘텐츠 문제를 피하기 위해 여기서 예를 선택하겠습니다. 웹사이트가 http:// 및 https:// 버전으로 제공될 때 발생합니다.

SSL 인증서가 성공적으로 발급되었습니다.

이제 브라우저에서 웹사이트에 접근하면 자동으로 SSL로 리디렉션되며, 브라우저의 URL 바 앞에 있는 녹색 자물쇠가 신뢰할 수 있는 SSL 인증서를 사용하고 있음을 보여줍니다.

8.1 Let’s Encrypt 자동 갱신
Let’s Encrypt SSL 인증서는 단 80일 동안만 유효합니다. 따라서 필요한 경우 SSL 인증서를 자동으로 갱신하기 위해 cronjob을 설정하겠습니다. 명령은 ‘letsencrypt renew’입니다.
LE 자동 갱신을 위한 cronjob을 설정하세요. 실행:
crontab -e편집기에서 루트 crontab을 엽니다. 파일 끝에 다음 줄을 삽입하세요:
0 1 * * * /usr/bin/letsencrypt renew &> /dev/null파일을 저장하면 cronjob이 활성화됩니다. 이 cronjob은 매일 밤 1시에 Let’s Encrypt 갱신 명령을 호출합니다. 이 명령은 SSL 인증서가 만료되기 30일 전에만 갱신합니다. 매일 실행해도 문제가 없습니다.
9. phpMyAdmin 설치
phpMyAdmin은 MySQL 데이터베이스를 관리할 수 있는 웹 인터페이스입니다. 설치하는 것이 좋습니다:
apt-get -y install phpmyadmin중요: apt 설치 프로그램이 여러 질문을 하게 되며, 그 중 하나는 웹 서버 유형을 선택하는 것입니다. 일반적인 실수는 웹 서버 유형이 강조 표시되지만 선택되지 않는 것입니다. apt 메뉴에서 항목을 선택하려면 탭 또는 커서 키로 항목으로 이동한 후 스페이스 바를 눌러야 합니다. 단순히 강조 표시하는 것만으로는 충분하지 않습니다!
다음 질문을 보게 됩니다:
자동으로 구성할 웹 서버: <-- apache2 옵션 선택
phpmyadmin을 dbconfig-common으로 구성하시겠습니까? <-- 예
phpmyadmin의 MySQL 애플리케이션 비밀번호: <-- 엔터를 누르세요. apt가 자동으로 임의의 비밀번호를 생성합니다.9.1 MariaDB에서 PHPMyAdmin에 대한 루트 접근
다음 단계는 MariaDB 설치에만 필요합니다. MySQL 5.7을 사용하는 경우 이 단계를 건너뛰세요.
MariaDB는 기본적으로 루트 사용자에 대해 “unix_socket”라는 플러그인을 활성화합니다. 이 플러그인은 루트 사용자가 PHPMyAdmin에 로그인할 수 없도록 하며, 루트 사용자에 대한 MySQL의 TCP 연결이 작동하지 않도록 합니다. PHPMyAdmin에서 다른 사용자와 데이터베이스를 생성할 수 있는 권한이 있는 사용자를 얻기 위해, 루트 사용자와 동일한 권한을 가진 “admin”이라는 이름의 새로운 MySQL 사용자를 생성하겠습니다.
셸에서 루트 사용자로 MySQL 데이터베이스에 로그인하세요:
mysql -u root“admin”이라는 이름과 “howtoforge”라는 비밀번호를 가진 새로운 사용자를 생성합니다. 아래 명령에서 비밀번호 “howtoforge”를 안전한 비밀번호로 교체하세요!
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit그 후, http://192.168.1.100/phpmyadmin/에서 phpMyAdmin에 접근할 수 있습니다:


10. 이 튜토리얼의 가상 머신 이미지 다운로드
이 튜토리얼은 VMWare 및 Virtualbox와 호환되는 ovf/ova 형식의 사용 준비가 완료된 가상 머신 이미지로 제공됩니다. 가상 머신 이미지는 다음 로그인 세부 정보를 사용합니다:
SSH / 셸 로그인
사용자 이름: administrator
비밀번호: howtoforge
이 사용자는 sudo 권한이 있습니다.
MySQL 로그인
사용자 이름: root
비밀번호: howtoforge
VM의 IP는 192.168.1.100이며, /etc/network/interfaces 파일에서 변경할 수 있습니다. 위의 모든 비밀번호를 변경하여 가상 머신을 보호하세요.
11. 링크
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- MySQL: http://www.mysql.com/
- MariaDB: https://mariadb.com/
- Ubuntu: http://www.ubuntu.com/
- phpMyAdmin: http://www.phpmyadmin.net/
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.