
PHP ์จ๋ผ์ธ ๊ฐ์
>PHP - ์ค๊ธ
๐ PHP ์ค๊ธ - 7์ฃผ์ฐจ: MVC ํจํด์ ์ดํด ๋ฐ ์ ์ฉ- 03 URL ๋ผ์ฐํ ๊ธฐ์ด
![]() |
ํ์ | 10.0 | ๋ผ์ด์ผ์ค | free |
---|---|---|---|---|
์ฌ์ฉ์ํ์ | 10.0 | ์ด์์ฒด์ | ||
๋ค์ด๋ก๋ | 1 | ํ์ผํฌ๊ธฐ | 0 | |
์ ์์ฌ | LUZENSOFT | ๋ฑ๋ก์ผ | 2025-08-11 13:09:08 | |
์กฐํ์ | 10 |
๐ PHP ์ค๊ธ - 7์ฃผ์ฐจ: MVC ํจํด์ ์ดํด ๋ฐ ์ ์ฉ- 03 URL ๋ผ์ฐํ ๊ธฐ์ด
#URL ๋ผ์ฐํ ์ด๋?
#์น ๊ฐ๋ฐ์์ #URL ๋ผ์ฐํ ์ ์ฌ์ฉ์๊ฐ ํน์ #URL์ ์์ฒญํ์ ๋, ํด๋น #์์ฒญ์ ์ด๋ค #์ปจํธ๋กค๋ฌ ๋๋ #ํจ์๋ก ์ฐ๊ฒฐํ ์ง ๊ฒฐ์ ํ๋ ๊ณผ์ ์ ๋๋ค. ์ด๋ #MVC(#Model-View-Controller) #ํจํด์์ #์์ฒญ์ ์ฒ๋ฆฌํ๋ ํต์ฌ์ ์ธ ๋ถ๋ถ์ด๋ฉฐ, #์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
#๊ธฐ๋ณธ์ ์ธ ๋ผ์ฐํ ์๋ฆฌ
๊ฐ์ฅ ๊ฐ๋จํ ํํ์ ๋ผ์ฐํ
์ ๋ค์ด์ค๋ ๋ชจ๋ #URL #์์ฒญ์ ํ๋์ #PHP #ํ์ผ(์: index.php
)๋ก ์ง์ค์ํค๋ ๊ฒ์
๋๋ค. ์ด ํ์ผ์ **"ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller)"**๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์ด ํ์ผ์ ์์ฒญ๋ #URL์ ๋ถ์ํ์ฌ ์ ์ ํ #๋ก์ง์ ์คํํฉ๋๋ค.
#๋ผ์ฐํ ๊ท์น ๋ง๋ค๊ธฐ
์ฐ๋ฆฌ๋ #URL์ ๋ถํ ํ์ฌ #๋ผ์ฐํ
#๊ท์น์ ๋ง๋ค ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, /products/123
์ด๋ผ๋ #URL์ด ๋ค์ด์๋ค๊ณ ๊ฐ์ ํด ๋ด
์๋ค. ์ด #URL์ ๋ค์๊ณผ ๊ฐ์ด ํด์๋ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ๋ถ๋ถ (
/products
): #์ปจํธ๋กค๋ฌ ๋๋ #๋ชจ๋์ ๋ํ๋ ๋๋ค.๋ ๋ฒ์งธ ๋ถ๋ถ (
/123
): #๋์(#Action) ๋๋ #๋งค๊ฐ๋ณ์๋ฅผ ๋ํ๋ ๋๋ค.
์ด๋ฅผ ํตํด products
#์ปจํธ๋กค๋ฌ์ show
#๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ , 123
์ #๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
#URL ๋ผ์ฐํ ๊ตฌํ ์์
๊ฐ๋จํ #URL ๋ผ์ฐํ
์ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ .htaccess
ํ์ผ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ #์์ฒญ์ index.php
๋ก ๋ณด๋ด๋๋ก ์ค์ ํฉ๋๋ค.
.htaccess ํ์ผ
Apache
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
์ ์ฝ๋๋ ์ค์ ์กด์ฌํ๋ #ํ์ผ์ด๋ #๋๋ ํฐ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ชจ๋ #์์ฒญ์ index.php
๋ก ์ ๋ฌํฉ๋๋ค.
index.php ํ์ผ
PHP
<?php
// ์์ฒญ๋ URL์ ๊ฐ์ ธ์ต๋๋ค.
$request_uri = $_SERVER['REQUEST_URI'];
// URL์ / ๊ธฐ์ค์ผ๋ก ๋ถํ ํฉ๋๋ค.
$uri_segments = explode('/', trim($request_uri, '/'));
// ๋ผ์ฐํ
๋ก์ง ์์
$controller_name = 'home';
$action_name = 'index';
$params = [];
if (!empty($uri_segments[0])) {
$controller_name = $uri_segments[0];
}
if (!empty($uri_segments[1])) {
$action_name = $uri_segments[1];
}
if (count($uri_segments) > 2) {
$params = array_slice($uri_segments, 2);
}
// ์์ ์ฉ ์ปจํธ๋กค๋ฌ ํธ์ถ
$controller_class = ucfirst($controller_name) . 'Controller';
$controller_file = 'controllers/' . $controller_class . '.php';
if (file_exists($controller_file)) {
require_once $controller_file;
$controller = new $controller_class();
if (method_exists($controller, $action_name)) {
call_user_func_array([$controller, $action_name], $params);
} else {
echo "404 Not Found: Action '{$action_name}' not found.";
}
} else {
echo "404 Not Found: Controller '{$controller_class}' not found.";
}
?>
์ ์์ ๋ #URL์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ #์ปจํธ๋กค๋ฌ ์ด๋ฆ์ผ๋ก, ๋ ๋ฒ์งธ ๋ถ๋ถ์ #๋ฉ์๋ ์ด๋ฆ์ผ๋ก ๋งคํํ๋ ๊ฐ๋จํ #๋ผ์ฐํ #๋ก์ง์ ๋ณด์ฌ์ค๋๋ค.
#์ ๋ฆฌ
#URL ๋ผ์ฐํ ์ #MVC #ํจํด์ ์ค์ํ ์์๋ก์, #URL๊ณผ #์ ํ๋ฆฌ์ผ์ด์ #๋ก์ง์ ๋ถ๋ฆฌํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด #์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. ์ด ์์ ๋ฅผ ํตํด ๊ธฐ๋ณธ์ ์ธ #๋ผ์ฐํ ์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ๋ ๋ณต์กํ #ํ๋ ์์ํฌ์ ๋ผ์ฐํ ์์คํ ์ ๋ํ ๊ธฐ๋ฐ์ ๋ค์ง ์ ์์ต๋๋ค.
๋ธ๋ก๊ทธKT๊ณ ์ , ์ผํ/์ง๋ ๋ง์ผํ KT์ ๋, ๊ฒ์/์ฑํ๋ ์ด์ด ๊ณ ์ IP, 24์๊ฐ์๋ด ๋๋๊ตฌ๋งค ์ ํ ์ธํํ ์ ๊ณต!
https://xn--299ao67b9qbmsf04c.net/