개발/💻 CS 지식

[ 빅데이터응용 ] Chapter2. PHP

정소은 2025. 9. 29. 13:30

 

 

 

 

PHP와 AMP 생태계 요약 정리

 

PHP 장점

  • 배우기 쉽다: Java/JSP보다 문법이 간단해 비전공자도 접근 가능.
  • 스크립트 기반: 빠르게 프로젝트 개발 가능 → 한 학기 팀 프로젝트에 적합.
  • DB 친화적: MySQL, MariaDB, SQLite, Oracle 등 다양한 DB와 쉽게 연동.
  • 오픈소스 풍부: 전 세계적으로 예제와 코드 자료가 많음.

 

 

AMP / XAMPP / LAMP

  • AMP = Apache(웹 서버) + MySQL/MariaDB(DB) + PHP(스크립트).
  • 주요 변형:
    • XAMPP: Cross-platform (Windows, Mac, Linux 지원).
    • WAMP: Windows + AMP.
    • LAMP: Linux + AMP.
    • MAMP: Mac + AMP.
  • 장점: 서버, DB, PHP를 한 번에 설치 가능 → 클릭 몇 번으로 세팅 끝.

 

 

MySQL vs MariaDB

  • MariaDB는 MySQL의 포크(fork).
  • 문법과 API가 거의 동일 → 대부분 호환 가능.
  • MariaDB: 더 안정적이고 상용(enterprise) 지향.
  • MySQL: 커뮤니티 중심, 학습과 일반 웹 프로젝트에서 많이 사용.

 

설치 관련 포인트

  • 과거: Apache, MySQL, PHP를 따로 설치해야 했음 → 버전 충돌 문제 잦음.
  • 현재: XAMPP/WAMP 설치로 해결 → 편리하고 관리 쉬움.
  • 버전 호환 중요: PHP 버전 업 시 DB와 충돌 가능성 있음.

 

 

Localhost (루프백)

  • localhost = 자기 컴퓨터 (IP 주소 127.0.0.1).
  • 내 PC에 서버와 클라이언트를 동시에 띄울 수 있음.
  • 실제 서버 없이도 웹 브라우저에서 테스트 가능.

 

주요 도구

  • phpMyAdmin
    • MySQL/MariaDB 관리 웹 툴.
    • 콘솔 명령어보다 직관적 (테이블 생성, SQL 실행, 사용자 관리 가능).
  • SQLite
    • 가벼운 데이터베이스.
    • 시연용/소규모 앱에 적합.
    • PHP가 다양한 DB를 지원함을 보여줌

 


 

PHP 실습

 

PHP 기초 복습

  • hello.php 파일 → print "Hello World"; 출력
  • <?php ... ?> 태그 안에서 PHP 코드 실행
  • 웹 서버 폴더(htdocs)에 저장 후 브라우저에서 접근

 

 

동적 웹페이지를 위한 사용자 입력

  • 단순 출력이 아닌 사용자 입력을 받아야 동적 페이지 가능
  • 입력은 보통 HTML Form을 통해 전달됨
 
<form> 
<input type="text" name="name"> 
<input type="submit" value="전송"> 
</form>
  • name 속성은 입력값을 서버에 전달할 때의 키(key) 역할

 

 

클라이언트–서버 연동

  • 클라이언트: sendName.html
  • 서버: receiveName.php
<form action="receiveName.php" method="post"> 
<input type="text" name="name"> 
<input type="submit" value="전송"> 
</form>
 
<?php echo $_POST["name"] . " 님 안녕하세요!"; ?>
  • $_POST 배열 → 폼에서 넘어온 값 접근
  • 예: $_POST["name"] → 사용자가 입력한 값 반환
  • 여러 개 입력 가능 (name, professor, singer 등)

 

 

MySQL 데이터베이스 연동

  1. DB 생성
    CREATE DATABASE testDB;
  2. 테이블 생성
    CREATE TABLE testTable ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, test VARCHAR(75) NULL );
  3. PHP에서 DB 연동
<?php $conn = mysqli_connect("localhost", "root", "apmsetup", "testDB"); 
if (!$conn) { die("DB 연결 실패: " . mysqli_connect_error()); } 
$sql = "CREATE TABLE testTable ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, test VARCHAR(75) NULL )"; 
if (mysqli_query($conn, $sql)) { echo "테이블 생성 성공!"; } 
else { echo "에러: " . mysqli_error($conn); } mysqli_close($conn); ?>
  • mysqli_connect → DB 접속
  • mysqli_query → SQL 실행
  • AUTO_INCREMENT → 기본키 자동 증가
  • VARCHAR(75) → 문자열 저장 가능

 

 

PHP와 MySQL 기본 흐름

  1. 데이터베이스 연결
    • mysqli_connect() 함수를 사용해 DB 연결
    • 매개변수: 호스트, 사용자 ID, 비밀번호, DB 이름
    • 연결 실패 시 에러 메시지 출력
  2. 쿼리 실행
    • mysqli_query(연결, SQL문) 으로 실행
    • INSERT, UPDATE, DELETE 같은 경우 성공 여부만 반환
    • SELECT 는 실제 데이터(ResultSet)를 반환
  3. 연결 종료
    • mysqli_free_result() → 쿼리 결과 자원 해제
    • mysqli_close() → DB 연결 종료

 

사용자 입력 처리

  • HTML <form> 태그로 입력받은 값은 $_POST['필드명'] 배열에 저장됨
  • 예:
    $value = $_POST['testcolumn'];
  • 이 값을 SQL문에 바로 넣어 문자열을 만드는 방식은 SQL Injection 공격 위험이 있음 → 이후에 Prepared Statement로 해결

 

SELECT 쿼리 결과 다루기

  1. mysqli_query() 실행 후 결과 저장
     
    $result = mysqli_query($conn, "SELECT * FROM testtable");
  2. 결과 개수 확인
    $rows = mysqli_num_rows($result); echo "결과는 $rows 행이 있습니다.";
  3. 결과 반복 출력 (커서 개념)
    • mysqli_fetch_array() 또는 mysqli_fetch_assoc() 사용
    • 커서(cursor)가 한 행씩 이동하며 데이터를 꺼냄
while ($row = mysqli_fetch_assoc($result)) 
{ echo "ID: " . $row['id'] . " / Text: " . $row['testcolumn'] . "<br>"; }