๐คจ ์ง๊ธ๊น์ง ๋ง๋ค์ด์๋ 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 (์ด์ผ๋ฏผ)
'Back-end > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] JdbcTemplate์ด๋? (0) | 2020.08.19 |
---|---|
[Spring] ํ ํ๋ฆฟ ์ฝ๋ฐฑ ํจํด (1) | 2020.08.17 |
[Spring] ํ์ต ํ ์คํธ, ๋ฒ๊ทธ ํ ์คํธ (0) | 2020.08.13 |
[Spring] ํ ์คํธ๋ฅผ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ ๊ด๋ฆฌ (0) | 2020.08.12 |
[Spring] JUnit - @Before, @After (0) | 2020.08.12 |