PHP와 Python은 둘 다 동적 인터프리터 언어지만, 서로 다른 일을 위해 성장했습니다. PHP는 웹을 위해 만들어졌습니다. 요청마다 페이지를 출력하는 .php 파일이 실행되고, WordPress와 Laravel을 움직입니다. Python은 범용 언어입니다. 웹사이트도 실행하고(Django, Flask), 데이터 과학, 스크립트, 머신러닝의 기본 선택지입니다. 웹사이트나 WordPress 일이라면 PHP가 가장 직접적인 길이고, 그 밖의 거의 모든 일에는 Python이 더 흔한 선택입니다.
가장 빠르게 비교하는 방법은 같은 프로그램을 두 언어로 보는 것입니다. 다음은 실행할 수 있는 PHP 스크립트입니다.
같은 프로그램의 Python 버전입니다.
scores = {"Ada": 92, "Linus": 78, "Grace": 85}
for name, score in scores.items():
grade = "pass" if score >= 80 else "retry"
print(f"{name}: {score} ({grade})")
average = sum(scores.values()) / len(scores)
print(f"Average: {round(average, 1)}")
로직은 똑같습니다. 눈에 보이는 차이는 문법입니다. PHP는 변수에 $를 붙이고 문장을 ;로 끝내며 블록에 중괄호를 쓰고, Python은 들여쓰기를 쓰며 기호를 붙이지 않습니다.
문법 나란히 보기
| 작업 | PHP | Python |
|---|---|---|
| 변수 | $count = 5; | count = 5 |
| 문자열 연결 | "Hi " . $name | "Hi " + name |
| 변수 삽입 | "Hi $name" | f"Hi {name}" |
| 리스트 | [1, 2, 3] | [1, 2, 3] |
| 키/값 맵 | ["a" => 1] | {"a": 1} |
| 길이 | count($list), strlen($s) | len(list), len(s) |
| 맵 순회 | foreach ($m as $k => $v) | for k, v in m.items(): |
| 함수 | function add($a, $b) { return $a + $b; } | def add(a, b): return a + b |
| 익명 함수 | fn($x) => $x * 2 | lambda x: x * 2 |
| 키가 없을 때 기본값 | $m["k"] ?? "default" | m.get("k", "default") |
| 엄격한 비교 | === | ==(타입 변환 없음) |
배열: PHP는 한 타입, Python은 list와 dict
Python은 list, dict, tuple, set을 구분합니다. PHP에는 순서가 있는 맵인 배열 타입 하나가 있고, 이것이 그 모든 역할을 합니다. 키는 정수나 문자열일 수 있고, 넣은 순서가 유지됩니다.
Python 버전은 서로 다른 두 타입이 필요합니다.
colors = ["red", "green", "blue"]
codes = {"red": "#f00", "blue": "#00f"}
colors.append("yellow")
codes["green"] = "#0f0"
print("blue" in colors)
print("red" in codes)
PHP의 단일 타입은 편리하지만 Python에는 없는 놀라움이 하나 있습니다. array_filter 같은 함수는 원래 키를 유지하므로 걸러낸 리스트에 빈 번호가 생길 수 있습니다(0, 2, 3). 번호를 다시 매기려면 결과를 array_values()로 감싸세요.
타입과 타입 저글링
두 언어 모두 동적 타입이며 타입 힌트를 추가할 수 있습니다. 큰 차이는 타입이 섞일 때 일어나는 일입니다. Python은 문자열과 숫자를 더하기를 거부하고, PHP는 숫자 형태의 문자열을 알아서 변환합니다.
print("10" + 5) # TypeError: can only concatenate str (not "int") to str
print(7 / 2) # 3.5
print(7 // 2) # 3
PHP 8은 문자열과 숫자 사이의 비교를 훨씬 합리적으로 만들었지만, 들여야 할 습관은 같습니다. 변환을 원하지 않는다면 PHP에서 ===를 쓰세요. 파일 맨 위에 declare(strict_types=1);를 두면 PHP는 타입이 지정된 함수 매개변수에 잘못된 스칼라 타입이 전달되는 것도 거부하며, Python 타입 검사기의 동작에 더 가까워집니다.
웹 개발
두 언어가 가장 크게 다른 부분입니다. PHP 파일은 그 자체로 웹 페이지입니다. 서버에 올리면 요청마다 위에서부터 실행되고, 폼 데이터는 이미 $_GET과 $_POST에 들어 있습니다. 이 블록을 실행하고 도시 이름을 입력한 뒤 Send를 누르세요. $_POST가 채워진 채로 스크립트가 다시 실행됩니다.
Python은 같은 페이지에 프레임워크와 실행 중인 애플리케이션 서버가 필요합니다. 최소한의 Flask 버전입니다.
from flask import Flask, request
from markupsafe import escape
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def home():
city = request.form.get("city", "").strip()
page = '<form method="post"><input name="city"><button>Send</button></form>'
if city:
page += f"<p>Weather lookup for <strong>{escape(city)}</strong></p>"
return page
일반적으로 어느 모델이 더 낫다고 할 수는 없습니다. PHP의 "요청 하나, 새로운 실행 하나"는 배포가 간단하고 망가지기 어렵습니다. 충돌이 나도 요청 하나에만 영향을 주고, 페이지마다 메모리가 정리됩니다. Python의 장기 실행 앱 프로세스는 요청 사이에 메모리에 데이터를 유지할 수 있어 웹소켓과 백그라운드 작업에 적합하지만, 설정이 더 필요합니다. 풀 프레임워크(PHP의 Laravel과 Symfony, Python의 Django)는 결국 비슷한 기능을 제공합니다: 라우팅, ORM, 템플릿, 인증, 큐.
성능
웹 페이지에서는 OPcache를 쓰는 PHP 8이 일반 코드 실행에서 대체로 CPython보다 빠르고, PHP 8에는 JIT 컴파일러도 포함되어 있습니다. 실제로는 둘 다 요청 시간의 대부분을 데이터베이스나 다른 서비스를 기다리는 데 쓰므로, 이 차이가 프로젝트를 좌우하는 경우는 드뭅니다. Python의 속도 이야기는 다릅니다. 무거운 수치 작업은 핵심이 C로 작성된 NumPy, pandas 같은 라이브러리가 처리하며, 인터프리터가 느린데도 Python이 데이터 분야를 이끄는 이유가 이것입니다.
각 언어가 쓰이는 곳
| PHP가 강한 분야 | Python이 강한 분야 |
|---|---|
| WordPress 사이트, 테마, 플러그인 | 데이터 분석(pandas, Jupyter) |
| Laravel, Symfony 웹 앱 | 머신러닝과 AI(PyTorch, scikit-learn) |
| 쇼핑몰: WooCommerce, Magento, Shopware | 자동화와 스크립트 |
| 저렴한 공유 호스팅, 에이전시, 프리랜서 사이트 | 과학 계산, 교육 |
| 서버 렌더링 페이지와 API | Django, Flask, FastAPI 웹 백엔드 |
채용 시장도 이를 반영합니다. PHP 채용은 대부분 웹 개발이며 WordPress나 Laravel인 경우가 많습니다. Python 채용은 웹, 데이터, DevOps, ML에 걸쳐 있어서 수가 더 많습니다.
무엇을 먼저 배울까
앞으로 몇 달 동안 무엇을 만들고 싶은지로 고르세요.
- 웹사이트를 만들거나, 프리랜서로 일하거나, WordPress로 작업하고 싶다면: PHP를 배우세요. 페이지를 빠르게 온라인에 올릴 수 있고, 기술이 유료 작업으로 바로 이어집니다. PHP란과 변수부터 시작하세요.
- 데이터 분석, 자동화, AI, 또는 범용 첫 언어를 원한다면: Python을 배우세요.
- 최신 웹 앱을 처음부터 끝까지 만들고 싶다면: 백엔드는 어느 쪽이든 되고, 브라우저용으로는 어차피 JavaScript가 필요합니다. PHP vs JavaScript를 보세요.
배운 것의 대부분은 옮겨 갑니다. 반복문, 함수, 배열과 맵, 클래스, 예외는 두 언어에서 거의 같은 방식으로 동작하므로, 두 번째 언어는 몇 달이 아니라 몇 주면 됩니다.
자주 묻는 질문
PHP가 Python보다 빠른가요?
일반적인 웹 요청에서는 OPcache와 빠른 엔진 덕분에 PHP 8이 대개 CPython보다 빠르지만, 둘 다 충분히 빨라서 응답 시간의 대부분은 데이터베이스와 네트워크가 결정합니다. 수치 계산에서 Python은 보통 NumPy처럼 C로 작성된 라이브러리에 일을 맡깁니다.
PHP와 Python 중 무엇을 먼저 배워야 하나요?
범용 프로그래밍, 데이터 분석, 자동화, 머신러닝을 원한다면 Python을 먼저 배우세요. 목표가 웹사이트, WordPress 작업, Laravel 앱이라면 PHP를 먼저 배우세요. 거의 모든 웹 호스팅에서 동작하는 페이지를 만들고 배포할 수 있습니다.
웹 개발에서 Python이 PHP를 대체할 수 있나요?
네, Django, Flask, FastAPI로 같은 종류의 사이트와 API를 만들 수 있습니다. 차이는 배포와 생태계입니다. PHP는 거의 모든 공유 호스팅에서 실행되고 WordPress가 있으며, Python 웹 앱은 보통 프록시 뒤에서 계속 실행되는 앱 서버로 동작합니다.
Python 딕셔너리에 해당하는 PHP 기능은 무엇인가요?
연관 배열입니다: $user = ['name' => 'Ada', 'age' => 36];와 $user['name']. PHP 배열은 순서가 있는 맵이므로, 같은 타입이 Python의 list와 dict 역할을 모두 합니다.