์จ๋ผ์ธ ๊ฐ์
>PHP - ์ค๊ธ
๐ PHP ์ค๊ธ - 3์ฃผ์ฐจ: ๊ฒ์ํ CRUD ๊ตฌํ (๊ธฐ๋ณธ) - 01 ๊ฒ์ํ ํ ์ด๋ธ ์ค๊ณ
				์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
 - ๋ผ์ด์ ์ค: free
 - ์ด์์ฒด์ :
 - ํ์ผ ํฌ๊ธฐ: 0
 
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
 - ๋ค์ด๋ก๋ ์: 1
 - ์กฐํ์: 45
 
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
 - ๋ฑ๋ก์ผ: 2025-07-20 18:34:31
 
- ์ค๋ช
๐ PHP ์ค๊ธ - 3์ฃผ์ฐจ: ๊ฒ์ํ CRUD ๊ตฌํ (๊ธฐ๋ณธ) - 01 ๊ฒ์ํ ํ ์ด๋ธ ์ค๊ณ
์๋ ํ์ธ์! #PHP ์ค๊ธ ๊ณผ์  3์ฃผ์ฐจ, #๊ฒ์ํ #CRUD ๊ตฌํ์ ์ฒซ ๋ฒ์งธ ์๊ฐ์ ๋๋ค. ์ง๋ ์๊ฐ์๋ #ํ์๊ฐ์ ๋ฐ #๋ก๊ทธ์ธ ์์คํ ์ ํตํด #์ฌ์ฉ์ #์ธ์ฆ๊ณผ #์ธ์  #๊ด๋ฆฌ์ ๊ธฐ์ด๋ฅผ ๋ค์ก์ต๋๋ค. ์ด์ ๋ #์ฌ์ฉ์๋ค์ด ์์ ๋กญ๊ฒ #๊ฒ์๋ฌผ์ ์์ฑํ๊ณ ์กฐํํ๋ฉฐ ์ํตํ ์ ์๋ #๊ฒ์ํ ๊ธฐ๋ฅ์ ๋ง๋ค์ด ๋ณผ ์ฐจ๋ก์ ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ #๊ฒ์ํ #๊ตฌํ์ ์ฒซ๊ฑธ์์ด์ ๊ฐ์ฅ ์ค์ํ ๋จ๊ณ์ธ #๋ฐ์ดํฐ๋ฒ ์ด์ค #ํ ์ด๋ธ #์ค๊ณ์ ๋ํด ์์ธํ ๋ค๋ฃฐ ๊ฒ์ ๋๋ค. #ํจ์จ์ ์ด๊ณ #์์ ์ ์ธ #๊ฒ์ํ์ ๋ง๋ค๊ธฐ ์ํ #ํ ์ด๋ธ #๊ตฌ์กฐ์ ๊ฐ #์ปฌ๋ผ์ ์ญํ , ๊ทธ๋ฆฌ๊ณ #๋ฐ์ดํฐ #ํ์ ์ ์  ๊ธฐ์ค๊น์ง, #์ค์  #์ฝ๋์ ํจ๊ป ์์ธํ ์ค๋ช ํด ๋๋ฆด๊ฒ์.
1. ๊ฒ์ํ ๊ธฐ๋ฅ ๋ถ์ ๋ฐ ์๊ตฌ์ฌํญ ์ ์
#๊ฒ์ํ #ํ ์ด๋ธ์ #์ค๊ณํ๊ธฐ ์ ์, ์ฐ๋ฆฌ๊ฐ ๋ง๋ค #๊ฒ์ํ์ด ์ด๋ค ๊ธฐ๋ฅ์ ์ ๊ณตํด์ผ ํ ์ง ๋ช ํํ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ธ #๊ฒ์ํ์ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๋๋ค.
#๊ฒ์๋ฌผ #์์ฑ (Create): #์ฌ์ฉ์๊ฐ #์ ๋ชฉ, #๋ด์ฉ, #์์ฑ์ ๋ฑ์ ์ ๋ ฅํ์ฌ ์๋ก์ด #๊ฒ์๋ฌผ์ ์์ฑํฉ๋๋ค.
#๊ฒ์๋ฌผ #์กฐํ (Read): #์ฌ์ฉ์๊ฐ ์์ฑ๋ #๊ฒ์๋ฌผ ๋ชฉ๋ก์ ํ์ธํ๊ณ , ํน์  #๊ฒ์๋ฌผ์ #์์ธ #๋ด์ฉ์ ๋ณผ ์ ์์ต๋๋ค. #์กฐํ์ ์ฆ๊ฐ ๊ธฐ๋ฅ๋ ํ์ํฉ๋๋ค.
#๊ฒ์๋ฌผ #์์  (Update): #์์ฑ์ ๋ณธ์ธ๋ง ์์ ์ #๊ฒ์๋ฌผ์ ์์ ํ ์ ์์ต๋๋ค.
#๊ฒ์๋ฌผ #์ญ์  (Delete): #์์ฑ์ ๋ณธ์ธ ๋๋ #๊ด๋ฆฌ์๋ง #๊ฒ์๋ฌผ์ ์ญ์ ํ ์ ์์ต๋๋ค.
#๋๊ธ (์ ํ ์ฌํญ): #๊ฒ์๋ฌผ์ ๋ํ #๋๊ธ์ ์์ฑํ๊ณ ์กฐํํ ์ ์์ต๋๋ค (์ด๋ฒ ๊ธฐ๋ณธ ๊ณผ์ ์์๋ ๋ค๋ฃจ์ง ์์ต๋๋ค).
#ํ์ผ #์ฒจ๋ถ (์ ํ ์ฌํญ): #๊ฒ์๋ฌผ์ #ํ์ผ์ ์ฒจ๋ถํ ์ ์์ต๋๋ค.
์ด๋ฌํ #์๊ตฌ์ฌํญ์ ๋ฐํ์ผ๋ก #๊ฒ์๋ฌผ์ ์ ์ฅํ #ํ ์ด๋ธ์ #๊ตฌ์กฐ๋ฅผ ๊ตฌ์ํด ๋ณผ ์ ์์ต๋๋ค.
2. ๊ฒ์ํ ํ ์ด๋ธ ์ค๊ณ (posts ํ ์ด๋ธ)
#๊ฒ์ํ #๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ  #ํ
์ด๋ธ์ ์ด๋ฆ์ posts (๊ฒ์๋ฌผ๋ค)๋ผ๊ณ  ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ์ด #ํ
์ด๋ธ์๋ ๊ฐ #๊ฒ์๋ฌผ์ ๋ํ ๊ณ ์ ํ ์ ๋ณด๊ฐ ์ ์ฅ๋ฉ๋๋ค.
SQL
CREATE TABLE posts (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INT(11) NOT NULL,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    views INT(11) DEFAULT 0,
    -- FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
    -- ์ ์ฃผ์์ user_id๊ฐ users ํ
์ด๋ธ์ id๋ฅผ ์ฐธ์กฐํ๋ ์ธ๋ํค์์ ๋ํ๋
๋๋ค.
    -- ์ค์  ์ฌ์ฉ ์, users ํ
์ด๋ธ์ด ๋จผ์  ์กด์ฌํด์ผ ํฉ๋๋ค.
);
๊ฐ ์ปฌ๋ผ์ ๋ํ ์ค๋ช
id(INT, NOT NULL, AUTO_INCREMENT, PRIMARY KEY)#๊ฒ์๋ฌผ๋ง๋ค ๋ถ์ฌ๋๋ ๊ณ ์ ํ ๋ฒํธ์ ๋๋ค.
INT: ์ ์ํ์ผ๋ก, #๊ฒ์๋ฌผ ๋ฒํธ๋ฅผ ์ ์ฅํฉ๋๋ค.NOT NULL: ๋น์ด ์์ ์ ์์ต๋๋ค.AUTO_INCREMENT: ์๋ก์ด #๊ฒ์๋ฌผ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ์๋์ผ๋ก 1์ฉ ์ฆ๊ฐํฉ๋๋ค.PRIMARY KEY: #ํ ์ด๋ธ ๋ด์์ ๊ฐ #๊ฒ์๋ฌผ์ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ๊ธฐ๋ณธ ํค์ ๋๋ค.
user_id(INT, NOT NULL)์ด #๊ฒ์๋ฌผ์ ์์ฑํ #์ฌ์ฉ์์ ๊ณ ์ #ID๋ฅผ ์ ์ฅํฉ๋๋ค.
users#ํ ์ด๋ธ์id#์ปฌ๋ผ๊ณผ ์ฐ๊ฒฐ๋๋ #์ธ๋ ํค(Foreign Key) ์ญํ ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ด๋ค #์ฌ์ฉ์๊ฐ ์ด๋ค #๊ฒ์๋ฌผ์ ์์ฑํ๋์ง ํ์ ํ ์ ์์ต๋๋ค.NOT NULL: #๊ฒ์๋ฌผ์ ๋ฐ๋์ #์์ฑ์๊ฐ ์์ด์ผ ํฉ๋๋ค.
title(VARCHAR(255), NOT NULL)#๊ฒ์๋ฌผ์ #์ ๋ชฉ์ ์ ์ฅํฉ๋๋ค.
VARCHAR(255): ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด๋ก ์ต๋ 255์๊น์ง ์ ์ฅํ ์ ์์ต๋๋ค. #์ ๋ชฉ์ ์ผ๋ฐ์ ์ผ๋ก ์งง์ผ๋ฏ๋ก ์ถฉ๋ถํ ๊ธธ์ด์ ๋๋ค.NOT NULL: #์ ๋ชฉ์ ๋ฐ๋์ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
content(TEXT, NOT NULL)#๊ฒ์๋ฌผ์ #๋ณธ๋ฌธ #๋ด์ฉ์ ์ ์ฅํฉ๋๋ค.
TEXT: ๊ธด ํ ์คํธ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ #๋ฐ์ดํฐ #ํ์ ์ ๋๋ค.VARCHAR๋ณด๋ค ํจ์ฌ ๊ธด ํ ์คํธ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.NOT NULL: #๋ด์ฉ์ ๋ฐ๋์ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
created_at(DATETIME, DEFAULT CURRENT_TIMESTAMP)#๊ฒ์๋ฌผ์ด #์์ฑ๋ ๋ ์ง์ ์๊ฐ์ ์ ์ฅํฉ๋๋ค.
DATETIME: ๋ ์ง์ ์๊ฐ์YYYY-MM-DD HH:MM:SSํ์์ผ๋ก ์ ์ฅํฉ๋๋ค.DEFAULT CURRENT_TIMESTAMP: #๊ฒ์๋ฌผ์ด ์ฝ์ ๋ ๋ ์๋์ผ๋ก ํ์ฌ ์๊ฐ์ด ์ ์ฅ๋ฉ๋๋ค.
updated_at(DATETIME, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)#๊ฒ์๋ฌผ์ด #๋ง์ง๋ง์ผ๋ก #์์ ๋ ๋ ์ง์ ์๊ฐ์ ์ ์ฅํฉ๋๋ค.
DATETIME: ๋ ์ง์ ์๊ฐ์ ์ ์ฅํฉ๋๋ค.DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP: #๊ฒ์๋ฌผ์ด ์ฝ์ ๋ ๋๋ ํ์ฌ ์๊ฐ์ด ์ ์ฅ๋๊ณ , ์ดํ #๊ฒ์๋ฌผ์ด #์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ์๋์ผ๋ก ํ์ฌ ์๊ฐ์ผ๋ก ๊ฐฑ์ ๋ฉ๋๋ค.
views(INT, DEFAULT 0)#๊ฒ์๋ฌผ์ #์กฐํ์๋ฅผ ์ ์ฅํฉ๋๋ค.
INT: ์ ์ํ์ผ๋ก, #์กฐํ์๋ฅผ ์ ์ฅํฉ๋๋ค.DEFAULT 0: ์๋ก์ด #๊ฒ์๋ฌผ์ด ์์ฑ๋๋ฉด #์กฐํ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก 0์ผ๋ก ์์ํฉ๋๋ค.
3. users ํ ์ด๋ธ๊ณผ์ ๊ด๊ณ (์ธ๋ํค ์ค์ )
์ฐ๋ฆฌ๊ฐ ์ง๋์ฃผ์ ๊ตฌํํ๋ #ํ์๊ฐ์
 ์์คํ
