

본 프로젝트에서는 웹 서비스의 기본 보안을 강화하기 위해 Let's Encrypt 인증서와 Apache의 mod_ssl 모듈을 활용한 HTTPS 환경을 구축하였다.
초기에 mod_ssl 패키지를 설치하고 기본 SSL 설정 파일(/etc/httpd/conf.d/ssl.conf)을 검토하여 불필요하거나 충돌 가능성이 있는 설정을 제거한 후, WordPress 사이트에 적합한 별도 SSL 설정 파일(wordpress-ssl.conf)을 생성하였다.
Let's Encrypt를 활용한 인증서는 무료이면서도 브라우저와의 호환성이 높아 실무 환경에서도 널리 사용된다. 인증서를 수동 발급하기 위해 openssl 명령어를 사용해 자체 서명된 인증서(localhost.crt, localhost.key)를 /etc/pki/tls/경로에 생성하였고, Apache 설정에서 해당 경로를 명시했다.
설정 완료 후 apachectl configtest로 문법 오류를 검증하고 Apache를 재시작하여 HTTPS 접속이 가능함을 확인했다. 접속 시 브라우저에서 "주의: 보안 연결이 완전하지 않을 수 있음" 메시지가 출력되더라도, 자체 서명 인증서 기반의 HTTPS 연결이 정상적으로 동작하는 것은 실무에서도 초기에 테스트 및 내부 망에 유용하게 쓰일 수 있다.
특히, HTTPS 적용을 통해 WordPress 관리자 페이지와 사용자 로그인 정보 전송이 암호화되었으며, 이후 Wordfence 및 DISALLOW_FILE_EDIT, DISALLOW_FILE_MODS 설정과 함께 다중 보안 계층을 형성하여 외부 공격으로부터의 방어 체계를 마련하였다.

"Warning: Potential Security Risk Ahead" → "Advanced
→ Accept the Risk and Continue"



본 단계에서는 Prometheus와 Grafana를 활용하여 WordPress 서버의 시스템 상태를 실시간으로 수집, 시각화하는 모니터링 환경을 구축했다.
Prometheus는 Node Exporter로부터 수집한 메트릭 데이터를 주기적으로 스크래핑하며, Grafana는 해당 데이터를 기반으로 대시보드를 구성해 직관적인 시각 정보를 제공한다.
CPU Usage (%)
시각화 방식: Gauge
쿼리: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
Memory Usage (%)
시각화 방식: Gauge
쿼리: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
Disk Usage (%)
시각화 방식: Bar Gauge
쿼리: (node_filesystem_size_bytes - node_filesystem_free_bytes) / node_filesystem_size_bytes * 100
CPU Load Average
시각화 방식: Stat
쿼리: node_load1
Network Inbound
시각화 방식: Time Series
쿼리: rate(node_network_receive_bytes_total[5m])
Network Outbound
시각화 방식: Time Series
쿼리: rate(node_network_transmit_bytes_total[5m])

Node_Exporter와 Prometheus가 모두 UP인 것을 확인

Grafana - Data Source 설정에서 Prometheus 연결 확인


이번 프로젝트를 진행하며 여러 시스템 환경 변수와 충돌하는 문제를 직접 마주하고 해결해가는 과정을 통해 실무에서 발생 가능한 고급 이슈에 대한 감각을 키울 수 있었다.
가장 먼저 마주한 문제는 Apache + PHP-FPM 연동 과정에서의 500 Internal Server Error였다. 단순 설정 오류로 치부하지 않고 /var/log/httpd/error_log, PHP-FPM 서비스 로그까지 함께 확인하며 문제 원인을 추적했고, PHP를 proxy_fcgi 방식으로 처리하는 구조를 명확히 이해한 뒤 해결에 성공했다.
또한, 대부분 실습 환경에서는 비활성화하는 SELinux를 enforcing 모드로 유지한 채 작업을 진행했다. 이 과정에서 Apache와 PHP의 모듈 동작 권한, 인증서 파일 접근 권한이 충돌하는 부분을 restorecon, semanage, 로그 분석 등을 통해 해결해나갔다. SELinux 설정을 우회하지 않고 정책 안에서 문제를 풀어낸 점은, 보안을 고려한 시스템 운영 관점에서 특히 주목할 부분이다.
Grafana 설치에서도 yum 저장소가 닫힌 상황에서 포기하지 않고, 공식 .rpm 파일을 직접 다운로드하고 수동으로 설치하여 서비스 등록 및 실행까지 완료했으며, systemd 등록 후 상태 확인, 활성화까지 모든 과정이 자동화될 수 있게 구성했다.
마지막으로, Grafana 대시보드 구성에서도 단순 시각화가 아닌 실제 운영에 적합한 가로 3열 패널 구성, CPU 사용률, 메모리 사용률, 디스크 사용률, Load Average, 네트워크 트래픽까지 핵심 지표들을 시계열 + 게이지 방식으로 정리했다. 데이터 자체를 보여주는 것을 넘어서, 실시간 상황 판단이 가능한 구조로 시각화했다.
이러한 경험을 통해 단순히 설정을 따라 하기보다는, 문제가 발생했을 때 이를 분석하고 실무 환경에서도 적용 가능한 방식으로 직접 해결해보는 사고력과 기술 실천력을 갖추게 되었다고 느꼈다.
(자세한 트러블 슈팅 항목 -> Troubleshooting Details)

