๋ชจ๋“  ์˜ˆ์™ธ๋Š” ์ ์ ˆํ•˜๊ฒŒ ๋ณต๊ตฌ๋˜๋˜์ง€ ์ž‘์—…์„ ์ค‘๋‹จ์‹œํ‚ค๊ณ  ์šด์˜์ž/๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ†ต๋ณด๋˜์–ด์•ผ ํ•œ๋‹ค

์˜ˆ์™ธ์ฒ˜๋ฆฌ์˜ ์•ˆ์ข‹์€ ์˜ˆ 2๊ฐ€์ง€

  1. ์˜ˆ์™ธ ๋ฌด์‹œ
    • ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ฝ”๋“œ์—์„œ ์•„๋ฌด ๋™์ž‘ X / ์˜ˆ์™ธ ์ถœ๋ ฅ๋งŒ ํ•จ
  2. ๋ฌด๋ถ„๋ณ„ํ•œ throws Exception

4.2.1 ์˜ˆ์™ธ์˜ ์ข…๋ฅ˜์™€ ํŠน์ง•

  • Error
    • java.lang.Error ์„œ๋ธŒํด๋ž˜์Šค
    • ์‹œ์Šคํ…œ์— ๋น„์ •์ƒ์ ์ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‚ฌ์šฉ
    • ๋Œ€์‘๋ฐฉ๋ฒ• ์—†์œผ๋‹ˆ ์‹ ๊ฒฝ ใ„ดใ„ด
  • Exception๊ณผ ์ฒดํฌ ์˜ˆ์™ธ
    • ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŒ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์˜ ์ž‘์—… ์ค‘ ์˜ˆ์™ธ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ
    • catch๋ฌธ์œผ๋กœ ์žก๋Š”๋‹ค or throws๋ฅผ ์ •์˜ํ•ด์„œ ๋˜์ง„๋‹ค โ†’ ์•ˆํ•˜๋ฉด ์ปดํŒŒ์ผ์—๋Ÿฌ
  • RuntimeException๊ณผ ์–ธ์ฒดํฌ/๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ
    • ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋„๋ก ์˜๋„๋œ ๊ฒƒ๋“ค
    • NullPointException, IllegalArgumentException , โ€ฆ

์ฒดํฌ์˜ˆ์™ธ / ์–ธ์ฒดํฌ ์˜ˆ์™ธ

์ฒดํฌ ์˜ˆ์™ธ : Exception ํด๋ž˜์Šค์˜ ์„œ๋ธŒํด๋ž˜์Šค + RuntimeException ํด๋ž˜์Šค ์ƒ์† X

์–ธ์ฒดํฌ ์˜ˆ์™ธ : RuntimeExceptoin์„ ์ƒ์†ํ•œ ํด๋ž˜์Šค

4.1.3 ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

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

4.1.4 ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ „๋žต

  • ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ์˜ ๋ณดํŽธํ™”

    • ์ž๋ฐ” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ๋Š” ์ˆ˜๋งŽ์€ ์š”์ฒญ์ด ๋“ค์–ด์˜ด โ†’ ์„œ๋ฒ„๋ฅผ ์ค‘๋‹จ์‹œํ‚ค๊ณ  ์˜ˆ์™ธ์ƒํ™ฉ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฐจ์›์—์„œ ์˜ˆ์™ธ์ƒํ™ฉ์„ ๋ฏธ๋ฆฌ ํŒŒ์•… ํ›„ ํ†ต๋ณด
    • ๋Œ€์‘์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ฒดํฌ์˜ˆ์™ธ๋ผ๋ฉด ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋กœ ์ „ํ™˜ํ•ด์„œ ๋˜์ง€๋Š”๊ฒŒ ๋‚ซ๋‹ค
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ˆ์™ธ

    • ์‹œ์Šคํ…œ ๋˜๋Š” ์™ธ๋ถ€์˜ ์˜ˆ์™ธ์ƒํ™ฉ์ด ์›์ธ์ด ์•„๋‹ˆ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด์˜ ๋กœ์ง์— ์˜ํ•ด ์˜๋„์ ์œผ๋กœ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , ๋ฐ˜๋“œ์‹œ catchํ•ด์„œ ์กฐ์น˜๋ฅผ ์ทจํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ์˜ˆ์™ธ
    • ex) ์ถœ๊ธˆ ๋ฉ”์†Œ๋“œ์—์„œ ์ •์ƒ์ฒ˜๋ฆฌ/์ž”๊ณ ๋ถ€์กฑ ๋ฆฌํ„ด๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒํ•จ or ์˜ˆ์™ธ์ƒํ™ฉ์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค์ ์ธ ์˜๋ฏธ๋ฅผ ๋ค ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ
    • ์ฒดํฌ์˜ˆ์™ธ ์‚ฌ์šฉ

