Categories: PHP

PHP에서 MySQL CRUD (Create, Read, Update, Delete) 기본

안녕하세요! 웹 개발의 세계에 뛰어들고 싶은 분들, 환영해요! 오늘은 PHP와 MySQL을 이용해서 데이터를 다루는 기본기를 꽉 잡아보는 시간을 가져보려고 해요. 바로 MySQL CRUD 이야기인데요, CRUD는 Create, Read, Update, Delete의 약자로 데이터베이스를 다루는 가장 기본적이면서도 중요한 네 가지 동작을 말한답니다. 마치 요리 레시피처럼 데이터를 만들고, 읽고, 수정하고, 삭제하는 방법을 PHP를 통해 MySQL에 직접 명령하는 것이죠. 어렵게 느껴지시나요? 걱정 마세요! 제가 여러분들을 위해 쉽고 재미있게 설명해 드릴게요. 이 글을 통해 CRUD의 개념부터 PHP를 활용한 실제 데이터 생성, 조회, 수정, 그리고 삭제까지 차근차근 알아가면서 데이터베이스 관리의 기초를 탄탄하게 다져보아요!

 

 

CRUD의 개념 이해하기

자, 이제 PHP와 MySQL을 이용해서 데이터를 가지고 놀아볼 시간이에요! 그전에 먼저 우리가 오늘 다룰 CRUD가 정확히 무엇인지, 왜 중요한지 한번 살펴보도록 할까요? 마치 요리 레시피를 보기 전에 재료 설명부터 읽는 것처럼 말이죠! ^^

CRUD는 Create, Read, Update, Delete의 약자로, 데이터베이스에서 데이터를 생성하고, 읽고, 업데이트하고, 삭제하는 기본적인 네 가지 동작을 의미해요. 웹 개발, 특히 데이터베이스와 연동된 애플리케이션을 만들 때는 이 CRUD 작업이 정말 핵심이라고 할 수 있죠. 마치 집을 짓는 기초 공사처럼 말이에요!

CRUD 동작 살펴보기

각각의 동작을 좀 더 자세히 들여다볼까요? 🧐

Create (생성)

새로운 데이터를 데이터베이스에 추가하는 작업이에요. 예를 들어, 새로운 회원 정보를 입력하거나, 쇼핑몰에 새로운 상품을 등록하는 것을 생각해 보시면 돼요. 마치 빈 도화지에 그림을 그리기 시작하는 것과 같죠! 데이터베이스 테이블에 새로운 행(row)이 추가되는 거예요. SQL의 INSERT 문을 사용해서 데이터를 생성합니다.

Read (읽기)

데이터베이스에 저장된 데이터를 읽어오는 작업입니다. 회원 목록을 조회하거나, 특정 상품의 상세 정보를 보는 것이 여기에 해당돼요. 마치 책에서 원하는 정보를 찾아 읽는 것과 같아요. SQL의 SELECT 문을 사용해서 원하는 데이터를 가져올 수 있어요. 데이터를 읽어오는 방식은 정말 다양한데, 필요한 정보만 쏙쏙 골라서 가져올 수도 있고, 특정 조건에 맞는 데이터만 가져올 수도 있어요. 예를 들어, 10만 원 이상의 상품만 조회한다든지, 특정 날짜 이후에 가입한 회원만 조회하는 것처럼요!

Update (수정)

기존 데이터를 수정하는 작업입니다. 회원 정보를 변경하거나, 상품 가격을 수정하는 것이 대표적인 예죠. 마치 연필로 그림을 수정하는 것처럼, 데이터베이스 테이블의 특정 행(row)에 있는 값을 변경하는 거예요. SQL의 UPDATE 문을 사용하며, 어떤 데이터를 어떻게 변경할지 정확하게 지정해야 해요. 실수로 다른 데이터를 수정하면 큰일 나겠죠?! 😱

Delete (삭제)

