DataSource ์ดํด

์ปค๋ฅ์ ์ ์ป๋ ๋ฐฉ๋ฒ์ ์์ ํ์ตํ JDBC DriverManager ๋ฅผ ์ง์ ์ฌ์ฉํ๊ฑฐ๋, ์ปค๋ฅ์ ํ์ ์ฌ์ฉํ๋ ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
DriverManager๋ฅผ ํตํด ์ปค๋ฅ์ ํ๋ํ๋ค๊ฐ ์ปค๋ฅ์ ํ๋ก ๋ณ๊ฒฝ์ ๋ฌธ์
์ฐ๋ฆฌ๊ฐ ์์ JDBC๋ก ๊ฐ๋ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์ฒ๋ผ DriverManager ๋ฅผ ํตํด์ ์ปค๋ฅ์ ์ ํ๋ํ๋ค๊ฐ,
์ปค๋ฅ์ ํ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ณ๊ฒฝํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?

์๋ฅผ ๋ค์ด์ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์์ DriverManager ๋ฅผ ์ฌ์ฉํด์ ์ปค๋ฅ์ ์ ํ๋ํ๋ค๊ฐ
HikariCP ๊ฐ์ ์ปค๋ฅ์ ํ์ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝํ๋ฉด ์ปค๋ฅ์ ์ ํ๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ ํจ๊ป ๋ณ๊ฒฝํด์ผ ํ๋ค.
์์กด๊ด๊ณ๊ฐ DriverManager ์์ HikariCP ๋ก ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฌผ๋ก ๋์ ์ฌ์ฉ๋ฒ๋ ์กฐ๊ธ์ฉ ๋ค๋ฅผ ๊ฒ์ด๋ค.
์ปค๋ฅ์ ์ ํ๋ํ๋ ๋ฐฉ๋ฒ์ ์ถ์ํ

