๐[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)์ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ์ง๋ง, ๋ ๋์ ์์ค์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.