Spring/Spring DB

[์Šคํ”„๋ง DB 1ํŽธ] - 15. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ถ”์ƒํ™” ์ดํ•ด

hello_u 2023. 3. 31. 23:13

 

 

์Šคํ”„๋ง ์˜ˆ์™ธ ์ถ”์ƒํ™”

 

์Šคํ”„๋ง์€ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์— ๋Œ€ํ•œ ์ˆ˜์‹ญ ๊ฐ€์ง€ ์˜ˆ์™ธ๋ฅผ ์ •๋ฆฌํ•ด์„œ ์ผ๊ด€๋œ ์˜ˆ์™ธ ๊ณ„์ธต์„ ์ œ๊ณตํ•œ๋‹ค.


๊ฐ๊ฐ์˜ ์˜ˆ์™ธ๋Š” ํŠน์ • ๊ธฐ์ˆ ์— ์ข…์†์ ์ด์ง€ ์•Š๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ๋„ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ 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);

 

์Šคํ”„๋ง์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์Šคํ”„๋ง์ด ์ •์˜ํ•œ ์˜ˆ์™ธ๋กœ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋ณ€ํ™˜๊ธฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

BadSqlGrammarException

 

์˜ˆ์ œ์—์„œ๋Š” 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