์๋ฐ์์๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด javax.sql.DataSource ๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
DataSource ๋ ์ปค๋ฅ์ ์ ํ๋ํ๋ ๋ฐฉ๋ฒ์ ์ถ์ํ ํ๋ ์ธํฐํ์ด์ค์ด๋ค.
์ด ์ธํฐํ์ด์ค์ ํต์ฌ ๊ธฐ๋ฅ์ ์ปค๋ฅ์ ์กฐํ ํ๋์ด๋ค. (๋ค๋ฅธ ์ผ๋ถ ๊ธฐ๋ฅ๋ ์์ง๋ง ํฌ๊ฒ ์ค์ํ์ง ์๋ค.)
public interface DataSource {
Connection getConnection() throws SQLException;
}
์ ๋ฆฌ
๋๋ถ๋ถ์ ์ปค๋ฅ์ ํ์ DataSource ์ธํฐํ์ด์ค๋ฅผ ์ด๋ฏธ ๊ตฌํํด๋์๋ค.
๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ DBCP2 ์ปค๋ฅ์ ํ , HikariCP ์ปค๋ฅ์ ํ ์ ์ฝ๋๋ฅผ ์ง์ ์์กดํ๋ ๊ฒ์ด ์๋๋ผ
DataSource ์ธํฐํ์ด์ค์๋ง ์์กดํ๋๋ก ์ ํ๋ฆฌ์ผ์ด์
๋ก์ง์ ์์ฑํ๋ฉด ๋๋ค.
์ปค๋ฅ์ ํ ๊ตฌํ ๊ธฐ์ ์ ๋ณ๊ฒฝํ๊ณ ์ถ์ผ๋ฉด ํด๋น ๊ตฌํ์ฒด๋ก ๊ฐ์๋ผ์ฐ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
์คํ๋ง์ DriverManager ๋ DataSource ๋ฅผ ํตํด์ ์ฌ์ฉํ ์ ์๋๋ก
DriverManagerDataSource ๋ผ๋ DataSource ๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ์ ๊ณตํ๋ค.
๋๋ถ์ DriverManagerDataSource ๋ฅผ ํตํด์ DriverManager ๋ฅผ ์ฌ์ฉํ๋ค๊ฐ
์ปค๋ฅ์ ํ์ ์ฌ์ฉํ๋๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋ค.
DriverManager ๋ฅผ ํตํด์ ์ปค๋ฅ์ ์ ํ๋ํ๋ ๋ฐฉ๋ฒ
void driverManager() throws SQLException {
Connection con1 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
Connection con2 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
log.info("connection={}, class={}", con1, con1.getClass());
log.info("connection={}, class={}", con2, con2.getClass());
}
์ค์ ์ปค๋ฅ์ ์ ๊ฐ๊ฐ ๊ฐ์ ธ์ค๊ณ ์๋ค . --> ์๋ก ๋ค๋ฅธ ์ปค๋ฅ์ conn0 , conn1
DriverManagerDataSource ๋ฅผ ์ฌ์ฉ
์คํ๋ง์ด ์ ๊ณตํ๋ DataSource ๊ฐ ์ ์ฉ๋ DriverManager
void dataSourceDriverManager() throws SQLException {
//DriverManagerDataSource - ํญ์ ์๋ก์ด ์ปค๋ฅ์
์ ํ๋
DriverManagerDataSource dataSource = new DriverManagerDataSource(URL, USERNAME, PASSWORD);
useDataSource(dataSource);
}
private void useDataSource(DataSource dataSource) throws SQLException {
Connection con1 = dataSource.getConnection();
Connection con2 = dataSource.getConnection();
log.info("connection={}, class={}", con1, con1.getClass());
log.info("connection={}, class={}", con2, con2.getClass());
}
์ธํฐํ์ด์ค(DataSource)๋ฅผ ํตํด ๊ฐ์ ธ์จ๋ค๋ ์ฐจ์ด
๊ธฐ์กด ์ฝ๋์ ๋น์ทํ์ง๋ง DriverManagerDataSource ๋ DataSource ๋ฅผ ํตํด์ ์ปค๋ฅ์ ์ ํ๋ํ ์ ์๋ค.
์ค์ ๊ณผ ์ฌ์ฉ์ ๋ถ๋ฆฌ
Connection con1 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
Connection con2 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
DriverManager ๋ ์ปค๋ฅ์ ์ ํ๋ํ ๋ ๋ง๋ค URL , USERNAME , PASSWORD ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ณ์ ์ ๋ฌํด์ผ ํ๋ค.
DriverManagerDataSource dataSource = new DriverManagerDataSource(URL, USERNAME, PASSWORD);
๋ฐ๋ฉด์ DataSource ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ฒ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ง ํ์ํ ํ๋ฆฌ๋ฏธํฐ๋ฅผ ๋๊ฒจ๋๊ณ ,
Connection con1 = dataSource.getConnection();
Connection con2 = dataSource.getConnection();
์ปค๋ฅ์ ์ ํ๋ํ ๋๋ ๋จ์ํ dataSource.getConnection() ๋ง ํธ์ถํ๋ฉด ๋๋ค.
์ค์ : DataSource ๋ฅผ ๋ง๋ค๊ณ ํ์ํ ์์ฑ๋ค์ ์ฌ์ฉํด์ URL , USERNAME , PASSWORD ๊ฐ์ ๋ถ๋ถ์ ์ ๋ ฅํ๋ ๊ฒ์ ๋งํ๋ค.
์ด๋ ๊ฒ ์ค์ ๊ณผ ๊ด๋ จ๋ ์์ฑ๋ค์ ํ ๊ณณ์ ์๋ ๊ฒ์ด ํฅํ ๋ณ๊ฒฝ์ ๋ ์ ์ฐํ๊ฒ ๋์ฒํ ์ ์๋ค.
์ฌ์ฉ: ์ค์ ์ ์ ๊ฒฝ์ฐ์ง ์๊ณ , DataSource ์ getConnection() ๋ง ํธ์ถํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด ๋ถ๋ถ์ด ์์๋ณด์ด์ง๋ง ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค์ด๋ด๋๋ฐ, ํ์ํ ๋ฐ์ดํฐ๋ฅผ DataSource ๊ฐ ๋ง๋ค์ด์ง๋ ์์ ์ ๋ฏธ๋ฆฌ ๋ค ๋ฃ์ด๋๊ฒ ๋๋ฉด,
DataSource ๋ฅผ ์ฌ์ฉํ๋ ๊ณณ์์๋ dataSource.getConnection() ๋ง ํธ์ถํ๋ฉด ๋๋ฏ๋ก,
URL , USERNAME , PASSWORD ๊ฐ์ ์์ฑ๋ค์ ์์กดํ์ง ์์๋ ๋๋ค.
๊ทธ๋ฅ DataSource ๋ง ์ฃผ์ ๋ฐ์์ getConnection() ๋ง ํธ์ถํ๋ฉด ๋๋ค.
์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ๋ฆฌํฌ์งํ ๋ฆฌ(Repository)๋ DataSource ๋ง ์์กดํ๊ณ , ์ด๋ฐ ์์ฑ์ ๋ชฐ๋ผ๋ ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํด๋ณด๋ฉด ๋ณดํต ์ค์ ์ ํ ๊ณณ์์ ํ์ง๋ง, ์ฌ์ฉ์ ์ ๋ง์ ๊ณณ์์ ํ๊ฒ ๋๋ค.
๋๋ถ์ ๊ฐ์ฒด๋ฅผ ์ค์ ํ๋ ๋ถ๋ถ๊ณผ, ์ฌ์ฉํ๋ ๋ถ๋ถ์ ์ข ๋ ๋ช
ํํ๊ฒ ๋ถ๋ฆฌํ ์ ์๋ค.
DataSource ๋ฅผ ํตํด ์ปค๋ฅ์ ํ์ ์ฌ์ฉ
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(URL);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);
dataSource.setMaximumPoolSize(10);
dataSource.setPoolName("MyPool");
HikariCP ์ปค๋ฅ์ ํ์ ์ฌ์ฉํ๋ค.
HikariDataSource ๋ DataSource ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ค.
์ปค๋ฅ์ ํ ์ต๋ ์ฌ์ด์ฆ๋ฅผ 10์ผ๋ก ์ง์ ํ๊ณ , ํ์ ์ด๋ฆ์ MyPool ์ด๋ผ๊ณ ์ง์ ํ๋ค.
useDataSource(dataSource);
Thread.sleep(1000);
์ปค๋ฅ์ ํ์์ ์ปค๋ฅ์ ์ ์์ฑํ๋ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์๋์ ์ํฅ์ ์ฃผ์ง ์๊ธฐ ์ํด ๋ณ๋์ ์ฐ๋ ๋์์ ์๋ํ๋ค.
์ปค๋ฅ์ ํ์ ์ปค๋ฅ์ ์ ์ฑ์ฐ๋ ๊ฒ์ ์๋์ ์ผ๋ก ์ค๋ ๊ฑธ๋ฆฌ๋ ์ผ์ด๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ ์ปค๋ฅ์ ํ์ ์ฑ์ธ ๋ ๊น์ง ๋ง๋ฅ ๋๊ธฐํ๊ณ ์๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์๊ฐ์ด ๋ฆ์ด์ง๋ค.
๋ฐ๋ผ์ ์ด๋ ๊ฒ ๋ณ๋์ ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํด์ ์ปค๋ฅ์ ํ์ ์ฑ์์ผ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์๊ฐ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
๋ณ๋์ ์ฐ๋ ๋์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ํ ์คํธ๊ฐ ๋จผ์ ์ข ๋ฃ๋์ด ๋ฒ๋ฆฐ๋ค.
์์ ์ฒ๋ผ Thread.sleep ์ ํตํด ๋๊ธฐ ์๊ฐ์ ์ฃผ์ด์ผ ์ฐ๋ ๋ ํ์ ์ปค๋ฅ์ ์ด ์์ฑ๋๋ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋ค.
์ปค๋ฅ์ ํ ์ต๋ ์ฌ์ด์ฆ๋ฅผ ๋์ด๋ฒ๋ฆฌ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์ด๊ณผ๊ฐ ๋์๋ค.
ํ์ด ํ๋ณด๋ ๋๊น์ง ๋๊ธฐํ๋ค๊ฐ ์ค์ ๋ ์๊ฐ์ด ์ง๋๋ฉด ์์ธ๋ฅผ ํฐ๋จ๋ฆฐ๋ค.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard
์คํ๋ง DB 1ํธ - ๋ฐ์ดํฐ ์ ๊ทผ ํต์ฌ ์๋ฆฌ - ์ธํ๋ฐ | ๊ฐ์
๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ์ํ DB ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ๊ธฐ์ด๋ถํฐ ์ดํดํ๊ณ , ์์ฑํ ์ ์์ต๋๋ค. ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ ์ ์๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ , ๋ ๊น์ด์๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ ์ ์์ต๋๋ค., - ๊ฐ์
www.inflearn.com
'Spring > Spring DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง DB 1ํธ] - 6. DB ๋ฝ (0) | 2023.03.19 |
---|---|
[์คํ๋ง DB 1ํธ] - 5. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๊ตฌ์กฐ์ DB ์ธ์ (0) | 2023.03.15 |
[์คํ๋ง DB 1ํธ] - 4. ํธ๋์ญ์ (0) | 2023.03.15 |
[์คํ๋ง DB 1ํธ] - 2. ์ปค๋ฅ์ ํ(Connection Pool) (0) | 2023.03.14 |
[์คํ๋ง DB 1ํธ] - 1. JDBC ์ดํด (0) | 2023.03.13 |