PHP

PHP에서 라우팅 구현하기

thebasics 2024. 9. 26. 10:00

목차
1. 라우팅이란 무엇인가?
   - 라우팅의 개념
   - 라우팅의 중요성
2. 간단한 라우터 작성
   - 기본적인 라우터 구조
   - 라우터 예제 구현
3. 외부 라우팅 라이브러리 사용 (AltoRouter)
   - AltoRouter 설치 및 설정
   - AltoRouter로 라우팅 구현
4. 코드 예제
5. 결론 및 추가 학습 자료


1. 라우팅이란 무엇인가?

라우팅의 개념

라우팅(Routing)은 웹 애플리케이션에서 사용자가 요청한 URL을 해석하여 해당 요청을 처리할 적절한 코드(주로 컨트롤러와 메서드)를 호출하는 과정을 말합니다. 예를 들어, 사용자가 'example.com/about' 페이지에 접근하면, 라우터는 이 요청을 처리할 'AboutController'를 호출하고, 그 결과를 사용자에게 반환합니다.

라우팅의 중요성

- URL 구조 관리: 라우팅을 통해 사용자 친화적인 URL 구조를 관리할 수 있으며, SEO(검색 엔진 최적화)에도 도움이 됩니다.
- 유지보수성 향상: 코드의 분리와 조직화를 도와 유지보수가 용이해집니다.
- 코드 재사용성: 동일한 컨트롤러 메서드를 다양한 URL에서 호출할 수 있어 코드 재사용성을 높입니다.


2. 간단한 라우터 작성

기본적인 라우터 구조

간단한 라우터는 URL 패턴과 이를 처리할 콜백 함수 또는 컨트롤러 메서드를 매핑하여 구성됩니다. 요청된 URL을 분석하고, 매핑된 함수나 메서드를 호출하는 방식으로 동작합니다.

라우터는 다음과 같은 기본 구조로 작성할 수 있습니다:

1. 요청된 URL을 분석: PHP의 '$_SERVER['REQUEST_URI']' 변수를 사용하여 현재 요청된 URL을 가져옵니다.
2. URL과 패턴 매칭: 미리 정의된 URL 패턴과 현재 URL을 비교하여 일치하는 패턴을 찾습니다.
3. 콜백 함수 실행: 일치하는 패턴이 발견되면 해당 콜백 함수나 컨트롤러 메서드를 실행합니다.

라우터 예제 구현

간단한 라우터를 작성해보겠습니다.

// public/index.php
<?php

$requestUri = trim($_SERVER['REQUEST_URI'], '/');

$routes = [
    '' => function() {
        echo "Home Page";
    },
    'about' => function() {
        echo "About Page";
    },
    'contact' => function() {
        echo "Contact Page";
    }
];

if (array_key_exists($requestUri, $routes)) {
    $routes[$requestUri]();
} else {
    echo "404 Not Found";
}
?>

이 예제에서 'routes' 배열은 URL과 콜백 함수를 매핑합니다. 사용자가 '/about' 페이지를 요청하면, "About Page"를 출력하는 콜백 함수가 실행됩니다. 매핑되지 않은 URL에 대해선 "404 Not Found" 메시지가 출력됩니다.


3. 외부 라우팅 라이브러리 사용 (AltoRouter)

AltoRouter 설치 및 설정

AltoRouter는 PHP에서 사용할 수 있는 가벼운 라우팅 라이브러리로, 간단한 설정으로 강력한 라우팅 기능을 제공합니다.

Composer를 통한 설치:

composer require altorouter/altorouter

설치 후, 'vendor/autoload.php' 파일을 프로젝트에 로드하여 AltoRouter를 사용할 수 있습니다.

AltoRouter로 라우팅 구현

AltoRouter를 사용하여 라우팅을 구현하는 예제를 살펴보겠습니다.

// public/index.php
<?php

require '../vendor/autoload.php';

$router = new AltoRouter();

// 기본 URL 설정 (필요에 따라 베이스 경로 설정 가능)
$router->setBasePath('/');

// 라우트 정의
$router->map('GET', '/', function() {
    echo "Home Page";
});

$router->map('GET', '/about', function() {
    echo "About Page";
});

$router->map('GET', '/contact', function() {
    echo "Contact Page";
});

