[์คํ๋ง DB 1ํธ] - 15. ์คํ๋ง ์์ธ ์ถ์ํ ์ดํด
์คํ๋ง ์์ธ ์ถ์ํ
์คํ๋ง์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ๋ํ ์์ญ ๊ฐ์ง ์์ธ๋ฅผ ์ ๋ฆฌํด์ ์ผ๊ด๋ ์์ธ ๊ณ์ธต์ ์ ๊ณตํ๋ค.
๊ฐ๊ฐ์ ์์ธ๋ ํน์ ๊ธฐ์ ์ ์ข
์์ ์ด์ง ์๊ฒ ์ค๊ณ๋์ด ์๋ค.
๋ฐ๋ผ์ ์๋น์ค ๊ณ์ธต์์๋ ์คํ๋ง์ด ์ ๊ณตํ๋ ์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด์ JDBC ๊ธฐ์ ์ ์ฌ์ฉํ๋ , JPA ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์คํ๋ง์ด ์ ๊ณตํ๋ ์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
JDBC๋ JPA๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์คํ๋ง์ด ์ ๊ณตํ๋ ์์ธ๋ก ๋ณํํด์ฃผ๋ ์ญํ ๋ ์คํ๋ง์ด ์ ๊ณตํ๋ค.
์คํ๋ง ๋ฐ์ดํฐ ์ ๊ทผ ์์ธ ๊ณ์ธต

DataAccessException ์ ํฌ๊ฒ 2๊ฐ์ง๋ก ๊ตฌ๋ถํ๋๋ฐ NonTransient ์์ธ์ Transient ์์ธ์ด๋ค.
Transient
Transient ๋ ์ผ์์ ์ด๋ผ๋ ๋ป์ด๋ค. Transient ํ์ ์์ธ๋ ๋์ผํ SQL์ ๋ค์ ์๋ํ์ ๋ ์ฑ๊ณตํ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
์๋ฅผ ๋ค์ด์ ์ฟผ๋ฆฌ ํ์์์, ๋ฝ๊ณผ ๊ด๋ จ๋ ์ค๋ฅ๋ค์ด๋ค.
์ด๋ฐ ์ค๋ฅ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๊ฐ ์ข์์ง๊ฑฐ๋, ๋ฝ์ด ํ๋ ธ์ ๋ ๋ค์ ์๋ํ๋ฉด ์ฑ๊ณตํ ์ ๋ ์๋ค.
NonTransient
NonTransient ๋ ์ผ์์ ์ด์ง ์๋ค๋ ๋ป์ด๋ค.
๊ฐ์ SQL์ ๊ทธ๋๋ก ๋ฐ๋ณตํด์ ์คํํ๋ฉด ์คํจํ๋ค. SQL ๋ฌธ๋ฒ ์ค๋ฅ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฝ์กฐ๊ฑด ์๋ฐฐ ๋ฑ์ด ์๋ค.
์คํ๋ง์ด ์ ๊ณตํ๋ ์์ธ ๋ณํ๊ธฐ
String sql = "select bad grammar";
try {
Connection con = dataSource.getConnection();
PreparedStatement stmt = con.prepareStatement(sql);
stmt.executeQuery();
} catch (SQLException e) {
assertThat(e.getErrorCode()).isEqualTo(42122);
//org.springframework.jdbc.support.sql-error-codes.xml
SQL ErrorCode๋ฅผ ์ง์ ํ์ธํ๋ ๋ฐฉ๋ฒ
์คํ๋ง์ ์์ธ ์ฒด๊ณ์ ๋ง์ถ์ด ์์ธ๋ฅผ ์ง์ ๋ณํํด์ผ ํ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ์ค๋ฅ ์ฝ๋๊ฐ ๋ค๋ฅด๋ค๋ ์ ๋ ํด๊ฒฐํด์ผ ํ๋ค.
SQLExceptionTranslator exTranslator = new
SQLErrorCodeSQLExceptionTranslator(dataSource);
DataAccessException resultEx = exTranslator.translate("select", sql, e);
์คํ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ํ๋ ์ค๋ฅ ์ฝ๋๋ฅผ ์คํ๋ง์ด ์ ์ํ ์์ธ๋ก ์๋์ผ๋ก ๋ณํํด์ฃผ๋ ๋ณํ๊ธฐ๋ฅผ ์ ๊ณตํ๋ค.
์์ ์์๋ SQL ๋ฌธ๋ฒ์ด ์๋ชป๋์์ผ๋ฏ๋ก BadSqlGrammarException ์ ๋ฐํํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋์ ๋ณด์ด๋ ๋ฐํ ํ์ ์ ์ต์์ ํ์ ์ธ DataAccessException ์ด์ง๋ง ์ค์ ๋ก๋ BadSqlGrammarException ์์ธ๊ฐ ๋ฐํ๋๋ค.
BadSqlGrammarException ์ ์ต์์ ํ์ ์ธ DataAccessException ๋ฅผ ์์ ๋ฐ์์ ๋ง๋ค์ด์ง๋ค.
์ ๋ฆฌ
์คํ๋ง์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ๋ํ ์ผ๊ด๋ ์์ธ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ค.
์คํ๋ง์ ์์ธ ๋ณํ๊ธฐ๋ฅผ ํตํด์ SQLException ์ ErrorCode ์ ๋ง๋ ์ ์ ํ ์คํ๋ง ๋ฐ์ดํฐ ์ ๊ทผ ์์ธ๋ก ๋ณํํด์ค๋ค.
๋ง์ฝ ์๋น์ค, ์ปจํธ๋กค๋ฌ ๊ณ์ธต์์ ์์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ฉด ํน์ ๊ธฐ์ ์ ์ข
์์ ์ธ SQLException ๊ฐ์ ์์ธ๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ,
์คํ๋ง์ด ์ ๊ณตํ๋ ๋ฐ์ดํฐ ์ ๊ทผ ์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์คํ๋ง ์์ธ ์ถ์ํ ๋๋ถ์ ํน์ ๊ธฐ์ ์ ์ข
์์ ์ด์ง ์๊ฒ ๋์๋ค.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard
์คํ๋ง DB 1ํธ - ๋ฐ์ดํฐ ์ ๊ทผ ํต์ฌ ์๋ฆฌ - ์ธํ๋ฐ | ๊ฐ์
๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ์ํ DB ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ๊ธฐ์ด๋ถํฐ ์ดํดํ๊ณ , ์์ฑํ ์ ์์ต๋๋ค. ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ ์ ์๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ , ๋ ๊น์ด์๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ ์ ์์ต๋๋ค., - ๊ฐ์
www.inflearn.com