Skip to main content
Summary

PHP는 어디에서 일할까

웹 개발을 처음 배울 때 가장 먼저 잡아야 할 그림은 "코드가 어디에서 실행되는가"입니다. HTML과 CSS, JavaScript는 주로 브라우저에서 해석됩니다. 사용자의 컴퓨터나 휴대폰에 있는 브라우저가 파일을 받아 화면을 그립니다.

PHP는 다릅니다. PHP는 서버 사이드 언어입니다. 여기서 서버는 웹 사이트를 보관하고 요청을 처리하는 컴퓨터를 뜻합니다. 사용자가 브라우저 주소창에 웹 주소를 입력하면, 브라우저는 서버에 "이 페이지를 주세요"라고 요청합니다. 서버는 필요한 PHP 코드를 실행하고, 그 결과로 만들어진 HTML을 브라우저에 돌려줍니다.

중요한 점은 브라우저가 PHP 코드를 직접 받지 않는다는 것입니다. 브라우저가 받는 것은 PHP가 실행된 뒤 만들어진 결과물입니다.

<?php
$name = 'PHP';
?>

<p>안녕하세요, <?= $name ?>를 배우고 있습니다.</p>

서버에서 이 PHP 파일이 실행되면 브라우저에는 다음과 비슷한 HTML이 전달됩니다.

<p>안녕하세요, PHP를 배우고 있습니다.</p>

즉, PHP의 역할은 상황에 맞는 HTML을 만들어 보내는 것입니다. 사용자가 누구인지, 어떤 글을 보고 싶은지, 데이터베이스에 어떤 내용이 저장되어 있는지에 따라 다른 HTML을 만들 수 있습니다.

PHP와 웹 개발의 큰 그림AI 생성 이미지

정적 페이지와 동적 웹 애플리케이션

정적 웹 페이지는 미리 만들어 둔 파일을 그대로 보여주는 페이지입니다. 예를 들어 about.html 파일에 회사 소개 문장이 적혀 있다면, 사용자가 언제 접속해도 같은 내용이 보입니다. 소개 페이지, 약관 페이지처럼 자주 바뀌지 않는 문서는 정적 페이지로도 충분합니다.

동적 웹 애플리케이션은 요청과 데이터에 따라 결과가 바뀝니다. 게시판을 생각해 봅시다. 1번 글을 누르면 1번 글이 보이고, 2번 글을 누르면 2번 글이 보여야 합니다. 로그인한 사용자의 이름도 다르게 표시되어야 합니다. 관리자는 삭제 버튼을 볼 수 있지만 일반 사용자는 볼 수 없어야 할 수도 있습니다.

이런 일을 하려면 서버에서 판단이 필요합니다.

  • 어떤 URL로 요청이 왔는가

  • 사용자가 로그인했는가

  • 데이터베이스에 어떤 글이 저장되어 있는가

  • 사용자가 입력한 값이 올바른가

  • 결과를 어떤 HTML로 보여줄 것인가

PHP는 이 판단을 수행하고, 그 결과를 HTML로 만들어 브라우저에 보냅니다. 그래서 PHP를 배운다는 것은 단순히 문법을 외우는 일이 아닙니다. 브라우저, 서버, 데이터베이스가 함께 일하는 흐름을 이해하는 일입니다.

요청과 응답: 웹의 기본 대화

웹은 요청과 응답으로 움직입니다. 브라우저가 서버에 요청을 보내고, 서버가 응답을 돌려줍니다. 이 단순한 대화가 모든 웹 기능의 바탕입니다.

예를 들어 사용자가 다음 주소에 접속했다고 해 봅시다.

https://example.com/posts.php?id=3

이 주소에는 몇 가지 정보가 들어 있습니다.

  • https://example.com: 어느 서버에 요청할지 나타냅니다.

  • /posts.php: 서버의 어떤 PHP 파일 또는 경로를 실행할지 나타냅니다.

  • ?id=3: 추가 정보입니다. 여기서는 3번 글을 요청한다는 뜻으로 사용할 수 있습니다.

PHP에서는 이 id 값을 읽어서 3번 글을 찾아 보여줄 수 있습니다.

<?php
$id = $_GET['id'] ?? null;
?>

<p>요청한 글 번호: <?= htmlspecialchars($id ?? '없음', ENT_QUOTES, 'UTF-8') ?></p>

여기서 $_GET은 URL 뒤에 붙은 값을 읽을 때 사용하는 PHP의 특별한 배열입니다. htmlspecialchars()는 화면에 출력할 값을 안전하게 바꾸는 함수입니다. 사용자가 입력한 값을 그대로 HTML에 넣으면 보안 문제가 생길 수 있기 때문에, 앞으로도 출력할 때는 안전하게 처리하는 습관을 들여야 합니다.

HTTP 메서드와 PHP 실행

브라우저가 서버에 요청할 때는 "무엇을 하려는 요청인지"도 함께 보냅니다. 이때 사용하는 대표적인 방식이 HTTP 메서드입니다. 처음에는 GET과 POST 두 가지만 확실히 구분하면 됩니다.

