고양이 여름이의 지식채널

Laravel 에러 핸들링, exception custom(예외처리) 설정 방법 본문

Programming/Laravel

Laravel 에러 핸들링, exception custom(예외처리) 설정 방법

썸머캣 2023. 3. 5. 19:31

Laravel은 응용프로그램 실행 중에 발생할 수 있는 다양한 유형의 오류 및 예외를 탐지하고 처리할 수 있는 강력한 error handling을 제공합니다. 

다음은 Laravel error handling을 사용하고 필요에 맞게 사용자 정의할 수 있는 방법입니다.


예외 처리 (Handling Exceptions)

예외(exception)가 Laravel에 던져지면(throw) App\Exceptions\Handler class가 처리하며, 해당 class는 응용 프로그램이 처리하지 않는 모든 예외를 포착하고 처리하는 역할을 합니다.

 

Laravel이 예외를 처리하는 방법을 사용자 정의하려면  App\Exceptions\Handler class 를 상속(extend)하고 해당 render method을 재정의하여 처리합니다. 렌더 메서드(render)는 예외를 클라이언트로, 다시 전송되는 HTTP 응답으로 변환하는 역할을 합니다.

 

다음은 Laravel에서 사용자 정의 exception handler를 만드는 방법의 예입니다.

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class CustomExceptionHandler extends ExceptionHandler
{
    public function render($request, Exception $exception)
    {
        if ($exception instanceof CustomException) {
            return response()->json([
                'message' => 'An error occurred: ' . $exception->getMessage(),
            ], 500);
        }

        return parent::render($request, $exception);
    }
}

 

App\Exceptions\Handler 클래스를 상속(extends)하는 사용자 지정 error 핸들러를 만듭니다. render method를 재정의하고 던져진 예외가 사용자 지정의 인스턴스인지 확인하는 코드입니다.
- 사용자 정의 오류 메시지와 500 상태 코드를 포함한 JSON 응답을 반환, 그렇지 않으면 상위 render method를 호출하여 예외를 기본 방식으로 처리합니다.

 

 

사용자 지정 error 핸들러를 사용하려면 class를 사용하도록 App\Exceptions\Handler 클래스를 설정 해줘야 합니다. Handler class 의 $renderers 배열을 업데이트하여 이 작업을 수행할 수 있습니다.

namespace App\Exceptions;

use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{
    protected $renderers = [
        CustomException::class => CustomExceptionHandler::class,
    ];
    
    // ...
}

Laravel Handler class의 $renderers 배열에 커스텀한 error handler와 exception class를 선언해줘야 사용가능합니다.

 

 

 

반응형

 

커스텀 exception (Creating Custom Exceptions)

Laravel에서 사용자 지정 exception을 만들려면 Exception class 를 상속(extends)하는 새 class 를 만들기만 하면 됩니다
다음은 Laravel에서 사용자 지정 예외를 만드는 방법의 예입니다.

namespace App\Exceptions;

use Exception;

class CustomException extends Exception
{
    //
}

이 class 는 코드의 아무 곳에나 던져질 수 있으며 이전에 만든 handler 에 의해 잡히게 됩니다.

 

exception 사용

코드에서 exception 을 사용하려면 오류가 발생할 때 사용자 지정(custom) exception class 의 인스턴스를 던지기만 하면 됩니다.
다음은 Laravel에서 exception(예외)를 발생시키는 방법의 예입니다.

namespace App\Http\Controllers;

use App\Exceptions\CustomException;
use Illuminate\Http\Request;

class ExampleController extends Controller
{
    public function example(Request $request)
    {
        if ($request->input('param') === null) {
            throw new CustomException('Parameter "param" is required.');
        }

        // ...
    }
}

 

report & render

Laravel에서 Exception 클래스는 예외를 처리하기 위한 두 가지 주요 methods인 report method와 render method를 제공합니다.

use Exception;
use Illuminate\Validation\ValidationException;
use Illuminate\Auth\Access\AuthorizationException;

class CustomException extends Exception
{
    public function report(Exception $exception)
	{
        if ($exception instanceof CustomException) {
            // 로그 기록 방식이나 보고 방식을 지정 할 수 있다.
            Log::channel('custom')->error($exception->getMessage());
        }

        parent::report($exception);
	}
    
    public function render($request, Exception $exception)
    {
        if ($exception instanceof CustomException) {
            // 예외처리 되는 메시지나 http 상태코드를 지정 할 수 있다.
            return response()->json([
                'error' => $exception->getMessage(),
            ], 400);
        }

        return parent::render($request, $exception);
    }

}
  • report

report method는 해당 exception이 발생하면 내용을 기록하거나 보고하는데 사용됩니다. 기본적으로 storage/logs/laravel.log 파일에 로그가 기록되도록 설정되어있지만  report method를 재정의하여 커스텀 할 수도 있습니다. (ex. 이메일이 발송되도록 하거나 DB에 기록을 남기도록 처리할수 있다)

 

  • render

render method는 예외를 클라이언트로 다시 전송하는 HTTP 응답으로 변환하는 데 사용됩니다. 기본적으로 라라벨의 예외 핸들러는 모든 예외를 HTTP상태 코드가 500으로 반환하게 되어있지만 커스텀 하여 에러에 맞게끔 message나 HTTP 코드를 내려줄수가 있습니다.

 

::

Laravel의 error 핸들링은 응용프로그램에서 예외를 탐지하고 처리할 수 있는 강력하고 유연한 방법을 제공합니다. custom exception 과 custom error handler 를 만들어 오류 발생 방식을 사용자 지정할 수 있습니다.


 

 

Laravel middleware 동작 원리 & 설정 방법 (라라벨 미들웨어)

 

Laravel middleware 동작 원리 & 설정 방법 (라라벨 미들웨어)

미들웨어는 라라벨의 요청과 응답 사이에서 실행되는 코드 종류이며. 컨트롤러 메서드가 호출되기 전에 실행되는 명령 집합입니다. 미들웨어는 응용프로그램에 들어오는 HTTP 요청을 필터링하

summer-cat93.tistory.com

 

 

728x90
반응형
Comments