2021-06-01(Tue)

Facts (์‚ฌ์‹ค, ๊ฐ๊ด€)

์Šคํ”„๋ง 5์ฃผ์ฐจ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.

๋‚ด์ผ ์žˆ์„ ๋ฉด์ ‘์„ ์ค€๋น„ํ–ˆ๋‹ค.

Feelings (๋Š๋‚Œ, ์ฃผ๊ด€)

์Šคํ”„๋ง ์ฝ”๋“œ & ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ด ์›ํ• ํ•ด์กŒ๋‹ค. fixture๋ฅผ ํด๋ž˜์Šค๋กœ ๋”ฐ๋กœ ๋นผ์„œ ํ™œ์šฉํ•˜๋Š” ํŒจํ„ด์ด ์ข‹์•„๋ณด์ด๋˜๋ฐ ๋‚ด์ผ ๋„์ž…ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

CrudRespository์—์„œ ๋˜์ง€๋Š” ์˜ˆ์™ธ ์ค‘ javadoc์— ๋”ฐ๋กœ ๋ช…์‹œ๋˜์ง€ ์•Š์€ ๊ฒƒ์ด ์žˆ์–ด์„œ ํ˜ผ๋ž€์Šค๋Ÿฌ์› ๋‹ค. javadoc์—๋Š” IllegalArgumentException ๋งŒ ๋ช…์‹œ๋˜์–ด ์žˆ๋Š” ๋ฐ˜๋ฉด, deleteById ๊ฐ™์€ ๋ฉ”์„œ๋“œ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” id๋ฅผ ๋„˜๊ฒจ์ฃผ๋ฉด EmptyResultDataAccessException์„ ๋˜์ง„๋‹ค.

Findings (๋ฐฐ์šด ์ )

validation์— ๋Œ€ํ•ด์„œ

@Valid

  • ์ž๋ฐ”๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š” ์• ๋„ˆํ…Œ์ด์…˜์ด๋‹ค.

  • Validation ๊ทธ๋ฃน์œผ๋กœ ๊ฒ€์ฆ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์—†๋‹ค.

@validated

  • ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์• ๋„ˆํ…Œ์ด์…˜์ด๋‹ค.

  • Validatoin ๊ทธ๋ฃน์œผ๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ 

CrudRepository๊ฐ€ ๋˜์ง€๋Š” ์˜ˆ์™ธ๋“ค..

..์€ ๋ชจ๋‘ Spring์— ๋นŒํŠธ์ธ ๋˜์–ด์žˆ๋Š” DataAccessException์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค. ์ •ํ™•ํžˆ๋Š” @Repository ๋ผ๋Š” ์• ๋…ธํ…Œ์ด์…˜์ด ๋‹ฌ๋ ค์žˆ๋Š” ๊ฒฝ์šฐ DataAccessException์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋Š” 4๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • NonTransientDataAccessException

    • EmptyResultDataAccessException ์ฒ˜๋Ÿผ ๊ฐ™์€ ์‹œ๋„๋ฅผ ๋ฐ˜๋ณตํ•ด๋„ ์‹คํŒจํ•  ๊ฒƒ์ด ์ž๋ช…ํ•œ ์ข…๋ฅ˜์˜ ์˜ˆ์™ธ..!

  • RecoverableDataAccessException

  • ScriptException

  • TransientDataAccessException

CrudRepository๊ฐ€ ๋˜์ง€๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ชจ๋‘ ์ •๋ฆฌ๋œ ๋ฌธ์„œ๋ฅผ ์ฐพ๊ธฐ ๋ณด๋‹ค, ์œ„ 4๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ์กฐ์‚ฌํ•ด์„œ ์ปค๋ฒ„ํ•˜๋Š”๊ฒŒ ๋งž๋‹ค.

์ฐธ๊ณ 

Affimation (์ž๊ธฐ ์„ ์–ธ)

๋‚˜๋Š” ๊ทผ์„ฑ์žˆ๊ฒŒ ํ•ด์•ผํ•  ๊ฒƒ์„ ์ œ๋Œ€๋กœ ํ•ด๋‚ด๋Š” ๊ฐœ๋ฐœ์ž๋‹ค.

Last updated