Spring/Spring DB

[์Šคํ”„๋ง DB 1ํŽธ] - 8. ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™”

hello_u 2023. 3. 24. 22:32

 

ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™”

 

๊ตฌํ˜„ ๊ธฐ์ˆ ๋งˆ๋‹ค ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๋‹ค.

 

JDBC : con.setAutoCommit(false) 

JPA : transaction.begin()

 

ํ–ฅํ›„ JDBC์—์„œ JPA ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด, ์„œ๋น„์Šค ๊ณ„์ธต์˜ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ จ ์ฝ”๋“œ๋„ ๋ชจ๋‘ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋Šฅ์„ ์ถ”์ƒํ™”ํ•˜๋ฉด ๋œ๋‹ค.

 

ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™” ์ธํ„ฐํŽ˜์ด์Šค

public interface TxManager {
    begin();
    commit();
    rollback();
}

 

TxManager ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ๊ฐ์˜ ๊ธฐ์ˆ ์— ๋งž๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

 

JdbcTxManager : JDBC ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ตฌํ˜„์ฒด


JpaTxManager : JPA ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ตฌํ˜„์ฒด

 

 

ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™”์™€ ์˜์กด๊ด€๊ณ„

 

์„œ๋น„์Šค๋Š” ํŠน์ • ํŠธ๋žœ์žญ์…˜ ๊ธฐ์ˆ ์— ์ง์ ‘ ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, TxManager ๋ผ๋Š” ์ถ”์ƒํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•œ๋‹ค.

 

ํด๋ผ์ด์–ธํŠธ์ธ ์„œ๋น„์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๊ณ  DI๋ฅผ ์‚ฌ์šฉํ•œ ๋•๋ถ„์— OCP ์›์น™์„ ์ง€ํ‚ค๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

์Šคํ”„๋ง์˜ ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™”

 

์šฐ๋ฆฌ๋Š” ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

์Šคํ”„๋ง ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™”์˜ ํ•ต์‹ฌ์€ PlatformTransactionManager ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

 

private final PlatformTransactionManager transactionManager;

//ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());

transactionManager.commit(status); //์„ฑ๊ณต์‹œ ์ปค๋ฐ‹
        
transactionManager.rollback(status); //์‹คํŒจ์‹œ ๋กค๋ฐฑ

 

 

 

 

ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™”

 

ํŠธ๋žœ์žญ์…˜์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ํŠธ๋žœ์žญ์…˜์˜ ์‹œ์ž‘๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•ด์•„ํ•œ๋‹ค.

 

๊ฒฐ๊ตญ ๊ฐ™์€ ์ปค๋„ฅ์…˜์„ ๋™๊ธฐํ™”(๋งž์ถ”์–ด ์‚ฌ์šฉ)ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด์ „์—๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ปค๋„ฅ์…˜์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ปค๋„ฅ์…˜์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ง€๋Š” ๊ฒƒ์€ ๋ฌผ๋ก ์ด๊ณ ,

 

์ปค๋„ฅ์…˜์„ ๋„˜๊ธฐ๋Š” ๋ฉ”์„œ๋“œ์™€ ๋„˜๊ธฐ์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ค‘๋ณตํ•ด์„œ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹จ์ ๋“ค์ด ๋งŽ๋‹ค.

 

 

 

ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €์™€ ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €

 

์Šคํ”„๋ง์€ ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

์ด๊ฒƒ์€ ์“ฐ๋ ˆ๋“œ ๋กœ์ปฌ( ThreadLocal )์„ ์‚ฌ์šฉํ•ด์„œ ์ปค๋„ฅ์…˜์„ ๋™๊ธฐํ™”ํ•ด์ค€๋‹ค.

 

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


ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €๋Š” ์“ฐ๋ ˆ๋“œ ๋กœ์ปฌ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ์ƒํ™ฉ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ปค๋„ฅ์…˜์„ ๋™๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ปค๋„ฅ์…˜์ด ํ•„์š”ํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ์ปค๋„ฅ์…˜์„ ํš๋“ํ•˜๋ฉด ๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ด์ „์ฒ˜๋Ÿผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ปค๋„ฅ์…˜์„ ์ „๋‹ฌํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

 

 

