Back-end/Spring

[Spring] ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ ๊ฐ–์ถ”๊ธฐ

๐Ÿคจ ์ง€๊ธˆ๊นŒ์ง€ ๋งŒ๋“ค์–ด์™”๋˜ DAO ๊ฐ์ฒด์—๋Š” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์ธ ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

 

์ •์ƒ์ ์ธ JDBC์ฝ”๋“œ์˜ ํ๋ฆ„์„ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ์ค‘๊ฐ„์— ์–ด๋–ค ์ด์œ ๋กœ๋“  ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉด,

์‹œ์Šคํ…œ์— ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ฅผ ์œ„ํ•ด ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

โœ๏ธ ์˜ˆ๋ฅผ ๋“ค์–ด, DAO ๊ฐ์ฒด์˜ deleteAll()์„ ๋ณด์ž.

public void deleteAll() throws SQLException {
	
    Connection c = dataSource.getConnection();
    PreparedStatement ps = c.prepareStatement("delete from users");
    
    ps.executeUpdate();
    
    ps.close();
	
    c.close();
}
        

 

deleteAll()์€ Connection๊ณผ PreparedStatement๋ผ๋Š” ๋‘๊ฐœ์˜ ๊ณต์œ  ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.'

์ด ๋‘๊ฐœ์˜ ๋ฆฌ์†Œ์Šค๋“ค์€ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉด close()๋ฅผ ํ˜ธ์ถœํ•ด ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ,

์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฉ”์†Œ๋“œ ์‹คํ–‰์„ ๋๋งˆ์น˜์ง€ ๋ชปํ•˜๊ณ  ๋ฐ”๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๊ฒŒ ๋˜๋ฒ„๋ฆฐ๋‹ค;;;

 

์ฆ‰, ์ œ๋Œ€๋กœ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

๐Ÿ’ก why?

 

์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„์—๋Š” ์ œํ•œ๋œ ๊ฐœ์ˆ˜์˜ DB ์ปค๋„ฅ์…˜์„ ๋งŒ๋“ค์–ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ’€(Pool)๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

DBํ’€์€ close() ํ•ด์„œ ๋Œ๋ ค์ค˜์•ผ์ง€๋งŒ ๋‹ค์‹œ ํ’€์— ๋„ฃ์—ˆ๋‹ค๊ฐ€ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,

์˜ค๋ฅ˜๊ฐ€ ๋‚  ๋•Œ๋งˆ๋‹ค ๋ฏธ์ฒ˜ ๋ฐ˜ํ™˜๋˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์ปค๋„ฅ์…˜ ํ’€์— ์‚ฌ์šฉํ•  ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ชจ์ž๋ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ๊ฒƒ์ด๋‹ค.

 

 

๐Ÿ’ก ๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด try/catch/finally ๊ตฌ๋ฌธ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž! 

public void deleteAll() throws SQLException {
	Connection c = null;
    PreparedStatement ps = null;
    try {
			c = dataSource.getConnection();
			ps = c.prepareStatement("delete from users");
			ps.executeUpdate();
		}catch(SQLException e) {
			throw e;
		}finally {
			if(ps != null) {
				try {
					ps.close();
				}catch(SQLException e) {

				}
			}
			if(c != null) {
				try {
					c.close();
				}catch(SQLException e) {

				}
			}
		}
 }

 

๐Ÿ’ก JDBC try/catch/finally ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ 

 

try/catch/finally ์ฝ”๋“œ๋ฅผ ํ›‘์–ด๋ณด๋ฉด ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ณต์žกํ•œ try/catch/finally ๋ธ”๋ก์ด 2์ค‘์œผ๋กœ ์ค‘์ฒฉ๊นŒ์ง€ ๋‚˜์˜ค๋ฉฐ, ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋งˆ๋‹ค ๋ฐ˜๋ณต์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

โœ๏ธ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

 

1. Copy & Paste

 

๊ฐ๊ฐ ํ•˜๋‚˜์”ฉ ๋งŒ๋“ค์–ด๋‘๊ณ  ๊ณ„์† ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์ผ๋ถ€ ์ฝ”๋“œ๋งŒ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ต์ˆ™ํ•ด์ง€๋ฉด ์‰ฝ๊ฒ ์ง€๋งŒ, ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์›Œ์งˆ ๊ฒƒ์ด๋‹ค.

 

2. ๋ถ„๋ฆฌ์™€ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋””์ž์ธ ํŒจํ„ด์„ ์ ์šฉํ•˜์ž

 

ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด, ์ „๋žตํŒจํ„ด, ํ…œํ”Œ๋ฆฟ ์ฝœ๋ฐฑ ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉฐ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“„ ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด : https://withseungryu.tistory.com/67?category=880574

 

[Spring] ๊ฐ์ฒด์ง€ํ–ฅ์  DAO - ๋ถ„๋ฆฌ (ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด)

๐Ÿ‘‰ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์„ธ๊ณ„์—์„œ๋Š” ๋ชจ๋“ ๊ฒƒ์ด ๋ณ€ํ•˜๋Š”๋ฐ, ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ๊ฐ์ฒด์— ๋Œ€ํ•œ ์„ค๊ณ„์™€ ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๊ฐ€ ๋ณ€ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ๋ฐ”๋กœ ๋ฏธ๋ž˜์˜ ๋ณ€ํ™”๋ฅผ ์–ด๋–ป๊ฒŒ

withseungryu.tistory.com

๐Ÿ“„ ์ „๋žต ํŒจํ„ด : https://withseungryu.tistory.com/68?category=880574

 

[Spring] ๊ฐ์ฒด์ง€ํ–ฅ์  DAO - ํ™•์žฅ (์ „๋žต ํŒจํ„ด)

๊ฐ์ฒด์ง€ํ–ฅ ์„ธ๊ณ„์—์„œ ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋Š” ๋ณ€ํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋‹ค ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ณ€ํ•˜์ง„ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ „ ๊ธ€์—์„œ, ์ƒ์†์„ ํ†ตํ•ด DAO๋ฅผ ๋ถ„๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒ์†์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ๏ฟฝ

withseungryu.tistory.com

 

์ง€๊ธˆ๊นŒ์ง€ ์ƒ์†์„ ์ด์šฉํ•œ ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ์ „๋žตํŒจํ„ด์„ ํ•ด๋ดค์œผ๋‹ˆ

๋‹ค์Œ ๊ธ€์—์„œ๋Š” ํ…œํ”Œ๋ฆฟ ์ฝœ๋ฐฑ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ๋ณต์žกํ•œ try/catch/finally ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž!

 

์ฐธ๊ณ  ๋ฌธ์„œ : 

ํ† ๋น„์˜ ์Šคํ”„๋ง3 (์ด์ผ๋ฏผ)

๋ฐ˜์‘ํ˜•