Programming/PHP

[PHP] PHP 개념 및 배포 환경 설정, 기본 사용법

보간 2025. 4. 13. 06:30

PHP는 웹 개발에 특화된 서버-사이드 스크립트 언어이다. 보안 취약점이 많고, 대규모 웹 사이트 개발에는 적합하지 않다는 단점이 있지만 현재 한국의 많은 웹 사이트는 PHP로 구성되어 있다. 또한 쇼핑몰 웹 페이지 제작 지원 사이트(cafe24)에서 PHP를 지원하기 때문에, 영세 쇼핑몰 사이트나 개인 홈페이지의 PHP코드를 마주칠 확률이 높아진다. 나 또한 친구회사의 쇼핑몰 사이트 코드가 작동하지 않아서 도움을 요청 받은 적이 있고, 이번에도 PHP 홈페이지 제작을 요청 받아서 한 번 필요한 부분을 공부해 보았다.
 

PHP 개념 

PHP는 대표적인 서버-사이드 스크립트 언어 중 하나이다. 웹 서버에 PHP가 설치되어 있다면, PHP 스크립트는 웹 서버에서 해석되고 실행된다. 이때, PHP 스크립트는 HTML과 함께 사용되어 동적인 웹 페이지를 생성하거나 데이터베이스와의 상호작용, 파일 처리, 폼 처리 등 다양한 기능을 수행할 수 있다.
따라서 PHP 사용을 위해서는 웹 서버가 필요하다. Apache 서버와 PHP가 포함된 XAMPP이나 MAMP 같은 로컬 서버 환경을 이용해 http://localhost 에서 개발할 수 있다.
그러나 실제 사이트를 배포하기 위해서는 다른 서버 환경을 선택해야할 것이다.

  • 내가 사용해본 Vercel, Netlify는 PHP 런타임 환경을 제공하지 않는다.
  • PHP는 Apache/Nginx + PHP 해석기(FPM)가 있어야 한다.

PHP 배포 환경 설정

1. 일반 VPS*/서버

직접 Apache + PHP 설치

*VPS (Virtual Private Server): 서버를 가상화하여 하나의 서버에서 여러 개의 독립적인 서버를 운영하는 방식. 예를 들어, AWS EC2, DigitalOcean, Linode 등.


2. PHP 호스팅 (공유호스팅)

  • 카페24
  • 가비아
  • Bluehost
  • 호스팅.kr
  • Godaddy
    등의 호스팅 사이트에서 FTP*로 파일 업로드 이후 DB 연결. 일일 트래픽 용량 제한에 구애를 크게 받는다.

* FTP/SFTP: 파일을 전송하는 간단한 방법. 예를 들어 FileZilla 같은 FTP 클라이언트를 사용하여 웹 서버의 /var/www/html 폴더에 업로드.


3. PaaS* 서비스 (PHP 지원)

  • Render → 무료 플랜 존재, PHP 지원
  • Heroku → PHP 지원, 다만 2023 이후 무료 플랜 없어짐
  • Railway → PHP는 직접 Docker로 가능

*PaaS = Platform as a Service : 개발자가 서버 운영 신경 안 쓰고, 앱만 올리면 바로 돌아가게 만들어주는 플랫폼


4. Docker + 클라우드

  • PHP 앱을 Docker로 감싸고, 그걸 AWS, GCP, Azure에 띄운다.
  • 유연하지만 세팅이 좀 더 복잡하다.

배포 방법 간단 비교

VPS (Apache + PHP 설치)- 완전한 제어
- 비용 효율적
- 리소스 제한 없음
- 서버 관리 부담
- 보안 책임 
PHP 호스팅 (공유호스팅)- 간단한 설정
- 저렴한 가격
- 트래픽 제한
- 성능 제약 
PaaS 서비스 (Render, Heroku)- 서버 관리 불필요
- 빠른 배포
- 자동 스케일링
- 리소스 제한
- 일부 기능 제한
Docker + 클라우드- 유연성 & 확장성
- 클라우드 안정성
- 설정 복잡
- 비용 증가 가능

 


PHP 기본 문법

PHP는 <?php ... ?> 안에 코드를 작성하는 형태로, HTML 내에서 PHP 코드를 삽입할 수 있다.

 

변수 선언

<?php
$name = "홍길동";  // 문자열 변수
$age = 25;         // 정수 변수
?>

 

출력

PHP에서 출력할 때는 echo 또는 print를 사용

<?php
echo "안녕하세요, $name 님!";  // 변수도 문자열 안에 삽입 가능
?>

 

조건문

<?php
if ($age > 18) {
    echo "성인입니다.";
} else {
    echo "미성년자입니다.";
}
?>

 

반복문

<?php
for ($i = 0; $i < 5; $i++) {
    echo "현재 번호: $i\n";
}
?>

 

함수

<?php
function greet($name) {
    return "안녕하세요, $name!";
}
echo greet("홍길동");
?>

폼 처리

PHP는 HTML 폼을 처리할 수 있다. 기본적으로 GETPOST 방식으로 데이터를 전달받을 수 있다.

HTML 폼 (입력 폼)

<form action="process.php" method="POST">
    이름: <input type="text" name="username">
    <input type="submit" value="전송">
</form>

 

PHP에서 폼 처리

process.php에서 폼으로 전달된 데이터를 처리한다.

<?php
// POST 방식으로 데이터 받기
$username = $_POST['username'];

echo "안녕하세요, $username 님!";
?>

여기서 중요한 점은, PHP에서 폼 데이터를 받을 때 $_POST (혹은 $_GET) 배열을 사용한다는 점이다. GET은 URL에 값이 노출되고 POST는 본문에 값이 담긴다.


PHP와 HTML 혼합

PHP는 HTML 파일 내에 바로 코드를 삽입할 수 있어서, 동적인 웹 페이지를 쉽게 만들 수 있다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>PHP 예제</title>
</head>
<body>
    <h1>PHP와 HTML 혼합</h1>
    <p>오늘의 날짜는: <?php echo date("Y-m-d"); ?></p>
</body>
</html>

데이터베이스 연동 (MySQL)

PHP는 MySQL과 잘 연동된다. 다음은 간단한 MySQL 연결 예시이다.

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// MySQL 연결
$conn = new mysqli($servername, $username, $password, $dbname);

// 연결 확인
if ($conn->connect_error) {
    die("연결 실패: " . $conn->connect_error);
}

$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
    }
} else {
    echo "결과가 없습니다.";
}

$conn->close();
?>

 

사용시 주의할 점

  • 세미콜론: PHP는 문장의 끝에 세미콜론(;)을 붙여야 한다.
  • 대소문자 구분: 변수, 함수 등은 대소문자를 구분한다.
  • 보안: 사용자 입력을 처리할 때는 SQL 인젝션, XSS 공격 등을 방지하는 방법을 고려해야 한다. mysqli_real_escape_string() 함수나 prepared statements를 사용한다.