데이터베이스에서 데이터를 삭제하는 작업입니다. 탈퇴한 회원 정보를 삭제하거나, 판매 중단된 상품 정보를 삭제하는 것을 생각해 보시면 돼요. 마치 지우개로 그림을 지우는 것과 같아요. SQL의 DELETE 문을 사용해서 데이터를 삭제합니다. 삭제는 정말 주의해야 하는 작업이에요! 한번 삭제된 데이터는 복구하기 어려울 수 있으니까요. 😰 중요한 데이터라면 삭제하기 전에 반드시 백업해두는 것이 좋겠죠?

CRUD는 단순한 네 가지 동작처럼 보이지만, 실제로는 매우 강력한 기능을 제공해요. 이 네 가지 동작을 조합해서 다양한 데이터 처리 작업을 수행할 수 있거든요. 예를 들어, 게시판에서 글을 쓰고, 읽고, 수정하고, 삭제하는 모든 작업이 CRUD를 기반으로 이루어진답니다.

웹 개발에서 CRUD는 거의 모든 데이터 조작의 기본이라고 할 수 있어요. 따라서 CRUD의 개념을 정확히 이해하고 활용하는 것이 정말 중요해요. CRUD를 잘 이해하면 데이터베이스를 효율적으로 다룰 수 있고, 더 나아가 강력하고 유연한 웹 애플리케이션을 개발할 수 있을 거예요! 😉 다음에는 PHP를 사용해서 실제로 데이터를 생성하는 방법을 알아볼게요. 기대해 주세요~! 😊

 

PHP로 데이터 생성하기

자, 이제 드디어 본격적으로 PHP를 이용해서 MySQL 데이터베이스에 데이터를 생성하는 방법을 알아볼 시간이에요! 두근두근?! 앞서 CRUD의 개념에 대해서는 충분히 이해하셨을 거라고 생각해요~ 이 부분이 바로 ‘C’reate에 해당하는 거죠! 데이터베이스에 새로운 정보를 추가하는 것, 마치 빈 도화지에 그림을 그리기 시작하는 것과 같아요. 어떤 멋진 그림을 그릴지 기대되지 않나요? ^^

PHP는 MySQL 데이터베이스와 상호 작용하기 위해 mysqli 또는 PDO(PHP Data Objects)와 같은 확장 기능을 제공해요. 둘 다 강력한 기능을 제공하지만, 저는 PDO를 조금 더 선호하는 편이에요. 왜냐하면 PDO는 다양한 데이터베이스 시스템(MySQL, PostgreSQL, SQLite 등)을 지원하기 때문에 코드의 재사용성이 높거든요! 마치 맥가이버 칼처럼 다용도로 활용 가능하다는 거죠! 하지만 이번에는 MySQL을 사용하고 있으니 mysqli를 사용하는 예제를 보여드릴게요. (찡긋)

데이터베이스 연결

먼저, 데이터베이스 연결부터 시작해야겠죠? 다음 코드를 참고해 보세요.


<?php
$servername = "localhost"; // 데이터베이스 서버 주소 (대부분 localhost)
$username = "your_username"; // MySQL 사용자 이름
$password = "your_password"; // MySQL 비밀번호
$dbname = "your_db"; // 사용할 데이터베이스 이름

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

// 연결 확인! (중요!!)
if ($conn->connect_error) {
    die("연결 실패: " . $conn->connect_error); // 연결 실패 시 에러 메시지 출력!
}
echo "연결 성공! (와아~!)"; // 연결 성공 시 메시지 출력!
?>

위 코드에서 your_username, your_password, your_db 부분은 각자 환경에 맞게 수정해야 해요. 절대 그대로 복사해서 쓰면 안 돼요~! 안 그러면 데이터베이스에 접속이 안 될 수도 있어요! (주의! 주의!)

데이터 삽입

이제 연결까지 성공했으니, 실제로 데이터를 삽입해 볼까요? INSERT INTO 구문을 사용하면 돼요. 예를 들어, users라는 테이블에 새로운 사용자 정보를 추가한다고 가정해 봅시다. users 테이블에는 id, username, email 필드가 있다고 해볼게요.


<?php
// SQL 쿼리 작성
$sql = "INSERT INTO users (username, email) VALUES ('newUser', 'newUser@example.com')";

