Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발 기록

Laravel 이해하고 쓰자(서비스 프로바이더/ 파사드) 본문

웹 자료/Laravel

Laravel 이해하고 쓰자(서비스 프로바이더/ 파사드)

기록개발자 2020. 5. 20. 10:31

이 글은 서비스 프로바이더와 파사드의 개념 이해를 위해 작성됐습니다.

 

서비스 프로바이더(Service Provider)

공식문서의 서비스 프로바이더 정의

서비스 프로바이더는 라라벨 애플리케이션의 부팅(부트스트래핑)의 가장 핵심이라고 할 수 있습니다. 여러분의 애플리케이션과 마찬가지로 라라벨의 모든 코어 서비스는 서비스 프로바이더를 통해서 부트스트래핑 됩니다.

그런데 "부트스트래핑" 이란 과연 무엇을 의미하는 것일까요? 일반적으로는 서비스 컨테이너에 바인딩을 등록하는 것을 포함해서 이벤트 리스너, 미들웨어 그리고 라우트등을 등록 하는 것을 의미합니다.(Laravel을 이해하고 쓰자(시작/서비스 컨테이너)에 부트스트래핑 설명을 기재해두었다) 서비스 프로바이더는 애플리케이션 구성의 핵심입니다.

라라벨에 포함되어 있는 config/app.php 파일을 열어 본다면 providers 배열을 볼 수 있을 것입니다. 배열 안에 있는 모든 서비스 프로바이더 클래스가 애플리케이션에 로드됩니다. 대부분의 프로바이더는 "지연된" 프로바이더입니다. 이 말은 모든 요청에 대해서 반드시 로드되지 않고 실제로 필요할 때에 로드 된다는 것을 의미합니다.

 

간단히 말하자면, 서비스 프로바이더의 역할은 서비스컨테이너에 바인딩을 등록하는 역할을 합니다.


공식문서의 예제를 보도록 하겠습니다.

<?php 

namespace App\Providers; 

use Riak\Connection; 
use Illuminate\Support\ServiceProvider; 

class RiakServiceProvider extends ServiceProvider 
{ 
    /** 
     * Register bindings in the container. 
     * 
     * @return void 
     */ 
    public function register() 
    { 
        $this->app->singleton(Connection::class, function ($app) { 
            return new Connection(config('riak')); 
        }); 
    } 
} 

RiakServiceProvider클래스를 만들고  ServiceProvider를 상속받습니다.
그후 register 메서드를 작성하고 그안에 $this-app을 이용하여 서비스 컨테이너에 등록하고 싶은 클래스를 등록합니다.

 

boot 메소드는 모든 서비스프로바이더의 register가 작업을 수행한 뒤 실행됩니다.

부트스트래핑 과정에 필요한 작업이 있다면 작성하여 사용 하면 됩니다.
마지막으로 config/app.php에 서비스 프로바이더를 등록하여 사용하면 됩니다.

 

파사드

공식문서의 파사드 정의

파사드는 애플리케이션의 서비스 컨테이너에서 사용가능한 클래스들에 대한 "정적" 인터페이스를 제공합니다. 라라벨은 대부분의 라라벨의 기능에 엑세스하는 많은 파사드들을 제공합니다. 라라벨의 파사드 는 서비스 컨테이너에 등록된 클래스들에 대한 일종의 "정적 프록시" 역할을 수행하는데, 이를 통해서 전통적인 정적 메소드 보다 간결한 문법과 테스트의 용이성 그리고 코드의 유연성을 유지하는 이점을 제공합니다.

 

간단히 말하자면, static 메서드의 제공입니다.

보통 클래스들은 static을 붙여 정적 클래스를 제공하지만, 파사드를 사용하면 static을 붙이지 않고서도 정적메서드로써 사용가능합니다.

class Test extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return "test";
    }
}

위의 예제는 Facade클래스를 상속받아, getFacadeAccessor메서드 안에 정적클래스로 사용하고싶은 클래스를 작성해 줍니다.

과정을 말하자면, 우선 Test 클래스는 파사드 클래스를 상속받아 getFacadeAccessor메서드 안에 정적클래스로 사용하고싶은 클래스를 작성해 줍니다. 그 후 return 값을 이용하여 서비스컨테이너로부터 test 라는 이름의 바인딩 객체를 찾아 메소드를 호출합니다.

즉, 파사드를 사용하기 위해선 서비스 프로바이더의 등록도 필요하다는 것을 알수 있습니다.

그리고 파사드도 config/app.php에 이름을 등록하여 사용해 줍니다.

 

많은 도움을 받았습니다. 감사합니다.

https://kbseung12345.tistory.com/30?category=709818

 

[laravel 기초공부] 라라벨 - 03 (서비스 프로바이더 파사드)

안녕하세요 오늘은 서비스 프로바이더와 파사드에 대해 알아보도록 하겠습니다. 서비스 프로바이더의 역할은 서비스컨테이너에 바인딩을 등록하는 역할을 합니다. 프로바이더는 register 와 boot

kbseung12345.tistory.com

https://laravel.kr/docs/5.7/facades

 

라라벨 5.7 - 파사드

라라벨 한글 메뉴얼 5.7 - 파사드

laravel.kr