개발 지식

개발 지식

PHP PHP에서 커스텀 예외 처리 체계 설계하기

페이지 정보

profile_image
영삼이
0건 170회 25-03-28 23:10

본문

✅ PHP에서 커스텀 예외 처리 체계 설계하기

실무에서 예외(Exception)를 아무렇게나 처리하면 버그를 숨기거나, 로그가 뒤섞이거나, 사용자에게 부정확한 오류 메시지를 줄 수 있습니다. 이 글에서는 PHP에서 체계적인 커스텀 예외 처리 구조를 설계하는 방법을 다룹니다.


🎯 왜 커스텀 예외가 필요한가?

  • 의미 있는 예외 클래스명으로 오류 의도 명확화

  • 예외 유형에 따라 다른 대응 가능 (ex. 사용자 오류 vs 시스템 오류)

  • 로깅, 트랜잭션 롤백 등 예외 흐름 통제 용이


🧱 커스텀 예외 클래스 만들기

[code=php]
namespace App\Exception;

class UserNotFoundException extends \Exception {}
[/code]
  • \Exception 또는 \RuntimeException 등 상속

  • 상황별로 세분화된 예외 클래스를 정의


🔧 서비스 계층에서 예외 던지기

[code=php]
use App\Exception\UserNotFoundException;

class UserService {
    public function findUser(int $id): User {
        $user = $this->repo->findById($id);
        if (!$user) {
            throw new UserNotFoundException("ID {$id} 사용자를 찾을 수 없습니다.");
        }
        return $user;
    }
}
[/code]

⚙️ 컨트롤러에서 예외 처리

[code=php]
try {
    $user = $userService->findUser(42);
    echo "사용자 이름: " . $user->name;
} catch (UserNotFoundException $e) {
    http_response_code(404);
    echo $e->getMessage();
} catch (Exception $e) {
    http_response_code(500);
    echo '알 수 없는 오류 발생';
}
[/code]
  • 예외 유형에 따라 다른 응답 제공

  • 공통 처리기는 프레임워크 미들웨어로도 구성 가능


📁 계층 구조 예시

src/
├── Exception/
│   ├── AppException.php
│   ├── UserNotFoundException.php
│   ├── ValidationException.php

AppException을 베이스로 상속 구성

[code=php]
class AppException extends \Exception {}

class ValidationException extends AppException {}
class UserNotFoundException extends AppException {}
[/code]

→ 공통 처리 시 AppException으로 묶어서 핸들링 가능


🧠 요약

  • 예외는 의미 단위로 클래스 분리하라

  • 서비스/도메인 계층에서 예외를 명확하게 던져라

  • 컨트롤러나 미들웨어에서 일관된 방식으로 처리하라

  • 예외 흐름 설계는 코드 유지보수성과 신뢰성의 핵심


댓글목록

등록된 댓글이 없습니다.