// 쿼리 실행! (두근두근)
if ($conn->query($sql) === TRUE) {
    echo "새로운 레코드가 성공적으로 생성되었습니다!"; // 성공 메시지!
    $last_id = $conn->insert_id; // 새로 생성된 레코드의 ID 값 가져오기!
    echo "생성된 레코드의 ID: " . $last_id; // ID 값 출력! (꿀팁!)
} else {
    echo "Error: " . $sql . "<br>" . $conn->error; // 에러 발생 시 메시지 출력! (디버깅에 필수!)
}
?>

INSERT INTO 구문에서 VALUES 다음에 삽입할 값들을 넣어주면 돼요. 문자열 값은 작은따옴표(”)로 감싸야 한다는 점, 잊지 마세요! 그리고 $conn->insert_id를 사용하면 방금 삽입한 데이터의 ID 값을 가져올 수 있어요. 이 값은 나중에 데이터를 조회하거나 수정할 때 유용하게 사용될 수 있으니 잘 기억해 두세요!

SQL Injection 방지

여기서 중요한 점! 사용자로부터 입력받은 데이터를 그대로 데이터베이스에 삽입하는 것은 매우 위험해요! SQL Injection이라는 공격에 취약해질 수 있거든요. SQL Injection은 악의적인 사용자가 입력 필드에 SQL 쿼리를 삽입하여 데이터베이스를 조작하는 공격 기법이에요. 무시무시하죠?! 이러한 공격을 방지하기 위해서는 Prepared Statements를 사용해야 해요. Prepared Statements는 SQL 쿼리와 데이터를 분리하여 처리하기 때문에 SQL Injection 공격을 효과적으로 막을 수 있어요. 다음은 Prepared Statements를 사용하는 예제입니다.


<?php
// Prepared Statement 생성
$stmt = $conn->prepare("INSERT INTO users (username, email) VALUES (?, ?)");

// 파라미터 바인딩
$stmt->bind_param("ss", $username, $email);

// 변수에 값 할당
$username = "newUser2";
$email = "newUser2@example.com";

// 쿼리 실행
$stmt->execute();

echo "새로운 레코드가 성공적으로 생성되었습니다!";

$stmt->close(); // Prepared Statement 종료! (리소스 해제!)
?>

Prepared Statements를 사용하면 SQL 쿼리와 데이터가 분리되어 처리되기 때문에 SQL Injection 공격으로부터 안전하게 데이터를 삽입할 수 있어요. 조금 복잡해 보일 수 있지만, 안전을 위해서는 꼭! 사용해야 해요. 약속~!

데이터베이스 연결 종료

마지막으로, 데이터베이스 연결을 닫는 것을 잊지 마세요!


<?php
$conn->close(); // 연결 종료! (뒷정리도 깔끔하게!)
?>

이제 PHP를 사용하여 MySQL 데이터베이스에 데이터를 생성하는 방법을 아시겠죠? 다음에는 데이터를 조회하고 수정하는 방법에 대해 알아볼 거예요. 기대해 주세요!

 

데이터 조회 및 수정

자, 이제 드디어 두근두근! 데이터 조회와 수정에 대해 알아볼 시간이에요. 마치 보물상자를 열어보는 기분으로 시작해 볼까요? 앞서 데이터 생성까지 배웠으니 이제 그 데이터들을 어떻게 불러오고, 또 어떻게 바꿀 수 있는지 살펴보겠습니다. 데이터베이스 운영에 있어서 가장 빈번하게 사용되는 기능이니, 눈 크게 뜨고 따라와 주세요~!

SELECT 문: 데이터 조회

MySQL에서 데이터를 조회할 때 가장 많이 사용하는 명령어는 바로 SELECT입니다. 마치 마법의 주문처럼 원하는 데이터를 쏙쏙 골라 가져올 수 있게 해주죠. SELECT * FROM 테이블명처럼 사용하면 테이블의 모든 데이터를 가져올 수 있어요. 만약 특정 컬럼의 데이터만 보고 싶다면? SELECT 컬럼1, 컬럼2 FROM 테이블명처럼 원하는 컬럼명을 명시해 주면 됩니다. 간단하죠?

WHERE 절: 조건에 맞는 데이터 조회

