
PHP ๊ฐ์
>PHP - ์ค๊ธ
๐ PHP ์ค๊ธ - 3์ฃผ์ฐจ: ๊ฒ์ํ CRUD ๊ตฌํ (๊ธฐ๋ณธ) - 01 ๊ฒ์ํ ํ ์ด๋ธ ์ค๊ณ
![]() |
ํ์ | 10.0 | ๋ผ์ด์ผ์ค | free |
---|---|---|---|---|
์ฌ์ฉ์ํ์ | 10.0 | ์ด์์ฒด์ | ||
๋ค์ด๋ก๋ | 1 | ํ์ผํฌ๊ธฐ | 0 | |
์ ์์ฌ | LUZENSOFT | ๋ฑ๋ก์ผ | 2025-07-20 18:34:31 | |
์กฐํ์ | 7 |
๐ 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๊ณผ ํจ๊ป ์์ ํ๊ณ ์์ ๋ก์ด ์ธํฐ๋ท์ ๋ง๋ฝํ์ธ์!