$router->map('GET', '/user/[i:id]', function($id) {
    echo "User ID: " . $id;
});

// 매칭된 라우트를 실행
$match = $router->match();

if ($match && is_callable($match['target'])) {
    call_user_func_array($match['target'], $match['params']);
} else {
    // 404 에러 처리
    header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
    echo "404 Not Found";
}
?>

이 예제에서는 AltoRouter를 사용하여 여러 URL에 대해 라우트를 정의했습니다. '/user/[i:id]' 패턴은 정수('i') 형식의 'id'를 URL 매개변수로 받아 처리합니다. 예를 들어, '/user/42'를 요청하면 "User ID: 42"가 출력됩니다.


4. 코드 예제

다음은 간단한 라우터와 AltoRouter를 사용하여 PHP에서 라우팅을 구현하는 예제입니다.

1. 간단한 라우터:

// public/index.php
<?php

$requestUri = trim($_SERVER['REQUEST_URI'], '/');

$routes = [
    '' => function() {
        echo "Home Page";
    },
    'about' => function() {
        echo "About Page";
    },
    'contact' => function() {
        echo "Contact Page";
    }
];

if (array_key_exists($requestUri, $routes)) {
    $routes[$requestUri]();
} else {
    echo "404 Not Found";
}
?>

2. AltoRouter를 사용한 라우팅:

// public/index.php
<?php

require '../vendor/autoload.php';

$router = new AltoRouter();

$router->setBasePath('/');

// 기본 페이지 라우팅
$router->map('GET', '/', function() {
    echo "Home Page";
});

$router->map('GET', '/about', function() {
    echo "About Page";
});

$router->map('GET', '/contact', function() {
    echo "Contact Page";
});

// URL 패턴에 매개변수 사용
$router->map('GET', '/user/[i:id]', function($id) {
    echo "User ID: " . $id;
});

// 매칭된 라우트를 실행
$match = $router->match();

if ($match && is_callable($match['target'])) {
    call_user_func_array($match['target'], $match['params']);
} else {
    header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
    echo "404 Not Found";
}
?>

코드 분석:
- 첫 번째 예제는 간단한 PHP 라우터를 구현하여 요청된 URL에 따라 적절한 콜백 함수를 호출합니다.
- 두 번째 예제는 AltoRouter를 사용하여 더 복잡한 라우팅을 처리하며, 정수형 매개변수를 포함한 URL 패턴을 지원합니다.


5. 결론 및 추가 학습 자료

이번 글에서는 PHP에서 라우팅을 구현하는 방법에 대해 알아보았습니다. 간단한 라우터부터 시작하여 AltoRouter와 같은 외부 라이브러리를 사용하여 강력한 라우팅 기능을 구현할 수 있었습니다. 라우팅을 통해 URL을 체계적으로 관리하고, 사용자 요청을 효율적으로 처리할 수 있습니다.

추가 학습 자료:
- [PHP The Right Way](https://phptherightway.com/) PHP 애플리케이션에서 대한 가이드입니다.

- [freeCodeCamp 문서](https://www.freecodecamp.org/news/how-to-build-a-routing-system-in-php/) PHP 앱용 라우팅 시스템을 처음부터 구축하는 방법입니다.
- [AltoRouter 공식 문서](https://altorouter.com/) AltoRouter의 설치 및 사용법에 대한 자세한 문서입니다.
- [PHP Routing Basics](https://www.taniarascia.com/the-simplest-php-router/) PHP로 라우팅을 구현하는 기본 개념을 다룬 튜토리얼입니다.


이제 라우팅을 사용하여 PHP 애플리케이션을 더욱 효율적이고 체계적으로 개발할 수 있습니다. 실습을 통해 다양한 라우팅 시나리오를 경험하고, 프로젝트에 적용해보세요!

반응형

'PHP' 카테고리의 다른 글

PHP에서 이벤트와 리스너 사용하기  (0) 2024.09.28
PHP에서 의존성 주입(DI) 사용하기  (1) 2024.09.27
PHP로 MVC 패턴 구현하기  (6) 2024.09.25
PHP에서 PSR 표준 적용하기  (2) 2024.09.24
PHP에서 PDO 사용하기  (0) 2024.09.23