여기서 잠깐! 데이터가 너무 많으면 어떻게 할까요? 걱정 마세요! WHERE 절을 사용하면 원하는 조건에 맞는 데이터만 쏙쏙 골라낼 수 있습니다. 예를 들어, SELECT * FROM users WHERE age > 20이라고 입력하면 나이가 20살 이상인 사용자의 데이터만 가져올 수 있죠. 마치 족집게처럼 원하는 데이터만 콕 집어 가져오는 마법 같지 않나요?

WHERE 절에서는 다양한 연산자를 사용할 수 있어요. =(같다), !=(같지 않다), >(크다), (작다), >=(크거나 같다), (작거나 같다) 등등… 상황에 맞게 적절한 연산자를 사용하면 됩니다. 그리고 AND, OR 연산자를 사용하면 여러 조건을 조합해서 더욱 복잡한 검색도 가능해요. 예를 들어, SELECT * FROM users WHERE age > 20 AND gender = '남'처럼 사용하면 20살 이상의 남성 사용자 데이터만 가져올 수 있습니다. 정말 편리하죠?!

UPDATE 문: 데이터 수정

자, 이제 데이터를 조회하는 방법을 알았으니 수정하는 방법도 알아봐야겠죠? 데이터 수정에는 UPDATE 명령어를 사용합니다. UPDATE 테이블명 SET 컬럼1 = 값1, 컬럼2 = 값2 WHERE 조건 형태로 사용하면 돼요. 예를 들어, UPDATE users SET age = 25 WHERE id = 1이라고 입력하면 id가 1인 사용자의 나이를 25살로 변경할 수 있습니다. 참 쉽죠?

하지만! UPDATE 명령어를 사용할 때는 항상 조심해야 해요! WHERE 절 없이 UPDATE 명령어를 사용하면 테이블의 모든 데이터가 변경될 수 있기 때문이죠. 그러니 실수로 데이터를 몽땅 날려버리는 불상사를 막기 위해 항상 WHERE 절을 사용해서 수정할 데이터를 정확하게 지정해 주는 습관을 들이는 것이 중요합니다! 명심 또 명심하세요!!

LIMIT과 OFFSET: 데이터 개수 및 시작 위치 지정

SELECT 문에는 다양한 기능들이 숨겨져 있는데, 그중에서도 LIMITOFFSET은 정말 유용해요! 특히 많은 양의 데이터를 다룰 때 페이지네이션을 구현하는 데 필수적이죠. 예를 들어, SELECT * FROM products LIMIT 10 OFFSET 20이라고 하면 21번째부터 30번째까지의 상품 데이터 10개를 가져옵니다. 이처럼 LIMIT은 가져올 데이터의 개수를, OFFSET은 시작 위치를 지정해 줍니다. 정말 똑똑한 기능이죠?

ORDER BY 절: 데이터 정렬

그리고 ORDER BY 절을 사용하면 특정 컬럼을 기준으로 데이터를 정렬할 수 있어요. SELECT * FROM products ORDER BY price ASC라고 하면 가격을 기준으로 오름차순으로 정렬된 상품 데이터를 가져올 수 있고, DESC를 사용하면 내림차순으로 정렬할 수 있죠. 데이터가 정렬되어 있으면 보기에도 편하고 분석하기에도 좋겠죠?

JOIN: 여러 테이블 연결

또 하나! JOIN은 여러 개의 테이블을 연결해서 데이터를 가져올 때 사용하는 강력한 기능입니다! 예를 들어, 상품 테이블과 카테고리 테이블을 연결해서 상품의 카테고리 정보까지 함께 가져오고 싶다면 JOIN을 사용하면 됩니다. JOIN에는 여러 종류가 있는데, 가장 많이 사용하는 것은 INNER JOIN입니다. INNER JOIN은 두 테이블에 모두 존재하는 데이터만 가져오는 방식이에요. 다른 종류의 JOIN도 있으니 필요에 따라 적절하게 사용하면 됩니다.

보안: SQL Injection 공격 예방

