Laravel 컨트롤러: 웹 애플리케이션 로직의 관문

안녕하세요, 미래의 Laravel 개발자 여러분! 오늘 우리는 Laravel 컨트롤러의 세계를 함께 탐험할 것입니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 이 중요한 웹 개발 부분을 안내해 드리겠습니다. 그러니 마음에 드는 음료를 골라 편안하게 앉아, 함께 들어보겠습니다!

Laravel - Controllers

컨트롤러는 무엇인가요?

코딩을 시작하기 전에 컨트롤러가 무엇인지 이해해 보겠습니다. 집을 짓는 것을 상상해 보세요. 기초는 데이터베이스이고, 벽과 지붕은 뷰입니다. 그런데 모든 것이 작동하는 전기 회로는 어떻게 되는 걸까요? 그게 바로 컨트롤러입니다! Laravel 애플리케이션의 뇌로서, 사용자 요청을 처리하고 어떻게 응답할지 결정합니다.

컨트롤러 생성하기

우리는 첫 번째 컨트롤러를 생성해 보겠습니다. Laravel에서는 artisan 명령어 라인 도구를 사용하여 컨트롤러를 생성합니다. 마법의 지팡이처럼 코드를 생성해 주는 것 같아요!

php artisan make:controller MyFirstController

이 명령어는 app/Http/Controllers 디렉토리에 새로운 파일 MyFirstController.php를 생성합니다. 내용을 살펴보겠습니다:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class MyFirstController extends Controller
{
//
}

이것이 컨트롤러의 기본 구조입니다. 우리가 애플리케이션 로직을 그려넣을 수 있는 비어 있는 캔버스입니다!

컨트롤러에 메서드 추가하기

이제 컨트롤러에 메서드를 추가해 보겠습니다:

public function hello()
{
return 'Hello, World!';
}

이 간단한 메서드는 문자열을 반환합니다. 실제 애플리케이션에서는 일반적으로 뷰나 JSON 데이터를 반환하지만, 작은 것부터 시작해 보겠습니다.

컨트롤러 미들웨어

Laravel의 미들웨어는 클럽의 보안원처럼입니다. 사용자가 애플리케이션의 특정 부분에 접근할 수 있는지 확인할 수 있습니다. 컨트롤러에 미들웨어를 추가해 보겠습니다:

public function __construct()
{
$this->middleware('auth')->only('secretPage');
}

public function secretPage()
{
return 'This is a secret page!';
}

이 예제에서는 인증된 사용자만 secretPage 메서드에 접근할 수 있습니다. 애플리케이션의 VIP 영역과 같습니다!

RESTful 리소스 컨트롤러

RESTful 컨트롤러는 REST 원칙에 따라 컨트롤러 액션을 정리하는 방법입니다. Laravel은 이러한 컨트롤러를 쉽게 생성할 수 있습니다:

php artisan make:controller ProductController --resource

이 명령어는 인덱스, 생성, 저장, 보여주기, 편집, 업데이트, 삭제 액션의 메서드를 포함한 컨트롤러를 생성합니다. 사전에 지어진 집을 짓는 것과 같습니다!

다음은 RESTful 메서드와 그에 해당하는 HTTP 동사의 표입니다:

HTTP 동사 URI 액션 라우트 이름
GET /products index products.index
GET /products/create create products.create
POST /products store products.store
GET /products/{id} show products.show
GET /products/{id}/edit edit products.edit
PUT/PATCH /products/{id} update products.update
DELETE /products/{id} destroy products.destroy

암시적 컨트롤러

암시적 컨트롤러는 URI에 기반하여 컨트롤러 메서드를 자동으로 라우트에 매핑하는 방법입니다. 현대적인 Laravel 애플리케이션에서는 흔히 사용되지 않지만, 존재하는 것을 알아 두는 것이 좋습니다:

Route::controller('users', 'UserController');

이렇게 하면 GET 요청이 /users에 자동으로 index 메서드로 매핑되고, POST 요청은 store 메서드로 매핑됩니다.

생성자 주입

Laravel의 강력한 의존성 주입 컨테이너는 컨트롤러 생성자에 의존성을 타입-힌트할 수 있게 해줍니다. 피자를 주문하고 모든 토핑이 자동으로 추가되는 것과 같습니다!

use App\Repositories\UserRepository;

class UserController extends Controller
{
protected $users;

public function __construct(UserRepository $users)
{
$this->users = $users;
}
}

이제 Laravel이 UserController 인스턴스를 생성할 때마다 UserRepository 인스턴스를 자동으로 주입합니다.

메서드 주입

생성자 주입과 유사하게, 우리는 컨트롤러 메서드에 의존성을 주입할 수도 있습니다:

use Illuminate\Http\Request;

public function store(Request $request)
{
$name = $request->input('name');
// 사용자를 저장...
}

이 경우 Laravel은 Request 객체를 자동으로 주입하여 모든 입력 데이터에 쉽게 접근할 수 있게 해줍니다.

결론

그렇습니다, 여러분! 우리는 Laravel 컨트롤러의 세계를 함께 여행했습니다. 생성부터 의존성 주입까지. 컨트롤러는 Laravel 애플리케이션의 심장으로서, 모델과 뷰 간의 조정을 담당합니다.

마무리하면서, 제가 한 학생한테 들은 말이 떠오릅니다. "컨트롤러를 배우는 것은 운전을 배우는 것과 같아요.처음에는 복잡해 보이지만, 한 번 익숙해지면 어디로든 갈 수 있어요!" 맞아요, 컨트롤러를 마스터하면 웹 개발의 무한한 가능성을 열어줍니다.

계속 연습하고, 코딩을 계속하며, 가장 중요한 것은 즐겁게 만들어 나가세요! 다음에 다시 만날 때까지, 행복한 Laravel 개발을 기원합니다!

Credits: Image by storyset