Spring/Spring DB

[์Šคํ”„๋ง DB 1ํŽธ] - 3. DataSource ์ดํ•ด

hello_u 2023. 3. 14. 21:15

 

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