π[Spring] Hibernateμ JDBCλ μ΄λ€ κ΄κ³μΈκ°μ?
- Hibernateμ JDBC(Java Database Connectivity)λ λͺ¨λ μλ°μμ λ°μ΄ν°λ² μ΄μ€μ μνΈμμ©νλ λ°©μμ΄μ§λ§, μλ‘ λ€λ₯Έ μμ€μμ μλνλ λꡬμ λλ€.
-
Hibernateλ JDBC(Java Database Connectivity)λ₯Ό λ΄λΆμ μΌλ‘ μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€μμ μ°κ²°μ κ΄λ¦¬νκ³ μΏΌλ¦¬λ₯Ό μ€ννμ§λ§, κ·Έ μν κ³Ό λͺ©μ μ΄ λ€λ¦
λλ€.
- μ΄ λμ κ΄κ³μ μ°¨μ΄μ μ μ΄ν΄νκΈ° μν΄ κ° λꡬλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
1οΈβ£ JDBC(Java Database Connectivity)
-
JDBC(Java Database Connectivity)λ μλ°μμ λ°μ΄ν°λ² μ΄μ€μ μ§μ μ°κ²°νκ³ SQL 쿼리λ₯Ό μ€νν μ μκ² ν΄μ£Όλ μ μμ€ APIμ
λλ€.
- JDBC(Java Database Connectivity)λ κ°λ°μκ° λ°μ΄ν°λ² μ΄μ€μ SQL(Structured Query Language) λ¬Έμ μμ±νκ³ , κ²°κ³Όλ₯Ό μ²λ¦¬νλ©°, λ°μ΄ν°λ² μ΄μ€μ μ§μ μνΈμμ©ν μ μλλ‘ ν΄μ€λλ€.
- JDBC(Java Database Connectivity)λ λͺ¨λ SQL(Structured Query Language) μμ (μ½μ , κ°±μ , μμ , μ‘°ν)μ μλμΌλ‘ μ²λ¦¬ν΄μΌ νλ©°, λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ΄λ¦¬, 쿼리 μ€ν, κ²°κ³Ό μ§ν©(ResultSet) μ²λ¦¬, μμΈ μ²λ¦¬ λ±μ κ°λ°μκ° μ§μ κ΄λ¦¬ν΄μΌ ν©λλ€.
π JDBC μμ.
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM Users WHERE id = ?");
pstmt.setInt(1, 1);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("name"));
}
- μμ μ½λμμ κ°λ°μλ SQLμ μ§μ μμ±νκ³ , Connection λ° PreparedStatementμ κ°μ JDBC(Java Database Connectivity) κ°μ²΄λ₯Ό μ΄μ©ν΄ λ°μ΄ν°λ² μ΄μ€ μμ μ μ²λ¦¬ν΄μΌ ν©λλ€.
2οΈβ£ Hibernate
-
Hibernateλ μλ°μμ ORM(Object-Relational Mapping) νλ μμν¬λ‘, λ°μ΄ν°λ² μ΄μ€μμ μνΈμμ©μ λ μΆμνλ κ³ μμ€ λ°©μμΌλ‘ μ²λ¦¬ν©λλ€.
- Hibernateλ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈκ³Ό μλ° κ°μ²΄ κ°μ λ§€νμ ν΅ν΄, μ§μ μ μΈ SQL(Structured Query Language) 쿼리 μμ± μμ΄λ λ°μ΄ν°λ² μ΄μ€ μμ μ μνν μ μμ΅λλ€.
-
Hibernateλ λ΄λΆμ μΌλ‘ JDBC(Java Database Connectivity)λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€μ μ°κ²°νμ§λ§, κ°λ°μλ μ΄λ₯Ό μ§μ λ€λ£° νμκ° μμ΅λλ€.
- λμ , κ°μ²΄ μ€μ¬μ μΈ APIλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€ μμ μ μ²λ¦¬ν μ μμ΅λλ€.
- Hibernateλ λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ΄λ¦¬, μΊμ±, νΈλ μμ κ΄λ¦¬ 쿼리 μμ±μ λͺ¨λ μλννκ±°λ μ½κ² μ²λ¦¬ν μ μκ² ν΄μ€λλ€.
π Hibernate μμ.
Session session = sessionFactory.openSession();
User user = session.get(User.class, 1); // SQL μμ± μμ΄ κ°μ²΄λ‘ λ°μ΄ν° μ‘°ν
System.out.println(user.getName());
- μμ μμμμλ SQL(Structured Query Language)μ μμ±ν νμ μμ΄ Hibernateκ° SQL(Structured Query Language)λ₯Ό μλμΌλ‘ μμ±νκ³ μ€ννμ¬ κ°μ²΄λ₯Ό λ°νν©λλ€.
3οΈβ£ Hibernateμ JDBCμ κ΄κ³ λ° μ°¨μ΄μ .
1οΈβ£ μΆμν(Abstraction) μμ€.
-
JDBC(Java Database Connectivity)λ λ°μ΄ν°λ² μ΄μ€μμ μνΈμμ©μ μ²λ¦¬νλ μ μμ€ APIμ
λλ€.
- κ°λ°μλ SQL(Structure Query Language)μ μ§μ μμ±νκ³ μ€νν΄μΌ νλ©°, μ°κ²°, νΈλμμ , μμΈ μ²λ¦¬ λ±λ κ΄λ¦¬ν΄μΌ ν©λλ€.
-
Hibernateλ κ³ μμ€ ORM(Object-Relational Mapping) νλ μμν¬λ‘, JDBC(Java Database Connectivity) λ΄λΆμ μΌλ‘ μ¬μ©νμ¬ SQL(Structured Query Language) 쿼리λ₯Ό μ€ννκ³ λ°μ΄ν°λ² μ΄μ€μ μνΈμμ©νμ§λ§, κ°λ°μμκ²λ κ°μ²΄ μ§ν₯μ μΈ APIλ₯Ό μ 곡ν©λλ€.
- λ°λΌμ SQL(Structured Query Language) λμ μλ° κ°μ²΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ² μ΄μ€μ μνΈμμ©ν μ μμ΅λλ€.
2οΈβ£ SQL μμ±.
- JDBC(Java Database Connectivity)λ SQL(Structured Query Language)μ μ§μ μμ±ν΄μΌ νλ©°, λ°μ΄ν°λ² μ΄μ€μ ν μ΄λΈ ꡬ쑰λ₯Ό μ΄ν΄νκ³ κ·Έμ λ§λ 쿼리λ₯Ό μμ±ν΄μΌ ν©λλ€.
- Hibernateλ SQL(Structured Query Language)μ μλμΌλ‘ μμ±νκ±°λ, HQL(Hibernate Query Language)κ³Ό κ°μ κ°μ²΄ μ§ν₯μ μΈ μΏΌλ¦¬ μΈμ΄λ₯Ό μ¬μ©ν μ μμ΄ SQL(Structured Query Language)μ μ§μ μμ±νμ§ μκ³ λ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
3οΈβ£ λ°μ΄ν°λ² μ΄μ€ λ 립μ±.
- JDBC(Java Database Connectivity)λ νΉμ λ°μ΄ν°λ² μ΄μ€μ λ§μΆ° SQLμ μμ±ν΄μΌ νλ―λ‘ λ°μ΄ν°λ² μ΄μ€ μ’ μμ μΈ μ½λκ° λ μ μμ΅λλ€.
-
Hibernateλ νΉμ λ°μ΄ν°λ² μ΄μ€μ μ’
μλμ§ μμΌλ©°, μ¬λ¬ λ°μ΄ν°λ² μ΄μ€ κ°μ μ νμ΄ μ½μ΅λλ€.
- SQL(Structured Query Language)μ μλμΌλ‘ μμ±ν λ λ°μ΄ν°λ² μ΄μ€ μ’ μ μ μΈ μ°¨μ΄λ₯Ό μ²λ¦¬ν΄μ€λλ€.
4οΈβ£ νΈλμμ λ° μ°κ²° κ΄λ¦¬.
- JDBC(Java Database Connectivity)μμλ κ°λ°μκ° μ§μ νΈλμμ μ μμνκ³ μ’ λ£ν΄μΌ νλ©°, λ°μ΄ν°λ² μ΄μ€ μ°κ²°λ μλμΌλ‘ κ΄λ¦¬ν΄μΌ ν©λλ€.
-
Hibernateλ νΈλμμ
κ³Ό μ°κ²° κ΄λ¦¬λ₯Ό μλννμ¬, κ°λ°μκ° μ΄λ¬ν μΈλΆ μ¬νμ μ κ²½ μΈ νμκ° μμ΅λλ€.
- νΈλμμ μ μΈμ λ¨μλ‘ μ²λ¦¬λλ©°, λ°μ΄ν°λ² μ΄μ€ μ°κ²°λ μλμΌλ‘ μ²λ¦¬λ©λλ€.
5οΈβ£ μΊμ± λ° μ±λ₯ μ΅μ ν.
- JDBC(Java Database Connectivity)λ μΊμ± κΈ°λ₯μ΄ μμΌλ―λ‘, λ°μ΄ν°λ² μ΄μ€ μ±λ₯ μ΅μ νλ₯Ό κ°λ°μκ° μλμΌλ‘ μ²λ¦¬ν΄μΌ ν©λλ€.
- Hibernateλ 1μ°¨ μΊμμ 2μ°¨ μΊμλ₯Ό μ 곡νμ¬, λ°λ³΅μ μΈ λ°μ΄ν°λ² μ΄μ€ μ κ·Όμ μ΅μννκ³ μ±λ₯μ μ΅μ νν μ μμ΅λλ€.
π 1μ°¨ μΊμμ 2μ°¨ μΊμ.
1μ°¨ μΊμμ 2μ°¨ μΊμλ Hibernateμμ μ±λ₯μ μ΅μ ννκΈ° μν΄ μ¬μ©λλ μΊμ± λ©μ»€λμ¦μ λλ€.
μΊμλ λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬μ μ μ₯νμ¬ λ°μ΄ν°λ² μ΄μ€ μ κ·Όμ μ€μ΄κ³ , μ ν리μΌμ΄μ μ μ±λ₯μ ν₯μμν€λ λ° μ€μν μν μ ν©λλ€.1οΈβ£ 1μ°¨ μΊμ(First-Level Cache)
μΈμ λ²μμ μΊμλ‘, Hibernateμμ κΈ°λ³Έμ μΌλ‘ μ 곡λλ μΊμμ λλ€.
μΈμ (Session) λμλ§ μ μ§λλ©°, κ° μΈμ λ§λ€ λ 립μ μΌλ‘ μ‘΄μ¬ν©λλ€.
μ¦, λμΌν μΈμ μμ λ°λ³΅μ μΌλ‘ λμΌν λ°μ΄ν°λ₯Ό μ‘°νν λ λ°μ΄ν°λ² μ΄μ€μ λ€μ μ κ·Όνμ§ μκ³ μΊμλ λ°μ΄ν°λ₯Ό λ°νν©λλ€.
1μ°¨ μΊμλ μλμΌλ‘ νμ±νλμ΄ μμΌλ©°, κ°λ°μκ° μ§μ μ€μ ν νμκ° μμ΅λλ€.
1μ°¨ μΊμ λλΆμ, κ°μ μΈμ λ΄μμ λμΌν μν°ν°λ₯Ό μ¬λ¬ λ² μ‘°νν΄λ λ°μ΄ν°λ² μ΄μ€μ λΆνμν μ κ·Όμ μ€μΌ μ μμ΅λλ€.2οΈβ£ 2μ°¨ μΊμ(Second-Level Cache)
μΈμ ν©ν 리(SessionFactory) λ²μμ μΊμλ‘, μ¬λ¬ μΈμ μ κ±Έμ³ λ°μ΄ν°λ₯Ό 곡μ ν μ μμ΅λλ€.
μ νμ μΌλ‘ νμ±νν΄μΌ νλ©°, κΈ°λ³Έμ μΌλ‘ νμ±ν λμ΄ μμ§ μμ΅λλ€.
κ°λ°μκ° μ§μ μ€μ μ ν΅ν΄ νμ±νν μ μμ΅λλ€.
2μ°¨ μΊμλ μ¬λ¬ μΈμ κ°μ λ°μ΄ν°λ₯Ό μ¬μ¬μ©νμ¬, μμ£Ό μ‘°νλλ λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬μ μ μ₯νκ³ λ°μ΄ν°λ² μ΄μ€ μ κ·Όμ μ€μ λλ€.
μ¦, λμΌν λ°μ΄ν°μ λν΄ μΈμ μ μ’ λ£ν νμλ 2μ°¨ μΊμμ μ μ₯λ λ°μ΄ν°λ₯Ό μ¬λ¬ μΈμ μμ μ¬μ¬μ©ν μ μμ΅λλ€.
2μ°¨ μΊμλ λ€μν μΊμ μ 곡μ(μ: EHCache, Infinispan)λ₯Ό μ¬μ©νμ¬ κ΅¬νν μ μμΌλ©°, Hibernateκ° μ 곡νλ μ€μ μ ν΅ν΄ μ μ΄λ©λλ€.
4οΈβ£ κ²°λ‘ .
- Hibernateλ JDBC(Java Database Connectivity)λ₯Ό λ΄λΆμ μΌλ‘ μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€μ μνΈμμ©νμ§λ§, JDBC(Java Database Connectivity)λ³΄λ€ λ λμ μΆμν(Abstraction) μμ€μμ ORM(Object-Relational Mapping) κΈ°λ₯μ μ 곡νμ¬, κ°λ°μκ° κ°μ²΄ μ§ν₯μ μΌλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μκ² ν΄μ€λλ€.
-
JDBC(Java Database Connectivity)λ SQL(Structured Query Language)μ μ§μ μμ±νκ³ λ°μ΄ν°λ² μ΄μ€μμ μ μμ€ μμ
μ λ€λ£¨λ λ°λ©΄, Hibernateλ μ΄λ¬ν μΈλΆ μ¬νμ μΆμν(Abstraction)νμ¬ λ μ½κ² λ°μ΄ν°λ² μ΄μ€μ μνΈμμ©ν μ μλλ‘ λμμ€λλ€.
- Hibernateλ μ€μ§μ μΌλ‘ JDBC(Java Database Connectivity)μ κΈ°λ₯μ κΈ°λ°μΌλ‘ λμνμ§λ§, λ λμ μμ€μ κΈ°λ₯μ μ 곡ν©λλ€.