4.1.5 SQLException

  • ์ฝ”๋“œ๋ ˆ๋ฒจ์—์„œ๋Š” ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅ
  • ๊ด€๋ฆฌ์ž๋‚˜ ๊ฐœ๋ฐœ์žํ•œํ…Œ ๋นจ๋ฆฌ ํ†ต๋ณด ใ„ฑใ„ฑ
  • ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋กœ ์ „ํ™˜ํ•ด์ค˜์•ผ ํ•จ

4.2 ์˜ˆ์™ธ ์ „ํ™˜

์˜ˆ์™ธ ์ „ํ™˜์˜ ๋ชฉ์ 

  • ๊ตณ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ catch/throws๋ฅผ ์ค„์ž„
  • ๋กœ์šฐ๋ ˆ๋ฒจ์˜ ์˜ˆ์™ธ๋ฅผ ๋” ์˜๋ฏธ์žˆ๊ณ  ์ถ”์ƒํ™”๋œ ์˜ˆ์™ธ๋กœ ๋ฐ”๊ฟ”์„œ ๋˜์ง

4.2.1 JDBC ํ•œ๊ณ„

  • ๋น„ํ‘œ์ค€ SQL
  • ํ˜ธํ™˜์„ฑ ์—†๋Š” SQLExcepton DB ์—๋Ÿฌ์ •๋ณด

4.2.2. DB ์—๋Ÿฌ์ฝ”๋“œ ๋งคํ•‘์„ ํ†ตํ•œ ์ „ํ™˜

DB๋ณ„ ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ์˜ ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ํ•ด์„ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ ์ƒ์„ฑ

4.2.3 DAO ์ธํ„ฐํŽ˜์ด์Šค์™€ DataAccessExcepton ๊ณ„์ธต ๊ตฌ์กฐ

DataAccessException : ์˜๋ฏธ๊ฐ€ ๊ฐ™์€ ์˜ˆ์™ธ๋ผ๋ฉด ์ผ๊ด€๋œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ๋งŒ๋“ค์–ด์คŒ

DAO ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์˜ ๋ถ„๋ฆฌ

DAO๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“œ๋Š” ์ด์œ 

  • ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋กœ์ง์„ ๋‹ด์€ ์ฝ”๋“œ๋ฅผ ์„ฑ๊ฒฉ์ด ๋‹ค๋ฅธ ์ฝ”๋“œ์—์„œ ๋ถ„๋ฆฌํ•ด๋†“๊ธฐ ์œ„ํ•ด
  • ์ „๋žต ํŒจํ„ด์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด

DAO์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ธฐ์ˆ ์˜ API์—์„œ ์˜ˆ์™ธ ๋ฐœ์ƒ โ†’ throws Exception; โ†’ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ธฐ์ˆ ์ด ๋‹ฌ๋ผ์ง€๋ฉด ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์˜ˆ์™ธ ๋ฐœ์ƒ โ†’ ๊ฒฐ๊ตญ DAO ์‚ฌ์šฉ ๊ธฐ์ˆ ์— ๋”ฐ๋ผ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์ด ๋‹ฌ๋ผ์ ธ์•ผ ํ•จ

๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์˜ˆ์™ธ ์ถ”์ƒํ™”์™€ DataAccessException ๊ณ„์ธต๊ตฌ์กฐ

๊ทธ๋ž˜์„œ ์Šคํ”„๋ง์€ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋“ค์„ ์ถ”์ƒํ™”ํ•ด์„œ ๊ณ„์ธต๊ตฌ์กฐ์— ์ •๋ฆฌํ•ด๋†“์Œ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์ง€์› ๊ธฐ์ˆ ์„ ์ด์šฉํ•ด DAO๋ฅผ ๋งŒ๋“ค๋ฉด ๊ธฐ์ˆ ์— ๋…๋ฆฝ์ ์ธ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ์Œ

DAO๋ฅผ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ธฐ์ˆ ์—์„œ ๋…๋ฆฝ์‹œํ‚ค๋ ค๋ฉด ์ธํ„ฐํŽ˜์ด์Šค ๋„์ž…๊ณผ ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ ์ „ํ™˜, ๊ธฐ์ˆ ์— ๋…๋ฆฝ์ ์ธ ์ถ”์ƒํ™”๋œ ์˜ˆ์™ธ๋กœ ์ „ํ™˜์ด ํ•„์š”ํ•จ

์ด์ผ๋ฏผ, [ํ† ๋น„์˜ ์Šคํ”„๋ง 3.1], ์—์ด์ฝ˜ ์ถœํŒ์‚ฌ(2012)