Back-end/Spring

[Spring] ํŠธ๋žœ์žญ์…˜ ๋ฌธ์ œ ํ•ด๊ฒฐ - ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๊ธฐ๋ฒ•

๐Ÿง ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์ด๋ž€?

 

ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  Connection ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํŠน๋ณ„ํ•œ ์ €์žฅ์†Œ์— ๋ณด๊ด€ํ•˜๋ฉด์„œ,

ํ˜ธ์ถœ๋˜๋Š” DAO์˜ ๋ฉ”์†Œ๋“œ์—์„œ ์•ž์„œ ์ €์žฅ๋œ Connection์„ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•.

 

์ฆ‰, ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์„ ๋™๊ธฐํ™” ๋ฐฉ์‹์„ ํ†ตํ•ด ์ด ์‚ฌ์ด์— ์‹คํ–‰๋œ ๋ฉ”์†Œ๋“œ๋“ค์€ ๋™๊ธฐํ™”๋œ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋ฒ•.

 

UserService์˜ ํŠธ๋žœ์žญ์…˜ ์›์ž์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด ํ•ด๊ฒฐํ•ด๋ณด์ž

 

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

 

๋”ฐ๋ผ์„œ ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋“ค์„ ํ†ตํ•ด ๋™๊ธฐํ™”๋ฅผ ํ•ด๋ณด์ž.

 

TransactionSynchronizationManager ๋ฉ”์†Œ๋“œ๋“ค

 

๐Ÿ‘‰ initSynchronization : ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๊ด€๋ฆฌ์ž๋ฅผ ์ด์šฉํ•ด ๋™๊ธฐํ™” ์ž‘์—…์„ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค.

๐Ÿ‘‰ unbindResource, clearSynchronization : ๋™๊ธฐํ™” ์ž‘์—…์„ ์ข…๋ฃŒ ๋ฐ ์ •๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.

 

์•ž์„  ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„์„ค์ • ๊ตฌ์กฐ์— ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ upgradeLevels ๋ฉ”์†Œ๋“œ

 

ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„์„ค์ • ๊ตฌ์กฐ๋ž€?

https://withseungryu.tistory.com/97

 

[Spring] ํŠธ๋žœ์žญ์…˜ ๋ฌธ์ œ ์ฐพ๊ธฐ

๐Ÿง ๋ ˆ๋ฒจ ์—…๊ทธ๋ ˆ์ด๋“œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ, ์—…๊ทธ๋ ˆ์ด๋“œ ๋ณ€๊ฒฝ ๊ณผ์ • ์ค‘์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด? ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ธฐ ์ „๊นŒ์ง€ ์œ ์ €๋“ค์€ ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ๋ ๊นŒ? ํ•œ๋ฒˆ ์ผ๋ถ€๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ๊ณผ์ • ์ค‘์— ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ

withseungryu.tistory.com

 

public void upgradeLevels(int event) throws Exception {
		TransactionSynchronizationManager.initSynchronization();
		Connection c = DataSourceUtils.getConnection(dataSource);
		
		c.setAutoCommit(false);
		
		try{
			List<User> users = userDao.getAll();
			for(User user : users) {
				
				if(event == 0) {
					if(canUpgradeLevel(user)) {
						upgradeLevel(user);
			
					}
				}else {
					if(userLevelUpgradePolicy.canUpgradeLevel(user)) {
						userLevelUpgradePolicy.upgradeLevel(user);
					}
				}
			}
			c.commit();
		}catch(Exception e) {
			c.rollback();
			throw e;
		}finally {
			DataSourceUtils.releaseConnection(c, dataSource);
			TransactionSynchronizationManager.unbindResource(this.dataSource);
			TransactionSynchronizationManager.clearSynchronization();
		}
}

์œ„์™€ ๊ฐ™์ด ํ•˜๋ฉด user๋งˆ๋‹ค update() ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰ ์‹œ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋™๊ธฐํ™”ํ•ด์„œ ์‹คํ–‰.

 

์ด๋•Œ JdbcTemplate์€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ง์ ‘ Connection์„ ์ƒ์„ฑํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š”๋ฐ,

๊ณผ์—ฐ ๋™๊ธฐํ™” ์‹œ์ผฐ์„ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘์„ ํ• ๊นŒ?

 

JdbcTemplate์€ ์˜๋ฆฌํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋œ ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ์ €์žฅ์†Œ์— ํŠธ๋žœ์žญ์…˜์ด ์—†์„ ๋•Œ๋Š” ์ง์ ‘ ๋งŒ๋“ค์ง€๋งŒ

ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ์ €์žฅ์†Œ์— ํŠธ๋žœ์žญ์…˜์ด ์กด์žฌํ•˜๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์ด๋ฅผ ์ด์šฉํ•ด ๋™์ž‘ํ•œ๋‹ค.

 

๐Ÿ“ƒ ์ •๋ฆฌ 

ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๊ฒฝ์šฐ๋ฅผ ์ž˜ ํŒŒ์•…์„ ํ•˜์—ฌ ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์ฃผ์ž!

๋ฐ˜์‘ํ˜•