마지막으로, 데이터 조회 및 수정 시에는 보안에도 신경 써야 합니다. 특히 사용자로부터 입력받은 데이터를 사용할 때는 SQL Injection 공격에 취약해질 수 있으므로 주의해야 해요. Prepared Statement나 Stored Procedure를 사용하면 SQL Injection 공격을 예방할 수 있으니 꼭 기억해 두세요! 안전하게 데이터를 관리하는 것도 정말 중요하니까요!

이처럼 데이터 조회와 수정은 데이터베이스 운영의 핵심이라고 할 수 있어요. 다양한 명령어와 기능들을 잘 활용하면 원하는 데이터를 효율적으로 관리할 수 있답니다. 처음에는 조금 어렵게 느껴질 수도 있지만, 꾸준히 연습하다 보면 어느새 데이터베이스 마스터가 되어 있을 거예요! 화이팅! ^^

 

데이터 삭제와 주의사항

휴~ 드디어 CRUD의 마지막 단계, 데이터 삭제에 도착했네요! 데이터 생성, 조회, 수정까지 열심히 달려오셨으니 이제 마지막 스퍼트를 내볼까요? ^^ 데이터 삭제는 말 그대로 데이터베이스에서 특정 데이터를 제거하는 작업이에요. 간단해 보이지만, 실수하면 돌이킬 수 없는 결과를 초래할 수 있으니 항상 조심 또 조심해야 한답니다! 마치 날카로운 칼날 같다고 할까요?

자, 그럼 PHP와 MySQL을 이용해서 어떻게 데이터를 삭제하는지, 그리고 어떤 주의사항들이 있는지 하나씩 꼼꼼하게 살펴보도록 하겠습니다!

DELETE 문

MySQL에서 데이터를 삭제할 때 가장 많이 사용하는 명령어는 바로 DELETE 문이에요. DELETE FROM 테이블명 WHERE 조건 형식으로 사용하는데, WHERE 절을 꼭! 명시해 주셔야 해요. WHERE 절 없이 DELETE 문을 실행하면 테이블의 모든 데이터가 삭제되거든요! 생각만 해도 아찔하죠? 😨

예를 들어, users 테이블에서 id가 10인 사용자를 삭제하려면 다음과 같이 쿼리를 작성할 수 있어요.

DELETE FROM users WHERE id = 10;

PHP에서는 이 쿼리를 mysqli_query() 함수를 사용해서 실행할 수 있답니다.

$conn = mysqli_connect("localhost", "사용자명", "비밀번호", "데이터베이스명");

if (mysqli_connect_errno()) {
  die("데이터베이스 연결 실패: " . mysqli_connect_error());
}

$sql = "DELETE FROM users WHERE id = 10";

if (mysqli_query($conn, $sql)) {
  echo "데이터가 성공적으로 삭제되었습니다!";
} else {
  echo "데이터 삭제 실패: " . mysqli_error($conn);
}

mysqli_close($conn);

여기서 잠깐! mysqli_error() 함수는 쿼리 실행 중 발생한 오류 메시지를 반환해주는 고마운 친구예요. 오류가 발생했을 때 원인을 파악하는 데 큰 도움을 주죠. 개발할 때는 이런 디버깅 함수들을 적극 활용하는 습관을 들이는 게 좋아요! 👍

데이터 삭제 시 주의사항

