라라벨 서비스 프로바이더

hannni·2023년 5월 16일
0

Laravel

목록 보기
13/16

🔎 서비스 프로바이더

애플리케이션에서 사용하는 서비스를 등록하고, 프레임워크의 다른 부분에서 이를 사용할 수 있게끔 해주는 것입니다.
이를 위해 서비스 프로바이더는 'register' 메소드를 사용하여 애플리케이션에서 사용할 서비스를 등록하고, 'boot' 메소드를 사용하여 등록된 서비스와 다른 서비스, 설정 또는 기능을 연결하거나 초기화합니다.

✏️ Register 메소드

register 메소드에서는 보통 서비스 컨테이너에 *바인딩을 등록하거나, *싱글톤으로 서비스를 등록하는 등의 작업을 수행합니다. 이 메소드는 프로바이더가 로드될 때 자동으로 호출되며, 라라벨 애플리케이션이 실행되기 전에 필요한 서비스 등록을 수행할 수 있도록 합니다.

예를 들어, 데이터베이스 연결을 위한 서비스를 등록하려는 경우, register 메소드에서 다음과 같은 코드를 작성할 수 있습니다:

public function register()
{
    $this->app->bind('database', function ($app) {
        return new DatabaseConnection($app['config']['database']);
    });
}

'database'라는 이름으로 바인딩을 등록하고, 익명 함수를 통해 실제로 인스턴스를 생성하고 반환합니다. 이렇게 등록된 서비스는 애플리케이션 전체에서 app('database')와 같이 사용하여 액세스할 수 있습니다.

바인딩(binding)은 객체를 Laravel 애플리케이션의 서비스 컨테이너에 등록하는 작업을 말합니다. 이것은 객체의 인스턴스를 만들고, 해당 인스턴스를 필요로 하는 다른 클래스나 코드에서 사용할 수 있도록 해줍니다.

싱글톤(singleton)은 애플리케이션에서 단 하나의 인스턴스만을 가지도록 하는 디자인 패턴입니다. Laravel에서는 바인딩을 등록할 때 singleton 메소드를 사용하여 해당 클래스의 싱글톤 인스턴스를 생성할 수 있습니다. 이렇게 하면 애플리케이션에서 해당 객체에 대한 요청이 있을 때마다 동일한 인스턴스가 반환됩니다. 새로운 인스턴스를 생성하는 것이 아니라, 이전에 생성된 인스턴스가 반환되기 때문에 메모리를 절약하고 객체 인스턴스의 일관성을 유지할 수 있습니다.

✏️ Boot 메소드

boot() 메소드는 일반적으로 라라벨 애플리케이션을 초기화하는 작업들을 수행하게 됩니다. 보통 boot() 메소드에서는 이벤트 리스너 등록, 라우트 등록, 모델 관계 설정, 뷰 컴포저 등록, 캐시 설정 등과 같은 작업을 수행합니다.

이 메소드는 모든 다른 서비스 프로바이더들이 등록된 이후에 호출됩니다. 즉, register 메소드가 실행되는 시점에는 다른 서비스 프로바이더가 등록되지 않았기 때문에, 다른 서비스에 액세스할 수 없습니다. 하지만, boot 메소드는 모든 서비스가 등록된 이후에 실행되기 때문에, 다른 등록된 서비스들에 대한 접근이 가능합니다.

뷰 컴포저

서비스 프로바이더 안에서 뷰 컴포저를 등록하는 작업은 boot 메소드 안에서 해야합니다.

public function boot()
    {
        View::composer('view', function () {
            //Your Code
        });
    }

📖 서비스 프로바이더 작성하기

php artisan make:provider RiakServiceProvider

make:provider 명령어를 통해서 새로운 프로바이더를 생성할 수 있습니다.

📖 프로바이더 등록하기

'providers' => [
    // Other Service Providers
    App\Providers\ComposerServiceProvider::class,
],

모든 서비스 프로바이더들은 config/app.php 설정 파일에 등록되어 있습니다. 이 파일에는 서비스 프로바이더들의 클래스 이름을 나열하고 등록할 수 있는 providers 배열이 포함되어 있습니다. 프로바이더들을 등록하려면 이 배열에 추가 하면 됩니다.

출처 : https://laravel.kr/docs/9.x/providers

0개의 댓글