์ users #ํ
์ด๋ธ๊ณผ posts #ํ
์ด๋ธ์ user_id #์ปฌ๋ผ์ ํตํด ์ฐ๊ฒฐ๋ฉ๋๋ค. ์ด๋ #๊ด๊ณํ #๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํต์ฌ ๊ฐ๋
์
๋๋ค.
user_id #์ปฌ๋ผ์ users #ํ
์ด๋ธ์ id #์ปฌ๋ผ๊ณผ #์ธ๋ ํค๋ก ์ฐ๊ฒฐํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ด ์์ต๋๋ค.
#๋ฐ์ดํฐ #๋ฌด๊ฒฐ์ฑ ์ ์ง:
posts#ํ ์ด๋ธ์user_id๋ ๋ฐ๋์users#ํ ์ด๋ธ์ ์กด์ฌํ๋id์ฌ์ผ ํฉ๋๋ค. (์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ)#๋ฐ์ดํฐ #์ฐ๊ฒฐ์ฑ: ํน์  #์ฌ์ฉ์๊ฐ ์์ฑํ ๋ชจ๋ #๊ฒ์๋ฌผ์ ์ฝ๊ฒ ์กฐํํ ์ ์์ต๋๋ค. (์:
SELECT * FROM posts WHERE user_id = [์ฌ์ฉ์_ID];)
posts #ํ
์ด๋ธ ์์ฑ ์ FOREIGN KEY ์ ์ฝ ์กฐ๊ฑด์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. (users #ํ
์ด๋ธ์ด ๋จผ์  ์์ฑ๋์ด ์์ด์ผ ํฉ๋๋ค.)
SQL
CREATE TABLE posts (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INT(11) NOT NULL,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    views INT(11) DEFAULT 0,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
    -- user_id๊ฐ users ํ
์ด๋ธ์ id๋ฅผ ์ฐธ์กฐํ๋ฉฐ, users ํ
์ด๋ธ์ ํด๋น ์ฌ์ฉ์๊ฐ ์ญ์ ๋๋ฉด
    -- ์ด ์ฌ์ฉ์๊ฐ ์์ฑํ ๊ฒ์๋ฌผ๋ ํจ๊ป ์ญ์ ๋๋๋ก ์ค์  (CASCADE)
    -- ON DELETE RESTRICT (๊ธฐ๋ณธ๊ฐ): ์ฐธ์กฐํ๋ ๋ ์ฝ๋๊ฐ ์์ผ๋ฉด ์ญ์  ๋ถ๊ฐ
    -- ON DELETE SET NULL: ์ฐธ์กฐํ๋ ๋ ์ฝ๋๊ฐ ์ญ์ ๋๋ฉด user_id๋ฅผ NULL๋ก ์ค์  (user_id๊ฐ NULL ํ์ฉํด์ผ ํจ)
);
ON DELETE CASCADE๋ #์ฌ์ฉ์ #๊ณ์ ์ด ์ญ์ ๋  ๋ ํด๋น #์ฌ์ฉ์๊ฐ ์์ฑํ ๋ชจ๋  #๊ฒ์๋ฌผ๋ ์๋์ผ๋ก ์ญ์ ๋๋๋ก ์ค์ ํ๋ ๊ฐ๋ ฅํ ์ต์
์
๋๋ค. ์ํฉ์ ๋ฐ๋ผ ON DELETE RESTRICT (์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์๋ฐฐ ์ ์ญ์  ๋ถ๊ฐ) ๋๋ ON DELETE SET NULL (์ฐธ์กฐ ๋ ์ฝ๋ ์ญ์  ์ user_id๋ฅผ NULL๋ก) ๋ฑ์ ์ฌ์ฉํ  ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์ด๋ฒ ํฌ์คํ
์์๋ #PHP #๊ฒ์ํ #CRUD ๊ตฌํ์ ์ํ ์ฒซ ๋จ๊ณ๋ก posts #ํ
์ด๋ธ์ #์ค๊ณํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์์ต๋๋ค. ๊ฐ #์ปฌ๋ผ์ #๋ฐ์ดํฐ #ํ์
๊ณผ ์ญํ , ๊ทธ๋ฆฌ๊ณ  #์ฌ์ฉ์ #ํ
์ด๋ธ๊ณผ์ #์ธ๋ ํค ๊ด๊ณ ์ค์ ์ ํตํด #๊ฒ์ํ์ #๋ผ๋๋ฅผ #๊ฒฌ๊ณ ํ๊ฒ ๋ง๋ค์์ต๋๋ค.
#ํ ์ด๋ธ #์ค๊ณ๋ #์ ํ๋ฆฌ์ผ์ด์ ์ #์ฑ๋ฅ๊ณผ #์ ์ง๋ณด์์ฑ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก, ์ ์คํ๊ฒ ์ ๊ทผํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์ ์๊ฐ์๋ ์ด๋ ๊ฒ #์ค๊ณ๋ #ํ ์ด๋ธ์ ๋ฐํ์ผ๋ก #๊ฒ์๋ฌผ์ #์์ฑํ๋ #๊ธฐ๋ฅ (Create)์ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค.
PHP ์ค๊ธ ๊ฒ์ํ CRUD ํ ์ด๋ธ ์ค๊ณ posts user_id title content created_at updated_at views ์ธ๋ํค ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๊ณํ CASCADE
๋ฃจ์ VPN: ๋น์ ์ ์์ ํ ์จ๋ผ์ธ ๋๋ฐ์!
#VPN์์ ์์๊ถ ๋ฃจ์ VPN์ผ๋ก #๊ตฌ๊ธVPN, #๊ฐค๋ญ์VPN, #๋ ธํธ๋ถVPN ๋ฑ ์ด๋ค ๊ธฐ๊ธฐ์์๋ ์์ฝ๊ฒ #VPN์ฌ์ฉ๋ฒ ์ตํ๊ณ #VPN์ฐํ ๊ฒฝํํ์ธ์. #์ค๊ตญ์ถ์ฅVPN ์ด ํ์ํ ๋, ๋ณต์กํ #VPN์๋ฆฌ ๊ณ ๋ฏผ ์์ด #VPN์ดํ ์ด๋ #VPN์ฑ (PC/๋ชจ๋ฐ์ผ ๋ชจ๋ ์ง์) ํ๋๋ก ๋! #TOUCHVPN, #TURBOVPN ๋ชป์ง์์ ๊ฐ๋ ฅํ ์ฑ๋ฅ์ #VPN์ฒดํ ํด๋ณด์ธ์. ๋ค์ํ #VPN์ข ๋ฅ ์ค ๋จ์ฐ ๋๋ณด์ด๋ ๋ฃจ์ VPN! (PROTON VPN๋ ์ข์ง๋ง!) ์ง๊ธ ๋ฐ๋ก ๋ฃจ์ VPN๊ณผ ํจ๊ป ์์ ํ๊ณ ์์ ๋ก์ด ์ธํฐ๋ท์ ๋ง๋ฝํ์ธ์!