이번 프로젝트에서 구축한 시스템은 단순한 WordPress 설치를 넘어, 보안성, 확장성, 자동화, 가시성을 모두 고려한 종합적인 인프라 환경이다. 실무에 바로 적용 가능한 구조로 구성했으며, 다음과 같은 강점을 갖고 있다.
1. 보안성 중심의 구성
SELinux를 Enforcing 모드로 유지한 채 모든 설정을 적용함으로써, 시스템 단에서의 정책 기반 보안을 실현했다. 또한, firewalld로 포트 접근 제어, ModSecurity(WAF)를 통한 웹 공격 차단 설정까지 적용하여 실제 서비스 수준의 보안 레벨을 구현했다. 이외에도, WordPress 내부 코드 수정을 막는 DISALLOW_FILE_EDIT, DISALLOW_FILE_MODS 설정으로 내부 보안 취약점도 방어했다.
2. 운영 관점에서 강력한 가시성 확보
Prometheus + Node Exporter + Grafana 조합을 통해 실시간으로 CPU, 메모리, 디스크, 네트워크 사용량을 대시보드로 시각화했다. 이를 통해 시스템 과부하나 자원 병목 현상을 사전에 탐지하고 대응할 수 있는 운영 가시성을 갖추었다.
3. 자동화 기반의 효율적 구성
Ansible을 활용하여 Apache, PHP, MariaDB, WordPress, 모니터링 도구 설치 및 설정을 자동화하여 반복적인 수동 작업을 줄이고 재현 가능하고 일관된 인프라 구축이 가능해졌다. 추후 백업/복구, 배포 자동화까지 확장할 수 있는 기반을 마련했다.
4. 실무 환경과 유사한 구조
Rocky Linux, php-fpm, mod_ssl, systemctl, VirtualBox, Shell Script, logrotate 등 실제 현업에서 사용하는 기술들로만 구성했다. 단순 학습용이 아닌 실무자가 바로 이해하고 유지보수할 수 있는 구조와 표준 설정 방식을 따랐다.
5. 문제 해결 경험 기반
SSL 인증서 오류, SELinux 충돌, 500/503 에러, php-fpm 연동 실패, Grafana 수동 설치 등 다양한 이슈를 직접 해결하며 실제 운영 상황에 대응할 수 있는 실무 역량을 체득했다.

이번 SecureWP 프로젝트를 통해 시스템 인프라의 계획-구축-보안 강화-모니터링-문제 해결에 이르는 전 과정을 실습하며, 현업에서도 필요한 기술 역량을 종합적으로 익힐 수 있었다. 단순히 워드프레스를 설치하는 것을 넘어, 보안 강화를 위한 Wordfence 설정, 2FA 인증, SELinux 설정, 방화벽 규칙 구성 등 실무에서 반드시 필요한 절차들을 직접 수행했다.
특히 Ansible을 활용한 자동화 구성 관리는 서버 세팅의 일관성과 반복 가능성을 확보하는 데 큰 도움이 되었고, 문제가 발생했을 때 로그 분석, SELinux 트러블슈팅, 서비스 상태 확인, 포트 상태 점검 등 다양한 디버깅 스킬을 통해 실시간 문제 해결 경험을 쌓을 수 있었다. 또한 Prometheus + Node Exporter + Grafana 연동을 통해 시스템 자원(CPU, 메모리, 디스크, 네트워크)의 사용 현황을 시각화하여 시스템 상태를 한눈에 파악할 수 있는 모니터링 환경을 구현한 점은 큰 성과였다.
이 과정을 통해 단순한 기능 구현을 넘어 "보안", "운영", "가시성", "자동화", "유지보수"를 고려하는 인프라 마인드셋을 기를 수 있었고, 실무 환경에서 예기치 못한 이슈가 발생하더라도 원인을 빠르게 파악하고 대응할 수 있는 기반 지식과 경험을 확보할 수 있었다.
또한 기록 중심의 작업 방식으로, 모든 설정 및 트러블슈팅 과정을 문서화하고, 스크린샷 등 시각적 증거까지 확보함으로써 신뢰도 높은 기술 포트폴리오를 완성할 수 있었다. 이 프로젝트는 단지 기술 스택을 나열하는 것을 넘어서, 직접 경험하고 해결한 실전 중심의 프로젝트였기에 그 의미가 더욱 크다고 느껴진다.
