Skip to content

Latest commit

ย 

History

History
20 lines (14 loc) ยท 2.37 KB

error-handling.md

File metadata and controls

20 lines (14 loc) ยท 2.37 KB

์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ API ์˜ค๋ฅ˜ ๋ฌธ์„œ

์ƒˆ ์—๋Ÿฌ ์ฝ”๋“œ, ๊ฒ€์ฆ ์˜ค๋ฅ˜, ์˜ˆ์™ธ ์‘๋‹ต์ด๋‚˜ Swagger ์˜ค๋ฅ˜ ์„ค๋ช…์„ ๋ฐ”๊ฟ€ ๋•Œ ์ฝ๋Š”๋‹ค.

ํ˜„์žฌ ๊ณ„์•ฝ

  • ๊ณตํ†ตยท๋„๋ฉ”์ธ ์˜ค๋ฅ˜๋Š” BaseErrorCode๋ฅผ ๊ตฌํ˜„ํ•œ ErrorCode ๋˜๋Š” {Domain}ErrorCode enum์œผ๋กœ ์ •์˜ํ•œ๋‹ค. ๊ฐ ๊ฐ’์˜ HTTP ์ƒํƒœยท์ฝ”๋“œยท์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€๋ฅผ ํ•จ๊ป˜ ๊ฒ€ํ† ํ•œ๋‹ค.
  • ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์‹คํŒจ๋Š” new CustomException(errorCode)๋กœ ํ‘œํ˜„ํ•œ๋‹ค. GlobalExceptionHandler๊ฐ€ ์ด๋ฅผ ErrorDto๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ํ•œ ๋„๋ฉ”์ธ์˜ ์ž…๋ ฅ ์˜ค๋ฅ˜์— ํŠน๋ณ„ํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๊ธฐ์กด TodoExceptionHandler, TagExceptionHandler์ฒ˜๋Ÿผ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•œ handler๋ฅผ ํ™•์ธํ•œ๋‹ค.
  • ์˜ค๋ฅ˜ JSON์€ timestamp, status, errorCode, message, path, traceId๋ฅผ ํฌํ•จํ•œ๋‹ค. ์ƒˆ ์˜ค๋ฅ˜์— ๋ณ„๋„ ์‘๋‹ต ๋ž˜ํผ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. ์ •์ƒ ์‘๋‹ต์˜ BaseResponse์™€ ํ˜•์‹์ด ๋‹ค๋ฅด๋‹ค๋Š” ์ ๋„ ์œ ์ง€ํ•œ๋‹ค.
  • ์š”์ฒญ ๊ฒ€์ฆ ์‹คํŒจ, ์ฝ์„ ์ˆ˜ ์—†๋Š” ๋ณธ๋ฌธ, ์ง€์›ํ•˜์ง€ ์•Š๋Š” HTTP ๋ฉ”์„œ๋“œ, ๋™์‹œ์„ฑ ์ถฉ๋Œ ๋“ฑ์€ GlobalExceptionHandler๊ฐ€ ์ด๋ฏธ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์‹ ๊ทœ handler๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ์กด handler์™€ ์šฐ์„ ์ˆœ์œ„ยท์ค‘๋ณต ๋งคํ•‘์„ ํ™•์ธํ•œ๋‹ค.
  • ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ์˜ค๋ฅ˜๋Š” ์„œ๋ฒ„ ๋กœ๊ทธ์™€ Sentry์— ๋‚จ๊ธฐ๊ณ  ํด๋ผ์ด์–ธํŠธ์—๋Š” ๋‚ด๋ถ€ ์˜ˆ์™ธ์˜ ๋ฉ”์‹œ์ง€ยท์Šคํƒยท๋น„๋ฐ€๊ฐ’์„ ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์˜ค๋ฅ˜๋Š” ์ ์ ˆํ•œ 4xx๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  500์œผ๋กœ ๋ญ‰๊ฐœ์ง€ ์•Š๋Š”๋‹ค.

์ƒˆ ์˜ค๋ฅ˜๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ

  1. ๊ฐ™์€ ๋„๋ฉ”์ธ์— ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์—†์œผ๋ฉด ํ•ด๋‹น {Domain}ErrorCode์— ์ถ”๊ฐ€ํ•˜๊ณ , ์ฝ”๋“œ ์‹๋ณ„์žยท์ƒํƒœยท๋ฉ”์‹œ์ง€๊ฐ€ ์„œ๋กœ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€ํ† ํ•œ๋‹ค.
  2. ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ์œ„์น˜์—์„œ CustomException์„ ๋˜์ง„๋‹ค. ์ž…๋ ฅ ํ˜•์‹ ๊ฒ€์ฆ์€ ๊ฐ€๋Šฅํ•˜๋ฉด DTO์˜ Bean Validation์— ๋‘๊ณ , ์†Œ์œ ๊ถŒยท์ƒํƒœ ๊ฒ€์ฆ์€ Service ๋˜๋Š” Entity์˜ ์ฑ…์ž„์— ๋‘”๋‹ค.
  3. ๊ธฐ์กด ...ControllerDocs์˜ ์‘๋‹ต ์„ค๋ช…๊ณผ ์‹ค์ œ ErrorDto๋ฅผ ๋งž์ถ˜๋‹ค. ํ•ด๋‹น API๊ฐ€ ์‹ค์ œ๋กœ ๋‚ด๋Š” ์ฝ”๋“œ๋งŒ ๋ฌธ์„œํ™”ํ•˜๊ณ , ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” enum ์ „์ฒด๋ฅผ ๊ธฐ๊ณ„์ ์œผ๋กœ ๋‚˜์—ดํ•˜์ง€ ์•Š๋Š”๋‹ค.
  4. ๋กœ๊ทธ์—๋Š” ์˜ค๋ฅ˜ ์ฝ”๋“œยท๊ฒฝ๋กœยทtraceId์ฒ˜๋Ÿผ ์ง„๋‹จ์— ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๋‚จ๊ธด๋‹ค. ํ† ํฐยท๋น„๋ฐ€๋ฒˆํ˜ธยท๊ฐœ์ธ์ •๋ณด๋‚˜ ์š”์ฒญ ๋ณธ๋ฌธ ์ „์ฒด๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฐธ๊ณ  ๊ตฌํ˜„: global/exception/GlobalExceptionHandler.java, global/exception/dto/ErrorDto.java, domain/tag/exception/TagErrorCode.java.