PHP PHP에서 커스텀 예외 처리 체계 설계하기
페이지 정보

영삼이
본문
✅ 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
으로 묶어서 핸들링 가능
🧠 요약
-
예외는 의미 단위로 클래스 분리하라
-
서비스/도메인 계층에서 예외를 명확하게 던져라
-
컨트롤러나 미들웨어에서 일관된 방식으로 처리하라
-
예외 흐름 설계는 코드 유지보수성과 신뢰성의 핵심
- 이전글PHP에서 리플렉션(Reflection)의 고급 활용법 25.03.28
- 다음글실무에서 쓸 수 있는 PHP 성능 최적화 체크리스트 25.03.28
댓글목록
등록된 댓글이 없습니다.