[SPRING] JDBC ํ๋ฆ„

์ˆ˜๊ฒฝยท2025๋…„ 3์›” 23์ผ

SpringFrameWork

๋ชฉ๋ก ๋ณด๊ธฐ
10/24
post-thumbnail

๐Ÿ“ŒJDBC ๋™์ž‘ ํ๋ฆ„

JDBC๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์—ฐ๊ฒฐํ•˜๋Š” "๋‹ค๋ฆฌ(Bridge)"

์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ โ†’ JDBC โ†’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๐Ÿ“ŒJDBC API ํ๋ฆ„

JDBC API ํ๋ฆ„ ์„ค๋ช…

โœ… 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>
  • ๋นˆ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ค์ •
  • 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 ๋ž€ โ“

JDBC API(Java Database Connectivity API)๋Š” ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
์ฆ‰, Java์—์„œ SQL์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

JDBC API์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

๐Ÿ“ŒJDBC ์™€ DB ์—ฐ๋™์„ ์œ„ํ•œ XML ์„ค์ • ํ๋ฆ„

<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 ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๐Ÿ“Œ XML ์„ค์ • ์˜ˆ์‹œ

<!-- 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์™€์˜ ๊ด€๊ณ„

โœ” 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์„ ์‹คํ–‰ํ•œ๋‹ค.

profile
๊ฐœ๋ฐœ ๊ณต๋ถ€์ค‘โ€ขโ€ขโ€ข

0๊ฐœ์˜ ๋Œ“๊ธ€