JDBC๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์ฐ๊ฒฐํ๋ "๋ค๋ฆฌ(Bridge)"
์๋ฐ ํ๋ก๊ทธ๋จ โ JDBC โ ๋ฐ์ดํฐ๋ฒ ์ด์ค


โ
1. JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ
<action-dataSource.xml>
<bean id="datasource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="${jdbc.driverClassName}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
SimpleDriverDataSource ๋ฅผ ์ด์ฉํด JDBC ๋๋ผ์ด๋ฒ๋ฅผ ๋ก๋ฉํ๊ณ DB ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ค์ โ 2.Connection ๊ฐ์ฒด ์์ฑ
Connection conn = DriverManager.getConnection(url, user, password);
DB ์ฐ๊ฒฐ์ ์ํ Connection ๊ฐ์ฒด๋ฅผ ์์ฑ
โ 3.Statement ๊ฐ์ฒด ์์ฑ
Statement stmt = conn.createStatement();
SQL ๋ฌธ์ ์คํํ๊ธฐ ์ํ Statement ๋๋ PreparedStatement ๊ฐ์ฒด ์์ฑ.
โ 4.Query ์คํ
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐํ ๋๋ ์์ /์ญ์ /์ฝ์ .
โ 5.ResultSet ๊ฐ์ฒด๋ก๋ถํฐ ๋ฐ์ดํฐ ์กฐํ
while (rs.next()) { System.out.println(rs.getString("name")); }
์กฐํ๋ ๋ฐ์ดํฐ(ResultSet)๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉ.
โ 6.ResultSet ๊ฐ์ฒด ๋ซ๊ธฐ
rs.close();
์กฐํ๊ฐ ๋๋ ํ ResultSet ๊ฐ์ฒด๋ฅผ ๋ซ๋๋ค.
โ 7.Statement ๊ฐ์ฒด ๋ซ๊ธฐ
stmt.close();
์ฌ์ฉํ Statement ๊ฐ์ฒด๋ฅผ ๋ซ๋๋ค.
โ 8.Connection ๊ฐ์ฒด ๋ซ๊ธฐ
conn.close();
DB ์ฐ๊ฒฐ์ ๋ซ์ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ JDBCTemplate์ ์ฌ์ฉํ๋ฉด ๋ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌ๊ฐ๋ฅ ํ๋ค.
JDBC API(Java Database Connectivity API)๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๋์์ฃผ๋ ์ธํฐํ์ด์ค์ด๋ค.
์ฆ, Java์์ SQL์ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ฝ๊ฒ ํ ์ ์๋๋ก ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
<XML ํ์ผ ์ค์ ์ ์ํ ๋น ์ฃผ์ ๊ณผ์ >
โจ Spring ์์๋ " dataSource โ DAO โ Service โ Controller " ์์๋ก ์์กด์ฑ์ ์ฃผ์
ํ๋ฉด์ DB ์ฐ๋์ ์ฒ๋ฆฌํ๋ค.

1. dataSource ๋น ์์ฑ
dataSource๋ DB ์ฐ๊ฒฐ(Connection Pool)์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
javax.sql.DataSource ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(DBCP, HikariCP ๋ฑ)๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
JDBC๋ฅผ ์ด์ฉํ๋ ค๋ฉด ๋ฐ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ณด(URL, ๊ณ์ , ๋น๋ฐ๋ฒํธ ๋ฑ)๊ฐ ํ์ํ๋ค.
2. DAO (Data Access Object) ์ ์ฃผ์
memberDAO ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ฐ๊ฒฐ๋๋ ์ญํ ์ ์ํํ๋ค.
SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋, dataSource๋ฅผ ์ด์ฉํด DB ์ฐ๊ฒฐ์ ๊ฐ์ ธ์์ผ ํ๋ค.
memberDAO ๋ dataSource๋ฅผ ์ฃผ์
๋ฐ์ JDBC API๋ฅผ ํ์ฉํ ์ ์๋ค.
3. Service ๊ณ์ธต์ DAO ์ฃผ์
memberService ๋ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๊ณ , memberDAO ๋ฅผ ์ฌ์ฉํด์ DB ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ค.4. Controller ๊ณ์ธต์์ Service ํธ์ถ
memberController ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ์ memberService ๋ฅผ ํธ์ถํ๊ณ , ํ์ํ DB ์์
์ ์ํํ๋ค.<!-- DB ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๋ DataSource ๋น ์ค์ -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</bean>
<!-- DAO์์ ์ฌ์ฉํ SqlSessionFactory ์ค์ -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- DAO์ dataSource ์ฃผ์
-->
<bean id="memberDAO" class="com.example.MemberDAO">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- Service์ DAO ์ฃผ์
-->
<bean id="memberService" class="com.example.MemberService">
<property name="memberDAO" ref="memberDAO"/>
</bean>
<!-- Controller์ Service ์ฃผ์
-->
<bean id="memberController" class="com.example.MemberController">
<property name="memberService" ref="memberService"/>
</bean>
โ JDBC(Java Database Connectivity):
์๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ ๋ ์ฌ์ฉํ๋ API.
DriverManager , Connection , Statement , ResultSet ๋ฑ์ ์ฌ์ฉํด SQL์ ์คํ.
โ Spring JDBC (JdbcTemplate):
Spring์ด JDBC๋ฅผ ๋ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๋ ํ ํ๋ฆฟ ํด๋์ค.
SQL ์คํ์ ๋จ์ํํ๊ณ , ์์ธ ์ฒ๋ฆฌ๋ฅผ ์๋ํํ๋ค.
JdbcTemplate ์ ์ด์ฉํ๋ฉด Connection ์ ์ง์ ๊ด๋ฆฌํ ํ์ ์์ด DB ์์
๊ฐ๋ฅ.
โ MyBatis (SQL Mapper Framework):
XML ๊ธฐ๋ฐ์ผ๋ก SQL์ ๊ด๋ฆฌํ๊ณ , ๊ฐ์ฒด์ ๋งคํ์ ์ฝ๊ฒ ํ ์ ์๋ ํ๋ ์์ํฌ.
์์ sqlSessionFactory ์ mapperLocations ์ค์ ์ ํตํด SQL์ ์คํํ๋ค.