|
8 | 8 |
|
9 | 9 | - Syntax Version: JDK 17 (Preview)
|
10 | 10 | - Docker Compose (Download: [Docker Desktop](https://www.docker.com/products/docker-desktop/))
|
| 11 | +# Features |
11 | 12 |
|
12 |
| -# 기능 |
| 13 | +**확장성 있는 에러코드 설계를 제공합니다.** |
| 14 | +대부분의 기능은 예시이므로, 종종 필요 이상으로 구현되거나 너무 간단한 구현을 제공할 수 있습니다. |
| 15 | + |
| 16 | +## Interface Error Code |
| 17 | + |
| 18 | +에러코드는(`ErrorCode`) 리소스나 기능 단위로 분류할 수 있습니다. |
| 19 | +커스텀 예외는(`CustomException`) 런타임 예외로 생성되며, 에러코드를 핸들링합니다. |
| 20 | + |
| 21 | +| Class | Description | |
| 22 | +|:----------------------------:|:-----------------------------------------------------------------------------| |
| 23 | +| (I) Error Code | 모든 에러 코드의 상위 타입입니다. **_<ins>여러 `enum` 에러 코드에 구현하여 확장성 있는 구조를 제공합니다.</ins>_** | |
| 24 | +| (C) Custom Exception | 모든 커스텀 예외들의 상위 타입 역할을 합니다. | |
| 25 | + |
| 26 | +**Example** |
| 27 | + |
| 28 | +```mermaid |
| 29 | +--- |
| 30 | +config: |
| 31 | + theme: 'forest' |
| 32 | +--- |
| 33 | +classDiagram |
| 34 | +class ErrorCode { |
| 35 | + <<interface>> |
| 36 | + +message() String |
| 37 | + +httpStatus() HttpStatus |
| 38 | + +exception() RuntimeException |
| 39 | + +exception(Throwable) RuntimeException |
| 40 | + +exception(Runnable) RuntimeException |
| 41 | + +exception(Runnable, Throwable) RuntimeException |
| 42 | + +exception(Supplier<Map<...>>) RuntimeException |
| 43 | + +exception(Supplier<Map<...>>, Throwable) RuntimeException |
| 44 | +} |
| 45 | +
|
| 46 | +class CustomException { |
| 47 | + -errorCode: ErrorCode |
| 48 | + -action: Runnable |
| 49 | + -payloadSupplier: Supplier<Map<...>> |
| 50 | + |
| 51 | + +getErrorCode() ErrorCode |
| 52 | + +executeOnError() void |
| 53 | + +getPayload() Map<...> |
| 54 | + +getPayloadOrElse(Map<...>) Map<...> |
| 55 | + +getPayloadOrElseGet(Supplier<Map<...>>) Map<...> |
| 56 | +} |
| 57 | +
|
| 58 | +class BoardErrorCode { |
| 59 | + <<enumeration>> |
| 60 | +} |
| 61 | +class SignUpErrorCode { |
| 62 | + <<enumeration>> |
| 63 | +} |
| 64 | +class LoginErrorCode { |
| 65 | + <<enumeration>> |
| 66 | +} |
| 67 | +
|
| 68 | +ErrorCode <|.. BoardErrorCode |
| 69 | +ErrorCode <|.. SignUpErrorCode |
| 70 | +ErrorCode <|.. LoginErrorCode |
| 71 | +CustomException ..> ErrorCode : uses |
| 72 | +``` |
| 73 | + |
| 74 | +## Global Exception Handler |
13 | 75 |
|
14 |
| -에러코드는(`ErrorCode`) 리소스나 기능 단위로 분류되며, 그 안에서 오류 상황을 명시하면서도 분류하기 편리하게 합니다. |
15 |
| -커스텀 예외는(`CustomException`) 런타임예외로 생성되며, 에러코드를 핸들링합니다. |
16 | 76 | 글로벌 익셉션 핸들러는(`GlobalExceptionHandler`) 커스텀 예외와 에러코드를 한 곳에서 처리하도록 돕습니다.
|
17 | 77 |
|
18 | 78 | | Class | Description |
|
19 | 79 | |:----------------------------:|:-----------------------------------------------|
|
20 |
| -| (I) Error Code | 이 에러 코드는 `enum`으로 작성된 다른 에러 코드의 상위 타입입니다. | |
21 |
| -| (C) Custom Exception | 모든 커스텀 예외들의 상위 타입 역할을 합니다. | |
22 | 80 | | (C) Global Exception Handler | 커스텀 예외가 사전에 처리되지 않으면 이곳으로 전달됩니다. 예외 응답을 전달합니다. |
|
| 81 | +| (R) API Error Response | API 예외 응답 바디 스펙입니다. 자바 `record`로 작성됩니다. | |
23 | 82 |
|
24 | 83 | - `interface ErrorCode`: `ErrorCode`는 각 `enum` 클래스에 구현될 수 있습니다.
|
25 | 84 | ```java
|
|
0 commit comments