Laravel 라우팅, 컨트롤러

Web 응용 프로그램에는 액세스하는 동안 처리를 할당되는 ‘라우팅’이라는 처리한다. 또한 액세스할 때에 구체적인 처리는 “컨트롤러"에서 한다. 이 두 기능의 기본에 대해 설명한다.

라우팅과 routes.php

Web 어플리케이션의 개발을 할 때 먼저 생각해야 하는 것은은 **라우팅(routing)**이다. 라우팅이란, 어떤 주소에 액세스하면 어떤 작업을 수행하는지를 할당하는 것이다.

프레임워크를 사용하지 않았을 때에는 Web 개발은 매우 간단했다. 공개 폴더에서 “myapp"라는 폴더에 helo.php라는 파일을 두면, /myapp/helo.php에 접속하면 그것이 호출되었다.

그런데 프레임워크에서는 그런 간단한 접근 방법은 하지 않는다. 응용 프로그램 전체를 프레임워크에 의해 제어하고, 필요한 경우에 프로그램을 호출 실행하도록 되어 있다. 이 주소에 액세스하면, 어떤 프로그램을 실행하고 어떤 파일을 표시할지에 대해서 프레임워크에서 모두 관리할 수 있게 되어 있는 것이다. 이렇게 하는 것이 라우팅이다.

이 라우팅은 app 안에 Http 폴더에 있는 routes.php 라는 파일에 의해 수행된다. 이 파일을 열면 아래 목록과 같은 스크립트가 적혀 있다.

여기에서는 2개의 static 메소드의 호출이 작성되어 있다. 정리하면, 아래와 같다.

Route::get(XX);
Route::group(XX);

라우팅은 이렇게 Route 라는 클래스에 포함되어 있는 static 메소드를 호출하는 것으로 설정한다. 이러한 방법은 다음과 같이 2개의 인수를 가지고 있다.

Route::메소드(값, 함수);

첫번째 인수가 라우팅에 할당되는 드레스 등의 정보를 나타내는 것이다. 이 값은 메소드에 의해 다소 내용이 다르다. get 메소드에는 주소를 나타내는 텍스트이며, group에서는 주소 정보를 정리한 배열되어 있기도 한다. (자세한 내용은 나중에)

그리고, 두번째 인수가 거기에 액세스 되었을 때 호출되는 처리이다. 이 함수에서 반환된 값이 해당 주소에 접근한 결과로 처리된다. 출력할 내용(텍스트)을 그대로 return해도 되고, HTML 등의 템플릿 파일을 반환하거나 컨트롤러의 호출 처리를 지정할 수 있다.

Route 클래스의 메소드

Route에 포함되어 있는 라우팅 설정을 위한 방법에 대해 간단하게 정리하고 설명한다.

Route::get(주소, 함수);

GET 액세스 되었을 때의 라우팅을 설정한다. 첫번째 인수는 할당 주소를 텍스트로 제공한다. 두번째 인수의 함수로 텍스트를 return하면 그것이 그대로 출력된다.

Route::post(주소, 함수);

POST 액세스 되었을 때의 라우팅을 설정한다. 기본적인 사용법은 get과 같다.

Route::put(주소, 함수);
Route::delete(주소, 함수);

HTTP에는 PUT, DELETE라는 액세스도 있다. 이는 수정 및 삭제를 위한 메소드이다.

Route :: any (주소, 함수);
Route :: match (배열, 주소, 함수);

여러 HTTP 메소드에 대응하기 위한 것이다. any는 모든 HTTP 메소드(GET, POST, PUT 및 DELETE)에 라우팅한다. match는 첫번째 인수에 HTTP 메소드명의 배열(예를 들어, ['get', 'post'])을 준비하고, 그 HTTP 메소드에 액세스하기 위해 라우팅한다.

그러면 간단한 예제를 만들어 보자. routes.php를 아래와 같이 코드를 추가한다.

Route::get('/helo', function () {
    return '<html><body><h1>Hello World</h1><p>this is sample page.</p></body></html>';
});

그리고 서버를 기동하고, 다음 주소를 방문하여 본다.

http://localhost:8000/helo

액세스하면 Hello World라는 제목의 페이지가 표시된다. 이것이 Route::get 메소드에서 생성된 표시이다.

예제를 보면, get 메소드의 첫번째 인자는 /helo로 지정되어 있다. 여기에 액세스하면, 두번째 인수의 함수에서 return되는 HTML 텍스트가 그대로 다시 전송 표시되는 것이다. 이렇듯 라우팅 기능만으로, 주소로 접근하여 화면에 무언가를 표시하는 것이 가능하다.

탬플릿 작성

Route 클래스 메소드에서의 return으로 HTML 코드를 텍스트로 제공하고 반환하는 방식으로는 복잡한 표시는 만들기 힘들 것이다. 아무래도 미리 HTML 파일을 준비해 두어, 그것을 로드하여 이용하는 방식이 쉬울 것이다.

Laravel에서는 화면 표시용 템플릿을 미리 준비해두고, 그것을 이용하여 화면 표시할 수 있다. 이 템플릿은 응용 프로그램의 resources 폴더에 있는 views 폴더에 배치한다.

그러면 간단한 템플릿을 만들어 보자. views 폴더에 helo.php 라는 이름으로 PHP 파일을 작성한다. 여기에 아래와 같이 소스 코드를 작성한다.

<!DOCTYPE html>
<html>
<head>
    <title>Sample</title>
    <style>
    body { color:gray; }
    h1 { font-size:18pt; font-weight:bold; }
    </style>
</head>
<body>
    <h1>Sample</h1>
    <p><?php echo $message; ?></p>
</body>

보면 알 수 있듯이 매우 간단한 HTML 코드이다. 그러나 중간에 한곳에만 PHP는 태그가 포함되어 있다.

<p><?php echo $message; ?></p>

이것으로 변수 $message 값을 출력한다. 템플릿은 이처럼 매우 일반적인 PHP 파일로 준비해 둔다. 특별한 것은 아무것도 없다.




최종 수정 : 2018-01-10