[PHP] PHP 개념 및 배포 환경 설정, 기본 사용법
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 지원)
*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 폼을 처리할 수 있다. 기본적으로 GET과 POST 방식으로 데이터를 전달받을 수 있다.
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
를 사용한다.