GET은 주로 데이터를 조회할 때 사용합니다. 게시글 목록 보기, 특정 글 보기, 검색 결과 보기처럼 "가져오기"에 어울립니다. URL에 값이 드러나는 경우가 많습니다.

/search.php?keyword=php

POST는 주로 데이터를 새로 만들거나 변경할 때 사용합니다. 로그인, 회원가입, 글쓰기, 댓글 작성처럼 사용자가 입력한 내용을 서버에 보내 처리할 때 자주 사용합니다. 값이 URL에 직접 보이지 않고 요청 본문에 담깁니다.

<?php
$title = $_POST['title'] ?? '';
$content = $_POST['content'] ?? '';

같은 PHP 파일이라도 요청 방식에 따라 다르게 동작할 수 있습니다.

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    echo '폼이 제출되었습니다.';
} else {
    echo '입력 화면을 보여줍니다.';
}

이 코드는 요청 방식이 POST이면 제출 처리 메시지를 보여주고, 그 외에는 입력 화면을 보여줍니다. 나중에 폼을 배울 때 이 구조를 자주 사용합니다.

PHP와 데이터베이스의 관계

PHP만으로도 HTML을 만들 수 있지만, 실제 웹 애플리케이션은 대부분 데이터를 저장해야 합니다. 게시판 글, 회원 정보, 상품 목록, 주문 내역은 서버가 꺼졌다 켜져도 남아 있어야 합니다. 이런 데이터를 보관하는 곳이 데이터베이스입니다.

흐름은 보통 다음과 같습니다.

  1. 사용자가 브라우저에서 글 목록 페이지를 요청합니다.

  2. 서버가 PHP 코드를 실행합니다.

  3. PHP가 데이터베이스에 "글 목록을 주세요"라고 요청합니다.

  4. 데이터베이스가 글 데이터를 돌려줍니다.

  5. PHP가 데이터를 HTML에 끼워 넣습니다.

  6. 서버가 완성된 HTML을 브라우저에 응답합니다.

이 흐름을 이해하면 게시판도 덜 어렵게 느껴집니다. 게시판은 특별한 마법이 아니라, 요청을 받고 데이터베이스에서 필요한 데이터를 꺼낸 뒤 HTML로 보여주는 기능들의 묶음입니다.

PHP로 만들 수 있는 것들

PHP로 만들 수 있는 대표적인 기능을 큰 구조로 보면 다음과 같습니다.

게시판은 글 목록, 글 보기, 글 쓰기, 글 수정, 글 삭제로 구성됩니다. 목록과 글 보기는 주로 GET 요청으로 처리하고, 글 쓰기와 수정은 주로 POST 요청으로 처리합니다. 데이터는 데이터베이스에 저장합니다.

회원 시스템은 회원가입, 로그인, 로그아웃, 내 정보 수정으로 구성됩니다. 사용자가 누구인지 기억하기 위해 세션을 사용합니다. 세션은 서버가 사용자의 로그인 상태를 기억하는 방법입니다.

관리자 페이지는 일반 사용자에게 보이지 않는 관리 기능을 모아 둔 영역입니다. 회원 목록 보기, 게시글 관리, 통계 확인 같은 기능이 들어갑니다. 여기서는 권한 확인이 중요합니다. 로그인했는지뿐 아니라 관리자인지도 확인해야 합니다.

API는 HTML 페이지 대신 데이터를 응답하는 방식입니다. 예를 들어 JavaScript가 /api/posts.php에 요청하면 PHP가 JSON 형식으로 글 목록을 돌려줄 수 있습니다. JSON은 여러 언어에서 쉽게 읽고 쓸 수 있는 데이터 표현 방식입니다.

<?php
header('Content-Type: application/json; charset=utf-8');

echo json_encode([
    'success' => true,
    'message' => 'PHP에서 보낸 JSON 응답입니다.',
], JSON_UNESCAPED_UNICODE);

이 예제는 HTML 대신 JSON을 응답합니다. 나중에 비동기 요청을 배울 때 이런 구조를 사용합니다.

순수 PHP, Composer, 프레임워크의 역할

현대 PHP를 배우다 보면 Composer, Laravel, Symfony 같은 이름을 만나게 됩니다. 처음부터 모두 알 필요는 없습니다. 역할을 구분하면 학습 순서가 보입니다.

순수 PHP는 기초 체력입니다. 변수, 조건문, 반복문, 배열, 함수, 객체, 요청 처리, 세션, 파일, 데이터베이스 연결을 직접 다루며 웹의 기본 원리를 익힙니다. 이 과정을 건너뛰면 프레임워크를 사용할 때도 내부에서 무슨 일이 일어나는지 이해하기 어렵습니다.

Composer는 PHP의 패키지 관리자입니다. 패키지는 다른 개발자가 만들어 둔 재사용 가능한 코드 묶음입니다. Composer를 사용하면 필요한 라이브러리를 쉽게 설치하고, 클래스 파일을 자동으로 불러올 수 있습니다. 실무 PHP에서는 Composer가 거의 기본 도구처럼 쓰입니다.