자, 이제 데이터 삭제의 기본적인 방법은 알았으니, 실제 운영 환경에서는 어떤 주의사항들을 염두에 두어야 하는지 살펴볼까요?

  1. 백업은 필수!: 데이터 삭제는 복구가 어려운 작업이기 때문에 삭제 작업 전에 반드시 데이터베이스 백업을 해두는 것이 중요해요. 백업만 있다면 예상치 못한 상황에서도 안전하게 데이터를 복구할 수 있으니까요! 마치 안전벨트처럼 말이죠! 😉
  2. WHERE 절은 신중하게!: 앞서 말씀드렸듯이 WHERE 절을 잘못 작성하면 원치 않는 데이터까지 삭제될 수 있어요. 특히, WHERE 절 없이 DELETE 문을 실행하는 건 절대 금물! 🙅‍♀️ 실행 전에 쿼리를 다시 한번 확인하는 습관을 들이면 좋을 것 같아요.
  3. 트랜잭션 활용: 여러 개의 쿼리를 실행하는 경우, 트랜잭션을 사용하면 데이터의 일관성을 유지할 수 있어요. 만약 중간에 오류가 발생하면 모든 쿼리를 롤백하여 데이터베이스를 이전 상태로 되돌릴 수 있거든요. 트랜잭션은 데이터베이스의 안전장치 같은 역할을 한다고 생각하면 돼요. 🛡
  4. 테스트 환경 구축: 실제 운영 환경에서 바로 DELETE 쿼리를 실행하는 건 위험할 수 있어요. 테스트 환경을 구축하고 충분한 테스트를 거친 후에 운영 환경에 적용하는 것이 좋습니다. 테스트 환경은 마치 예행연습 무대와 같아요. 실수해도 괜찮으니 마음껏 연습할 수 있죠! 🎤
  5. 권한 관리 철저히!: 모든 사용자에게 데이터 삭제 권한을 부여하는 것은 보안상 매우 위험해요. 꼭 필요한 사용자에게만 권한을 부여하고, 권한을 최소화하는 것이 중요해요. 마치 금고의 비밀번호를 아무에게나 알려주지 않는 것과 같은 이치죠! 🔐

데이터 삭제는 양날의 검과 같아요. 잘 사용하면 데이터베이스 관리에 효율성을 더하지만, 잘못 사용하면 돌이킬 수 없는 결과를 가져올 수도 있죠. 오늘 알려드린 주의사항들을 잘 기억하고 실천한다면 데이터 삭제도 안전하고 효율적으로 할 수 있을 거예요! 😄 다음에는 더욱 흥미진진한 주제로 돌아오겠습니다! 기대해주세요~! 😉

 

자, 이렇게 PHPMySQL을 이용한 CRUD 기본기를 살펴봤어요! 어렵게 느껴졌던 데이터베이스 관리가 조금은 친숙하게 다가왔나요? 처음엔 복잡해 보일 수 있지만, CRUD 각각의 기능을 이해하고 나면 웹 개발의 핵심을 꿰뚫는 것과 같답니다. 직접 코드를 작성하고 실행하면서 데이터를 만들고, 읽고, 수정하고, 삭제하는 과정을 경험해보세요. 마치 마법처럼 데이터베이스를 자유자재로 다루는 자신의 모습을 발견하게 될 거예요. 앞으로 더 멋진 웹 서비스를 만들어갈 여러분을 응원하며, 다음에 또 유익한 정보로 찾아올게요!

 

Itlearner

Share
Published by
Itlearner

Recent Posts

리눅스란? 초보자 가이드

안녕하세요! 컴퓨터 세상에 발을 들여놓은 여러분을 환영해요! 혹시 리눅스라는 말, 들어보셨나요? 이름은 익숙한데 뭔가 어렵고…

1시간 ago

IPv6 개념과 활용법

안녕하세요, 여러분! 오늘은 인터넷 세상의 새로운 주소 체계, IPv6에 대해 함께 알아보는 시간을 가져보려고 해요.…

6시간 ago

클라우드 네트워크 설정 (AWS, Azure)

안녕하세요! 요즘 클라우드 시대라고 불릴 만큼 많은 기업들이 클라우드 서비스를 이용하고 있죠? 그런데 막상 클라우드를…

11시간 ago

네트워크 모니터링 도구 (Wireshark, NetFlow)

안녕하세요, 여러분! 오늘은 네트워크 관리자라면 누구나 궁금해할 만한 주제를 들고 왔어요. 바로 네트워크 모니터링 도구에…

15시간 ago

프록시 서버 설정 및 사용법

안녕하세요, 여러분! 오늘은 인터넷 서핑을 좀 더 쾌적하고 안전하게 만들어줄 프록시 서버에 대해 알아보는 시간을…

19시간 ago

포트 포워딩 설정하기

안녕하세요! 혹시 집 밖에서도 내 컴퓨터에 접속하고 싶었던 적 있으셨나요? 아니면 개인 서버를 운영하는데 외부…

24시간 ago

This website uses cookies.