Chapter 4 - KOO-YS/toby-spring GitHub Wiki
- JdbcTemplate์ ๋ํ๋ก ํ๋ ์คํ๋ง์ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ธฐ๋ฅ์ ๋ด๊ฒจ ์๋ ์์ธ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ์ ๊ทผ๋ฐฉ๋ฒ ์๊ธฐ
๐ฑ Branch chapter04/refactor ์ฌ์ฉ
chapter 04๋ ์ค์ต ์ฝ๋๊ฐ ๋ง์ง ์๊ธฐ ๋๋ฌธ์ ์๋ถ๋ฅ ๋ธ๋์น๋ฅผ ์ฌ์ฉํ์ง ์์์ต๋๋ค !
๋ชจ๋ ์์ธ๋ ์ ์ ํ๊ฒ ๋ณต๊ตฌ๋๋ ์ง, ์์ ์ ์ค๋จ์ํค๊ณ ์ด์์ ๋๋ ๊ฐ๋ฐ์์๊ฒ ๋ถ๋ช ํ๊ฒ ํต๋ณด๋ผ์ผ ํ๋ค
-
- ์์คํ ์ ๋น์ ์์ ์ธ ์ํฉ์ด ๋ฐ์ํ์ ๊ฒฝ์ฐ ์ฌ์ฉ
- ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์์ ๋์ํ ๋ฐฉ๋ฒ์ด ์๋ค
-
-
๊ฐ๋ฐ์๋ค์ด ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์์ ์ค์ ์์ธ์ํฉ์ด ๋ฐ์ํ์ ๊ฒฝ์ฐ
Exception ํด๋์ค์ ์๋ธ ํด๋์ค์ด๋ฉด์
RuntimeExceptionํด๋์ค๋ฅผ ์์กํ์ง ์์ ๊ฒ๋ค๋ฐ๋์ ์ฒ๋ฆฌํด์ผํ ์์ธ โถ
catch๋๋throws๋ฅผ ํตํด ์ฒ๋ฆฌํด์ผํ๋คRuntimeException๋ฅผ ์์ํ ํด๋์ค๋ค๊ฐ๋ฐ์์ ๋ถ์ฃผ์๋ก ๋ฐ์ํ ์ ์๋ ๋ฐํ์ ์์ธ
์์ธ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์๋๋ค
-
-
- ์์ธ ์ํฉ์ ํ์ ํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ ์ ์ ์ํ๋ก ๋๋ ค๋๋ ๊ฒ
-
- ์์ธ๋ฅผ ์์ ์ด ๋ด๋นํ์ง ์๊ณ ์์ ์ ํธ์ถํ ์ชฝ์ผ๋ก ๋์ ธ๋ฒ๋ฆฌ๋ ๋ฐฉ๋ฒ
-
throws๋ฌธ์ผ๋ก ์ ์ธํด์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ํธ์ถ ์ชฝ์ผ๋ก ๋์ ธ์ง๊ฒ ํจ -
catch๋ฌธ์ผ๋ก ์ผ๋จ ์์ธ๋ฅผ ์ก์ ํ์ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ณ ๋ค์ ์์ธ ๋์ง๋ ๊ฒ(rethrow) - ํํผ์ ์๋๊ฐ ๋ถ๋ช ํด์ผ ํ๋ค
-
- ์์ธ๋ฅผ ๋ณต๊ตฌํด์ ์ ์์ ์ธ ์ํ๋ก๋ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ์์ธ๋ฅผ ๋ฉ์๋ ๋ฐ์ผ๋ก ๋์ง
- ์์ธ๋ฅผ ๊ทธ๋๋ก ๋๊ธฐ๋ ๊ฒ ์๋ ์ ์ ํ ์์ธ๋ก ์ ํํด์ ๋์ง๋ค
-
๋ก์ฐ ๋ ๋ฒจ์ ์์ธ๋ฅผ ์ข ๋ ์๋ฏธ์๊ณ ์ถ์ํ๋ ์์ธ๋ก ๋ฐ๊ฟ์ ๋์ง๋ ๊ฒ๋ฐ์ํ ์์ธ๋ฅผ ๊ทธ๋๋ก ๋์ง๋ ๊ฒ์ด ์ ์ ํ ์๋ฏธ ๋ถ์ฌ๊ฐ ์ด๋ ค์ธ ๊ฒฝ์ฐ, ์๋ฏธ๋ฅผ ๋ถ๋ช ํ๊ฒ ํด์ค ์ ์๋ ์์ธ๋ก ๋ณ๊ฒฝํ๊ธฐ ์ํด์
-
๋ฐํ์ ์์ธ๋ก ํฌ์ฅํด์ ๊ตณ์ด ํ์ํ์ง ์์ catch/throws๋ฅผ ์ค์ฌ์ฃผ๋ ๊ฒ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ฝ๊ณ ๋จ์ํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ํฌ์ฅ(์๋ฏธ ์๋, ๋ณต๊ตฌ ๊ฐ๋ฅํ ์์ธ๊ฐ ์๋ ๋, ๋ฐํ์ ์๋ฌ๋ก ํฌ์ฅํด์ ๋์ง๋ค)
์๋ฏธ๊ฐ ๋ถ๋ช ํ๊ฒ ๋ณ๊ฒฝํ๋ ์์ธ์์๋ ๋ฐ์ํ ์์ธ๋ฅผ ๋ด์ ์ฌ์ฉ} catch (SQLException e){ // ์ ํํ ์์ธ(์๋ ๋ฐ์ํ ์์ธ); throw DuplicateUserIdException(e); }} catch (SQLException e){ // ์ ํํ ์์ธ().initCause(๋ฐ์ํ ๊ทผ๋ณธ ์์ธ); throw DuplicateUserIdException().initCause(e); }
์์คํ
๋๋ ์ธ๋ถ์ ์์ธ์ํฉ์ด ์์ธ์ด ์๋๋ผ ์ ํ๋ฆฌ์ผ์ด์
์์ฒด์ ๋ก์ง์ ์ํด ์๋์ ์ผ๋ก ๋ฐ์์ํค๊ณ , ๋ฐ๋์ catchํด์ ๋ฌด์์ธ๊ฐ ์กฐ์น๋ฅผ ์ทจํ๋๋ก ์๊ตฌํ๋ ์์ธ๋ค
โ JdbcTemplate์ throws SQLException์ ์ ์ฌ๋ผ์ก๋๊ฐ?
SQLException์ ๋๋ถ๋ถ์ด ๋ณต๊ตฌ๊ฐ ๋ถ๊ฐ๋ฅํ ์์ธ์ด๋ค.
์์คํ ์ ์์ธ์ด๊ธฐ์ ๋น์ฐํ ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์ ๋ณต๊ตฌํ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ Spring์ ์์ธ์ฒ๋ฆฌ ์ ๋ต์ ์ฌ์ฉํ๋ค.
ํ์๋ ์๋ ๊ธฐ๊ณ์ ์ธ throws ์ ์ธ์ ๋ฐฉ์นํ์ง ์๊ณ ์ธ์ฒดํฌ/๋ฐํ์ ์์ธ๋ก ์ ํํด์ค
์คํ๋ง์ JdbcTemplate ํ
ํ๋ฆฟ๊ณผ ์ฝ๋ฐฑ ์์์ ๋ฐ์ํ๋ ๋ชจ๋ SQLException์ ๋ฐํ์ ์์ธ์ธ **DataAccessException**์ผ๋ก ํฌ์ฅํด์ ๋์ ธ์ค๋ค
โถ
JdbcTemplate์ ์ฌ์ฉํ๋ ๋ฉ์๋์์ ๊ผญ ํ์ํ ๊ฒฝ์ฐ์๋ง ๋ฐํ์ ์์ธ **DataAccessException**๋ฅผ ์ก์์ ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋๊ณ ๋๋จธ์ง๋ ๋ฌด์ํ๋ฉด ๋๋ค
// JdbcTemplate ๋ด๋ถ ๋ฉ์๋๋ค์ ์ดํด๋ณด๋ฉด ๋ชจ๋ throws DataAccessException์ ๋ฐ๊ฒฌํ ์ ์๋ค
@Override
public int update(final String sql) throws DataAccessException {...}์คํ๋ง์ DataAccessException์ด๋ผ๋ SQLException์ ๋์ฒดํ ์ ์๋ ๋ฐํ์ ์์ธ๋ฅผ ์ ์ํ๊ณ ์์ ๋ฟ ์๋๋ผ, DataAccessException์ ์๋ธํด๋์ค๋ก ์ธ๋ถํ๋ ์์ธ ํด๋์ค๋ค์ ์ ์ํ๊ณ ์๋ค
โถ
๋ฐ์ดํฐ ์ก์ธ์ค ์์ ์ค์ ๋ฐ์ํ ์ ์๋ ์์ธ ์ํฉ์ ์์ญ ๊ฐ์ง ์์ธ๋ก ๋ถ๋ฅํ๊ณ ์ด๋ฅผ ์ถ์ํํด ์ ์ํ ๋ค์ํ ์์ธ ํด๋์ค๋ฅผ ์ ๊ณต
โ SQLException์ ๋นํ์ค ์๋ฌ์ฝ๋์ SQL ์ํ์ ๋ณด์ ๋ํ ํด๊ฒฐ์ฑ
ํ์
โ ์ผ์ผ์ด DB๋ณ๋ก ์๋ฌ ์ฝ๋์ ์ข ๋ฅ๋ฅผ ํ์ธํ๋ ์์ ์ ์ํํ๋ ๊ฒ์ ๋ถ๋ด์ค๋ฝ๋ค
โถ ์คํ๋ง์ DB๋ณ ์๋ฌ ์ฝ๋๋ฅผ ๋ถ๋ฅํด์ ์คํ๋ง์ด ์ ์ํ ์์ธ ํด๋์ค์ ๋งคํํด๋์ ์๋ฌ ์ฝ๋ ๋งคํ ์ ๋ณด ํ ์ด๋ธ์ ๋ง๋ค์ด๋๊ณ ์ด๋ฅผ ์ด์ฉํ๋ค
โถ JdbcTemplate์ SQLException์ ๋จ์ง ๋ฐํ์ ์์ธ์ธ DataAccessException์ผ๋ก ํฌ์ฅํ๋ ๊ฒ์ด ์๋๋ผ, DB์ ์๋ฌ ์ฝ๋๋ฅผ DataAccessException ๊ณ์ธต๊ตฌ์กฐ์ ํด๋์ค ์ค ํ๋๋ก ๋งคํํด์ค๋ค
DB ์ข ๋ฅ๋ฅผ ํ์ธํ๊ณ ๋๋ผ์ด๋ฒ๋ DB ๋ฉํ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด์ ์ ์ ํ ์์ธ ํด๋์ค๋ฅผ ์ ์ฑ ํ๊ธฐ ๋๋ฌธ์ DB๊ฐ ๋ฌ๋ผ์ ธ๋ ๊ฐ์ ์ข ๋ฅ์ ์๋ฌ๋ผ๋ฉด ๋์ผํ ์์ธ๋ฅผ ๋ฐ์ ์ ์๋ค
DAO ์๋ฐ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ธฐ์ ์์ ๋ ๋ฆฝ์ํค๋ ค๋ฉด ์ธํฐํ์ด์ค ๋์ ๊ณผ ๋ฐํ์ ์์ธ ์ ํ, ๊ธฐ์ ์ ๋ ๋ฆฝ์ ์ธ ์ถ์ํ๋ ์์ธ๋ก ์ ํ์ด ํ์ํ๋ค