Skip to main content
APIμ—μ„œ λ°œμƒν•˜λŠ” μ—λŸ¬λ₯Ό μΌκ΄€λ˜κ²Œ μ²˜λ¦¬ν•˜κ³  λͺ…ν™•ν•œ 응닡을 μ œκ³΅ν•˜λŠ” 방법을 μ•Œμ•„λ΄…λ‹ˆλ‹€.

μ—λŸ¬ 처리 κ°œμš”

μΌκ΄€λœ 응닡

ν‘œμ€€ν™”λœ μ—λŸ¬ ν˜•μ‹ ν΄λΌμ΄μ–ΈνŠΈ μΉœν™”μ 

μƒνƒœ μ½”λ“œ

HTTP μƒνƒœ μ½”λ“œ RESTful ν‘œμ€€

λͺ…ν™•ν•œ λ©”μ‹œμ§€

개발자 μΉœν™”μ  μ‚¬μš©μž μΉœν™”μ 

λ‘œκΉ…

μ—λŸ¬ 좔적 디버깅 지원

SoException

SonamuλŠ” SoException 기반의 μ—λŸ¬ 클래슀λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. SoException을 throwν•˜λ©΄ ν”„λ ˆμž„μ›Œν¬κ°€ μžλ™μœΌλ‘œ μ μ ˆν•œ HTTP μƒνƒœ μ½”λ“œμ™€ κ΅¬μ‘°ν™”λœ μ—λŸ¬ 응닡을 μ „μ†‘ν•©λ‹ˆλ‹€.

κΈ°λ³Έ μ‚¬μš©λ²•

μ œκ³΅λ˜λŠ” μ˜ˆμ™Έ 클래슀

Sonamuκ°€ 기본으둜 μ œκ³΅ν•˜λŠ” μ˜ˆμ™Έ ν΄λž˜μŠ€μž…λ‹ˆλ‹€. λͺ¨λ‘ SoException을 μƒμ†ν•©λ‹ˆλ‹€.

SoException μƒμ„±μž

λͺ¨λ“  μ˜ˆμ™Έ ν΄λž˜μŠ€λŠ” λ™μΌν•œ μƒμ„±μž μ‹œκ·Έλ‹ˆμ²˜λ₯Ό κ°€μ§‘λ‹ˆλ‹€.
  • message: μ—λŸ¬ λ©”μ‹œμ§€. λ‹€κ΅­μ–΄ λ¬Έμžμ—΄(LocalizedString)을 μ§€μ›ν•©λ‹ˆλ‹€.
  • payload: μΆ”κ°€ 정보. Zod 검증 이슈 λ°°μ—΄ 등을 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš© 예제

λ‹€μ–‘ν•œ μ—λŸ¬ 상황

payloadλ₯Ό ν™œμš©ν•œ 상세 정보 전달

isSoException νƒ€μž… κ°€λ“œ

Zod 검증 μ—λŸ¬ 처리

BadRequestException의 payload에 Zod 이슈 배열을 μ „λ‹¬ν•˜λ©΄, Sonamu의 μ—λŸ¬ ν•Έλ“€λŸ¬κ°€ μžλ™μœΌλ‘œ 검증 μ—λŸ¬ 상세 정보λ₯Ό 응닡에 ν¬ν•¨ν•©λ‹ˆλ‹€.

Zod μ—λŸ¬ λ³€ν™˜

μ—λŸ¬ 응닡 ν˜•μ‹

Sonamu의 λ‚΄μž₯ μ—λŸ¬ ν•Έλ“€λŸ¬λŠ” λ‹€μŒ ν˜•μ‹μœΌλ‘œ μ‘λ‹΅ν•©λ‹ˆλ‹€.

κΈ°λ³Έ μ—λŸ¬ 응닡

Zod 검증 μ—λŸ¬ 응닡 (payload에 이슈 λ°°μ—΄ 전달 μ‹œ)

μ—λŸ¬ ν•Έλ“€λŸ¬ μ»€μŠ€ν„°λ§ˆμ΄μ§•

SonamuλŠ” κΈ°λ³Έ μ—λŸ¬ ν•Έλ“€λŸ¬λ₯Ό λ‚΄μž₯ν•˜κ³  μžˆμ§€λ§Œ, ν•„μš” μ‹œ startServer의 lifecycle.onError μ˜΅μ…˜μœΌλ‘œ μ»€μŠ€ν…€ μ—λŸ¬ ν•Έλ“€λŸ¬λ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μƒνƒœ μ½”λ“œ μ°Έμ‘°ν‘œ

ν‘œμ€€ HTTP μƒνƒœ μ½”λ“œ

Sonamu μ»€μŠ€ν…€ μƒνƒœ μ½”λ“œ

μ‹€μ „ νŒ¨ν„΄

μ£Όμ˜μ‚¬ν•­

μ—λŸ¬ 처리 μ‹œ μ£Όμ˜μ‚¬ν•­: 1. λ―Όκ°ν•œ 정보 λ…ΈμΆœ κΈˆμ§€ (μŠ€νƒ 트레이슀, DB μ—λŸ¬ λ“±) 2. μ μ ˆν•œ HTTP μƒνƒœ μ½”λ“œ μ‚¬μš© 3. λͺ…ν™•ν•˜κ³  μΌκ΄€λœ μ—λŸ¬ λ©”μ‹œμ§€ 4. μ—λŸ¬λŠ” 항상 λ‘œκΉ… 5. ν”„λ‘œλ•μ…˜μ—μ„œλŠ” 상세 정보 μ œν•œ

λ‹€μŒ 단계

μžλ™ 검증

Zod 기반 검증

μ»€μŠ€ν…€ 검증

μ»€μŠ€ν…€ 검증 둜직

@api λ°μ½”λ ˆμ΄ν„°

API κΈ°λ³Έ μ‚¬μš©λ²•

Context

SonamuContext