Global Exception vs Try/Catch

ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ์— Global Exception๊ณผ Try/Catch๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”.

๊ตณ์ด Try/Catch๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  throw exception์œผ๋กœ ๋˜์ ธ์„œ Global Exception์—์„œ ๋กœ๊ทธ๋‚จ๊ธฐ๊ณ  ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜์ง€ ์•Š๋‚˜, ๋กœ๊ทธ์— ๊ทธ์— ๋งž๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋‚จ๊ธฐ๋ฉด ๋˜์ง€ ์•Š๋‚˜ ๋ผ๋Š” ์˜๊ฒฌ์ด ์žˆ์—ˆ๋Š”๋ฐ์š”.

์ œ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์œผ๋กœ๋Š” Global Exception์€ Try/Catch๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ๋ชปํ•œ ๊ฒƒ๋“ค์— ๋Œ€ํ•ด ์ตœํ›„์˜ ๋ณด๋ฃจ๋กœ ์ƒ๊ฐํ•˜๊ณ  Try/Catch๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์œ„์น˜์™€ ๋ฐœ์ƒ ์›์ธ์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ณ  ๊ทธ์— ๋งž๋Š” ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์งœ๋Š” ๊ฒŒ ์œ ์ง€๋ณด์ˆ˜๋‚˜ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์ข€ ๋” ์›ํ™œํ•˜๊ฒŒ ํ•ด์ค„ ๊ฒƒ ๊ฐ™์€๋ฐ ์–ด๋–ป๊ฒŒ๋“ค ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”?

5๊ฐœ์˜ ์ข‹์•„์š”

try-catch๋Š” ์ตœ๋Œ€ํ•œ ์งง์€ ๊ตฌ๊ฐ„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ์“ฐ๋˜, ๋ฐฐํฌํ• ๋•Œ๋Š” ๋นผ์•ผํ•˜๋Š” ๊ฒƒ์ด์ง€์š”.
๊ทธ๊ฒƒ์ด ์ถฉ๋ถ„ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ–ˆ๋‹ค ๋ผ๋Š” ์ฆ๊ฑฐ์ž…๋‹ˆ๋‹ค.
์ถฉ๋ถ„ํ•œ ํ…Œ์ŠคํŠธ๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ž์‹ ๊ฐ๊ณผ ์ œํ’ˆ์— ๋Œ€ํ•œ ๋””ํ…Œ์ผ๊ณผ ์‹ ๋ขฐ๋กœ ์ง๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๋Œ๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ฃฝ๋Š” ๋‹ค๋Š” ๊ฒƒ์€ ๋ง์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— Global Exception์€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์„ธ๋ถ€์ ์œผ๋กœ ์žˆ๋Š” try - catch๋“ค์€ ์งง๊ฒŒ ์งง๊ฒŒ ํ•ด์„œ ๋””ํ…Œ์ผํ•˜๊ฒŒ ํ•˜์‹œ๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์˜ˆ์ธก์ด ๊ฐ€๋Šฅํ•œ ์„ ์—์„œ try catch์—†์ด ์˜ˆ์™ธ๋ฅผ ์ƒ๊ฐํ•ด๋‚ด๊ณ  ์ฒ˜๋ฆฌํ–ˆ๋‹ค๋ฉด ์ œ๊ฑฐํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด์ง€์š”.

์“ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด global exception์ด ์—†์–ด์„œ ์ฃฝ๋Š” ๊ฒƒ์€ ๋„๋ฉ”์ธ์— ๋”ฐ๋ผ ๋งค์šฐ ์น˜๋ช…์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜ ERP ์—…๊ณ„์—์„œ๋Š” ํฌ๊ฒŒ ์น˜๋ช…์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋‚˜ (๋ฌผ๋ก  ๊ทธ๊ฒƒ๋„ ํšŒ์‚ฌ๋งˆ๋‹ค ๋‹ค๋ฆ„), FA ๊ฐ™์€ ๊ณต์žฅ ์ž๋™ํ™” ์ชฝ์—์„œ๋Š” ๊ธฐ๊ณ„์—์„œ ์ฃผ๋Š” ๊ฐ’์ด ๋…ธ์ด์ฆˆ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์„œ ํŒŒ์‹ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ฐ’์ด ๋“ค์–ด์™€์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์„ ๊ฒฝ์šฐ, ๊ธฐ๊ณ„๋ฅผ ์ œ์–ดํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ๋˜๋Š”๋ฐ ๊ธฐ๊ณ„๋Š” ์ข…๋ฃŒ ๋ช…๋ น์„ ๋ฐ›์ง€ ๋ชปํ–ˆ์œผ๋ฏ€๋กœ ๊ณ„์†ํ•ด์„œ ๋Œ๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ Global Exception์ด ํ•„์š”ํ•˜๊ณ  Windows Event Viewer๋„ ํ•„์š”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Try - Catch๋ฅผ ๋ฐฐํฌ ํ›„ ๋Ÿฐํƒ€์ž„์—์„œ ์ œ๊ฑฐํ•ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ์‚ฌ๋žŒ๋งˆ๋‹ค ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ, catch์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ Exception ๊ฐ์ฒด ์ƒ์„ฑ์„ ์œ„ํ•ด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์•ฝ๊ฐ„์ด์ง€๋งŒ ๋Š๋ ค์ง์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (์‚ฌ๋žŒ์€ ๋ณดํ†ต ์ฒด๊ฐ ๋ถˆ๊ฐ€๋Šฅ)
๋‹จ์ˆœํžˆ try์˜ scope ์•ˆ์— ๋“ค์–ด์™”๋‹ค๊ณ  ํ•ด์„œ ์ฝ”๋“œ๊ฐ€ ๋Š๋ ค์ง€๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ , try ๋‹ค์Œ์— finally๋กœ ๋น ์กŒ๋‹ค๊ณ  ํ•ด์„œ ์ฝ”๋“œ๊ฐ€ ๋Š๋ ค์ง€๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ , catch์— ๊ฑธ๋ ธ์„ ๋•Œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ปดํ“จํ„ฐ์ž…์žฅ์—์„œ ๋Š๋ ค์ง€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

