์์์ฑ(persistence)
์์์ฑ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋์ด๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง์ง ์๋ ํน์ฑ์ ๋งํ๋ค. ๋ฐ์ดํฐ๊ฐ ์์์ฑ์ ๊ฐ์ง ์๋๋ค๋ฉด, ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ์์๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ฉด ๋ชจ๋ ๋ ์๊ฐ๋ค. ๋ฐ์ดํฐ์๊ฒ ์์์ฑ์ ๋ถ์ฌํ๋ ค๋ฉด ํ์ผ ์์คํ ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํด์ผ ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด(๋ฐ์ดํฐ) ์ ์ฅํ๋ ๋ฐฉ๋ฒ
1. JDBC
JDBC(Java Database Connectivity)๋ JAVA์์ DB์ ์ ๊ทผํ ์ ์๋๋ก ์ ๊ณตํ๋ API๋ฅผ ๋งํ๋ค. JDBC๋ ์ธํฐํ์ด์ค๋ก DBMS์ ์ข
๋ฅ์ ์๊ด์์ด ์ด์ฉํ ์ ์์ผ๋ฉฐ ์๋ฐ์์ ๋ชจ๋ ๋ฐ์ดํฐ ์ ๊ทผ์ ๊ทผ๊ฐ์ด๋ค. (์๋์์ ์ดํด๋ณผ ๋ชจ๋ Persistence Framwork๋ JDBC๋ฅผ ์ฌ์ฉ)
*์์ JDBC๋ ๊ฝค๋ ๋ณต์กํ๊ณ ๋ฒ๊ฑฐ๋กญ๋ค
2. Persistence Framework (ORM, SQL Mapper)
์์์ฑ ํ๋ ์์ํฌ๋ JDBC๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋ณต์กํ๊ณ ๋ฒ๊ฑฐ๋ก์ด ์์ ์์ด ๊ฐ๋จํ ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ ์ ์๋๋ก ํ๋ ํ๋ ์์ํฌ๋ฅผ ๋งํ๋ค. ์ฆ, DB์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณผ์ ์ ๋์์ฃผ๊ณ ์๋ํํ ์ํํธ์จ์ด์ด๋ค. ์์์ฑ ํ๋ ์์ํฌ๋ DB์ ๋งคํํ๋ ๋ฐฉ์์ ๋ฐ๋ผ SQL Mapper์ ORM์ผ๋ก ์ข ๋ฅ๊ฐ ๋๋๋ค.
๐ก Persistence Framework ์ข ๋ฅ
SQL Mapper : Mybatis, Ibatis, JDBC Template, …
ORM : JPA, Hibernate, ...
JDBC
JDBC ์ฌ์ฉ ์์
์ฐ์ , ์์์ฑ ํ๋ ์์ํฌ๋ฅผ ์ดํด๋ณด๊ธฐ ์ ์ ์์ JDBC์ ๊ท์ฐฎ์์ ํ์ธํด๋ณด์. JDBC๋ฅผ ์ฌ์ฉํด ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฅผ DB์ ์ ์ฅํ๊ณ ์ ํ๋ฉด ์๋์ ๊ฐ์ ์ผ๋ จ์ ๊ณผ์ ๋ค์ด ํ์ํ๋ค. ๋ฌผ๋ก ๋ช๋ช ๊ธฐ๋ฅ๋ค์ ํด๋์คํ ํด์ ์ค๋ณต์ ์ต์ํํ ์ ์๊ฒ ์ง๋ง ๋ฐ๋ณต ์์ ์ ๊ฝค๋ ์ํํด์ผ ํ๋ ๋ถํธํจ์ด ์๋ค.
- JDBC ๋๋ผ์ด๋ฒ ๋ก๋
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ
- ์ฟผ๋ฆฌ ์์ฑ
- ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
- ๋ฆฌ์์ค ๋ฐ๋ฉ
JDBC ์ฝ๋ ์์(mysql)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JDBCTest {
private final String driverName = "com.mysql.cj.jdbc.Driver"; // ๋๋ผ์ด๋ฒ ์ด๋ฆ
private final String url = "jdbc:mysql://localhost:3306/์คํค๋ง์ด๋ฆ?serverTimezone=UTC";
private final String user = "๊ณ์ ์ด๋ฆ";
private final String pass = "๊ณ์ ๋น๋ฐ๋ฒํธ";
// 1. JDBC ๋๋ผ์ด๋ฒ ๋ก๋
Class.forName(driverName);
// 2. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ (Connection ๊ฐ์ฒด ์์ฑ)
Connection con = DriverManager.getConnection(url, user, pass);
// 3. ์ฟผ๋ฆฌ์์ฑ
String sql = "SELECT * FROM table";
Statement st = con.createStatement(); // ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ Statement ๊ฐ์ฒด ์์ฑ
ResultSet rs = st.executeQuery(sql); // select๋ฌธ(์ฟผ๋ฆฌ) ์คํ
// 4. ๊ฒฐ๊ณผ์ฒ๋ฆฌ
while(rs.next()){
System.out.print( rs.getString( "col1"));
System.out.print( rs.getString( "col2"));
System.out.print( rs.getString( "col3"));
System.out.print( rs.getString( "col4"));
}
// 5. ๋ฆฌ์์ค ๋ฐ๋ฉ(์์ฑํ ์์์ ์ญ์์ผ๋ก)
rs.close();
stmt.close();
con.close();
}
์ฝ๋๋ก JDBC๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ์ ๊ฐ๋จํ ๊ตฌํํด๋ณด์๋ค. ์ฌ์ค ์ด ์ฝ๋์๋ ์์ธ์ฒ๋ฆฌ๊ฐ ํ๋๋ ๋์ด์์ง ์์ง๋ง, JDBC๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์์ธ ์ฒ๋ฆฌ์ ๊ฝค๋ ํ์ ๋ค์ฌ์ผ ํ๋ค.
Persistence Framework
SQL Mapper
๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์์ฑํ SQL๋ก ๋งคํ์์ผ์ฃผ๋ ๊ธฐ์ ์ด๋ค. ์ ํํ ๋งํ๋ฉด SQL ์ฟผ๋ฆฌ์ ์ํ ๊ฒฐ๊ณผ๋ฅผ ํน์ ๊ฐ์ฒด์ ๋งคํํด์ค๋ค. ์ด ๊ธฐ์ ์ ๊ฐ๋ฐ์๊ฐ SQL์ ์ง์ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ SQL์ ์์กด์ ์ด๋ฉฐ, DBMS๋ง๋ค SQL์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ DBMS์ ์ข ์์ ์ด๋ค.
ORM(Object-Relataion Mapping)
๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋งคํ์์ผ์ฃผ๋ ๊ธฐ์ ๋ก ๊ฐ์ฒด(Java์ ํด๋์ค)์ DB์ ํ ์ด๋ธ์ด ๋งคํ๋๋ ๊ตฌ์กฐ์ด๋ค. CRUD๊ด๋ จ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ผ๋ก SQL์ด ์์ฑ๋๋ค. ๋ณต์กํ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ SQL Mapper๊ณผ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์๋ฐ์์ ORM ๊ธฐ์ ์ ๋ํ ์ธํฐํ์ด์ค ํ์ค์ JPA๋ผ๊ณ ํ๊ณ , ์ด๋ฅผ ๊ตฌํํ ๋ํ์ ์ธ ๊ตฌํ์ฒด๊ฐ Hibernate์ด๋ค. DBMS์ ์์กดํ์ง ์์ ๋น์ฆ๋์ค ๋ก์ง ์ค๊ณ์ ๋์ฑ ์ง์คํ ์ ์๊ณ ์๊ตฌ์ฌํญ ๋ณํ์ ๋น ๋ฅธ ๋์ฒ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๋ค.
SQL Mapper | ORM | |
์ฅ์ | ์ธ๋ถ์ ์ธ SQL ๋ณ๊ฒฝ์ ํธ๋ฆฌ | ์ง๊ด์ ์ธ ๋น์ง๋์ค ๋ก์ง ์์ฑ ๊ฐ๋ฅ DBMS ์ข ์์ฑ ๋ฎ์ (๋น ๋ฅธ ์ ์ฉ ๊ฐ๋ฅ) ์ฟผ๋ฆฌ์ ์ง์คํ ํ์ ์์ด ๊ฐ๋ฐ ๊ฐ๋ฅ ์ฌ์ฌ์ฉ, ์ ์ง, ๋ณด์์ ํธ๋ฆฌ์ฑ ์ฆ๊ฐ |
๋จ์ | DBMS์ ์ข
์์ ๊ฐ๋ฐ์ SQL ์์ฑ ํ์ 2๊ฐ ์ด์์ DBMS ์ง์์ ์ ์ง ๋ณด์ ์ด๋ ค์ |
ํ๋ก์ ํธ ๋ณต์ก์ฑ ์ปค์ง ๊ฒฝ์ฐ ๋์ด๋ ์ฌ๋ผ๊ฐ ์๋ชป ์ ์ฉํ ๊ฒฝ์ฐ ์๋ ์ ํ ๋ฐ์ ๋ณต์กํ SQL ์ฌ์ฉ ์ด๋ ค์ |
์ข ๋ฅ | MyBatis, JDBC template, … | JPA(Hibernate), EclipseLink, … |
+ ํท๊ฐ๋ฆฌ๋ ์ฉ์ด ์ ๋ฆฌ
ORM
๐น๊ฐ์ฒด์ DB์ ํ
์ด๋ธ์ ๋งคํ์์ผ์ฃผ๋ ๊ธฐ์
๐นORM์ ์ด์ฉํ๋ฉด SQL ์ฟผ๋ฆฌ๊ฐ ์๋ ๋ฉ์๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ์ ์์(๋์ ์์ฐ์ฑ)
JPA(Java Persistent Api)
๐น์๋ฐ๊ฐ ORM ๊ธฐ์ ์ ์ฑํํด ์์ฑํ API ํ์ค ๋ช
์ธ
๐นORM ๊ธฐ์ ์ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ค์ ๋ชจ์๋์ ๊ฒ
๐น์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ฒด ํ์
๐นJPA๋ฅผ ๊ตฌํํ ํ๋ ์ ์ํฌ → Hibernate
, EclipseLink
…
Hibernate
๐นJPA๋ฅผ ๋ฐํ์ผ๋ก ๊ตฌํํ ๊ตฌํ์ฒด
Spring JDBC
๐นSpring์ด ์ ๊ณตํ๋ Persistence Framework ์ค ํ๋
๐น๊ธฐ์กด JDBC์์ ๋ฐ๋ณต์ ์ผ๋ก ํด์ผ ํ๋ ์์
๋ค์ ๋์ ํด์ฃผ๊ณ ๊ฐ๊ฒฐํ ํํ์ API ์ฌ์ฉ๋ฒ์ ์ ๊ณต
JDBC Template
๐นSprintg JDBC์ ์ฃผ์ ํด๋์ค
'๐ CS > ๐ DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] ๋ ผ๋ฆฌ์ ์กฐ์ธ (Inner/Outer/Cross/Self) (0) | 2023.08.10 |
---|---|
[DB] ์ ๊ทํ ๊ณผ์ (1NF/2NF/3NF/BCNF) (0) | 2023.08.03 |
[DB] ํํฐ์ ๋ (6) | 2022.09.05 |
[DB] SQL (0) | 2022.09.01 |
[DB] ํธ๋์ญ์ (๊ฐ๋ /ํน์ฑ/์ฐ์ฐ/์ํ) (6) | 2022.08.22 |