본문 바로가기

Study/Network | Server

[Server] PHP, Apache2 그리고 Nginx + PHP-FPM

야호 성공이다


본격적으로 React를 사용하여 포트폴리오 홈서버를 구축하기 전, 문득 예전 근로장학생으로 일할 때 서버 구축 관련해서 공부하던 php가 떠올랐다.

php는 서버 사이드 스크립트 언어다. 지금은 동적 웹 페이지와 API를 만드는 서버 언어로 진화했다. 여기에서 내가 진행할 프로젝트의 핵심적인 부분이 바로, 동적 웹 페이지 제작이다.

단순하게 접근하면 기존 HTML5와 어떤 차이인지 햇갈리기 쉽다.

1. 실행 위치

기술 실행 위치
JavaScript (HTML5) 브라우저(클라이언트)에서 실행
PHP 서버에서 실행

기본적으로 두 방식은 브라우저에서 실행하느냐, 서버에서 실행하느냐의 차이를 가진다. 가령

<!-- index.php -->
<?php
echo "오늘 서버 시간: " . date("Y-m-d H:i:s");
?>

와 같은 코드가 php 내부에 있다면, 다음과 실행된다.

  • 브라우저가 요청하면, 서버에서 PHP 코드가 실행되고 결과 HTML만 전달
  • 클라이언트는 “오늘 서버 시간: 2025-09-21 20:40:00” 같은 최종 HTML만 받음
  • 즉, 코드 자체는 클라이언트에 노출되지 않음

반면, javascript에서는 다음과 같이 작성하게 되며 이는

<!-- index.html -->
<script>
  document.write("오늘 클라이언트 시간: " + new Date());
</script>
  • 브라우저가 HTML 받아서 실행
  • 최종 결과는 브라우저가 보여주지만, 코드가 그대로 클라이언트에 있음
  • 실행 시점은 사용자 컴퓨터 시간 기준

즉, 코드가 클라이언트에 노출되느냐 안되느냐의 차이를 가지며, 이는 웹 페이지의 보안을 더욱 높여준다.

2. 데이터 접근

  • PHP: 서버 자원(DB, 파일, 서버 환경 변수)에 바로 접근 가능
    • 예: MySQL에서 사용자 정보 가져오기 → HTML에 출력
  • JavaScript: 클라이언트에서 서버 자원 직접 접근 불가
    • 서버 데이터를 쓰려면 AJAX / fetch로 API 호출 필요

3. HTML 통합 방식

 

  • PHP: HTML 안에 <?php ... ?> 삽입 → 서버에서 동적으로 값 처리 후 HTML로 변환
  • JavaScript: HTML 안 <script> 태그 안에 코드 → 브라우저가 동적으로 DOM 조작

 

요약하면 다음과 같다.

항목 PHP JavaScript
실행 위치 서버 브라우저
코드 노출 안됨 코드 그대로 노출
서버 데이터 접근 직접 가능 AJAX/API 필요
사용 예 동적 페이지, 로그인, DB 조회 UI 인터랙션, SPA 라우팅, 동적 DOM
HTML 안 통합 <?php ?> <script>

이를통해 php를 사용하면 코드 노출도 줄이고, 서버 데이터 접근에도 용이하다는 점을 알 수 있다. 그렇다면 이러한 차이가 왜 '동적 웹 페이지 제작'에 유리한걸까? 이는 제어권, 데이터 접근, 보안, 일관성 관점에서 보면 명확하다.

1. 서버에서 실행되므로 데이터와 비즈니스 로직 제어가 가능하다.
2. 클라이언트 환경에 의존하지 않고 일관된 결과를 제공한다.
3. 보안과 접근 제어가 용이하다.
4. 페이지를 요청할 때마다 동적 생성이 가능, 맞춤형 콘텐츠 제공이 가능하다. 사용자가 요청할 때마다 DB 조회 -> HTML 생성 -> 전송이 가능하다. 물론 기존 HTML도 이는 가능하지만 API 호출이나 큰 데이터 처리가 어렵다는 단점이 존재한다.


현재 대부분의 웹 사이트는 단순 html5가 아닌, php 기반이다. 그렇기에 내가 제작하는 홈페이지도 php로 제작할 예정이다. 우선 php로 노선을 정했으므로 Apache2에 대한 공부는 필수불가결하다.

Apache HTTP Server는 대표적인 웹 서버 소프트웨어로, 전통적인 PHP 실행 방식이다. 아주 기본적인 LAMP 환경(Linux + Apache + MySQL + PHP)을 대부분 가정하고 PHP를 사용한다.

그렇다면 내가 선택한 Nginx + PHP-FPM과는 어떤 차이가 있을까?

