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

2023. 3. 31. 23:13ยทSpring/Spring DB

 

 

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

 

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


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

 

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

 

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

 

์ €์ž‘์žํ‘œ์‹œ

'Spring > Spring DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง DB 2ํŽธ] - 1. JdbcTemplate  (0) 2023.04.06
[์Šคํ”„๋ง DB 2ํŽธ] - 0. DTO / DAO  (0) 2023.04.05
[์Šคํ”„๋ง DB 1ํŽธ] - 14. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ฒ˜๋ฆฌ  (0) 2023.03.30
[์Šคํ”„๋ง DB 1ํŽธ] - 13. ์ฒดํฌ ์˜ˆ์™ธ์™€ ์–ธ์ฒดํฌ(๋Ÿฐํƒ€์ž„) ์˜ˆ์™ธ ํ™œ์šฉ  (0) 2023.03.29
[์Šคํ”„๋ง DB 1ํŽธ] - 12. ์˜ˆ์™ธ(Exception)์˜ ์ดํ•ด / ์ฒดํฌ,์–ธ์ฒดํฌ ์˜ˆ์™ธ  (0) 2023.03.29
'Spring/Spring DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์Šคํ”„๋ง DB 2ํŽธ] - 1. JdbcTemplate
  • [์Šคํ”„๋ง DB 2ํŽธ] - 0. DTO / DAO
  • [์Šคํ”„๋ง DB 1ํŽธ] - 14. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
  • [์Šคํ”„๋ง DB 1ํŽธ] - 13. ์ฒดํฌ ์˜ˆ์™ธ์™€ ์–ธ์ฒดํฌ(๋Ÿฐํƒ€์ž„) ์˜ˆ์™ธ ํ™œ์šฉ
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[์Šคํ”„๋ง DB 1ํŽธ] - 15. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ถ”์ƒํ™” ์ดํ•ด
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”