๐ JDBC / SQL Mapper / ORM (JPA, Hibernate, MyBatis) ์ ๋ฆฌ
๐ 1. ๊ฐ์
JDBC, SQL Mapper, ORM์ ๋ชจ๋ Java ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ํธ์์ฉ์ ์ํ ๊ธฐ์ ์ด๋ค.
์ฐจ์ด๋ “SQL์ ์ผ๋ง๋ ์ง์ ์์ฑํ๋๋”, “๊ฐ์ฒด-ํ
์ด๋ธ ๋งคํ ์์ค์ด ์ด๋ ์ ๋์ธ๊ฐ”์ ๋ฐ๋ผ ๊ตฌ๋ถ๋๋ค.
| ๊ตฌ๋ถ | ์ถ์ํ ์์ค | SQL ์์ฑ | ๋งคํ ์๋ํ | ๋ํ ๊ธฐ์ |
| JDBC | ๋ฎ์ | โ ์ง์ ์์ฑ | โ ์์ | JDBC API |
| SQL Mapper | ์ค๊ฐ | โ ์ง์ ์์ฑ | โ ๊ฒฐ๊ณผ ๋งคํ ์ง์ | MyBatis |
| ORM | ๋์ | โ ์๋ ์์ฑ (ํ์ ์ ์ง์ ๊ฐ๋ฅ) | โ ์์ ์๋ ๋งคํ | JPA, Hibernate |
๐ 2. JDBC (Java Database Connectivity)
๐ ๊ฐ๋
Java์์ DB์ ์ง์ SQL์ ์์ฑํด ์คํํ๋ ํ์ค API์ด๋ค.
Connection, PreparedStatement, ResultSet ๋ฑ์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํต์ ํ๋ค.
โ ํน์ง
- ๊ฐ์ฅ ๋ก์ฐ๋ ๋ฒจ์ ์ ๊ทผ ๋ฐฉ์ (ORM/JPA, MyBatis ๊ฐ์ ๊ธฐ์ ๋ค๋ ๋ด๋ถ์ ์ผ๋ก JDBC๋ฅผ ์ฌ์ฉํด์ DB์ ์ ์ํ๋ค!)
- SQL, ์ปค๋ฅ์
, ์์ ํด์ ๋ฅผ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ดํด์ผ ํจ
- ์ ์ด๋ ฅ๊ณผ ์ ์ฐ์ฑ์ด ๋์ง๋ง, ์ฝ๋ ๋ฐ๋ณต์ด ๋ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์
๐ ์์
Connection conn = DriverManager.getConnection(url, user, password); // DB ์ฐ๊ฒฐ
PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE id = ?"); // ์ฟผ๋ฆฌ ์์ฑ
ps.setInt(1, 1); // ์ฒซ ๋ฒ์งธ '?'์ 1์ด๋ผ๋ ๊ฐ์ ์ค์
ResultSet rs = ps.executeQuery(); // ์ฟผ๋ฆฌ ์คํ ๋ฐ ๊ฒฐ๊ณผ ์ ์ฅ
while (rs.next()) { //๊ฒฐ๊ณผ ์ถ๋ ฅ
System.out.println("User: " + rs.getString("name"));
}
๐ 3. SQL Mapper (์: MyBatis)
๐ ๊ฐ๋
SQL์ ์ง์ ์์ฑํ๋ฉด์๋, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ Java ๊ฐ์ฒด๋ก ์๋ ๋งคํํด์ฃผ๋ SQL ๋งคํผ ํ๋ ์์ํฌ์ด๋ค.
์ฆ, JDBC๋ณด๋ค ํธ๋ฆฌํ์ง๋ง ์์ ํ ORM์ ์๋.
โ ํน์ง
- SQL์ ์ง์ ์์ฑ, ํ์ง๋ง ๊ฒฐ๊ณผ๋ฅผ ์๋์ผ๋ก ๊ฐ์ฒด์ ๋งคํ
- XML ๋๋ Annotation ๊ธฐ๋ฐ์ผ๋ก SQL ์ ์
- JDBC๋ณด๋ค ๊ฐ๊ฒฐ, ORM๋ณด๋ค ์ ์ด๋ ฅ ๋์
๐ ์์ (MyBatis)
<!-- UserMapper.xml -->
<select id="getUser" resultType="User">
SELECT id, name FROM users WHERE id = #{id}
</select>
User user = userMapper.getUser(1);
System.out.println(user.getName());
๐ 4. ORM (Object-Relational Mapping)
๐ ๊ฐ๋
๊ฐ์ฒด(Object) ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Relational DB) ๊ฐ์ ๋งคํ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ธฐ์ ์ด๋ค.
SQL์ ์ง์ ์์ฑํ์ง ์์๋, ๊ฐ์ฒด ์กฐ์๋ง์ผ๋ก DB ์กฐ์์ด ๊ฐ๋ฅํ๋ค.
โ ํน์ง
- ๊ฐ์ฒด์ ํ ์ด๋ธ์ ์๋ ๋งคํ (@Entity, @Id, @Column ๋ฑ)
- SQL ์๋ ์์ฑ (INSERT, SELECT, UPDATE, DELETE)
- ์บ์(1์ฐจ, 2์ฐจ) ๋ฐ ํธ๋์ญ์ ๊ด๋ฆฌ ์๋
- ๋ํ ๊ตฌํ์ฒด: Hibernate, EclipseLink, ํ์ค ์ธํฐํ์ด์ค: JPA
โ 4-1. JPA (Java Persistence API)
๐ ๊ฐ๋
ORM์ ๊ตฌํํ๊ธฐ ์ํ **Java ํ์ค ์ธํฐํ์ด์ค(๋ช
์ธ)**์ด๋ค.
์ง์ ๋์ํ์ง ์์ผ๋ฉฐ, Hibernate๋ EclipseLink ๊ฐ์ ๊ตฌํ์ฒด๋ฅผ ํตํด ์คํ๋๋ค.
โ ํน์ง
- “์ด๋ฐ ๋ฐฉ์์ผ๋ก ORM์ ๊ตฌํํด์ผ ํ๋ค”๋ ํ์ค ๊ท์น ์ ์
- ๊ตฌํ์ฒด ๊ต์ฒด ์ฉ์ด → JPA ์ฝ๋๋ Hibernate๋ก, ๋๋ EclipseLink๋ก ์ฝ๊ฒ ๋์ฒด ๊ฐ๋ฅ
๐ ์์
@Entity
public class User {
@Id
private Long id;
private String name;
}
EntityManager em = emf.createEntityManager();
User user = em.find(User.class, 1L);
System.out.println(user.getName());
โ 4-2. Hibernate
๐ ๊ฐ๋
JPA์ ๋ํ ๊ตฌํ์ฒด์ด์ ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๋ ORM ํ๋ ์์ํฌ
(์ฆ, Hibernate๋ “ORM ํ๋ ์์ํฌ”์ด์ “JPA ๊ตฌํ์ฒด”)
โ ํน์ง
- SQL ์๋ ์์ฑ
- ์บ์ฑ(1์ฐจ, 2์ฐจ ์บ์)์ผ๋ก ์ฑ๋ฅ ํฅ์
- ๋ค์ํ DB ์ง์ (Oracle, MySQL, PostgreSQL ๋ฑ)
- JPA ๊ธฐ๋ฐ API ์์ ์ง์
๐ 5. ๊ฒฐ๋ก
| ์ํฉ | ์ถ์ฒ ๊ธฐ์ | ์ด์ |
| SQL ์ ์ด์ ์ฑ๋ฅ์ด ์ค์ | JDBC | ์ธ๋ฐํ ์ ์ด ๊ฐ๋ฅ |
| SQL์ ์ง์ ์ฐ๋ ๊ฐ์ฒด ๋งคํ ํธ์๋ ์ํจ | MyBatis | SQL + ๊ฐ์ฒด ๋งคํ ์ ์ถฉํ |
| SQL ์์ด ๊ฐ์ฒด ์ค์ฌ ๊ฐ๋ฐ ์ํจ | JPA/Hibernate | ORM ๊ธฐ๋ฐ, ์์ฐ์ฑ ๋์ |
โญ ์ ๋ฆฌ ํ ์ค ์์ฝ
JDBC๋ “์ง์ SQL์ ๋ค๋ฃจ๋ ๊ธฐ๋ณธ API”,
MyBatis๋ “SQL ์ค์ฌ + ๊ฐ์ฒด ๋งคํ ์ง์ ํ๋ ์์ํฌ”,
JPA/Hibernate๋ “SQL์ ์จ๊ธฐ๊ณ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ์๋ ๋งคํํ๋ ORM ๊ธฐ์ ”์ด๋ค. ๐
'SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| CTE(Common Table Expression)๋? (0) | 2025.11.29 |
|---|