항목 Apache + mod_php Nginx + PHP-FPM
PHP 처리 Apache가 직접 PHP 코드 실행 PHP-FPM(FastCGI)라는 별도 프로세스가 처리
성능 작은 서버에서 충분, 멀티프로세스 구조는 메모리 부담 Nginx 정적 파일 처리 빠르고, PHP-FPM 분리 → 고성능, 낮은 메모리
구조 모든 요청 Apache가 처리 정적 파일 → Nginx, PHP 요청 → PHP-FPM
장점 설치 단순, 전통적 SPA + API 구조에 최적, 고성능, 유연
단점 대규모 트래픽 부담, 모던 SPA 연동 어려움 설정 약간 복잡, 별도 PHP-FPM 관리 필요

요약하면 다음과 같다.

 

  • Apache + mod_php → 전통적 LAMP 방식, 자동으로 PHP 처리 가능
  • Nginx + PHP-FPM → 현대적 구조, SPA/React + API에 적합, 성능/확장성 우수

또한 가장 중요한 점은, 내가 사용하려고 하는 React SPA 배포에 Nginx + PHP-FPM 방식이 최적화가 굉장히 잘 되어있으며(Nginx가 정적 파일을 직접 서빙하므로 빠르고 효율적이고, React 빌드 결과물을 그대로 Nginx root에만 두면 되므로 편리하다.) PHP API와 분리되어 서버 부하를 분산시키며, Nginx에서 Https/보안 즉 SSL을 모두 처리하므로 PHP는 별다른 신경을 써줄 필요가 없다. 후에 트래픽이 많아져도 효율적이며 멀티코어로 활용이 가능하고, FastCGI 연결 관리가 가능하다.

php는 기본적으로 다음과 같이 동작한다.

[브라우저 요청] → [웹 서버 (Nginx/Apache)] → [PHP 엔진 처리] → [HTML/CSS/JSON 반환] → [브라우저 표시]
  • 브라우저가 PHP 파일 요청
  • 웹 서버가 PHP 코드가 포함된 파일을 PHP 엔진(PHP-FPM 등)에 전달
  • PHP 엔진이 실행 → 결과(HTML, JSON 등) 반환
  • 브라우저는 결과만 표시, 실제 코드 노출 X

그리고 이런 PHP는 Apache2와 Ngnx + PHP-FPM과 다음과 같은 관계를 가진다.

Apache + mod_php

  • Apache 웹 서버에 PHP 모듈을 붙여서 PHP 실행
  • 요청이 들어오면 Apache가 직접 PHP 코드 해석
  • 간단하고 예전 방식, 작은 서버에서 많이 쓰임

Nginx + PHP-FPM (현실적/실무 방식)

  • Nginx는 정적 파일만 제공
  • PHP 요청은 PHP-FPM(FastCGI Process Manager)에 전달
  • PHP-FPM이 코드 실행 후 결과를 Nginx로 전달
  • 장점: 성능 높음, 웹 서버와 PHP 분리, SPA + API 구조에 최적

 

그럼, 내가 현재 사용중인 Nginx 그리고 php 더 나아가서 apache2까지 함께 비교해보자.

항목 PHP  Apache2  Nginx + PHP-FPM
기본 역할 서버 사이드 스크립트 언어. HTML과 함께 동적 콘텐츠 생성 웹 서버 소프트웨어. HTTP 요청 받아 정적/동적 콘텐츠 제공 웹 서버 소프트웨어(Nginx) + PHP 처리 엔진(PHP-FPM)
웹 요청 처리 방식 PHP 자체는 HTTP 요청 처리 X. 반드시 웹서버와 연결 모듈(mod_php)로 PHP 코드 직접 처리 가능 PHP는 FastCGI(FPM)로 처리. Nginx는 정적 파일 제공 + 요청 전달만
HTTPS 지원 없음. SSL은 웹 서버에서 처리 mod_ssl 모듈로 가능 Nginx SSL 설정으로 가능
실무 사용 이유 동적 페이지, API, 백엔드 로직 전통적 웹 서버, PHP와 함께 사용 고성능, SPA 서빙, 현대적 구조, PHP-FPM 연동

즉, 정리해보면 Nginx + PHP-FPM 구조는 다음과 같이 구성된다.

[브라우저] ---> HTTPS ---> [Nginx] ---> [정적 파일: React build]
                                  |
                                  ---> [PHP-FPM] ---> [PHP 코드 처리]
  • React: Nginx가 직접 서빙 (index.html, JS, CSS 등)
  • PHP: /api/* 요청만 Nginx에서 PHP-FPM으로 전달
  • HTTPS: Nginx에서 SSL 인증서 적용, 모든 트래픽 암호화

이제 이를 바탕으로, Figma를 활용하여 포트폴리오 홈페이지의 기틀을 잡고, 들어갈 내용을 정리하며 어떤 기술이 필요할지 정리한 다음 본격적으로 포트폴리오를 제작할 것이다.