이 글은 소스 코드 조사(
1.x 브랜치)에 기반한 정보입니다. 공식 문서는 아직 존재하지 않으며, 정식 릴리스 전의 패키지입니다 (2026년 4월 시점).Sentinel이란
Laravel Sentinel은 라우트로의 접근을 드라이버 기반으로 제어하는 보안 미들웨어 패키지입니다. Taylor Otwell과 Mior Muhammad Zaki에 의해 개발되었으며, PHP ^8.0 / Laravel 8~13에 대응하고 있습니다. 주요 용도는 Telescope · Horizon · Pulse 같은 관리 도구 계열 라우트의 보호입니다.SentinelMiddleware를 라우트에 적용하는 것만으로, 드라이버가 정의한 인가 로직으로 접근을 제어할 수 있습니다.
기존 방법과의 비교
Telescope나 Horizon에는 각각gate를 사용한 인가 구조가 준비되어 있었습니다.
설치
composer.json의 extra.laravel.providers에 SentinelServiceProvider가 등록되어 있으므로, 서비스 프로바이더는 자동 감지됩니다. 추가 설정 파일 공개는 불필요합니다.
패키지의 아키텍처
기본 드라이버 (Laravel 드라이버)의 동작
기본Laravel 드라이버는 로컬 환경(APP_ENV=local)에서만 제어를 수행합니다.
프라이빗 IP의 판정
Driver 기저 클래스의 isPrivateIp()는 Symfony의 IpUtils를 사용하여, 이하의 IP 범위를 프라이빗 IP로 판정합니다.
Docker 로컬 환경 검출
REMOTE_ADDR이 127.0.0.1이고, 프로젝트 루트에 .dockerenv 파일이 존재하는 경우를 Docker 로컬 환경으로 판정합니다.
미들웨어로서 사용하기
기본 사용법
드라이버 지정
미들웨어의 인자로 드라이버 이름을 전달할 수 있습니다. 존재하지 않는 드라이버 이름을 전달한 경우에는 기본 드라이버로 폴백합니다 (driverOrFallback()의 동작).
미들웨어의 구현
authorize()가 false를 반환하면 HTTP 401로 중단합니다. Driver::authorizeOrFail()을 사용하면 AuthorizationException을 던질 수도 있습니다 (미들웨어 자체는 이것을 사용하지 않습니다).
커스텀 드라이버 작성
Driver 추상 클래스를 상속하여 authorize() 메서드를 구현함으로써 커스텀 드라이버를 만들 수 있습니다.
extend()의 등록은 AppServiceProvider::boot() 등에서 수행합니다.
기저 클래스의 유틸리티 메서드 활용
Driver 클래스에는 IP 판정 등의 편리한 메서드가 준비되어 있으며, 커스텀 드라이버에서 자유롭게 이용할 수 있습니다.
SentinelManager의 구조
SentinelManager는 Illuminate\Support\Manager를 상속하고 있습니다. Manager는 드라이버 패턴을 구현하기 위한 Laravel의 기반 클래스로, driver()로 드라이버 인스턴스를 캐시하면서 해결합니다.
driverOrFallback()은 지정한 드라이버가 발견되지 않는 경우에도 기본 드라이버로 조용히 폴백하므로, 미들웨어 인자에 존재하지 않는 드라이버 이름을 전달해도 오류가 나지 않습니다.
SentinelManager는 SentinelServiceProvider에 의해 스코프 부여 싱글톤(scoped)으로 등록되므로, 1요청 내에서 드라이버의 인스턴스가 재이용됩니다.
정리
laravel/sentinel은 작은 패키지이지만, Illuminate\Support\Manager를 사용한 드라이버 패턴에 의해 높은 확장성을 가집니다.
기본
Laravel 드라이버는 로컬 개발 시 터널링 서비스 경유의 접근을 방지하는 것에 특화되어 있으며, 프로덕션 환경의 보호에는 자체 커스텀 드라이버를 작성해야 합니다. 공식 문서가 정비되면 보다 구체적인 이용 패턴이 명확해질 것입니다.
laravel/sentinel 리포지토리
소스 코드와 최신 변경은 GitHub의
1.x 브랜치에서 확인할 수 있습니다.