๋™์ž‘ ๋ฐฉ์‹

1. ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์ปค๋„ฅ์…˜์ด ํ•„์š”ํ•˜๋‹ค. ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €๋Š” ๋ฐ์ดํ„ฐ์†Œ์Šค๋ฅผ ํ†ตํ•ด ์ปค๋„ฅ์…˜์„ ๋งŒ๋“ค๊ณ  ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•œ๋‹ค.

 

2. ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €๋Š” ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋œ ์ปค๋„ฅ์…˜์„ ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €์— ๋ณด๊ด€ํ•œ๋‹ค.

 

3. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €์— ๋ณด๊ด€๋œ ์ปค๋„ฅ์…˜์„ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ปค๋„ฅ์…˜์„ ์ „๋‹ฌํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

4. ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €๋Š” ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €์— ๋ณด๊ด€๋œ ์ปค๋„ฅ์…˜์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•˜๊ณ , ์ปค๋„ฅ์…˜๋„ ๋‹ซ๋Š”๋‹ค.

 

 

DataSourceUtils.getConnection()

private Connection getConnection() throws SQLException {
    //์ฃผ์˜! ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด DataSourceUtils๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    Connection con = DataSourceUtils.getConnection(dataSource);
    log.info("get connection={} class={}", con, con.getClass());
    return con;
} 

 

ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ปค๋„ฅ์…˜์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ์ปค๋„ฅ์…˜์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ปค๋„ฅ์…˜์ด ์—†๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €๋Š” ๋ฐ์ดํ„ฐ์†Œ์Šค๋ฅผ ํ†ตํ•ด ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ DataSource ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

 

DataSourceUtils.releaseConnection()

private void close(Connection con, Statement stmt, ResultSet rs) {
    JdbcUtils.closeResultSet(rs);
    JdbcUtils.closeStatement(stmt);
    //์ฃผ์˜! ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด DataSourceUtils๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    DataSourceUtils.releaseConnection(con, dataSource);
}

 

DataSourceUtils.releaseConnection() ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปค๋„ฅ์…˜์„ ๋ฐ”๋กœ ๋‹ซ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

 

ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋™๊ธฐํ™”๋œ ์ปค๋„ฅ์…˜์€ ์ปค๋„ฅ์…˜์„ ๋‹ซ์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์ค€๋‹ค.

 

ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ปค๋„ฅ์…˜์ด ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ปค๋„ฅ์…˜์„ ๋‹ซ๋Š”๋‹ค.

 

 

ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €์˜ ์ „์ฒด ๋™์ž‘ ํ๋ฆ„

 

ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €1 - ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘

 

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์œผ๋กœ ์„œ๋น„์Šค ๋กœ์ง์„ ์‹คํ–‰ํ•œ๋‹ค.

 

 

1. ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ transactionManager.getTransaction() ์„ ํ˜ธ์ถœํ•ด์„œ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•œ๋‹ค.

 

 

2. ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์ด ํ•„์š”ํ•˜๋‹ค.

 

ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €๋Š” ๋‚ด๋ถ€์—์„œ ๋ฐ์ดํ„ฐ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•œ๋‹ค.

 

 

3. ์ปค๋„ฅ์…˜์„ ์ˆ˜๋™ ์ปค๋ฐ‹ ๋ชจ๋“œ๋กœ ๋ณ€๊ฒฝํ•ด์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•œ๋‹ค.

 

 

4. ์ปค๋„ฅ์…˜์„ ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €์— ๋ณด๊ด€ํ•œ๋‹ค.

 

 

5. ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €๋Š” ์“ฐ๋ ˆ๋“œ ๋กœ์ปฌ์— ์ปค๋„ฅ์…˜์„ ๋ณด๊ด€ํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ปค๋„ฅ์…˜์„ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €2 - ๋กœ์ง ์‹คํ–‰

 

 

6. ์„œ๋น„์Šค๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์‹คํ–‰ํ•˜๋ฉด์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ฉ”์„œ๋“œ๋“ค์„ ํ˜ธ์ถœํ•œ๋‹ค.

 

์ด๋•Œ ์ปค๋„ฅ์…˜์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

7. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋“ค์€ ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋œ ์ปค๋„ฅ์…˜์ด ํ•„์š”ํ•˜๋‹ค.

 

๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” DataSourceUtils.getConnection() ์„ ์‚ฌ์šฉํ•ด์„œ ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €์— ๋ณด๊ด€๋œ ์ปค๋„ฅ์…˜์„ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

์ด ๊ณผ์ •์„ ํ†ตํ•ด์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฐ™์€ ์ปค๋„ฅ์…˜์„ ์‚ฌ์šฉํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜๋„ ์œ ์ง€๋œ๋‹ค.

 

 

8. ํš๋“ํ•œ ์ปค๋„ฅ์…˜์„ ์‚ฌ์šฉํ•ด์„œ SQL์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ „๋‹ฌํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค.

 

 

 

ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €3 - ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ

 

 

9. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋๋‚˜๊ณ  ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•œ๋‹ค.

 

ํŠธ๋žœ์žญ์…˜์€ ์ปค๋ฐ‹ํ•˜๊ฑฐ๋‚˜ ๋กค๋ฐฑํ•˜๋ฉด ์ข…๋ฃŒ๋œ๋‹ค.

 

 

10. ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•˜๋ ค๋ฉด ๋™๊ธฐํ™”๋œ ์ปค๋„ฅ์…˜์ด ํ•„์š”ํ•˜๋‹ค.

 

ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ๋™๊ธฐํ™”๋œ ์ปค๋„ฅ์…˜์„ ํš๋“ํ•œ๋‹ค.

 

 

11. ํš๋“ํ•œ ์ปค๋„ฅ์…˜์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•˜๊ฑฐ๋‚˜ ๋กค๋ฐฑํ•œ๋‹ค.

 

 

12. ์ „์ฒด ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•œ๋‹ค.

 

ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €๋ฅผ ์ •๋ฆฌํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ ๋กœ์ปฌ์€ ์‚ฌ์šฉํ›„ ๊ผญ ์ •๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

 

con.setAutoCommit(true) ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค. ์ปค๋„ฅ์…˜ ํ’€์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

 

con.close() ๋ฅผ ํ˜ธ์ถœํ•ด์…” ์ปค๋„ฅ์…˜์„ ์ข…๋ฃŒํ•œ๋‹ค.

 

์ปค๋„ฅ์…˜ ํ’€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ con.close() ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ปค๋„ฅ์…˜ ํ’€์— ๋ฐ˜ํ™˜๋œ๋‹ค.

 

 

 

์ •๋ฆฌ

 

ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™” ๋•๋ถ„์— ์„œ๋น„์Šค ์ฝ”๋“œ๋Š” ์ด์ œ JDBC ๊ธฐ์ˆ ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์ดํ›„ JDBC์—์„œ JPA๋กœ ๋ณ€๊ฒฝํ•ด๋„ ์„œ๋น„์Šค ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ธฐ์ˆ  ๋ณ€๊ฒฝ์‹œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…๋งŒ DataSourceTransactionManager ์—์„œ JpaTransactionManager ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ € ๋•๋ถ„์— ์ปค๋„ฅ์…˜์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard

 

์Šคํ”„๋ง DB 1ํŽธ - ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํ•ต์‹ฌ ์›๋ฆฌ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ DB ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ ์„ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ , ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ ์˜ ์›๋ฆฌ์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋” ๊นŠ์ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜

www.inflearn.com