본문 바로가기
개발/라라벨 Laravel

Laravel 에서 서비스 컨테이너 Service container 와 서비스 프로바이더 Service providers 의 개념에 대해서

by 언제나초심. 2018. 6. 10.
반응형

시작하기에 앞서

오늘은 여러가지 이유로 인해서, '서비스 프로바이더 Service providers' 와 '서비스 컨테이너 Service container' 에 대해서 살펴보게 되었습니다.

이 용어는 Laravel 에서의 Concept (개념) 용어 입니다.

한글로된 가이드는 https://laravel.kr/docs/5.5/container 가 있고, 영어로된 가이드는 https://laravel.com/docs/5.6/container 가 있습니다.

여러가지로 살펴보게 되었는데, 대체적으로 여기저기 검색해봐도 설명이 다소 어렵게 되어있는 것 같아서 꼼꼼히 살펴보게 되었습니다.

이 글은 다소 정제되지 않은 상태로 (퇴고하지 않은 상태로) 쓰여졌음을 먼저 양해바랍니다. (현재 사이트 개발 중이어서 시간이 없고 바쁘네요)

개념을 설명해야하기 때문에, 명사들은 여러가지 방향으로 번복적으로 사용해서 쓰더라도 양해 바랍니다.

 

그리고 Laravel 전문가는 아니기 때문에, 내용상 틀릴 수도 있습니다. 단지 제가 이해하고 있는 내용을 그대로 적어두는 것이기 때문에, 초심자에게 있어서 '이해를 도울 수 있는 다리' 또는 '새로운 관점' 정도로 부담없이 읽어주시기 바랍니다.

 

 

먼저 알아볼 개념용어들

어플리케이션 Application

아시는 내용이겠지만 간단히 짚어보려고 합니다. 스킵하셔도 됩니다.

 

'Software 개발' 에서는 여러가지 서비스가 묶여 있어서 동작되는 어떤 것을 Application 이라고도 부릅니다. 그 까닭에 한글로 번역 하면 '응용 소프트웨어' 라고 표현되기도 합니다.

 

웹사이트를 개발하기에 앞서서 '유저 관리', '통계 관리', '스케쥴링', '커넥션 관련', '다른 미디어 or 소셜과 통신' 등의 여러 기능들을 갖고 있을 수 있습니다. 이런 것들을 다 묶어서 하나의 묶음으로 'application' 으로 생각하게 됩니다. 사이트로서는 '사이트 이름' 으로 나뉘어지는 단위를 '어플리케이션 application' 으로 생각해도 되겠습니다.

(조금 더 나아가서 여러가지의 application 이 동작할 수 있는 것을 server 또는 operating system 이라고 부르겠지요.)

 

이것은 중요한 내용은 아닙니다. 추가적으로, 라라벨에서의 특징으로는 여기에 console 기능 같은 것도 application 에 붙어 있습니다.

 

부트스트래핑 bootstrap

시행되기 전까지의 과정에서 무언가를 하는 과정

이정도로만 이해해도 될 것 같습니다.

 

서비스 프로바이더 Service Providers

왜 있는 것일까 추측해보기

  • MVC 패턴이라서, Controller 가 각기 따로따로 이기 때문에, 공통적으로 처리해줄 것이 필요하다.
  • 각기 다른 Controller 마다 동일한 클래스를 호출하는 것은 뭔가 이상해보인다. (그리고 위험하게 느껴지고, 또한 수정시 피볼 것만 같다)
  • 뭔가 부트스트래핑 하는 과정에서 쉽게 넣고 빼고 할 수 있게 목록화 하면 어떨까

 

결론적으로 말해서는, 제가 이해한 개념으로는 아래와 같습니다.

'서비스할 것들' 을 '서비스 컨테이너 Service container' 에 등록하는 파일 (클래스)

 

이런 파일 (클래스) 들을 묶어서 'Service providers' 라고 표현하는 것 으로 생각이 되어지며, 이것은

config/app.php'providers 배열에 설정되어져 있습니다. (아마도 여기에 설정된 것만 이용하겠다는 것으로 보입니다. 사용 안 하려는 것은 여기서 제외하면 되겠지요.)

 

Service provider 와 관련된 설명을 좀 찾아보면, registerboot 메서드를 기본적으로 이용한다고 되어 있습니다. 이로서 추측을 해본다면, 아마도 bootstrapping 하는 과정에서 service providers 로 설정된 것을 읽을 것이고, service provider 파일의 register 나 boot 메서드에서는 '어떠한 구문 작성' 이 있을 것이다. 라고 짐작해볼 수 있을 것 같습니다.

 

register 메서드를 살펴보았는데, 여기서는 'service container' 에 등록하는 내용을 넣을 수 있다고 나와 있습니다.

 

여기서 Service container 의 개념을 같이 잡아볼 수가 있는데, 동작중인 서비스들이 있는 (혹은 클래스들을 로딩할 수 있게한) 어떤 개념적인 용어라고 볼 수 있습니다.

 

서비스 컨테이너 Service container

'서비스 컨테이너' 라는 용어 자체는 어렵게 생각할 필요는 없습니다. 그냥 ''서비스 들이 동작되는 어떤 공간이구나' 라고 생각하면 될 듯 합니다.

 

여기서는 Laravel 에서의 'Service container' 라는 것의 개념적 의미를 살펴볼 필요는 있습니다.

 

'다른 어딘가에서 Service container 에 등록 (bind 하거나 regist 하는)하고, Service container 를 통해서 이용하기 쉽게 한다.' 라는 개념으로 접근할 수 있습니다.

 

기술적 문서를 살펴보면, singleton 으로 바인딩하거나, instance 를 바인딩 하는 내용이 담겨져 있습니다. '서비스 컨테이너' 에 바인딩 하였다면, 향후 컨트롤러 같은 곳에서 이용할 수 있게 된다고 보면 됩니다.

 

 

정리하기

급하게 적느라, 내용이 잘 정리가 되었는지 모르겠습니다.

 

서비스 프로바이더 와 서비스 컨테이너 는 어느정도는 묶어서 이해하는 것이 좋을 듯 합니다.

  - 서비스 프로바이더 : '서비스 컨테이너'(나 비슷한 어떤 것)에 등록하기 위한 클래스 (또는 파일)
  - 서비스 컨테이너 : 객체 들이 적재되어 있는 어떠한 개념적인 공간 묶음.


반응형