Transaction Isolation

  • READ UNCOMMITED: ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์ฝ๋Š”๋‹ค.
  • READ COMMITED: ์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ๋Š”๋‹ค.
  • REPETABLE READ: ์ž์‹ ์˜ ํŠธ๋žœ์žญ์…˜์ด ์ƒ์„ฑ๋˜๊ธฐ ์ด์ „์˜ ํŠธ๋žœ์žญ์…˜(๋‚ฎ์€ ๋ฒˆํ˜ธ์˜ ํŠธ๋žœ์žญ์…˜)์˜ ์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ๋Š”๋‹ค.
  • SERIALIZABLE: Lock ๊ฑธ๊ณ  ์‚ฌ์šฉ.
  • DEFAULT: ์‚ฌ์šฉํ•˜๋Š” DB ๊ธฐ๋ณธ ์„ค์ •์„ ๋”ฐ๋ฅธ๋‹ค. (ORACLE์€ READ_COMMITED, MySQL InnoDB๋Š” REPETABLE_READ)

Commit

auto commit ๋ชจ๋“œ์—์„œ manual commit ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ๊ด€๋ก€์ ์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

DB Connection

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ DB ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ๊ฐ™์€ Connection์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ๊ฐ™์€ ์„ธ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Exception

๊น€์˜ํ•œ๋‹˜ ์Šคํ”„๋ง DB 2ํŽธ - ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํ•ต์‹ฌ ์›๋ฆฌ ๊ฐ•์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

์˜ˆ์™ธ์— ๋Œ€ํ•ด์„œ๋Š” 2๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ทœ์น™์„ ๊ธฐ์–ตํ•  ๊ฒƒ

  1. ์˜ˆ์™ธ๋Š” ์žก์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋˜์ ธ์•ผ ํ•œ๋‹ค.
  2. ์˜ˆ์™ธ๋ฅผ ์žก๊ฑฐ๋‚˜ ๋˜์งˆ ๋•Œ๋Š” ์ง€์ •ํ•œ ์˜ˆ์™ธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ ์ž์‹๋“ค๋“œ ํ•จ๊ป˜ ์ฒ˜๋ฆฌ๋œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด์„œ, Exception์„ catch๋กœ ๋ฐ›์œผ๋ฉด ๊ทธ ํ•˜์œ„ ์˜ˆ์™ธ๋“ค๋„ ์ „๋ถ€ ์žก์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด์„œ, Exception์„ throws Exception์œผ๋กœ ๋˜์ง€๋ฉด ๊ทธ ํ•˜์œ„ ์˜ˆ์™ธ๋“ค๋„ ๋ชจ๋‘ ๋˜์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ : ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ณ  ๊ณ„์† ๋˜์ง€๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

  • Java main() ์“ฐ๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ์—๋Š” ์˜ˆ์™ธ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด์„œ ์‹œ์Šคํ…œ์ด ์ข…๋ฃŒ๋œ๋‹ค.
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ์˜ˆ์™ธ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์ด ์ข…๋ฃŒ๋˜๋ฉด ์•ˆ ๋œ๋‹ค. WAS๊ฐ€ ํ•ด๋‹น ์˜ˆ์™ธ๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, ์ฃผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•œ ์˜ค๋ฅ˜ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
  class Controller {
    .
    .
    .

    public void request() throws SQLException, ConnectException {
      service.executeBusinessLogic();
    }
  }

  class Service {
     .
     .
     .

    public void executeBusinessLogic() throws SQLException, ConnectException {
      repository.call();
      networkClient.call();
    }
  }

throws SQLException, ConnectException์ฒ˜๋Ÿผ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๋ถ€๋ถ„์„ ์ฝ”๋“œ์—์„œ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ์™œ ๋ฌธ์ œ์ด๋พ? ๋ฐ”๋กœ ์„œ๋น„์Šค, ์ปจํŠธ๋กค๋Ÿฌ ๋‹จ์—์„œ java.sql.SQLException์„ ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธด๋‹ค. ํ–ฅํ›„ Repository๋ฅผ JDBC ๊ธฐ์ˆ ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ธฐ์ˆ ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด, ๊ทธ๋ž˜์„œ SQLException์ด ์•„๋‹ˆ๋ผ ์˜ˆ๋ฅผ ๋“ค์–ด, JPAException์œผ๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด SQLException์— ์˜์กดํ•˜๋Š” ๋ชจ๋“  Service, Controller ์ฝ”๋“œ๋ฅผ JPAException์— ์˜์กดํ•˜๋„๋ก ๊ณ ์ณ์•ผ ํ•œ๋‹ค. Service๋‚˜ Controller ์ž…์žฅ์—์„œ๋Š” ์–ด์ฐจํ”ผ ๋ณธ ๊ณ„์ธต์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์˜ˆ์™ธ๋ฅผ ์˜์กดํ•œ๋‹ค๋Š” ์ ์—์„œ ํฐ ๋น„ํšจ์œจ์„ฑ์ด ๋ฐœ์ƒํ•œ๋‹ค(SQL ์ฟผ๋ฆฌ ๋ฌธ์ œ๋‚˜, ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๋ฅผ Service๋‚˜ Controller ๋‹จ์—์„œ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์ด ์žˆ๋‚˜?). ๊ฒฐ๊ณผ์ ์€ OCP(Open-Close-Principle), DI๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์—†์ด ๋Œ€์ƒ ๊ตฌํ˜„์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์Šคํ”„๋ง์˜ ์žฅ์ ์ด CheckedException ๋•Œ๋ฌธ์— ๋ฐœ๋ชฉ์„ ์žกํžˆ๊ฒŒ ๋œ๋‹ค.

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