프레임워크는 웹 애플리케이션을 만들기 위한 큰 틀입니다. 라우팅, 데이터베이스 처리, 보안, 템플릿, 테스트 같은 반복 작업을 정리된 방식으로 제공합니다. 프레임워크를 쓰면 큰 프로젝트를 더 안정적으로 만들 수 있습니다. 하지만 프레임워크는 PHP의 기본 원리를 대신 배워 주지 않습니다. 이 책에서는 순수 PHP로 원리를 익힌 뒤 Composer와 MVC 구조를 거쳐 실무적인 방식으로 확장합니다.

이 책의 학습 경로

이 책은 문법 목록을 외우는 순서가 아니라, 작은 웹 기능을 만들 수 있도록 흐름을 잡아 갑니다.

먼저 PHP가 실행되는 환경을 만들고 첫 코드를 실행합니다. 그다음 변수, 조건문, 반복문, 배열, 함수처럼 코드를 구성하는 기본 도구를 익힙니다. 이후 폼 요청, 쿠키, 세션을 배우며 사용자의 입력과 로그인 흐름을 다룹니다.

중반부에서는 파일 업로드와 데이터베이스를 다룹니다. 특히 데이터베이스는 웹 애플리케이션의 중심입니다. 단순히 SQL 문장을 실행하는 데서 끝나지 않고, PDO를 사용해 안전하게 데이터를 다루는 방법을 배웁니다.

그다음 객체지향, 네임스페이스, Composer로 코드 구조를 정리합니다. 오류 처리와 로깅, 보안도 따로 다룹니다. 마지막에는 MVC 구조, JSON API, 테스트, 배포를 거쳐 종합 프로젝트로 게시판을 완성합니다.

이 순서를 따라가면 "PHP 문법을 조금 아는 상태"에서 멈추지 않고, 실제로 작동하는 웹 애플리케이션을 만들 수 있는 방향으로 나아갈 수 있습니다.

작은 예제로 전체 흐름 보기

다음 코드는 사용자의 이름을 URL에서 받아 인사말을 만드는 아주 작은 PHP 페이지입니다.

<?php
$name = $_GET['name'] ?? '손님';
$safeName = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
?>

<!doctype html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <title>첫 PHP 페이지</title>
</head>
<body>
    <h1>안녕하세요, <?= $safeName ?>님!</h1>
</body>
</html>

브라우저에서 다음처럼 요청했다고 생각해 봅시다.

/hello.php?name=민수

그러면 PHP는 name 값을 읽고, 안전하게 출력할 수 있도록 바꾼 뒤, HTML 안에 넣어 응답합니다. 작지만 이 안에 PHP 웹 개발의 핵심 흐름이 모두 들어 있습니다.

  • 브라우저가 URL로 요청한다.

  • 서버가 PHP를 실행한다.

  • PHP가 요청 값을 읽는다.

  • PHP가 HTML을 만든다.

  • 브라우저가 HTML을 화면에 그린다.

앞으로 배우는 내용은 이 흐름을 더 크고 안전하게 확장하는 과정입니다.

실습 과제

  1. 게시판에서 "글 보기" 기능이 실행될 때 브라우저, 서버, PHP, 데이터베이스가 각각 어떤 일을 하는지 순서대로 적어 보세요.

  2. GET 요청에 어울리는 기능 3개와 POST 요청에 어울리는 기능 3개를 직접 떠올려 보세요.

  3. PHP가 브라우저에서 직접 실행되는 것이 아니라 서버에서 실행된다는 말을 한 문장으로 설명해 보세요.

  4. 앞으로 만들고 싶은 PHP 웹 애플리케이션을 하나 정하고, 필요한 기능을 목록으로 나누어 보세요.

자주 발생하는 오해와 점검

PHP 코드가 브라우저에 보인다고 생각하는 경우가 많습니다. 정상적인 서버 환경이라면 브라우저에는 PHP 코드가 아니라 실행 결과가 전달됩니다. 만약 PHP 코드가 그대로 보인다면 서버가 PHP를 실행하도록 설정되어 있지 않은 것입니다.

HTML을 알면 PHP가 필요 없다고 생각하는 경우도 있습니다. 내용이 항상 같다면 HTML만으로 충분합니다. 하지만 로그인, 글쓰기, 검색, 주문처럼 데이터와 사용자 상태에 따라 결과가 바뀌어야 한다면 서버에서 실행되는 코드가 필요합니다.

프레임워크부터 배우면 더 빠르다고 생각하는 경우도 있습니다. 단기간에 화면을 만들 수는 있지만, 요청과 응답, 세션, 데이터베이스, 보안의 기본을 모르면 문제가 생겼을 때 원인을 찾기 어렵습니다. 이 책에서는 먼저 순수 PHP로 흐름을 이해하고, 그다음 실무 도구로 넘어갑니다.

사용자 입력을 그대로 출력하는 습관은 위험합니다. 지금은 htmlspecialchars()라는 함수 이름만 기억해도 충분합니다. 사용자가 보낸 값은 믿지 않고, 화면에 출력하기 전에 안전하게 바꾼다는 원칙을 계속 사용할 것입니다.

책 목록

PHP 교과서: 기초 문법부터 게시판 프로젝트와 배포까지

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기