Skip to main content

Laravel 인증 시스템의 내부 구조

Auth 파사드와 AuthManager

Auth 파사드는 Illuminate\Auth\AuthManager의 프록시입니다. AuthManager는 드라이버 패턴으로 여러 가드를 관리하며, config/auth.php 설정을 기반으로 적절한 가드 인스턴스를 생성하고 캐시합니다.
resolve()config/auth.phpguards 배열에서 driver 키를 읽어 대응하는 팩토리 클로저를 호출합니다. 기본 제공되는 session이나 token 드라이버도 동일한 구조로 등록되어 있습니다.

Guard 인터페이스와 StatefulGuard 인터페이스의 차이

Laravel 인증 가드는 최소한 Illuminate\Contracts\Auth\Guard를 구현해야 합니다. 세션을 유지해야 하는 경우에는 StatefulGuard를 구현합니다.
StatefulGuardGuard를 상속하며, 세션이나 쿠키를 사용한 로그인 상태 유지에 필요한 메서드를 추가합니다.
API 인증이나 자체 토큰 인증처럼 세션이 필요하지 않은 가드는 Guard만 구현하면 됩니다. 관리자 로그인처럼 세션이 필요한 경우에는 StatefulGuard를 구현합니다.

커스텀 가드 구현

GuardHelpers 트레이트

Guard 인터페이스의 check(), guest(), id(), hasUser()는 대부분 공통된 구현이 되기 때문에, Laravel은 Illuminate\Auth\GuardHelpers 트레이트를 제공합니다. 이 트레이트를 사용하면 필수 구현을 user()validate() 두 메서드로 줄일 수 있습니다.

API 토큰 인증 가드 구현 예제

TokenGuard의 설계를 참고하여 간단한 API 토큰 인증 가드를 구현합니다. 요청 헤더 또는 쿼리 파라미터에서 토큰을 가져와 UserProvider를 통해 사용자를 해석합니다.
1

가드 클래스 생성

app/Auth 디렉터리에 가드 클래스를 생성합니다.
2

서비스 프로바이더에서 가드 등록

AppServiceProviderboot() 메서드에서 Auth::extend()를 사용해 가드를 등록합니다.
Auth::createUserProvider()config/auth.phpproviders 설정을 읽어 해당하는 UserProvider 인스턴스를 반환합니다. 커스텀 프로바이더를 만들지 않는 한, 이 호출 방식으로 기본 EloquentUserProvider를 사용할 수 있습니다.
3

config/auth.php에서 가드 설정

config/auth.php에 새로운 가드를 추가합니다.
4

라우트에 가드 적용

auth 미들웨어에 가드 이름을 지정합니다.
컨트롤러나 코드 내에서 특정 가드를 사용하려면 Auth::guard('api') 또는 auth('api')를 호출합니다.

클로저를 이용한 간단한 가드

Auth::viaRequest()를 사용하면 클래스를 만들지 않고 클로저만으로 간단한 가드를 정의할 수 있습니다. 프로토타입이나 매우 단순한 인증에 적합합니다.
config/auth.php 설정:
Auth::viaRequest()로 정의한 가드는 UserProvider를 사용하지 않기 때문에 retrieveById()와 같은 프로바이더 메서드가 작동하지 않습니다. 프로덕션 환경에서는 Auth::extend()를 사용하는 클래스 기반 가드를 권장합니다.

커스텀 UserProvider 구현

사용자 정보를 데이터베이스가 아닌 다른 소스(외부 API, LDAP 등)에서 가져올 경우, Illuminate\Contracts\Auth\UserProvider 인터페이스를 구현합니다.

커스텀 UserProvider 등록

config/auth.phpproviders 섹션에 추가합니다:
가드와 프로바이더를 조합합니다:

실전 유스케이스

멀티 인증(관리자와 일반 사용자에 별도 가드)

1

관리자 모델 생성

관리자용 Eloquent 모델을 준비합니다. Authenticatable을 상속함으로써 Auth 시스템과 연동할 수 있습니다.
2

config/auth.php 설정

3

라우트와 미들웨어 설정

4

가드를 지정한 로그인 처리 작성

JWT 토큰을 이용한 외부 API 인증

외부 JWT 인증 서비스를 사용하는 경우의 커스텀 가드 구현 예제입니다.
AppServiceProvider에서 등록:
Auth::guard('jwt')->payload()처럼 커스텀 가드 고유의 메서드에도 접근할 수 있습니다. Auth::guard()가 반환하는 것은 가드 인스턴스 그 자체이므로, 인터페이스에 없는 메서드도 호출할 수 있습니다.

테스트

커스텀 가드의 유닛 테스트에서는 UserProvider를 목(mock)으로 만들어 가드의 동작을 확인합니다.
ActingAs를 사용한 기능 테스트에서는 특정 가드에 사용자를 설정할 수 있습니다.

관련 페이지

인증(입문)

스타터 킷과 표준 인증 흐름을 확인합니다.

서비스 컨테이너

가드 등록에서 사용하는 서비스 컨테이너의 구조를 이해합니다.
마지막 수정일 2026년 7월 13일