CentOS: LAMP 스택 구축 🖥️🚀
안녕하세요, 여러분! 오늘은 웹 개발의 핵심이라고 할 수 있는 LAMP 스택을 CentOS 환경에서 구축하는 방법에 대해 상세히 알아보겠습니다. 이 글은 재능넷의 '지식인의 숲' 메뉴에 등록될 예정이며, 'DB/서버' 카테고리에 속하는 내용입니다. LAMP 스택은 Linux, Apache, MySQL(MariaDB), PHP의 약자로, 웹 서버 구축에 필수적인 요소들을 포함하고 있습니다.
LAMP 스택은 오픈 소스 기반의 강력한 웹 서버 환경을 제공하며, 많은 기업과 개발자들이 선호하는 구성입니다. 특히 CentOS는 안정성과 보안성이 뛰어나 서버 운영 체제로 널리 사용되고 있죠. 이 글을 통해 여러분은 CentOS에서 LAMP 스택을 구축하는 방법을 단계별로 자세히 배우실 수 있습니다.
그럼 지금부터 LAMP 스택의 각 구성 요소와 설치 과정, 그리고 최적화 방법까지 깊이 있게 살펴보도록 하겠습니다. 🧐💡
1. CentOS 소개 및 설치 🐧
CentOS(Community ENTerprise Operating System)는 Red Hat Enterprise Linux(RHEL)의 소스 코드를 기반으로 만들어진 무료 오픈 소스 리눅스 배포판입니다. 안정성과 보안성이 뛰어나 서버 운영 체제로 널리 사용되고 있습니다.
1.1 CentOS의 특징
- 높은 안정성: RHEL의 소스 코드를 그대로 사용하여 안정성이 보장됩니다.
- 긴 지원 기간: 각 버전마다 최소 10년의 지원 기간을 제공합니다.
- 강력한 보안: SELinux(Security-Enhanced Linux)가 기본으로 탑재되어 있어 보안성이 뛰어납니다.
- 무료 사용: 상업용으로도 무료로 사용할 수 있습니다.
- 넓은 사용자 커뮤니티: 많은 사용자들이 있어 문제 해결이 용이합니다.
1.2 CentOS 설치 과정
CentOS를 설치하는 과정은 다음과 같습니다:
- CentOS ISO 이미지 다운로드: 공식 웹사이트에서 최신 버전의 ISO 이미지를 다운로드합니다.
- 부팅 가능한 USB 드라이브 생성: ISO 이미지를 이용해 부팅 가능한 USB를 만듭니다.
- BIOS 설정: 컴퓨터의 BIOS 설정에서 USB로 부팅할 수 있도록 설정합니다.
- 설치 시작: USB로 부팅 후 설치 과정을 시작합니다.
- 언어 선택: 설치에 사용할 언어를 선택합니다.
- 시간대 설정: 사용자의 지역에 맞는 시간대를 설정합니다.
- 파티션 설정: 하드 디스크의 파티션을 설정합니다.
- 네트워크 설정: 네트워크 연결을 설정합니다.
- 사용자 계정 생성: root 계정과 일반 사용자 계정을 생성합니다.
- 설치 완료 및 재부팅: 설치가 완료되면 시스템을 재부팅합니다.
이제 CentOS가 성공적으로 설치되었습니다. 다음 단계로 넘어가기 전에, 시스템을 최신 상태로 업데이트하는 것이 좋습니다. 터미널에서 다음 명령어를 실행해주세요:
sudo yum update -y
이 명령어는 시스템의 모든 패키지를 최신 버전으로 업데이트합니다. '-y' 옵션은 모든 확인 메시지에 자동으로 '예'로 답하도록 합니다.
CentOS의 설치가 완료되었으니, 이제 LAMP 스택의 각 구성 요소를 설치해 보겠습니다. 다음 섹션에서는 Apache 웹 서버의 설치와 설정에 대해 알아보겠습니다. 🚀
2. Apache 웹 서버 설치 및 설정 🌐
Apache는 가장 널리 사용되는 오픈 소스 웹 서버 소프트웨어입니다. 안정성, 보안성, 확장성이 뛰어나며, 다양한 모듈을 통해 기능을 확장할 수 있습니다.
2.1 Apache 설치
CentOS에서 Apache를 설치하는 방법은 매우 간단합니다. 터미널에서 다음 명령어를 실행하세요:
sudo yum install httpd -y
이 명령어는 Apache 웹 서버(httpd)를 설치합니다.
2.2 Apache 서비스 시작 및 활성화
Apache를 설치한 후에는 서비스를 시작하고 시스템 부팅 시 자동으로 시작되도록 설정해야 합니다:
sudo systemctl start httpd
sudo systemctl enable httpd
첫 번째 명령어는 Apache 서비스를 즉시 시작하고, 두 번째 명령어는 시스템 부팅 시 Apache가 자동으로 시작되도록 설정합니다.
2.3 방화벽 설정
웹 서버가 외부에서 접속 가능하도록 방화벽을 설정해야 합니다:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
이 명령어들은 HTTP(80번 포트)와 HTTPS(443번 포트)에 대한 접근을 허용하고 방화벽 설정을 다시 로드합니다.
2.4 Apache 설정 파일
Apache의 주요 설정 파일은 /etc/httpd/conf/httpd.conf입니다. 이 파일을 수정하여 Apache의 동작을 세부적으로 제어할 수 있습니다.
주요 설정 항목들은 다음과 같습니다:
- ServerRoot: Apache의 기본 디렉토리를 지정합니다.
- Listen: Apache가 사용할 포트를 지정합니다.
- ServerAdmin: 관리자 이메일 주소를 지정합니다.
- DocumentRoot: 웹 문서의 루트 디렉토리를 지정합니다.
- Directory: 특정 디렉토리에 대한 접근 권한을 설정합니다.
2.5 가상 호스트 설정
Apache에서는 가상 호스트를 통해 하나의 서버에서 여러 웹사이트를 호스팅할 수 있습니다. 가상 호스트 설정은 /etc/httpd/conf.d/ 디렉토리에 .conf 파일을 만들어 관리합니다.
예를 들어, example.com이라는 도메인을 위한 가상 호스트를 설정하려면 다음과 같이 할 수 있습니다:
sudo nano /etc/httpd/conf.d/example.com.conf
파일 내용:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
ErrorLog /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>
이 설정은 example.com과 www.example.com으로 들어오는 요청을 /var/www/example.com 디렉토리로 연결합니다.
2.6 Apache 성능 최적화
Apache의 성능을 최적화하기 위해 다음과 같은 설정을 고려해볼 수 있습니다:
- KeepAlive: 클라이언트와의 연결을 유지하여 반복적인 요청 처리 속도를 높입니다.
- MPM (Multi-Processing Module) 설정: 서버의 하드웨어 자원에 맞게 프로세스와 스레드 수를 조절합니다.
- 캐시 설정: mod_cache를 사용하여 자주 요청되는 콘텐츠를 캐시합니다.
- GZIP 압축: mod_deflate를 사용하여 전송되는 데이터를 압축합니다.
Apache 웹 서버의 설치와 기본적인 설정이 완료되었습니다. 이제 웹 서버가 정상적으로 동작하고 있으며, 기본 웹 페이지를 통해 이를 확인할 수 있습니다. 브라우저에서 서버의 IP 주소나 도메인 이름을 입력하면 Apache의 기본 페이지가 표시될 것입니다.
다음 섹션에서는 LAMP 스택의 다음 구성 요소인 MySQL(MariaDB) 데이터베이스 서버의 설치와 설정에 대해 알아보겠습니다. 데이터베이스는 동적 웹 애플리케이션의 핵심 요소이므로, 이 과정을 통해 더욱 강력한 웹 서버 환경을 구축할 수 있습니다. 🗄️💽
3. MySQL(MariaDB) 설치 및 설정 🗃️
MySQL은 가장 인기 있는 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 그러나 CentOS 7부터는 MySQL의 포크(fork) 버전인 MariaDB를 기본 데이터베이스로 채택하고 있습니다. MariaDB는 MySQL과 완벽히 호환되며, 몇 가지 추가 기능을 제공합니다.
3.1 MariaDB 설치
MariaDB를 설치하기 위해 다음 명령어를 실행합니다:
sudo yum install mariadb-server mariadb -y
이 명령어는 MariaDB 서버와 클라이언트를 함께 설치합니다.
3.2 MariaDB 서비스 시작 및 활성화
설치가 완료되면 MariaDB 서비스를 시작하고 시스템 부팅 시 자동으로 시작되도록 설정합니다:
sudo systemctl start mariadb
sudo systemctl enable mariadb
3.3 MariaDB 보안 설정
MariaDB의 기본 보안 설정을 위해 mysql_secure_installation 스크립트를 실행합니다:
sudo mysql_secure_installation
이 스크립트는 다음과 같은 보안 설정을 도와줍니다:
- root 비밀번호 설정
- 익명 사용자 제거
- 원격 root 로그인 비활성화
- 테스트 데이터베이스 제거
- 권한 테이블 리로드
3.4 MariaDB 로그인
설정이 완료되면 다음 명령어로 MariaDB에 로그인할 수 있습니다:
mysql -u root -p
비밀번호를 입력하면 MariaDB 콘솔에 접속됩니다.
3.5 데이터베이스 및 사용자 생성
MariaDB 콘솔에서 새 데이터베이스와 사용자를 생성하고 권한을 부여할 수 있습니다:
CREATE DATABASE mydb;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
이 명령어들은 'mydb'라는 데이터베이스를 생성하고, 'myuser'라는 사용자에게 이 데이터베이스에 대한 모든 권한을 부여합니다.
3.6 MariaDB 설정 최적화
MariaDB의 성능을 최적화하기 위해 /etc/my.cnf.d/ 디렉토리의 설정 파일을 수정할 수 있습니다. 주요 최적화 항목은 다음과 같습니다:
- innodb_buffer_pool_size: InnoDB 스토리지 엔진이 사용하는 메모리 크기를 설정합니다.
- max_connections: 동시에 처리할 수 있는 최대 연결 수를 설정합니다.
- query_cache_size: 쿼리 캐시의 크기를 설정합니다.
- tmp_table_size 및 max_heap_table_size: 임시 테이블의 최대 크기를 설정합니다.
3.7 MariaDB 백업
데이터베이스 백업은 매우 중요합니다. mysqldump 명령어를 사용하여 데이터베이스를 백업할 수 있습니다:
mysqldump -u root -p --all-databases > backup.sql
이 명령어는 모든 데이터베이스를 backup.sql 파일로 백업합니다.
3.8 MariaDB 모니터링
MariaDB의 성능을 모니터링하기 위해 다음과 같은 도구들을 사용할 수 있습니다:
- mysqltuner: MariaDB 서버의 성능을 분석하고 최적화 제안을 제공합니다.
- phpMyAdmin: 웹 기반의 MariaDB 관리 도구입니다.
- MariaDB 내장 명령어: SHOW PROCESSLIST, SHOW STATUS 등의 명령어로 서버 상태를 확인할 수 있습니다.
이제 MariaDB가 성공적으로 설치되고 기본적인 설정이 완료되었습니다. 데이터베이스 서버가 안전하게 실행되고 있으며, 웹 애플리케이션에서 사용할 준비가 되었습니다.
다음 섹션에서는 LAMP 스택의 마지막 구성 요소인 PHP의 설치와 설정에 대해 알아보겠습니다. PHP는 동적 웹 페이지를 생성하는 데 사용되는 서버 사이드 스크립팅 언어로, 웹 애플리케이션 개발에 필수적인 요소입니다. 🖥️💻
4. PHP 설치 및 설정 🐘
PHP(PHP: Hypertext Preprocessor)는 서버 사이드 스크립팅 언어로, 동적 웹 페이지를 생성하는 데 널리 사용됩니다. Apache와 함께 사용되어 웹 애플리케이션의 백엔드를 구성하는 핵심 요소입니다.
4.1 PHP 설치
CentOS에서 PHP를 설치하기 위해 다음 명령어를 실행합니다:
sudo yum install php php-mysql php-fpm -y
이 명령어는 PHP 코어, MySQL 연동 모듈, FastCGI Process Manager(FPM)를 함께 설치합니다.
4.2 추가 PHP 모듈 설치
웹 애플리케이션의 요구사항에 따라 추가적인 PHP 모듈을 설치할 수 있 습니다. 자주 사용되는 모듈들은 다음과 같습니다:
sudo yum install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-soap curl curl-devel -y
이 명령어는 이미지 처리, LDAP 연동, XML 처리, 다국어 지원 등 다양한 기능을 제공하는 모듈들을 설치합니다.
4.3 PHP 설정 파일
PHP의 주요 설정 파일은 /etc/php.ini입니다. 이 파일을 수정하여 PHP의 동작을 세부적으로 제어할 수 있습니다.
주요 설정 항목들은 다음과 같습니다:
- memory_limit: PHP 스크립트가 사용할 수 있는 최대 메모리 양을 설정합니다.
- max_execution_time: PHP 스크립트의 최대 실행 시간을 설정합니다.
- post_max_size: POST 방식으로 전송할 수 있는 최대 데이터 크기를 설정합니다.
- upload_max_filesize: 업로드할 수 있는 파일의 최대 크기를 설정합니다.
- display_errors: 오류 메시지를 화면에 표시할지 여부를 설정합니다.
4.4 PHP-FPM 설정
PHP-FPM(FastCGI Process Manager)은 PHP의 성능을 향상시키는 중요한 구성 요소입니다. PHP-FPM의 설정 파일은 /etc/php-fpm.d/www.conf에 있습니다.
주요 설정 항목들은 다음과 같습니다:
- pm: 프로세스 관리 방식을 설정합니다 (static, dynamic, ondemand).
- pm.max_children: 최대 자식 프로세스 수를 설정합니다.
- pm.start_servers: 시작 시 생성할 자식 프로세스 수를 설정합니다.
- pm.min_spare_servers: 최소 유휴 프로세스 수를 설정합니다.
- pm.max_spare_servers: 최대 유휴 프로세스 수를 설정합니다.
4.5 PHP와 Apache 연동
PHP를 Apache와 연동하기 위해 Apache 설정 파일을 수정해야 합니다. /etc/httpd/conf/httpd.conf 파일에 다음 내용을 추가합니다:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
이 설정은 .php 확장자를 가진 파일을 PHP-FPM으로 처리하도록 지시합니다.
4.6 PHP 정보 확인
PHP가 정상적으로 설치되었는지 확인하기 위해 간단한 PHP 정보 페이지를 만들 수 있습니다. /var/www/html/info.php 파일을 생성하고 다음 내용을 입력합니다:
<?php
phpinfo();
?>
웹 브라우저에서 http://your_server_ip/info.php에 접속하면 PHP 설정 정보를 확인할 수 있습니다.
4.7 PHP 성능 최적화
PHP의 성능을 최적화하기 위해 다음과 같은 설정을 고려해볼 수 있습니다:
- OPcache 활성화: PHP 스크립트의 컴파일된 바이트코드를 캐시하여 성능을 향상시킵니다.
- Realpath Cache 최적화: 파일 경로 확인 작업을 최소화하여 성능을 개선합니다.
- 세션 핸들러 최적화: 세션 데이터를 파일 대신 메모리에 저장하여 처리 속도를 높입니다.
- 불필요한 모듈 비활성화: 사용하지 않는 PHP 모듈을 비활성화하여 메모리 사용량을 줄입니다.
이제 PHP가 성공적으로 설치되고 Apache와 연동되었습니다. 이로써 LAMP 스택의 모든 구성 요소가 준비되었습니다. 이 환경에서 다양한 PHP 기반의 웹 애플리케이션을 실행할 수 있게 되었습니다.
다음 섹션에서는 LAMP 스택의 보안 강화 방법과 전체 시스템의 성능 최적화에 대해 알아보겠습니다. 이를 통해 더욱 안전하고 효율적인 웹 서버 환경을 구축할 수 있습니다. 🛡️🚀
5. LAMP 스택 보안 강화 및 성능 최적화 🔒🚀
LAMP 스택의 모든 구성 요소가 설치되었지만, 보안과 성능 최적화는 지속적으로 관리해야 할 중요한 부분입니다. 이 섹션에서는 LAMP 스택의 보안을 강화하고 전체 시스템의 성능을 최적화하는 방법에 대해 알아보겠습니다.
5.1 보안 강화
5.1.1 방화벽 설정
CentOS의 기본 방화벽인 firewalld를 사용하여 필요한 포트만 개방합니다:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
5.1.2 SELinux 활용
SELinux(Security-Enhanced Linux)를 활성화하고 적절히 설정하여 시스템 보안을 강화합니다:
sudo setenforce 1
sudo sed -i 's/SELINUX=permissive/SELINUX=enforcing/' /etc/selinux/config
5.1.3 SSH 보안 강화
/etc/ssh/sshd_config 파일을 수정하여 SSH 접속 보안을 강화합니다:
- 루트 로그인 비활성화: PermitRootLogin no
- 비밀번호 인증 비활성화 (키 기반 인증 사용): PasswordAuthentication no
- SSH 포트 변경: Port 2222 (기본 22 대신 다른 포트 사용)
5.1.4 정기적인 업데이트
시스템과 설치된 패키지를 정기적으로 업데이트합니다:
sudo yum update -y
5.1.5 ModSecurity 설치
웹 애플리케이션 방화벽인 ModSecurity를 설치하여 웹 공격을 방어합니다:
sudo yum install mod_security mod_security_crs -y
5.2 성능 최적화
5.2.1 Apache 성능 튜닝
/etc/httpd/conf/httpd.conf 파일에서 다음 설정을 최적화합니다:
- KeepAlive On
- MaxKeepAliveRequests 100
- KeepAliveTimeout 5
5.2.2 PHP 성능 튜닝
/etc/php.ini 파일에서 다음 설정을 최적화합니다:
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
5.2.3 MariaDB 성능 튜닝
/etc/my.cnf.d/server.cnf 파일에서 다음 설정을 최적화합니다:
- innodb_buffer_pool_size = 1G (서버 메모리의 50-70% 정도)
- innodb_log_file_size = 256M
- innodb_flush_log_at_trx_commit = 2
5.2.4 시스템 리소스 모니터링
시스템 리소스 사용량을 모니터링하기 위해 다음 도구들을 사용합니다:
- top: CPU 및 메모리 사용량 확인
- iostat: 디스크 I/O 모니터링
- netstat: 네트워크 연결 상태 확인
5.3 백업 전략
정기적인 백업은 시스템 안정성을 위해 필수적입니다:
- 파일 시스템 백업: rsync를 사용한 증분 백업
- 데이터베이스 백업: mysqldump를 사용한 정기적인 백업
- 설정 파일 백업: 주요 설정 파일들의 정기적인 백업
이러한 보안 강화와 성능 최적화 방법을 적용하면 LAMP 스택의 안정성과 효율성을 크게 향상시킬 수 있습니다. 하지만 이는 지속적인 관리와 모니터링이 필요한 과정임을 명심해야 합니다. 정기적인 보안 업데이트, 성능 모니터링, 그리고 필요에 따른 설정 조정을 통해 항상 최적의 상태를 유지하는 것이 중요합니다.
이로써 CentOS에서 LAMP 스택을 구축하고, 보안을 강화하며, 성능을 최적화하는 전체 과정을 살펴보았습니다. 이 가이드를 따라 구축한 LAMP 스택은 안정적이고 효율적인 웹 서버 환경을 제공할 것입니다. 여러분의 웹 프로젝트가 성공적으로 운영되기를 바랍니다! 🌟👨💻👩💻