From 54137b30da72bcb78cd0c1d991065724f9e7484c Mon Sep 17 00:00:00 2001 From: Mint Date: Tue, 30 Sep 2025 12:19:52 +0900 Subject: [PATCH 1/3] =?UTF-8?q?test:=20DataSource=20=ED=95=99=EC=8A=B5=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=97=90=EC=84=9C=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=ED=95=98=EB=93=9C=EC=BD=94=EB=94=A9=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0=20=EB=B0=8F=20properties=20=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../connectionpool/stage0/Stage0Test.java | 27 +++++++++++++------ study/src/test/resources/db.properties | 3 +++ 2 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 study/src/test/resources/db.properties diff --git a/study/src/test/java/connectionpool/stage0/Stage0Test.java b/study/src/test/java/connectionpool/stage0/Stage0Test.java index 7eb3d7d87d..b54b967c5a 100644 --- a/study/src/test/java/connectionpool/stage0/Stage0Test.java +++ b/study/src/test/java/connectionpool/stage0/Stage0Test.java @@ -1,19 +1,25 @@ package connectionpool.stage0; -import org.h2.jdbcx.JdbcDataSource; -import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; +import java.io.IOException; +import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; - -import static org.assertj.core.api.Assertions.assertThat; +import java.util.Properties; +import org.h2.jdbcx.JdbcDataSource; +import org.junit.jupiter.api.Test; class Stage0Test { private static final String H2_URL = "jdbc:h2:./test"; private static final String USER = "sa"; private static final String PASSWORD = ""; + private static final String DB_PROPERTIES = "db.properties"; + private static final String PROPERTY_DB_URL = "db.url"; + private static final String PROPERTY_DB_USER = "db.user"; + private static final String PROPERTY_DB_PASSWORD = "db.password"; /** * DriverManager @@ -49,11 +55,16 @@ void driverManager() throws SQLException { * https://docs.oracle.com/en/java/javase/11/docs/api/java.sql/javax/sql/package-summary.html */ @Test - void dataSource() throws SQLException { + void dataSource() throws IOException, SQLException { + final Properties props = new Properties(); + try (final InputStream input = getClass().getClassLoader().getResourceAsStream(DB_PROPERTIES)) { + props.load(input); + } + final JdbcDataSource dataSource = new JdbcDataSource(); - dataSource.setURL(H2_URL); - dataSource.setUser(USER); - dataSource.setPassword(PASSWORD); + dataSource.setURL(props.getProperty(PROPERTY_DB_URL)); + dataSource.setUser(props.getProperty(PROPERTY_DB_USER)); + dataSource.setPassword(props.getProperty(PROPERTY_DB_PASSWORD)); try (final var connection = dataSource.getConnection()) { assertThat(connection.isValid(1)).isTrue(); diff --git a/study/src/test/resources/db.properties b/study/src/test/resources/db.properties new file mode 100644 index 0000000000..9659826101 --- /dev/null +++ b/study/src/test/resources/db.properties @@ -0,0 +1,3 @@ +db.url=jdbc:h2:mem:testdb +db.user=sa +db.password= From b81d61b12fa739efe94786a2e1c13c7413c95a0a Mon Sep 17 00:00:00 2001 From: Mint Date: Wed, 1 Oct 2025 00:37:02 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20DataSource=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=EB=A1=9C=20=EA=B5=90=EC=B2=B4=20?= =?UTF-8?q?=EA=B0=80=EB=8A=A5=EC=84=B1=20=EB=93=9C=EB=9F=AC=EB=82=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../connectionpool/stage0/Stage0Test.java | 51 ++++++++++++------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/study/src/test/java/connectionpool/stage0/Stage0Test.java b/study/src/test/java/connectionpool/stage0/Stage0Test.java index b54b967c5a..76d9f5f37f 100644 --- a/study/src/test/java/connectionpool/stage0/Stage0Test.java +++ b/study/src/test/java/connectionpool/stage0/Stage0Test.java @@ -2,20 +2,16 @@ import static org.assertj.core.api.Assertions.assertThat; -import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; -import java.sql.SQLException; import java.util.Properties; +import javax.sql.DataSource; import org.h2.jdbcx.JdbcDataSource; import org.junit.jupiter.api.Test; class Stage0Test { - private static final String H2_URL = "jdbc:h2:./test"; - private static final String USER = "sa"; - private static final String PASSWORD = ""; private static final String DB_PROPERTIES = "db.properties"; private static final String PROPERTY_DB_URL = "db.url"; private static final String PROPERTY_DB_USER = "db.user"; @@ -33,11 +29,17 @@ class Stage0Test { * https://docs.oracle.com/javadb/10.8.3.0/ref/rrefjdbc4_0summary.html */ @Test - void driverManager() throws SQLException { + void driverManager() throws Exception { // Class.forName("org.h2.Driver"); // JDBC 4.0 부터 생략 가능 // DriverManager 클래스를 활용하여 static 변수의 정보를 활용하여 h2 db에 연결한다. - try (final Connection connection = DriverManager.getConnection(H2_URL, USER, PASSWORD)) { - assertThat(connection.isValid(1)).isTrue(); + Properties props = loadProps(); + + String url = props.getProperty(PROPERTY_DB_URL); + String user = props.getProperty(PROPERTY_DB_USER); + String password = props.getProperty(PROPERTY_DB_PASSWORD); + + try (final Connection conn = DriverManager.getConnection(url, user, password)) { + assertThat(conn.isValid(1)).isTrue(); } } @@ -48,26 +50,39 @@ void driverManager() throws SQLException { * 테스트 코드의 JdbcDataSource 클래스는 h2에서 제공하는 클래스다. * * DirverManager가 아닌 DataSource를 사용하는 이유 - * - 애플리케이션 코드를 직접 수정하지 않고 properties로 디비 연결을 변경할 수 있다. + * - DataSource는 인터페이스이기 때문에 H2, MySQL, PostgreSQL 같은 DB 벤더별 DataSource, + * 혹은 HikariCP/DBCP2 같은 커넥션 풀 구현체를 코드 수정 없이 교체할 수 있다. * - 커넥션 풀링(Connection pooling) 또는 분산 트랜잭션은 DataSource를 통해서 사용 가능하다. * * Using a DataSource Object to Make a Connection * https://docs.oracle.com/en/java/javase/11/docs/api/java.sql/javax/sql/package-summary.html */ @Test - void dataSource() throws IOException, SQLException { - final Properties props = new Properties(); - try (final InputStream input = getClass().getClassLoader().getResourceAsStream(DB_PROPERTIES)) { - props.load(input); - } + void dataSource() throws Exception { + final Properties props = loadProps(); - final JdbcDataSource dataSource = new JdbcDataSource(); - dataSource.setURL(props.getProperty(PROPERTY_DB_URL)); - dataSource.setUser(props.getProperty(PROPERTY_DB_USER)); - dataSource.setPassword(props.getProperty(PROPERTY_DB_PASSWORD)); + // 구현체 설정(H2) + final JdbcDataSource jdbcDataSource = new JdbcDataSource(); + final String url = props.getProperty(PROPERTY_DB_URL); + jdbcDataSource.setURL(url); + final String user = props.getProperty(PROPERTY_DB_USER); + jdbcDataSource.setUser(user); + final String password = props.getProperty(PROPERTY_DB_PASSWORD); + jdbcDataSource.setPassword(password); + + // 사용부는 인터페이스만 의존 + final DataSource dataSource = jdbcDataSource; try (final var connection = dataSource.getConnection()) { assertThat(connection.isValid(1)).isTrue(); } } + + private Properties loadProps() throws Exception { + Properties props = new Properties(); + try (InputStream in = getClass().getClassLoader().getResourceAsStream(DB_PROPERTIES)) { + props.load(in); + } + return props; + } } From 361ae07f608a958312c84998331f768eebb9bb9a Mon Sep 17 00:00:00 2001 From: Mint Date: Wed, 1 Oct 2025 00:57:01 +0900 Subject: [PATCH 3/3] =?UTF-8?q?merge:=20=EC=B6=A9=EB=8F=8C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/connectionpool/stage0/Stage0Test.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/study/src/test/java/connectionpool/stage0/Stage0Test.java b/study/src/test/java/connectionpool/stage0/Stage0Test.java index 76d9f5f37f..8ab8683a60 100644 --- a/study/src/test/java/connectionpool/stage0/Stage0Test.java +++ b/study/src/test/java/connectionpool/stage0/Stage0Test.java @@ -32,14 +32,14 @@ class Stage0Test { void driverManager() throws Exception { // Class.forName("org.h2.Driver"); // JDBC 4.0 부터 생략 가능 // DriverManager 클래스를 활용하여 static 변수의 정보를 활용하여 h2 db에 연결한다. - Properties props = loadProps(); + final Properties props = loadProps(); - String url = props.getProperty(PROPERTY_DB_URL); - String user = props.getProperty(PROPERTY_DB_USER); - String password = props.getProperty(PROPERTY_DB_PASSWORD); + final String url = props.getProperty(PROPERTY_DB_URL); + final String user = props.getProperty(PROPERTY_DB_USER); + final String password = props.getProperty(PROPERTY_DB_PASSWORD); - try (final Connection conn = DriverManager.getConnection(url, user, password)) { - assertThat(conn.isValid(1)).isTrue(); + try (final Connection connection = DriverManager.getConnection(url, user, password)) { + assertThat(connection.isValid(1)).isTrue(); } } @@ -49,7 +49,7 @@ void driverManager() throws Exception { * 구현체는 각 vendor에서 제공한다. * 테스트 코드의 JdbcDataSource 클래스는 h2에서 제공하는 클래스다. * - * DirverManager가 아닌 DataSource를 사용하는 이유 + * DriverManager가 아닌 DataSource를 사용하는 이유 * - DataSource는 인터페이스이기 때문에 H2, MySQL, PostgreSQL 같은 DB 벤더별 DataSource, * 혹은 HikariCP/DBCP2 같은 커넥션 풀 구현체를 코드 수정 없이 교체할 수 있다. * - 커넥션 풀링(Connection pooling) 또는 분산 트랜잭션은 DataSource를 통해서 사용 가능하다. @@ -79,8 +79,8 @@ void dataSource() throws Exception { } private Properties loadProps() throws Exception { - Properties props = new Properties(); - try (InputStream in = getClass().getClassLoader().getResourceAsStream(DB_PROPERTIES)) { + final Properties props = new Properties(); + try (final InputStream in = getClass().getClassLoader().getResourceAsStream(DB_PROPERTIES)) { props.load(in); } return props;