-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherror_handling.exs
More file actions
120 lines (93 loc) · 3.35 KB
/
error_handling.exs
File metadata and controls
120 lines (93 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env elixir
# 에러 처리 예제
# 실행: elixir examples/error_handling.exs
Mix.install([
{:solapi, path: Path.join(__DIR__, "..")}
])
alias Solapi.Error.{ApiError, ValidationError, NetworkError}
api_key = System.get_env("SOLAPI_API_KEY") || raise "SOLAPI_API_KEY 환경변수를 설정하세요"
api_secret = System.get_env("SOLAPI_API_SECRET") || raise "SOLAPI_API_SECRET 환경변수를 설정하세요"
client = Solapi.client(api_key: api_key, api_secret: api_secret)
# 에러 처리 헬퍼 함수
defmodule ErrorHandler do
def handle_result({:ok, response}) do
IO.puts("발송 성공!")
IO.inspect(response, label: "응답", pretty: true)
:ok
end
def handle_result({:error, %ValidationError{} = error}) do
IO.puts("유효성 검사 실패!")
IO.puts(" 메시지: #{error.message}")
if error.field, do: IO.puts(" 필드: #{error.field}")
:validation_error
end
def handle_result({:error, %ApiError{} = error}) do
IO.puts("API 에러!")
IO.puts(" 상태 코드: #{error.status}")
IO.puts(" 에러 코드: #{error.code}")
IO.puts(" 메시지: #{error.message}")
:api_error
end
def handle_result({:error, %NetworkError{} = error}) do
IO.puts("네트워크 에러!")
IO.puts(" 원인: #{inspect(error.reason)}")
IO.puts(" 재시도 소진: #{error.retries_exhausted}")
:network_error
end
def handle_result({:error, error}) do
IO.puts("알 수 없는 에러!")
IO.inspect(error, pretty: true)
:unknown_error
end
end
# 1. 유효성 검사 에러 (수신번호 누락)
IO.puts("\n=== 테스트 1: 수신번호 누락 ===\n")
invalid_message = %{
from: "0212345678",
text: "수신번호가 없는 메시지"
}
Solapi.send(client, invalid_message)
|> ErrorHandler.handle_result()
# 2. 빈 메시지 리스트
IO.puts("\n=== 테스트 2: 빈 메시지 리스트 ===\n")
Solapi.send(client, [])
|> ErrorHandler.handle_result()
# 3. 정상 메시지 (실제 발송)
IO.puts("\n=== 테스트 3: 정상 메시지 ===\n")
valid_message = %{
to: "01012345678",
from: "0212345678",
text: "정상적인 테스트 메시지입니다."
}
# 실제 발송하려면 아래 주석 해제
# Solapi.send(client, valid_message)
# |> ErrorHandler.handle_result()
IO.puts("정상 메시지 테스트는 실제 발송을 위해 주석 처리되어 있습니다.")
IO.puts("테스트하려면 예제 코드의 주석을 해제하세요.")
# 4. 패턴 매칭을 활용한 에러 처리 예제
IO.puts("\n=== 패턴 매칭 에러 처리 예제 ===\n")
IO.puts("""
case Solapi.send(client, message) do
{:ok, response} ->
# 성공 처리
IO.puts("발송 성공: " <> inspect(response))
{:error, %ValidationError{field: :to}} ->
# 수신번호 관련 에러
IO.puts("수신번호를 확인하세요.")
{:error, %ValidationError{message: msg}} ->
# 기타 유효성 에러
IO.puts("입력값 오류: " <> msg)
{:error, %ApiError{status: 401}} ->
# 인증 에러
IO.puts("API 키를 확인하세요.")
{:error, %ApiError{status: 429}} ->
# 요청 제한
IO.puts("요청이 너무 많습니다. 잠시 후 다시 시도하세요.")
{:error, %NetworkError{retries_exhausted: true}} ->
# 재시도 소진
IO.puts("네트워크 연결을 확인하세요.")
{:error, error} ->
# 기타 에러
IO.puts("에러 발생: " <> inspect(error))
end
""")