try-catch๋ฅผ ๋ฌธ์žฅ๋งˆ๋‹ค ์งง๊ฒŒ ๊ฑธ์ง€์•Š๊ณ  ๋Ÿฌํ”„ํ•˜๊ฒŒ ๊ธธ๊ฒŒ ๊ธธ๊ฒŒ ๊ฑด๋‹ค๋Š” ๊ฒƒ์€,
๊ฐœ๋ฐœ์ž๊ฐ€ ์ž์‹ ์˜ ์ฝ”๋“œ์— ์ž์‹ ์ด ์—†๋‹ค๋Š” ๋œป์ด๋ฉฐ, ์˜ˆ์™ธ๋ฅผ ํŠน์ •ํ•  ์˜์ง€๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ด๊ณ , ์˜ˆ์™ธ๊ฐ€ ์„ธ๋ถ€์ ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์žˆ์ง€ ์•Š์•„์„œ ์ถ”ํ›„ ์œ ์ง€๋ณด์ˆ˜ ํ•  ๋•Œ ์˜ˆ์™ธ์˜ ๋‚ด์šฉ๊นŒ์ง€ ๋ชจ๋‘ ํŒŒ์•…ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ฒŒ ๋  ๋ฏธ๋ž˜์˜ ๋‚˜์™€ ๋™๋ฃŒ์˜ ์‹œ๊ฐ„์„ ๊ฐ‰์•„ ๋จน๋Š” ๊ฒƒ์ด์ง€์š”.

์ œ๊ฐ€ ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์œ ๋‹›ํ…Œ์ŠคํŠธ ๋ฅผ ์ ๊ทน ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ฐ์ฒด์ง€ํ–ฅ์ธ ๋ชจ๋ธ๋“ค์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ๋ผ์ด๋ธŒ๋˜๋Š” ํ”„๋กœ์ ํŠธ์— ๊ฐœ๋ฐœ์„ ํ•ด๋†“๊ณ  ๊ทธ ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ์œ ๋‹›ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ• ๋งŒํ•œ ๊ฐ’๋“ค์— ๋Œ€ํ•ด ๋„ฃ๊ณ  ์œ ๋‹›ํ…Œ์ŠคํŠธ์— try-catch๋ฅผ ๊ฑฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฐฉ์‹์˜ ์žฅ์ ์€ catch์— ๊ฑธ๋ ค์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” case ๋“ค์„ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ๊ฒƒ์ด ์†Œ์Šค์ฝ”๋“œ๋กœ ๋ˆ„์ ์ด๋˜๋ฉฐ, ์–ธ์ œ๋“  VS์˜ ํ…Œ์ŠคํŠธํƒ์ƒ‰๊ธฐ๋ฅผ ํ†ตํ•ด ๋‚ด๊ฐ€ ์›ํ•  ๋•Œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•ด์„œ ์ถฉ๋ถ„ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋˜๋ฉด ๋ฐฐํฌ๋˜๋Š” ๋ผ์ด๋ธŒ ์†Œ์Šค์ฝ”๋“œ์—๋Š” try-catch๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6๊ฐœ์˜ ์ข‹์•„์š”

asp.net core์˜ global exception์„ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•œ๋‹ค๋ฉด exception ๋ฐœ์ƒ์‹œ stacktrace๋‚˜ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ •๋ณด๋“ค์„ ๋ชจ์•„ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜๋Š” ์ˆ˜์ค€์˜ ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€์™€ 500 ์‘๋‹ต์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด๋ณด์ž…๋‹ˆ๋‹ค
๋ง์”€์ฒ˜๋Ÿผ API๋ฅผ ๊ตฌ์„ฑํ•˜๋‹ค๋ณด๋ฉด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ์‘๋‹ต์„ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ผ๋“ค์ด ๋ฐœ์ƒ๋ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋ช‡๊ฐ€์ง€ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ์š”์ฒญ ๊ฐ’์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„ ๋•Œ 400 bad request๋ฅผ ์ฒ˜๋ฆฌ
  • ef core์™€ ๊ฐ™์€ orm์„ ์“ธ๋•Œ save ์‹œ์ ์— ์ค‘๋ณต id insert์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋กœ 422 ์ฒ˜๋ฆฌ
  • api ๋‚ด์—์„œ ๋‹ค๋ฅธ api๋ฅผ ํ˜ธ์ถœํ• ๋•Œ ๋Œ€์ƒ api ์„œ๋ฒ„์—์„œ ํŠน์ • ์‹œ๊ฐ„๋™์•ˆ ์‘๋‹ต์„ ์ฃผ์ง€ ์•Š๊ฑฐ๋‚˜ ์˜ˆ์™ธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ๋กœ ์žก์•„ 3ํšŒ ์žฌ์‹œ๋„๋ฅผ ๊ตฌ์„ฑ

๊ฐ controller, service ๋“ฑ์˜ ์„œ๋น„์Šค ๋ ˆ์ด์–ด์ƒ์—์„œ ๋ฐœ์ƒ๋˜๋Š” ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ตฌํ˜„์€ ์„œ๋น„์Šค ํ’ˆ์งˆ์„ ๋”์šฑ ๋†’์—ฌ์ค„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐ๋˜์„œ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”