애플리케이션에서 사용하는 서비스를 등록하고, 프레임워크의 다른 부분에서 이를 사용할 수 있게끔 해주는 것입니다.
이를 위해 서비스 프로바이더는 'register' 메소드를 사용하여 애플리케이션에서 사용할 서비스를 등록하고, 'boot' 메소드를 사용하여 등록된 서비스와 다른 서비스, 설정 또는 기능을 연결하거나 초기화합니다.
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() 메소드에서는 이벤트 리스너 등록, 라우트 등록, 모델 관계 설정, 뷰 컴포저 등록, 캐시 설정 등과 같은 작업을 수행합니다.
이 메소드는 모든 다른 서비스 프로바이더들이 등록된 이후에 호출됩니다. 즉, 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 배열이 포함되어 있습니다. 프로바이더들을 등록하려면 이 배열에 추가 하면 됩니다.